Skip to content

Commit 77ad773

Browse files
committed
Merge branch 'classParsing' into 'master'
Work on chained dot calls See merge request btj12/Interpreter!83
2 parents 49ea869 + 1c18ade commit 77ad773

2 files changed

Lines changed: 50 additions & 10 deletions

File tree

Tests/4/test00.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,20 @@
11
class A {
2-
var x = 100;
2+
var a = 0;
33

4-
static function main() {
5-
return 4;
4+
function X() {
5+
a = a + 1;
6+
return this;
7+
}
8+
9+
function Y() {
10+
a = a + 1;
11+
return this;
612
}
713

8-
}
14+
static function main() {
15+
var obj = new A();
16+
obj.X().Y();
17+
18+
return obj.a;
19+
}
20+
}

state-manipulation.scm

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,34 @@
140140
(get-current-class state cfuncsinstance)
141141
#f
142142
cfuncsinstance))
143+
144+
; single case: funcall (funcall (dot obj X))
145+
; non-single case: (funcall (dot (funcall (dot obj X)) Y))
146+
147+
; dotted-class-instance: 'a (the name of the instance
148+
; dottedname: (a f) where f is the name of the call and a is the object
149+
((and (dot-expr? name) (list? (dotted-class-instance (arglist-dot name))))
150+
(let* ([evaled-instance-pair (G-eval-atomic-statement->value_state
151+
(dotted-class-instance (arglist-dot name))
152+
state
153+
cfuncsinstance)]
154+
155+
; TODO: left off on line below
156+
;[evaled-instance (list `(classname ,(get-base-class (get-value-from-pair evaled-instance-pair)))
157+
; (get-value-from-pair evaled-instance-pair))]
158+
[evaled-instance (get-value-from-pair evaled-instance-pair)]
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)))]
161+
[evaled-function (eval-function-post-name-eval (evaluate-dotted-function-name dottedname evaled-state)
162+
args
163+
evaled-state
164+
(construct-dotted-state dottedname evaled-state)
165+
(get-current-class (construct-dotted-state dottedname evaled-state) cfuncsinstance)
166+
#t
167+
cfuncsinstance)]
168+
[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))))
143171
((dot-expr? name)
144172
(let* ([dottedname (arglist-dot name)]
145173
[evaled-function (eval-function-post-name-eval (evaluate-dotted-function-name dottedname state)
@@ -152,9 +180,9 @@
152180
[function-return (get-value-from-pair evaled-function)]
153181
[function-state (get-state-from-pair evaled-function)])
154182
(list function-return (update-class-instance (dotted-class-instance dottedname) (extract-new-class-instance-state function-state) state))))
155-
156-
(else (eval-function-post-name-eval name args state state default-currentclass #t cfuncsinstance)))))
157-
;(trace G-eval-function->value_state)
183+
(else (eval-function-post-name-eval name args state state default-currentclass #t cfuncsinstance)))))
184+
185+
(trace G-eval-function->value_state)
158186
(define get-base-class
159187
(lambda (state cfuncsinstance)
160188
(get-value-from-pair (G-value-lookup->value_state '.class state cfuncsinstance))))
@@ -267,7 +295,7 @@
267295
(lambda (instancename state)
268296
(append (G-get-instance-state instancename state)
269297
(G-pop-to-class-level->state state))))
270-
298+
(trace add-class-instance-to-state)
271299
(define extract-new-class-instance-state
272300
(lambda (state)
273301
(reverse (extract-new-class-instance-state-sub (get-tail-scope (reverse state))))))
@@ -480,6 +508,7 @@
480508
(cond
481509
(else (list (list 'classname cn) (G-eval-class-closure->state cn state)))))))
482510

511+
483512
; Pushes the declaration statement to the state
484513
(define declare-var->state
485514
(lambda (name state)
@@ -536,8 +565,7 @@
536565
(define handle-this-expr
537566
(lambda (state)
538567
(list (extract-new-class-instance-state state) state)))
539-
540-
; STUB
568+
(trace handle-this-expr)
541569
(define dot-expr?
542570
(lambda (arglist)
543571
(cond

0 commit comments

Comments
 (0)