open Pp open Gen type frame val new_frame : var_list -> type_expr option -> frame (* "new_frame l r "^ crée un nouveau frame pour une définition prenant les arguments l et retournant le résultat r. L'étiquette est choisi au harsard. Cela alloue des temporaires pour placer les arguments, et éventuellement le résultat. Les composantes du frame produit, telle que la liste des temporaires, peuvent être retrouvées par les fonctions ci-dessous. *) val named_frame : string -> var_list -> type_expr option -> frame (* comme new_frame mais l'étiquette choisie est un suffixe du premier argument *) val frame_name : frame -> label (* retourne l'étiquette choisi pour le frame *) val frame_args : frame -> temp list (* retourne la liste des temporaires choisis pour recevoice les arguments *) val frame_result : frame -> temp option (* retourne le temporaire choisi pour retourner le résultat *) val frame_return : frame -> label (* retourne l'étiquette choisie pour le prologue (marque la fin de la fonction) *) val frame_size : frame -> int (* retourne la taille du frame (nombre de locaux) *) val frame_size_label : frame -> string (* retourne le nom de la constante qui définit la taille du frame *) val new_primitive : string (* nom *) -> int (* nombre args *) -> bool (* fonction? *) -> frame val alloc_local : frame -> int (* alloue un emplacement (local) dans le frame *) val make_space_for_args : frame -> int -> unit val global_space : label (* nom de la constante qui point vers l'espace global *) val write_int : frame val writeln_int : frame val read_int : frame (* frame des primitives de même nom *) val alloc : frame (* nom de la primitive d'allocation *) val wordsize : int