1 module List = ListLabels
3 module Frame = Tiger_frame
4 module Temp = Tiger_temp
15 let name = Temp.Label.gen () in
20 ; frame = Frame.make ~name ~formals
23 let next t ~name ~formals =
24 (* Adding the extra parameter for the static link. See p. 142 *)
25 let formals = true :: formals in
29 ; frame = Frame.make ~name ~formals
32 let formals = function {formals; _} ->
35 let frame = function {frame; _} ->
42 (* must know about static links *)
44 ; frame_access : Frame.access
47 let alloc_local ~level ~escapes =
49 ; frame_access = Frame.alloc_local (Level.frame level) ~escapes
53 (* FIXME: This seems wrong. Should we call Frame.formals? *)
54 List.map (Level.formals level) ~f:(fun escapes ->
55 alloc_local ~level ~escapes