pushenv tets
This commit is contained in:
parent
3b35a50810
commit
24149f82cb
|
@ -41,7 +41,7 @@
|
||||||
[(TestAndBranchStatement? i)
|
[(TestAndBranchStatement? i)
|
||||||
(error 'step)]
|
(error 'step)]
|
||||||
[(PopEnvironment? i)
|
[(PopEnvironment? i)
|
||||||
(error 'step)]
|
(step-pop-environment m i)]
|
||||||
[(PushEnvironment? i)
|
[(PushEnvironment? i)
|
||||||
(step-push-environment m i)]
|
(step-push-environment m i)]
|
||||||
[(PushControlFrame? i)
|
[(PushControlFrame? i)
|
||||||
|
@ -89,8 +89,16 @@
|
||||||
(loop (env-push m (void))
|
(loop (env-push m (void))
|
||||||
(sub1 n))])))
|
(sub1 n))])))
|
||||||
|
|
||||||
|
(: step-pop-environment (machine PopEnvironment -> machine))
|
||||||
|
(define (step-pop-environment machine stmt)
|
||||||
|
(env-pop machine
|
||||||
|
(PopEnvironment-n stmt)
|
||||||
|
(PopEnvironment-skip stmt)))
|
||||||
|
|
||||||
;;;;;;;;;
|
|
||||||
|
|
||||||
|
|
||||||
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
|
||||||
(: evaluate-oparg (machine OpArg -> Any))
|
(: evaluate-oparg (machine OpArg -> Any))
|
||||||
|
|
|
@ -79,3 +79,42 @@
|
||||||
,(make-AssignImmediateStatement (make-EnvLexicalReference 0) (make-Const 42))))]
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 0) (make-Const 42))))]
|
||||||
[m (run m)])
|
[m (run m)])
|
||||||
(test (machine-env m) `(42 ,(void))))
|
(test (machine-env m) `(42 ,(void))))
|
||||||
|
|
||||||
|
|
||||||
|
;; PushEnv
|
||||||
|
(let ([m (new-machine `(,(make-PushEnvironment 20)))])
|
||||||
|
(test (machine-env (run m)) (build-list 20 (lambda (i) (void)))))
|
||||||
|
|
||||||
|
|
||||||
|
;; PopEnv
|
||||||
|
(let ([m (new-machine `(,(make-PushEnvironment 20)
|
||||||
|
,(make-PopEnvironment 20 0)))])
|
||||||
|
(test (machine-env (run m)) '()))
|
||||||
|
|
||||||
|
(let* ([m (new-machine `(,(make-PushEnvironment 3)
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 0) (make-Const "hewie"))
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 1) (make-Const "dewey"))
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 2) (make-Const "louie"))
|
||||||
|
,(make-PopEnvironment 1 0)))])
|
||||||
|
(test (machine-env (run m)) '("dewey" "louie")))
|
||||||
|
|
||||||
|
(let* ([m (new-machine `(,(make-PushEnvironment 3)
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 0) (make-Const "hewie"))
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 1) (make-Const "dewey"))
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 2) (make-Const "louie"))
|
||||||
|
,(make-PopEnvironment 1 1)))])
|
||||||
|
(test (machine-env (run m)) '("hewie" "louie")))
|
||||||
|
|
||||||
|
(let* ([m (new-machine `(,(make-PushEnvironment 3)
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 0) (make-Const "hewie"))
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 1) (make-Const "dewey"))
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 2) (make-Const "louie"))
|
||||||
|
,(make-PopEnvironment 1 2)))])
|
||||||
|
(test (machine-env (run m)) '("hewie" "dewey")))
|
||||||
|
|
||||||
|
(let* ([m (new-machine `(,(make-PushEnvironment 3)
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 0) (make-Const "hewie"))
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 1) (make-Const "dewey"))
|
||||||
|
,(make-AssignImmediateStatement (make-EnvLexicalReference 2) (make-Const "louie"))
|
||||||
|
,(make-PopEnvironment 2 1)))])
|
||||||
|
(test (machine-env (run m)) '("hewie")))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user