package lutin

  1. Overview
  2. Docs

TYPE/BINDING CHECK : main

------------------------------------------------------------- Cette passe a essentiellement pour but de donner un type effectif aux différents items syntaxiques du programme (lets, expressions).

Conjointement, elle résout les "bindings" des identificateurs :

  • toute référence à un identificateur est identifiée de manière UNIQUE par son ident (décoré de son info source)

On utilise trois tables :

  • une table GLOBALE de binding "ident -> ident_info"
  • une table "dynamique" de scoping "string -> ident_info"
  • une table de typage des exp "val_exp -> type_eff"

------------------------------------------------------------

val type_error : Lexeme.t -> CkTypeEff.t list -> CkTypeEff.t list -> 'a
val arity_error : Lexeme.t -> int -> int -> 'a
val check_erun_var_decl : CheckEnv.t -> (Syntaxe.ident * Syntaxe.type_exp option * Syntaxe.val_exp option) -> CkTypeEff.t -> Syntaxe.ident * CkTypeEff.t
val check_run_var_decl : CheckEnv.t -> Syntaxe.ident -> CkTypeEff.t -> Syntaxe.ident * CkTypeEff.t
val check_exp : CheckEnv.t -> Syntaxe.val_exp -> CkTypeEff.t
val match_type_profile : CkTypeEff.t list -> CkTypeEff.profile -> Lexeme.t -> CkTypeEff.t
val match_run_type_profile : CkTypeEff.t list -> CkTypeEff.profile -> Lexeme.t -> CkTypeEff.t list
val check_extern : CheckEnv.t -> Syntaxe.let_info -> CkTypeEff.t
val check_pack : string list option -> Syntaxe.package -> CheckEnv.t