From daff44a21eb533b3774b965912a9df695a25e172 Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Sun, 5 Oct 2014 15:10:29 -0700 Subject: 110 - 107 for 'get-address' --- mu.arc | 3 +++ mu.arc.t | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/mu.arc b/mu.arc index 79caa881..0704d252 100644 --- a/mu.arc +++ b/mu.arc @@ -308,6 +308,9 @@ get-address (with (base arg.0 idx (v arg.1)) + (when typeinfo.base!address + (assert (pos 'deref metadata.base)) + (= base (list (memory* v.base) typeinfo.base!elem))) (if typeinfo.base!array (array-ref-addr base idx) typeinfo.base!record diff --git a/mu.arc.t b/mu.arc.t index 0e82da57..15de917a 100644 --- a/mu.arc.t +++ b/mu.arc.t @@ -432,6 +432,18 @@ (if (~iso memory* (obj 1 34 2 t 3 2)) (prn "F - 'get-address' returns address of fields of records")) +(reset) +(add-fns + '((main + ((1 integer) <- literal 34) + ((2 integer) <- literal t) + ((3 integer-boolean-pair-address) <- literal 1) + ((4 boolean-address) <- get-address (3 integer-boolean-pair-address deref) (1 offset))))) +(run 'main) +;? (prn memory*) +(if (~iso memory* (obj 1 34 2 t 3 1 4 2)) + (prn "F - 'get-address' returns address of fields of records")) + (reset) (add-fns '((main -- cgit 1.4.1-2-gfad0