This commit is contained in:
Mylloon 2024-01-01 20:20:47 +01:00
parent e71edea69c
commit 579e163f8e
Signed by: Anri
GPG key ID: A82D63DFF8D1317F

View file

@ -524,23 +524,22 @@ module FrameManager (IS : InstructionSelector) : FrameManager = struct
+ fd.locals_space + fd.locals_space
;; ;;
(* Ajoute les éléments de liste sur la pile *)
let add_stack stack list start op_addr = let add_stack stack list start op_addr =
let stack, _ = fst
List.fold_left (List.fold_left
(fun (stack, addr) id -> S.IdMap.add id (Mint.of_int addr) stack, op_addr addr) (fun (stack, addr) id -> S.IdMap.add id (Mint.of_int addr) stack, op_addr addr)
(stack, start) (stack, start)
list list)
in
stack
;; ;;
let frame_descriptor ~params ~locals = let frame_descriptor ~params ~locals =
(* Ajout à la pile les variables présentent dans la liste *) (* 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 S.IdMap.empty locals (-8) (fun x -> x - 8) in
let stack = add_stack stack params 16 (fun x -> x + 8) in let stack' = add_stack stack params 16 (fun x -> x + 8) in
{ param_count = List.length params { param_count = List.length params
; locals_space = List.length locals * 8 ; locals_space = List.length locals * 8
; stack_map = stack ; stack_map = stack'
} }
;; ;;