|
153 | 153 | cfuncsinstance)] |
154 | 154 |
|
155 | 155 | ; TODO: left off on line below |
156 | | - ;[evaled-instance (list '(classname Test) (get-instance-state (get-value-from-pair evaled-instance-pair)))] |
157 | 156 | [evaled-instance (get-value-from-pair evaled-instance-pair)] |
158 | | - ;[debug (debug-func? list? evaled-instance evaled-instance-pair state name)] |
159 | | - [evaled-state (push-variable-as-literal->state '.temp evaled-instance (get-state-from-pair evaled-instance-pair))] |
160 | | - [dottedname (list '.temp (dotted-class-call (arglist-dot name)))] |
| 157 | + [evaled-state (push-variable-as-literal->state (find-highest-var name) evaled-instance (get-state-from-pair evaled-instance-pair))] |
| 158 | + [dottedname (list (find-highest-var name) (dotted-class-call (arglist-dot name)))] |
161 | 159 | [evaled-function (eval-function-post-name-eval (dotted-class-call dottedname) |
162 | 160 | args |
163 | 161 | evaled-state |
164 | 162 | (construct-dotted-state dottedname evaled-state) |
165 | 163 | (get-current-class (construct-dotted-state dottedname evaled-state) cfuncsinstance) |
166 | | - #t |
| 164 | + #f |
167 | 165 | cfuncsinstance)] |
168 | 166 | [function-return (get-value-from-pair evaled-function)] |
169 | | - [function-state (get-state-from-pair evaled-function)]) |
170 | | - (list function-return (update-class-instance (dotted-class-instance dottedname) (extract-new-class-instance-state function-state) evaled-state)))) |
| 167 | + [function-state (get-state-from-pair evaled-function)] |
| 168 | + [debg (delete-this state)] |
| 169 | + [debug2 (delete-this2 function-state)] |
| 170 | + [debug3 (delete-this (G-merge-states->state state function-state))]) |
| 171 | + (cond |
| 172 | + ((eq? (dotted-class-instance dottedname) '.temp) (list function-return (G-merge-states->state state function-state))) |
| 173 | + (else (list function-return (update-class-instance (dotted-class-instance dottedname) (extract-new-class-instance-state function-state) evaled-state)))))) |
171 | 174 | ((dot-expr? name) |
172 | 175 | (let* ([dottedname (arglist-dot name)] |
173 | 176 | [evaled-function (eval-function-post-name-eval (dotted-class-call dottedname) |
|
180 | 183 | [function-return (get-value-from-pair evaled-function)] |
181 | 184 | [function-state (get-state-from-pair evaled-function)]) |
182 | 185 | (list function-return (update-class-instance (dotted-class-instance dottedname) (extract-new-class-instance-state function-state) state)))) |
| 186 | + |
183 | 187 | (else (eval-function-post-name-eval name args state state default-currentclass #t cfuncsinstance))))) |
184 | 188 |
|
| 189 | + |
| 190 | +(define delete-this2 |
| 191 | + (lambda (arg) arg)) |
| 192 | +;(trace delete-this2) |
| 193 | +(define delete-this |
| 194 | + (lambda (arg) arg)) |
| 195 | +;(trace delete-this) |
| 196 | + |
| 197 | +(define find-highest-var |
| 198 | + (lambda (dotexpr) |
| 199 | + (cond |
| 200 | + ((atom? dotexpr) '.temp) |
| 201 | + ((list? (dotted-class-instance (arglist-dot dotexpr))) |
| 202 | + (cond |
| 203 | + ((eq? (car (dotted-class-instance (arglist-dot dotexpr))) 'new) '.temp) |
| 204 | + (else (find-highest-var (dotted-class-instance (arglist-dot dotexpr)))))) |
| 205 | + ((eq? 'this (dotted-class-instance (arglist-dot dotexpr))) '.temp) |
| 206 | + ((eq? 'super (dotted-class-instance (arglist-dot dotexpr))) '.temp) |
| 207 | + ((eq? 'funcall (arglist-head dotexpr)) '.temp) |
| 208 | + (else (dotted-class-instance (arglist-dot dotexpr)))))) |
| 209 | + |
185 | 210 | (define get-base-class |
186 | 211 | (lambda (state cfuncsinstance) |
187 | 212 | (get-value-from-pair (G-value-lookup->value_state '.class state cfuncsinstance)))) |
|
251 | 276 | function-state |
252 | 277 | (G-pop-to-stack-divider->state |
253 | 278 | (get-state-from-pair |
254 | | - (delete-this |
255 | | - evaluate-function-call)))))))) |
256 | | -(define delete-this |
257 | | - (lambda (arg) arg)) |
258 | | -;(trace delete-this) |
| 279 | + evaluate-function-call))))))) |
| 280 | + |
259 | 281 | ;(trace eval-function-post-name-eval) |
260 | 282 | (define evaluate-actual-args-for-state |
261 | 283 | (lambda (actual state cfuncsinstance) |
|
297 | 319 | (lambda (instancename state) |
298 | 320 | (append (G-get-instance-state instancename state) |
299 | 321 | (G-pop-to-class-level->state state)))) |
300 | | -;(trace add-class-instance-to-state) |
| 322 | + |
301 | 323 |
|
302 | 324 | (define extract-new-class-instance-state |
303 | 325 | (lambda (state) |
|
1128 | 1150 | (lambda (orig-state mod-state) |
1129 | 1151 | (cond |
1130 | 1152 | ((null? mod-state) orig-state) |
| 1153 | + ((null? orig-state) '()) |
1131 | 1154 | (else (cons (get-top-scope mod-state) |
1132 | 1155 | (merge (get-tail-scope orig-state)(get-tail-scope mod-state))))))) |
1133 | 1156 |
|
|
1187 | 1210 | (define G-eval-class-closure->state |
1188 | 1211 | (lambda (classname state) |
1189 | 1212 | (cond |
1190 | | - ((null? (G-get-class-superclass classname state)) (evaluate-closure->state classname state)) |
| 1213 | + ;push-variable as literal code is wrong, it produces an extra scope |
| 1214 | + ;looks wrong, don't touch |
| 1215 | + ((null? (G-get-class-superclass classname state)) (list (get-top-scope (evaluate-closure->state classname state)))) |
1191 | 1216 | (else (cons (get-top-scope |
1192 | 1217 | (evaluate-closure->state classname state)) (G-eval-class-closure->state (G-get-class-superclass classname state) state)))))) |
1193 | 1218 |
|
|
0 commit comments