pushenv tets
This commit is contained in:
parent
3b35a50810
commit
24149f82cb
|
@ -41,7 +41,7 @@
|
|||
[(TestAndBranchStatement? i)
|
||||
(error 'step)]
|
||||
[(PopEnvironment? i)
|
||||
(error 'step)]
|
||||
(step-pop-environment m i)]
|
||||
[(PushEnvironment? i)
|
||||
(step-push-environment m i)]
|
||||
[(PushControlFrame? i)
|
||||
|
@ -89,8 +89,16 @@
|
|||
(loop (env-push m (void))
|
||||
(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))
|
||||
|
|
|
@ -79,3 +79,42 @@
|
|||
,(make-AssignImmediateStatement (make-EnvLexicalReference 0) (make-Const 42))))]
|
||||
[m (run m)])
|
||||
(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