Skip to content

Commit d500267

Browse files
committed
Merge branch 'classParsing' into 'master'
Move parsing helpers into helpers file See merge request btj12/Interpreter!80
2 parents 209fc7e + dfcf8ba commit d500267

2 files changed

Lines changed: 56 additions & 25 deletions

File tree

helpers.scm

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,4 +116,31 @@
116116
(define class-layer-from-state->state (lambda (state) (car (reverse state))))
117117

118118
(define dotted-class-instance car)
119-
(define dotted-class-call cadr)
119+
(define dotted-class-call cadr)
120+
121+
122+
123+
; Class parsing helper section
124+
(define get-staticscope-section caddr)
125+
(define get-instance-section cadr)
126+
(define get-classname-section cadar)
127+
(define get-superclass-classname-section cadadr)
128+
(define get-closure-section car)
129+
(define get-rest-value-section cdr)
130+
(define get-closure-name caar)
131+
(define next-closure cdr)
132+
(define get-closure-var-contents caddar)
133+
(define get-closure-function-contents cddar)
134+
(define get-closure-variable-contents cadar)
135+
(define get-top-nestedstate-scope car)
136+
(define get-top-valuesection car)
137+
(define get-supercontents-name cadr)
138+
(define empty-supercontents-name '())
139+
(define get-class-closure-value caddr)
140+
(define get-classname-from-contents car)
141+
(define get-superclasscontents-from-contents cadr)
142+
(define next-class cdr)
143+
(define get-top-class car)
144+
(define classname-parse 'class)
145+
(define next-parsedfile cdr)
146+
(define get-top-parsedfile car)

state-manipulation.scm

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1189,20 +1189,21 @@
11891189
(define G-parsed-file-to-state->state
11901190
(lambda (parsedFile state)
11911191
(G-add-empty-scope-to-state->state (parse-file-to-state parsedFile state))))
1192+
11921193
(define parse-file-to-state
11931194
(lambda (parsedFile state)
11941195
(cond
11951196
((null? parsedFile) state)
1196-
(else (parse-file-to-state (cdr parsedFile)
1197-
(G-add-class-to-state->state (car parsedFile) state))))))
1197+
(else (parse-file-to-state (next-parsedfile parsedFile)
1198+
(G-add-class-to-state->state (get-top-parsedfile parsedFile) state))))))
11981199

11991200
; adds a (class, closure) to the state, as well as its contents
12001201
; The contents are: (classname, name), (super, classname), (staticField, value), (staticFunction, value)
12011202
(define G-add-class-to-state->state
12021203
(lambda (class state)
12031204
(cond
12041205
((null? class) (error "Class is empty"))
1205-
((eq? (car class) 'class) (G-add-class-contents-to-state->state (cdr class) state))
1206+
((eq? (get-top-class class) classname-parse) (G-add-class-contents-to-state->state (next-class class) state))
12061207
(else state))))
12071208

12081209
; Adds a class's contents to the state. This first adds the classname, any exending classes, then calls a helper to add contetns
@@ -1211,9 +1212,9 @@
12111212
(lambda (contents state)
12121213
(cond
12131214
((null? contents) state)
1214-
(else (add-statics-to-state->state (caddr contents)
1215-
(push-superclass-to-state->state (cadr contents)
1216-
(push-classname-to-state->state (car contents) (caddr contents) state)))))))
1215+
(else (add-statics-to-state->state (get-class-closure-value contents)
1216+
(push-superclass-to-state->state (get-superclasscontents-from-contents contents)
1217+
(push-classname-to-state->state (get-classname-from-contents contents) (get-class-closure-value contents) state)))))))
12171218

12181219
; Pushes a (classname, name) to the value section of the most recent class in the top scope of the state
12191220
; closure = '((var x 5) (var b 3))
@@ -1248,23 +1249,24 @@
12481249
(define push-superclass-to-scope->scope
12491250
(lambda (supercontents scope)
12501251
(cond
1251-
((null? supercontents) (add-superclass-to-scope '() scope))
1252-
(else (add-superclass-to-scope (cadr supercontents) scope)))))
1252+
((null? supercontents) (add-superclass-to-scope empty-supercontents-name scope))
1253+
(else (add-superclass-to-scope (get-supercontents-name supercontents) scope)))))
1254+
12531255

