diff --git a/forge/forge.lisp b/forge/forge.lisp index 4b1b87e..8b51690 100644 --- a/forge/forge.lisp +++ b/forge/forge.lisp @@ -124,10 +124,14 @@ (reg swap (let ((a (popd)) (b (popd))) (pushd a) (pushd b))) (reg ? (format t "~a~%" (popd))) (reg ?? (format t "~a~%" (dstack))) + (reg get (pushd (cadr (popd)))) + (reg set (setf (cadr (popd)) (popd))) (register 'lit #'lit) (register 'wrap #'wrap) (register 'defer #'defer) + (register 'getval #'getval) + (register 'setval #'setval) (register 'reg #'do-reg) (register 'regc #'do-regc) diff --git a/test/test-forge.lisp b/test/test-forge.lisp index a073ffa..2b293d0 100644 --- a/test/test-forge.lisp +++ b/test/test-forge.lisp @@ -21,6 +21,7 @@ ;(format t "~%data-stack ~a" (dstack)) (test-def) (test-const) + (test-var) (t:show-result))) (deftest test-iseq () @@ -46,3 +47,12 @@ (forge:exec-str "11 const eleven") (forge:exec-str "eleven square") (== (car (forge:dstack)) 121)) + +(deftest test-var () + (forge:exec-str "(defer wrap defer wrap comp quote defer reg) quote var regc") + (forge:exec-str "7 var myvar") + (forge:exec-str "myvar get square") + (== (car (forge:dstack)) 49) + (forge:exec-str "8 myvar set") + (forge:exec-str "myvar get square") + (== (car (forge:dstack)) 64))