|
1189 | 1189 | (define G-parsed-file-to-state->state |
1190 | 1190 | (lambda (parsedFile state) |
1191 | 1191 | (G-add-empty-scope-to-state->state (parse-file-to-state parsedFile state)))) |
| 1192 | + |
1192 | 1193 | (define parse-file-to-state |
1193 | 1194 | (lambda (parsedFile state) |
1194 | 1195 | (cond |
1195 | 1196 | ((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)))))) |
1198 | 1199 |
|
1199 | 1200 | ; adds a (class, closure) to the state, as well as its contents |
1200 | 1201 | ; The contents are: (classname, name), (super, classname), (staticField, value), (staticFunction, value) |
1201 | 1202 | (define G-add-class-to-state->state |
1202 | 1203 | (lambda (class state) |
1203 | 1204 | (cond |
1204 | 1205 | ((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)) |
1206 | 1207 | (else state)))) |
1207 | 1208 |
|
1208 | 1209 | ; Adds a class's contents to the state. This first adds the classname, any exending classes, then calls a helper to add contetns |
|
1211 | 1212 | (lambda (contents state) |
1212 | 1213 | (cond |
1213 | 1214 | ((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))))))) |
1217 | 1218 |
|
1218 | 1219 | ; Pushes a (classname, name) to the value section of the most recent class in the top scope of the state |
1219 | 1220 | ; closure = '((var x 5) (var b 3)) |
|
1248 | 1249 | (define push-superclass-to-scope->scope |
1249 | 1250 | (lambda (supercontents scope) |
1250 | 1251 | (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 | + |
1253 | 1255 |
|
1254 | 1256 | (define add-superclass-to-scope |
1255 | 1257 | (lambda (superclassname scope) |
1256 | 1258 | (merge-scope-sections (get-variable-section-state scope) |
1257 | 1259 | (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)))))) |
1260 | 1262 |
|
1261 | 1263 | ; Adds static fields and methods to our state |
1262 | 1264 | ; e.g. '((class A (extends B) ((static-var x 5)))) |
1263 | 1265 | ; closure = ((static-var x 5)) |
1264 | 1266 | ; For each element in the closure, push it to our state, then pop the top scope to get a scope |
1265 | 1267 | (define add-statics-to-state->state |
1266 | 1268 | (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)))) |
1268 | 1270 |
|
1269 | 1271 | ; For each element in the closure, push it to a state, then take the top scope, and append it to the classcope |
1270 | 1272 | ; classcope is '((B A) ((contents1) (contents2))) |
|
1273 | 1275 | (cond |
1274 | 1276 | ((null? closure); merge nestedstate as an element to our class contents |
1275 | 1277 | (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))))) |
1284 | 1287 |
|
1285 | 1288 | ; Helper functions for easy access/lookup to our state for class operations |
1286 | 1289 | ; LOOKUP SECTION ---------------------------------------------------------- |
1287 | 1290 |
|
1288 | 1291 | ; Gets a class's staticscope (the scope with static fields and functions) |
1289 | 1292 | (define G-get-class-closure |
1290 | 1293 | (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))))) |
1292 | 1295 |
|
1293 | 1296 | (define G-get-class-superclass |
1294 | 1297 | (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))))) |
1296 | 1299 |
|
1297 | 1300 | (define G-get-instance-classname |
1298 | 1301 | (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))))) |
1300 | 1303 |
|
1301 | 1304 | (define G-get-instance-state |
1302 | 1305 | (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))))) |
1304 | 1307 |
|
1305 | 1308 | (define G-get-class-staticscope->staticscope |
1306 | 1309 | (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