12541256
(define add-superclass-to-scope
12551257
(lambda (superclassname scope)
12561258
(merge-scope-sections (get-variable-section-state scope)
12571259
(append (list (reverse (cons (list 'superclass superclassname)
1258-
(reverse (car (get-value-section-state scope))))))
1259-
(cdr (get-value-section-state scope))))))
1260+
(reverse (get-top-valuesection (get-value-section-state scope))))))
1261+
(get-rest-value-section (get-value-section-state scope))))))
12601262

12611263
; Adds static fields and methods to our state
12621264
; e.g. '((class A (extends B) ((static-var x 5))))
12631265
; closure = ((static-var x 5))
12641266
; For each element in the closure, push it to our state, then pop the top scope to get a scope
12651267
(define add-statics-to-state->state
12661268
(lambda (closure state)
1267-
(list (add-statics-to-scope->scope closure (car state) initstate))))
1269+
(list (add-statics-to-scope->scope closure (get-top-nestedstate-scope state) initstate))))
12681270

12691271
; For each element in the closure, push it to a state, then take the top scope, and append it to the classcope
12701272
; classcope is '((B A) ((contents1) (contents2)))
@@ -1273,35 +1275,37 @@
12731275
(cond
12741276
((null? closure); merge nestedstate as an element to our class contents
12751277
(merge-scope-sections (get-variable-section-state classcope)
1276-
(append (list (reverse (cons (car nestedstate)
1277-
(reverse (car (get-value-section-state classcope))))))
1278-
(cdr (get-value-section-state classcope)))))
1279-
((eq? (caar closure) 'static-var)
1280-
(add-statics-to-scope->scope (cdr closure) classcope (G-push-state->state (cadar closure) (caddar closure) nestedstate)))
1281-
((eq? (caar closure) 'static-function)
1282-
(add-statics-to-scope->scope (cdr closure) classcope (G-push-state->state (cadar closure) (cddar closure) nestedstate)))
1283-
(else (add-statics-to-scope->scope (cdr closure) classcope nestedstate)))))
1278+
(append (list (reverse (cons (get-top-nestedstate-scope nestedstate)
1279+
(reverse (get-top-valuesection (get-value-section-state classcope))))))
1280+
(get-rest-value-section (get-value-section-state classcope)))))
1281+
((eq? (get-closure-name closure) 'static-var)
1282+
(add-statics-to-scope->scope (next-closure closure) classcope (G-push-state->state (get-closure-variable-contents closure)
1283+
(get-closure-var-contents closure) nestedstate)))
1284+
((eq? (get-closure-name closure) 'static-function)
1285+
(add-statics-to-scope->scope (next-closure closure) classcope (G-push-state->state (get-closure-variable-contents closure) (get-closure-function-contents closure) nestedstate)))
1286+
(else (add-statics-to-scope->scope (next-closure closure) classcope nestedstate)))))
12841287

12851288
; Helper functions for easy access/lookup to our state for class operations
12861289
; LOOKUP SECTION ----------------------------------------------------------
12871290

12881291
; Gets a class's staticscope (the scope with static fields and functions)
12891292
(define G-get-class-closure
12901293
(lambda (classname state)
1291-
(car (get-value-from-pair (G-value-lookup->value_state classname state empty-cfuncs)))))
1294+
(get-closure-section (get-value-from-pair (G-value-lookup->value_state classname state empty-cfuncs)))))
12921295

12931296
(define G-get-class-superclass
12941297
(lambda (classname state)
1295-
(cadadr (get-value-from-pair (G-value-lookup->value_state classname state empty-cfuncs)))))
1298+
(get-superclass-classname-section (get-value-from-pair (G-value-lookup->value_state classname state empty-cfuncs)))))
12961299

12971300
(define G-get-instance-classname
12981301
(lambda (instancename state)
1299-
(cadr (car (get-value-from-pair (G-value-lookup->value_state instancename state empty-cfuncs))))))
1302+
(get-classname-section get-classname-section (get-value-from-pair (G-value-lookup->value_state instancename state empty-cfuncs)))))
13001303

13011304
(define G-get-instance-state
13021305
(lambda (instancename state)
1303-
(cadr (get-value-from-pair (G-value-lookup->value_state instancename state empty-cfuncs)))))
1306+
(get-instance-section (get-value-from-pair (G-value-lookup->value_state instancename state empty-cfuncs)))))
13041307

13051308
(define G-get-class-staticscope->staticscope
13061309
(lambda (classname state)
1307-
(caddr (get-value-from-pair (G-value-lookup->value_state classname state empty-cfuncs)))))
1310+
(get-staticscope-section (get-value-from-pair (G-value-lookup->value_state classname state empty-cfuncs)))))
1311+

0 commit comments

Comments
 (0)