about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2014-12-17 11:01:38 -0800
committerKartik K. Agaram <vc@akkartik.com>2014-12-17 11:01:38 -0800
commita0bb6c04201ac347f597c63932ea9d8f70f70189 (patch)
tree91e8b0402318d36fed1aeda6b00582b97f00a9c5
parentb93d2cd357a127a35b6cf488f5a90df6cc4fdc76 (diff)
downloadmu-a0bb6c04201ac347f597c63932ea9d8f70f70189.tar.gz
435 - starting to allow type definitions
-rw-r--r--mu.arc10
-rw-r--r--mu.arc.t10
2 files changed, 20 insertions, 0 deletions
diff --git a/mu.arc b/mu.arc
index a4b910b0..0205b863 100644
--- a/mu.arc
+++ b/mu.arc
@@ -1014,6 +1014,16 @@
           (assert (is 'make-br-fn _make-br-fn))
           (= function*.name (join body function*.name)))
 
+      ; and-record <type> [ <name:types> ]
+      and-record
+        (let (name (_make-br-fn fields))  rest
+          (assert (is 'make-br-fn _make-br-fn))
+          (let fields (map tokenize-arg fields)
+            (= type*.name (obj size len.fields
+                               and-record t
+                               elems (map cdar fields)
+                               fields (map caar fields)))))
+
       ; before <label> [ <instructions> ]
       ;
       ; multiple before directives => code in order
diff --git a/mu.arc.t b/mu.arc.t
index 0a31d8ff..e6c0183c 100644
--- a/mu.arc.t
+++ b/mu.arc.t
@@ -3319,6 +3319,16 @@
 
 )  ; section 100 for string utilities
 
+(reset)
+(new-trace "parse-and-record")
+(add-code '((and-record foo [
+              x:string
+              y:integer
+              z:boolean
+             ])))
+(if (~iso type*!foo (obj size 3  and-record t  elems '((string) (integer) (boolean))  fields '(x y z)))
+  (prn "F - 'add-code' can add new and-records"))
+
 ;; unit tests for various helpers
 
 ; tokenize-args