diff --git a/module/language/tree-il/compile-glil.scm b/module/language/tree-il/compile-glil.scm index 1781c4629..bef4ac7f0 100644 --- a/module/language/tree-il/compile-glil.scm +++ b/module/language/tree-il/compile-glil.scm @@ -112,6 +112,9 @@ ((@slot-set! . 3) . slot-set) ((vector-ref . 2) . vector-ref) ((vector-set! . 3) . vector-set) + ((variable-ref . 1) . variable-ref) + ;; nb, *not* variable-set! -- the args are switched + ((variable-set . 2) . variable-set) ;; hack for javascript ((return . 1) return) diff --git a/module/language/tree-il/primitives.scm b/module/language/tree-il/primitives.scm index 50a002da6..07d4a5561 100644 --- a/module/language/tree-il/primitives.scm +++ b/module/language/tree-il/primitives.scm @@ -53,6 +53,8 @@ cdaaar cdaadr cdadar cdaddr cddaar cddadr cdddar cddddr vector-ref vector-set! + variable-ref variable-set! + ;; args of variable-set are switched; it needs special help bytevector-u8-ref bytevector-u8-set! bytevector-s8-ref bytevector-s8-set! @@ -291,3 +293,7 @@ (@call-with-current-continuation proc)) (define-primitive-expander values (x) x) + +;; swap args +(define-primitive-expander variable-set! (var val) + (variable-set val var))