package lustre-v6

  1. Overview
  2. Docs

Exceptions et formatage des messages d'erreur.

La compilation peut chouer sur des exceptions prdfinies :

  • Sys_error of string : ----------------------- erreur systme (lie aux fichiers)
  • Parse_error : --------------- dans le yacc
  • Compile_error of Lxm.t * string : -------------------------------------- une erreur de compil qu'on peut "situer" dans le source grce un lexeme *
  • Global_error of string : -------------------------- une erreur qui n'est pas spcialement lie un lexeme, (mais peut-tre lie un noeud -> void checkNode) *
  • Compile_node_error of Lic.node_key * Lxm.t * string : ------------------------------------------------------------------ une erreur de compil lie 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 lie un lexeme particulier, mais dependant leve lors de la compilation d'un noeud * ** ***

* Les diffrentes phases peuvent ventuellement "capter" locallement les exceptions prcdentes (histoire de sortir plus d'un message d'erreur par compilation).

** Les erreurs lies un noeuds sont gnres UNIQUEMENT au niveau de checkNode => lors de la compil d'un noeud, les sous-procdures se contentent de lever des erreurs ``simples'' (Global ou Compile), qui sont captes au niveau de checkNode o on ``rajoute'' l'info sur le noeud courant (a vite de toujours passer en paramtre le noeud courant).

*** Pas dfini ici ( cause des %@#&! problemes de compil spare), 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 associes un lexeme) :

"can't eval constant: <msg>" "can't eval type: <msg>"

"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"

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

exception Compile_error of Lxm.t * string

--------------------------------------------------------------------- Une erreur associe un lexeme dans le fichier source ----------------------------------------------------------------------

exception Unknown_constant of Lxm.t * string
exception Unknown_var of Lxm.t * Lv6Id.t
exception Global_error of string

--------------------------------------------------------------------- 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
val print_compile_error : Lxm.t -> string -> unit

--------------------------------------------------------------------- Message d'erreur (associ un lexeme) sur stderr ----------------------------------------------------------------------

val print_runtime_error : Lxm.t -> string -> unit
val warning : Lxm.t -> string -> unit

--------------------------------------------------------------------- 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 ----------------------------------------------------------------------

OCaml

Innovation. Community. Security.