Legend:
Library
Module
Module type
Parameter
Class
Class type
Exceptions et formatage des messages d'erreur.
La compilation peut échouer sur des exceptions prédéfinies :
Sys_error of string : ----------------------- erreur système (liée aux fichiers)
Parse_error : --------------- dans le yacc
Compile_error of Lxm.t * string : -------------------------------------- une erreur de compil qu'on peut "situer" dans le source grâce à un lexeme *
Global_error of string : -------------------------- une erreur qui n'est pas spécialement liée à un lexeme, (mais peut-être liée à un noeud -> void checkNode) *
Compile_node_error of Lic.node_key * Lxm.t * string : ------------------------------------------------------------------ une erreur de compil liée à un lexeme et à un noeud (en fait une instance de template) particulier * ** ***
Global_node_error of Lic.node_key * string : ------------------------------------------------------------------ une erreur de compil non liée à un lexeme particulier, mais dependant levée lors de la compilation d'un noeud * ** ***
* Les différentes phases peuvent éventuellement "capter" locallement les exceptions précédentes (histoire de sortir plus d'un message d'erreur par compilation).
** Les erreurs liées à un noeuds sont générées UNIQUEMENT au niveau de checkNode => lors de la compil d'un noeud, les sous-procédures se contentent de lever des erreurs ``simples'' (Global ou Compile), qui sont captées au niveau de checkNode où on ``rajoute'' l'info sur le noeud courant (ça évite de toujours passer en paramètre le noeud courant).
*** Pas défini ici (à cause des %@#&! problemes de compil séparée), voir Compile_data
---------------------------------------------------------------------- A titre indicatif, voici la liste des messages d'erreurs (actuels)
Au lancement/chargement :
"can't load main node: <name> is undefined" "can't load main node: <name> is a function" "can't load main node: <name> is a template"
Au cours du static check (toutes sont associées à un lexeme) :
"recursion loop detected: <recursion path>" "unbound type" "undefined constant or variable" "undefined node or function" "undefined type" "node expected but get a function" "type combination error: <type> expected" "arity error: <int> expected instead of <int>" "operation not allowed in static expression: <operation>" "array index '<int>' out of bounds '<int>..<int>" "type error in array: <type> mixed with <type>" "array of tuple not allowed" "empty array" "constant is declared as <type> but evaluated as <type>" "bad constant value: tuple not allowed" "field is declared as <type> but evluated as <type>" "bad field value: tuple not allowed" "bad static expression: <ident> is a variable" "bad array size <int>" "bad array size"
--------------------------------------------------------------------- Une erreur associée à un lexeme dans le fichier source ----------------------------------------------------------------------
--------------------------------------------------------------------- Une erreur plus generale ----------------------------------------------------------------------
val compile_error_string : Lxm.t->string -> string
--------------------------------------------------------------------- Formatage standard des erreurs de compil ----------------------------------------------------------------------
val runtime_error_string : Lxm.t->string -> string
--------------------------------------------------------------------- Message d'erreur (associé à un lexeme) sur stderr ----------------------------------------------------------------------
--------------------------------------------------------------------- Warning (associé à un lexeme) sur stderr ----------------------------------------------------------------------
val print_global_error : string -> unit
--------------------------------------------------------------------- Message d'erreur (sans lexeme) sur stderr ----------------------------------------------------------------------
val print_internal_error : string ->string -> unit
--------------------------------------------------------------------- Message d'erreur interne (avec fonction) sur stderr ----------------------------------------------------------------------