about summary refs log tree commit diff stats
path: root/mu.arc
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2014-11-03 23:58:06 -0800
committerKartik K. Agaram <vc@akkartik.com>2014-11-03 23:58:06 -0800
commitc6ef4826d6e6f7cac8108167209a3c65977986a7 (patch)
tree01b4451d1cae4ba85aa36ed95d57d1eaf0f0ca9e /mu.arc
parentf9dd5af5c0613501c2a38e8a859af1153e985a52 (diff)
downloadmu-c6ef4826d6e6f7cac8108167209a3c65977986a7.tar.gz
219
Diffstat (limited to 'mu.arc')
-rw-r--r--mu.arc9
1 files changed, 6 insertions, 3 deletions
diff --git a/mu.arc b/mu.arc
index 5a830d35..33622255 100644
--- a/mu.arc
+++ b/mu.arc
@@ -653,12 +653,15 @@
       (each instr instrs
         (let (oargs op args)  (parse-instr instr)
           (if (in op 'get 'get-address)
-            (with (fields  ((typeinfo args.0) 'fields)
+            (with (basetype  (typeinfo args.0)
                    field  (v args.1))
+              (when (pos 'deref (metadata args.0))
+                (assert basetype!address "@args.0 requests deref, but it's not an address of a record")
+                (= basetype (types* basetype!elem)))
               (when (isa field 'sym)
                 (assert (~offset field) "field @args.1 is also a variable")
-                (assert fields "no field names available for @instr")
-                (iflet idx (pos field fields)
+                (assert basetype!fields "no field names available for @instr")
+                (iflet idx (pos field basetype!fields)
                   (do (set isa-field.field)
                       (= offset.field idx))
                   (assert nil "couldn't find field in @instr"))))