package lutin

  1. Overview
  2. Docs

TYPE/BINDING CHECK : environnement

C'est la structure qui permet :

  • de réaliser le type/binding check (cf. CheckType)
  • de conserver, après ce check, les infos calculées/inférées

Toute référence à un identificateur est identifiée de manière UNIQUE par son ident (string + lexeme).

Au cours du check, on utilise TROIS tables :

  • une table "dynamique" de scoping "string -> ident_info" qui permet de résoudre les référence sous "scope"
  • une table GLOBALE de binding "ident -> ident_info" remplie au fur et à mesure que les références sont résolue
  • une table de typage des "val_exp -> CkTypeEff.t" n.b. les val_exp SONT identifiées de manière unique par leur lexeme

N.B. voir sous-module : CkTypeEff CkIdentInfo

N.B. Les identificateurs d'exceptions sont traités comme des constantes abstraites de type CkTypeEff.except -------------------------------------------------------------

type t
val create : unit -> t
val copy : t -> t
val add_libs : t -> string list -> t
val get_exp_type : t -> Syntaxe.val_exp -> CkTypeEff.t
val get_binding : t -> Syntaxe.ident -> CkIdentInfo.t
val set_exp_type : t -> Syntaxe.val_exp -> CkTypeEff.t -> unit
type scope_key
val restore : t -> scope_key -> unit
type typed_ids = (Syntaxe.ident * Syntaxe.type_exp) list
type eff_typed_ids = (Syntaxe.ident * CkTypeEff.t) list
val add_formal_params : t -> typed_ids option -> scope_key
val add_support_vars : t -> eff_typed_ids -> scope_key
val add_global_cst : t -> Syntaxe.ident -> CkTypeEff.t -> scope_key
val add_local_cst : t -> Syntaxe.ident -> CkTypeEff.t -> scope_key
val add_support_profile : t -> eff_typed_ids -> eff_typed_ids -> scope_key
val add_predef_op : t -> string -> CkTypeEff.profile -> scope_key
val add_predef_cst : t -> string -> CkTypeEff.t -> scope_key
val get_ident_info : t -> Syntaxe.ident -> CkIdentInfo.t
val nature_of_ident : t -> Syntaxe.ident -> CkIdentInfo.nature
val type_of_ident : t -> Syntaxe.ident -> CkTypeEff.t
val dbg_dump : t -> unit