Skip to content
Snippets Groups Projects
Commit 3e195b16 authored by Erwan Jahier's avatar Erwan Jahier
Browse files

Raise a error when a type error is done when calling iterators

(versus raising an internal error...).
parent aff712cb
No related branches found
No related tags found
No related merge requests found
* modeles et packages
---------------------
- instanciation de modele <<locaux>> à d'autre package interdite pour
l'instant, alors que ca marchait chez Youssef. Ce serait pratique
tout de meme.
Car si je veux utiliser definir un package parametré par un noeud n,
je suis obligé de définir n dans un package à part.
- j'autorise "is" et "=". Par ex :
package Pint = m1( int );
package Preal is m1( real );
mais j'ai bien envie de virer "is".
- A t'on vraiment besoin du mot clef "model" ?
un package avec un champ "needs" fait office naturellement de
package paramétré.
En effet, je trouve le terme de "model" tres surchargé.
* Evaluation des contantes
--------------------------
Evaluer statiquement les iterateurs quand c'est possible (cf
evalConst.ml) ? pour aller au bout de la logique, oui...
* polymorphisme
---------------
rajouter la notion de variables polymorphes et sur-chargées au
niveau noeud utilisateur ? Ce devrait etre peanuts maintenant que
je les ai en interne... (pour une variable par noeud du moins,
sinon ca va foutre le souc).
\ No newline at end of file
*** questions externes
======================
*** questions pour Pascal
=========================
cf fichier QUESTION pour les question d'ordre plus général de choix de language
(putot que d'implémenation).
* dans le generateur de lic, comment imprimer le nom des packages ?
......@@ -9,26 +12,6 @@
- _Pack__toto -> pas beau, rend lus2lic pas idempotent
* instanciation de modele
*** instanciation de modele <<locaux>> à d'autre package interdite
pour l'instant, alors que ca marchait chez Youssef. Ce serait pratique
tout de meme.
Car si je veux utiliser definir un package parametré par un noeud n,
je suis obligé de définir n dans un package à part.
*** j'autorise "is" et "="
package Pint = m1( int );
mais j'ai bien envie de virer "is".
*** A t'on vraiment besoin du mot clef "model" ?
un package avec un champ needs fait office naturellement de
package paramétré.
En fait, je trouve le terme de "model" tres surchargé.
* slice_info_eff width = size ? Le commentaire dit
S[i] = A[first + i*step] pour i = 0 .. width
mais j'ai l'impression que ce devrait etre
......@@ -37,19 +20,11 @@ cad
S[i] = A[first + i*step] pour i = 0 .. (size-1)
* pour l'evaluation statique de l'egalité, j'ai pas fait pareil...
* Pour l'evaluation statique de l'egalité, j'ai pas fait pareil...
grosso-modo, je teste si 'a=b' alors Pascal deconstruit plus finement
le a et le b. Mais j'ai l'impression que ca revient au meme. Ai-je
raté un truc ? -> cf predefEvalConst.ml
* Evaluer statiquement les iterateurs quand c'est possible (cf
evalConst.ml) ? pour aller au bout de la logique, oui...
* rajouter la notion de variables polymorphes et sur-chargées au
niveau noeud utilisateur ? Ce devrait etre peanuts maintenant que
je les ai en interne... (pour une variable par noeud du moins, sinon ca
va foutre le souc).
* autoriser les alias sur "nor" et "#" ? (ca compliquerait les choses
pour bien peu... La difficulté étant du à l'arité variable de ces operateurs).
......@@ -94,13 +69,6 @@ Mais du coup de travail de JB part
* EvalClock.var_clock_to_base (l200): c'est pas ca qu'il faut faire.
en effet, si on 1+1+a when c, ca risque de ne pas marcher.
* Faire qque chose pour les 2 verrues dans predefSemantics
pas facile...
* bug: res = map<< Lustre::ilt, 10>>(t1, t2);
ne marche pas en mode --inline-iterators
-> "*** Could not find package Lustre in the package table"
o Lazycompiler.solve_x_idref
......@@ -118,7 +86,15 @@ lazycompiler.ml:
Simplify a little bit a couple of functions (avoiding code
duplication basically).
* flies fucking: mettre pre, current, when, etc. dans predef ?
*********************************************************************
*********************************************************************
*** flies fucking:
* mettre pre, current, when, etc. dans predef ?
* Faire qque chose pour les 2 verrues dans predefSemantics
pas facile...
* Ident.idref : a remettre dans SyntaxTree ? en tout cas, je devrais
m'en etre completement debarassé au niveau du compiledData, et ca
......
(** Time-stamp: <modified the 04/02/2009 (at 15:26) by Erwan Jahier> *)
(** Time-stamp: <modified the 04/03/2009 (at 14:15) by Erwan Jahier> *)
open Predef
open Lxm
......@@ -75,16 +75,25 @@ let (type_to_array_type: Eff.var_info list -> int -> (Ident.t * Eff.type_) list)
List.map (fun vi -> vi.var_name_eff, Array_type_eff(vi.var_type_eff,c)) l
(* Extract the node and the constant from a list of static args *)
let (get_node_and_constant:
Eff.static_arg list -> Eff.item_key * var_info list * var_info list * int)=
fun sargs ->
let (get_node_and_constant: Lxm.t ->
Eff.static_arg list -> Eff.item_key * var_info list * var_info list * int) =
fun lxm sargs ->
match sargs with
| [NodeStaticArgEff(_,(n, inlist, outlist));
ConstStaticArgEff(_,Int_const_eff c)] -> n, inlist, outlist, c
| _ -> assert false
| [NodeStaticArgEff(_,(n, inlist, outlist));
ConstStaticArgEff(_, const)] ->
let msg = "an integer is expected, whereas a " ^
(LicDump.string_of_type_eff4msg (Eff.type_of_const const)) ^
" was provided.\n"
in
raise (Compile_error(lxm, msg))
| _ ->
let msg = "*** an integer and a node are expected.\n" in
raise (Compile_error(lxm, msg))
let map_profile =
let map_profile =
(* Given
- a node n of type: tau_1 * ... * tau_n -> teta_1 * ... * teta_l
- a constant c (nb : sargs = [n,c])
......@@ -92,7 +101,7 @@ let map_profile =
The profile of map is: tau_1^c * ... * tau_n^c -> teta_1^c * ... * teta_l^c
*)
fun lxm sargs ->
let (n, inlist, outlist, c) = get_node_and_constant sargs in
let (n, inlist, outlist, c) = get_node_and_constant lxm sargs in
let lti = type_to_array_type inlist c in
let lto = type_to_array_type outlist c in
let res = (lti, lto) in
......@@ -110,7 +119,7 @@ let (fillred_profile : Lxm.t -> Eff.static_arg list ->
tau * tau_1^c * ... * tau_n^c -> tau * teta_1^c * ... * teta_l^c
*)
fun lxm sargs ->
let (n, inlist, outlist, c) = get_node_and_constant sargs in
let (n, inlist, outlist, c) = get_node_and_constant lxm sargs in
let _ = assert(inlist <> [] && outlist <> []) in
let lti = (get_id_type (List.hd inlist))::
type_to_array_type (List.tl inlist) c in
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment