This commit is contained in:
Mylloon 2024-01-01 20:16:08 +01:00
parent 4e22648cd4
commit e71edea69c
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -522,28 +522,26 @@ module FrameManager (IS : InstructionSelector) : FrameManager = struct
Mint.size_in_bytes
+ ((if empty_frame fd then 0 else 1) * Mint.size_in_bytes)
+ fd.locals_space
let add_stack stack list start op_addr =
let stack, _ = List.fold_left
(fun (stack,addr) id ->
S.IdMap.add id (Mint.of_int addr) stack,
op_addr addr)
(stack,start)
list
in stack
let frame_descriptor ~params ~locals =
(* TODO: Student! Implement me! *)
let stack = add_stack S.IdMap.empty locals (-8) (fun x -> x - 8) in
let stack = add_stack stack params 16 (fun x -> x + 8) in
{param_count = List.length params; locals_space = (List.length locals) * 8; stack_map = stack; }
;;
let add_stack stack list start op_addr =
let stack, _ =
List.fold_left
(fun (stack, addr) id -> S.IdMap.add id (Mint.of_int addr) stack, op_addr addr)
(stack, start)
list
in
stack
;;
let frame_descriptor ~params ~locals =
(* Ajout à la pile les variables présentent dans la liste *)
let stack = add_stack S.IdMap.empty locals (-8) (fun x -> x - 8) in
let stack = add_stack stack params 16 (fun x -> x + 8) in
{ param_count = List.length params
; locals_space = List.length locals * 8
; stack_map = stack
}
;;
let location_of fd id : T.address =