diff options
author | Kartik K. Agaram <vc@akkartik.com> | 2014-11-03 23:58:06 -0800 |
---|---|---|
committer | Kartik K. Agaram <vc@akkartik.com> | 2014-11-03 23:58:06 -0800 |
commit | c6ef4826d6e6f7cac8108167209a3c65977986a7 (patch) | |
tree | 01b4451d1cae4ba85aa36ed95d57d1eaf0f0ca9e /mu.arc | |
parent | f9dd5af5c0613501c2a38e8a859af1153e985a52 (diff) | |
download | mu-c6ef4826d6e6f7cac8108167209a3c65977986a7.tar.gz |
219
Diffstat (limited to 'mu.arc')
-rw-r--r-- | mu.arc | 9 |
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")))) |