WIP
[tiger.ml.git] / compiler / src / lib / tiger / tiger_mips_frame.ml
index 4131702..f373b0e 100644 (file)
@@ -1,6 +1,7 @@
 module List = ListLabels
 
 module Temp = Tiger_temp
+module T    = Tiger_tree
 
 type access =
   | InFrame of {offset_from_frame_pointer : int}
@@ -19,6 +20,8 @@ type t =
   ; instructions : unit  (* TODO: instructions for view shift *)
   }
 
+let pointer = Temp.Temp.gen ()
+
 let word_size_bits  = 32
 let word_size_bytes = word_size_bits / 8
 let word_size       = word_size_bytes
@@ -57,3 +60,12 @@ let make ~name ~formals =
   ; locals_count
   ; instructions = ()  (* TODO: instructions for view shift *)
   }
+
+(*failwith ("NOT IMPLEMENTED: " ^ __MODULE__ ^ ".exp")*)
+
+let exp ~access ~pointer =
+  match access with
+  | InReg {register} ->
+      T.TEMP register
+  | InFrame {offset_from_frame_pointer} ->
+      T.MEM (T.BINOP (T.PLUS, pointer, T.CONST offset_from_frame_pointer))
This page took 0.02777 seconds and 4 git commands to generate.