summary refs log tree commit diff
path: root/lo.ml
diff options
context:
space:
mode:
authorQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2014-12-20 16:34:54 -0500
committerQuentin Carbonneaux <quentin.carbonneaux@yale.edu>2014-12-20 16:34:54 -0500
commit1cf6ea7bcc71a08716b79ccef4f0bebe9de9d362 (patch)
tree95b546a444badaff4055c249f7247559083640f4 /lo.ml
parent59db3dd956350b6bb0d8dded955e8ad16a2a6b8b (diff)
downloadroux-1cf6ea7bcc71a08716b79ccef4f0bebe9de9d362.tar.gz
allow multiple labels per line
Diffstat (limited to 'lo.ml')
-rw-r--r--lo.ml35
1 files changed, 18 insertions, 17 deletions
diff --git a/lo.ml b/lo.ml
index 84c874d..0baee9b 100644
--- a/lo.ml
+++ b/lo.ml
@@ -130,16 +130,18 @@ let liveness p =
 
 let parse src =
   let blocks = Hashtbl.create 31 in
-  let src = List.mapi (fun idx l ->
-      let l = String.trim l in
-      try
-        let il = String.index l ':' in
-        let lbl = String.sub l 0 il in
-        Hashtbl.add blocks lbl idx;
+  let rec addlbl idx l =
+    let l = String.trim l in
+    try
+      let il = String.index l ':' in
+      let lbl = String.sub l 0 il in
+      Hashtbl.add blocks lbl idx;
+      let l =
         String.sub l (il+1)
-          (String.length l -(il+1)) ^ " "
-      with Not_found -> l ^ " "
-    ) src in
+          (String.length l -(il+1)) in
+      addlbl idx l
+    with Not_found -> l ^ " " in
+  let src = List.mapi addlbl src in
   let p = Array.make (List.length src) INop in
   List.iteri (fun idx l ->
     let fail s =
@@ -201,14 +203,13 @@ let parse src =
   p
 
 let t_fact = parse
-  [ "start:"
-  ; "  ni: con 1234"
-  ; "  k1: con 1"
-  ; "loop:"
-  ; "  n0: phi [ back n1 ] [ k1 ni ] ."
-  ; "  n1: sub n0 k1"
-  ; "back: brz n1 pend loop"
-  ; "pend:"
+  [ "k0:  con 0"
+  ; "ni:  con 1234"
+  ; "k1:  con 1"
+  ; "n0:  phi [ jmp n1 ] [ k1 ni ] ."
+  ; "n1:  sub n0 k1"
+  ; "jmp: brz n1 end n0"
+  ; "end:"
   ]
 
 let _ =