From ebeb303ab2867235869666e671600c955c8d887f Mon Sep 17 00:00:00 2001 From: Erwan Jahier <jahier@imag.fr> Date: Thu, 28 Jan 2016 16:40:34 +0100 Subject: [PATCH] Clean-up the git repo. --- AFAIRE | 45 - ALIRE | 57 -- ALIRE.compil-des-nodes | 12 - _oasis | 2 +- alire | 4 - {figs => doc/figs}/srctab.fig | 0 doc/lpp.dep.dot | 4 - doc/lpp.depfull.dot | 4 - lazy.notes.ml | 25 - notes-pascal/devel-notes.pdf | Bin 52225 -> 0 bytes notes-pascal/devel-notes.tex | 154 ---- notes-pascal/exemplecompil-0.tex | 287 ------ notes-pascal/exemplecompil.txt | 70 -- notes-pascal/pack+static.problemes | 150 --- README.org => notes.org | 19 - src/lv6version.ml | 4 +- todo.org | 571 ------------ todo.org_archive | 1374 ---------------------------- rundbg => utils/rundbg | 0 19 files changed, 3 insertions(+), 2779 deletions(-) delete mode 100644 AFAIRE delete mode 100644 ALIRE delete mode 100644 ALIRE.compil-des-nodes delete mode 100644 alire rename {figs => doc/figs}/srctab.fig (100%) delete mode 100644 doc/lpp.dep.dot delete mode 100644 doc/lpp.depfull.dot delete mode 100644 lazy.notes.ml delete mode 100644 notes-pascal/devel-notes.pdf delete mode 100644 notes-pascal/devel-notes.tex delete mode 100644 notes-pascal/exemplecompil-0.tex delete mode 100644 notes-pascal/exemplecompil.txt delete mode 100644 notes-pascal/pack+static.problemes rename README.org => notes.org (92%) delete mode 100644 todo.org delete mode 100644 todo.org_archive rename rundbg => utils/rundbg (100%) diff --git a/AFAIRE b/AFAIRE deleted file mode 100644 index af7e3769..00000000 --- a/AFAIRE +++ /dev/null @@ -1,45 +0,0 @@ - -12/08/06 -bug -./objlinux64/lus2lic test_static/cond01.lus -dbg lazyc - - -12/08/03 - -./objlinux/lus2lic test_static/predef01.lus -Fatal error: exception Match_failure("objlinux/doNoPoly.ml", 55, 17) - - -12/08/01 -> - ./objlinux/lus2lic test_static/predef01.lus -dbg lazyc -*** Error in file "/home/raymond/git/lus2lic/test_static/predef01.lus", line 6, col 6 to 8, token 'map': -*** Lustre::map<<Lustre::or, 42>>: unknown Lustre operator. -*** Available operators in the current scope are: - ----------------------- - - -12/07/30 -> remplacement de GetEff.check_static_arg - par une version epurée qui ne fait de cohérence de type - (cf vielle version check_static_arg_old.ml) - -> A FAIRE !! - -================================================================ -- UnifyType.f (BIEN AVANCE) ----------------------------------------------------------------- -unifyType : remplacer - Unif of Eff.type_ -par - Unif of Eff.poly_match ----------------------------------------------------------------- -07/12 fait partiellement, au niveau des expressions ----------------------------------------------------------------- - -================================================================ -- Eff : node_exp dans by_pos_op dans val_exp_core ----------------------------------------------------------------- -Ca revient à copier la définition d'un noeud partout où -il est utilisé => FAIRE AUTREMENT ----------------------------------------------------------------- ----------------------------------------------------------------- - diff --git a/ALIRE b/ALIRE deleted file mode 100644 index ffa6aa70..00000000 --- a/ALIRE +++ /dev/null @@ -1,57 +0,0 @@ - -Reprise des travaux, juillet 2012 ... - -Besoins : -- intégrer les constructions d'horloge avancées (condact et merge) - -En cours : -- sans tout casser, remettre un peu d'ordre dans la bande - Compile/Eff/LasyCompiler, surtout LasyCompiler qui fait - un peu trop de choses... -- Idée, on passe par une forme intermédaire LicPrg : - * composée des type "compilés" Eff.xxx - * point de sortie de LasyCompiler : son rôle doit - être revu à la baisse, il s'occupe de "tirer" les fils - (aspect lazy), c'est-à -dire résoudre tout ce qui est - packaging et parametres statiques, MAIS PAS PLUS - * toutes les autre modifs de type source_2-source sont fait - dans des modules dédiés par des fonctions LicPrg -> LicPrg - * L'impression proprement dite des progs est un (simple) - dump du LicPrg : elle n'est plus faite au fur et à mesure - dans LasyCompiler - - -ETAT COURANT - ------------------------------------------------------------ -12/07/09 - ---> Les expressions de noeud qui s'avèrent polymorphes et/ou - surchargés, sont : - - acceptées dans les val_exp, à condition que l'utilisation - lève l'ambiguité - - refusées dans les "node alias" - - = PLUS TARD : il faudrait que les noeuds qui s'avèrent polymorphes - et/ou surchargés soient traités comme de MACROS avec un STATIG ARG - de nature TYPE implicite - ------------------------------------------------------------ -12/07/05 - -- completement séparé la compil de l'affichage, du coup - on a débranché l'ancien source_to_source - -- l'ajout d'alias sur type array est fait par une passe source 2 source : - ca fait un exemple de traitement s2s simple, - c'est plus propre qu'avant ou c'etait fait par effet de bord - a l'affichage ---> consequence co-latterale : les clashs sur nom de type introduit - sont gérés de manière plus "smart" - -==> reste a faire : - refaire les traitements source_to_source !! - - - - diff --git a/ALIRE.compil-des-nodes b/ALIRE.compil-des-nodes deleted file mode 100644 index cb7aedf9..00000000 --- a/ALIRE.compil-des-nodes +++ /dev/null @@ -1,12 +0,0 @@ - -compile_all -> - -compile_all_nodes -> - -compile_all_item node_check_interface -> - node_check_interface:cache on -> - -node_check_interface_do - - node_check: cache on node_check_do - + node_check_do en plus pour l'interface (prov) diff --git a/_oasis b/_oasis index ecc2dfa0..b33f3518 100644 --- a/_oasis +++ b/_oasis @@ -1,6 +1,6 @@ OASISFormat: 0.4 Name: lustre-v6 -Version: 1.1.631 +Version: 1.632 Synopsis: The Lustre V6 Verimag compiler Description: This package contains: - lus2lic: the (current) name of the compiler (and interpreter via -exec). diff --git a/alire b/alire deleted file mode 100644 index 648a0c2e..00000000 --- a/alire +++ /dev/null @@ -1,4 +0,0 @@ - -git clone file:///usr/local/src/lustre/repos/lus2lic.git lus2lic - - diff --git a/figs/srctab.fig b/doc/figs/srctab.fig similarity index 100% rename from figs/srctab.fig rename to doc/figs/srctab.fig diff --git a/doc/lpp.dep.dot b/doc/lpp.dep.dot deleted file mode 100644 index 731fbbd5..00000000 --- a/doc/lpp.dep.dot +++ /dev/null @@ -1,4 +0,0 @@ -digraph G { - size="7.5,10" ; - rankdir = TB ; -} diff --git a/doc/lpp.depfull.dot b/doc/lpp.depfull.dot deleted file mode 100644 index 54321146..00000000 --- a/doc/lpp.depfull.dot +++ /dev/null @@ -1,4 +0,0 @@ -digraph G { - size="7.5,10" ; - rankdir = LR ; -} diff --git a/lazy.notes.ml b/lazy.notes.ml deleted file mode 100644 index 9b1f9065..00000000 --- a/lazy.notes.ml +++ /dev/null @@ -1,25 +0,0 @@ - -#DBG: LazyCompiler.node_check_interface 'Lustre::map<<node oper = Lustre::or, const size = 42>>' -#DBG: LazyCompiler.lookup_node_exp_eff: node key 'Lustre::map<<node oper = Lustre::or, const size = 42>>' NOT FOUND -#DBG: LazyCompiler.node_check 'Lustre::map<<node oper = Lustre::or, const size = 42>>' -#DBG: LazyCompiler.x_check 'in file "/home/raymond/git/lus2lic/test_static/predef01.lus", line 6, col 6 to 8, token 'map'' -#DBG: LazyCompiler.lookup_node_exp_eff: node key 'Lustre::map<<node oper = Lustre::or, const size = 42>>' NOT FOUND -*** Can not find package 'Lustre' in the following packages: - - - -let x_check - (tab : ('x_key, 'x_eff Eff.check_flag) Hashtbl.t) - (find_x : SymbolTab.t -> Ident.t -> Lxm.t -> ('x_info Lxm.srcflagged) SymbolTab.elt) - (x_check_do : t -> 'x_key -> Lxm.t -> SymbolTab.t -> bool -> Ident.pack_name -> x_info srcflagged -> 'x_eff) - (lookup_x_eff : ('x_key, 'x_eff Eff.check_flag) Hashtbl.t -> 'x_key -> Lxm.t -> 'x_eff) - (pack_of_x_key : 'x_key -> string ) - (name_of_x_key : 'x_key -> string) - (this : t) - (x_key : 'x_key) - (lxm : Lxm.t) -: 'x_eff - - - -NodeStaticArgEff of (Ident.t * node_key) diff --git a/notes-pascal/devel-notes.pdf b/notes-pascal/devel-notes.pdf deleted file mode 100644 index 288601a46534d2bf101aa5d8e9aecbebf6952d3c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52225 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 C-m9_z diff --git a/notes-pascal/devel-notes.tex b/notes-pascal/devel-notes.tex deleted file mode 100644 index b46bfc52..00000000 --- a/notes-pascal/devel-notes.tex +++ /dev/null @@ -1,154 +0,0 @@ - -%PASTEX:FIGDIR=figs -\documentclass[12pt,a4paper]{article} - -\usepackage[latin1]{inputenc} % 8 bits -\usepackage[francais]{babel} % francais -\usepackage{graphics} -\usepackage{latexsym} -\usepackage{here} -\usepackage{color} - -%\input{commandes} -%\input{algoenv} -%\input{save_paper} - -\sloppy - -\title{LPP-v6 -- Notes Développeur} -\author{P.Raymond} -\date{} - -\begin{document} - -\maketitle -\tableofcontents -%\clearpage - -\section{Ligne de commande et analyse syntaxique} - -\subsection{Fichiers acceptés} - -Les fichiers supportés sont~: -\begin{itemize} -\item Les fichiers \verb|foo.lus| à la syntaxe Lustre-v6 comportant un ensemble -de déclarations de packages et de modules. -\item Les fichiers \verb|foo.lus| contenant uniquement un corps de -package à la syntaxe v6~; -un tel fichier est considéré comme la déclaration implicite d'un package -dont le nom est \verb|foo|, et dont tous les items sont exportés (\verb|provided|). -\end{itemize} - -Restrictions/à faire~: -\begin{itemize} -\item pour l'instant on prend un seul fichier, mais ça sera facilement adaptable -\end{itemize} - -\subsection{Analyse syntaxique} - -Elle produit un ensemble de déclarations de packages et de modèles -dans une structure syntaxique abstraite (module \verb|Syntaxe|), -qui constitue le {\bf source brut}. - -\section{Analyse des déclarations} - -C'est la première phase de compilation qui consiste à vérifier la cohérences -des déclaration modulo l'organisation en ``name-space'' (les packages). - -Cette phase produit une nouvelle version du source (module \verb|SrcTab|)~: -\begin{itemize} -\item unicité des déclarations de modèles et de packages -\item instanciation (purement syntaxique) des modèles -\item identification des items exportés et de leurs définitions -abstraites (e.g. un type fourni par un package est présenté abstrait -pour les utilisation extérieures). -\end{itemize} - -Au final on a une table de sources bien organisée (\verb|SrcTab|) mais -qui renvoie encore à des infos purement syntaxiques (\verb|Syntaxe|), -voir figure~\ref{srctab}~: -\begin{itemize} -\item les trois tables d'export (const, type, oper) sont indéxées -par des identificateurs absolus (pack+nom) et pointent sur -des définitions éventuellement abstraites~: c'est la seule vision -qu'on en a de l'extérieur, et l'analyse doit être faite uniquement -modulo cette info. -\item la table des définitions de pack, chacun comportant -ses tables d'items (const, type, oper)~; les idents sont relatifs -et les définitions concrêtes. -\end{itemize} - -\begin{figure} -\begin{center} -\input{srctab.pdf_t} -\caption{La table des sources} -\label{srctab} -\end{center} -\end{figure} - - -\section{Compilation à la demande} - -Une compilation modulaire, package par package, est pratiquement -impossible~: -\begin{itemize} -\item comment générer du code pour des n\oe uds paramétrés ? -\item comment faire du type-checking générique pour des tableaux -dont on ne connaît pas la taille ? -\item et encore plus dur, comment traiter la récursivité statique ? -\end{itemize} - -La solution la plus raisonable semble de faire une compilation à -la demande~: -\begin{itemize} -\item on part d'un n\oe ud principal à compiler, dont tous les éventuels -arguments statiques sont connus (en particulier la taille effective des tableaux -manipulés), -\item on ``tire'' récursivement sur les dépendances pour compiler tous -les items nécessaires à ce n\oe ud (ça comprend les types, les constantes statiques, -les n\oe uds internes utilisés). -\end{itemize} - -\paragraph{Remarque.} Un point n'est pas très clair~: -est-il intéressant de faire malgrès tout une analyse préliminaire -indépendante d'un main particulier~? - -Dans Lpp4x, c'est ce qu'on appelait le ``typage de surface''~: -ça vérifiait les références, et faisait un typage approché, où, en particulier, -la taille des tableaux était abstraite. - -\subsection{Items syntaxiques vers items effectifs} - -C'est la terminologie hérité de Lpp4x~: la compilation consiste -à associer à des items syntaxiques (types, consts, nodes) des -items effectifs (c'est-à-dire compilés). - -\subsection{Compile Task} - -Pour implémenter la compilation à la demande, on met en \oe uvre un mécanisme -de ``tâches de compilation''. Chaque tâche est identifiée parfaitement par~: -\begin{itemize} -\item l'item à traiter (type, const, n\oe ud), -\item le contextes (table de symboles) dans lequel on doit traiter. -\end{itemize} - -Il faut bien différencier~: -\begin{itemize} -\item la recherche d'infos {\em utilisateur} pour un item, -\item la compilation effective de l'item. -\end{itemize} -Par exemple, la compilation d'un n\oe ud peut nécessiter des infos -sur un type dans le contexte de compilation de ce n\oe ud. -Supposons qu'il s'agisse d'un type importé d'un package (soit \verb|Pa::ty|)~: -\begin{itemize} -\item on cheche l'info accessible sur le type depuis le contexte actuel~; -supposons que le type soit laissé abstrait dans la table provides de \verb|Pa|, -la compilation du n\oe ud courant doit se faire avec cette seule info -(\verb|Pa::ty| est un type abstrait), -\item parallèlement, on stocke dans les tâches de compilation à effectuer la -compilation effective de \verb|Pa::ty|, dans le contexte du pack \verb|Pa|. -\end{itemize} - - - -\end{document} diff --git a/notes-pascal/exemplecompil-0.tex b/notes-pascal/exemplecompil-0.tex deleted file mode 100644 index b50083e3..00000000 --- a/notes-pascal/exemplecompil-0.tex +++ /dev/null @@ -1,287 +0,0 @@ - - -\section{Code source} - -Le code source contient une déclaration de modèle (\verb|modSimple|), -3 packages déclarés comme des instances de ce modèle (\verb|pint|, -\verb|pbool| et \verb|preal|) et deux packages classiques -avec ``bodies'' (\verb|inter| et \verb|mainPack|). - -Le but est de compiler le n\oe ud \verb|mainPack::preced|. - -\begin{verbatim} ----------------------------- -model modSimple -needs - type t; -provides - node fby1(init, fb: t) returns (next: t); -body - -node fby1(init, fb: t) returns (next: t); -let - next = init -> pre fb; -tel -end ------------------------ -package pint is modSimple(int); -package pbool is modSimple(bool); -package preal is modSimple(real); -------------------------- -package inter - uses pbool, pint, preal; - provides - node preced(in: selType) returns (out, out2: selType); - const n : int; - type selType; -body - type selType = { i: int; b: bool; r: real }; - const n: int = -4; - node preced(in: selType) returns (out, out2: selType); - let - out2 = { i = 0; b = true; r = .0}; --pSel::fby1(in); - out.i = pint::fby1(out2.i, in.i); - out.b = pbool::fby1(out2.b, in.b); - out.r = preal::fby1(out2.r, in.r); - tel -end --------------------------- -package mainPack - uses inter; - provides - node preced(in: inter::selType) returns (out: inter::selType); -body - type T = int^N; - const X = N; - N : int = -2 * inter::n; - node preced(in: inter::selType) returns (out: inter::selType); - var out2 : inter::selType; - let - out, out2 = inter::preced( in ); - tel -end -\end{verbatim} - -\section{Vocabulaire} - -Dans rentrer dans les détails on signale que~: -\begin{itemize} -\item les dénotations syntaxiques de type sont appelées typexp -(ne pas confondre avec les définitions de types), -\item les dénotations de valeurs (constantes, flots) sont appelées valexp. -\end{itemize} - -L'approche générale est d'associer à toute notion syntaxique ``toto'' -une notion sémantique (c'est-à-dire ``compilée), qu'on appèlere -``toto-eff'' (pour effectif). -Par exemple, à toute dénotation de type sera associée un ``typeff'', -qui, dans ce cas précis, servira de base au type-checking -(ce sera la dénotation canonique du type). - - -\section{Table des pack source} - -Une première étape consiste à traiter les instances de modèles, de manière à avoir -des packs utilisés. On reste très ``syntaxique'' à ce niveau. -Par exemple, pour \verb|pint|, on construit une structure pack interne -équivalente à ce qu'on aurrait obtenu en écrivant directement~: - -\begin{verbatim} -package pint -provides - type t = int; - node fby1(init, fb: t) returns (next: t); -body - node fby1(init, fb: t) returns (next: t); - let - next = init -> pre fb; - tel -\end{verbatim} - -Noter que les paramètres de \verb|needs| deviennent des \verb|provides| -dans le pack instancié. - -\section{Compilation} - -Le but est de produire un code intermédiare Lustre Internal Code (lic). -On sait déjà que~: -\begin{itemize} -\item c'est du Lustre (collection de nodes, type et const), -\item sans pack, -\item ça doit être facilement exécutable/simulable -\end{itemize} - -On fait une compilation ``lazzy'' du n\oe ud \verb|mainPack::preced|. - -\subsection{Relativité des items compilés} - -Toute compilation d'item se fait relativement au pack de définition de cet item. -En particulier, le type-checking est relatif au pack où on est, par exemple~: -\begin{itemize} -\item dans \verb|mainPack::preced| on voit que l'entrée \verb|in| est déclarée -de type \verb|inter::selType|. On cherche dans l'ensemble des sources -la déclaration correspondante~: dans le provides de \verb|inter|, -ce type est abstrait. Donc, dans \verb|mainPack|, la représentation canonique -de ce type (le ``typeff'' qui sert de base au type-checking) sera un type abstrait. - -Ce faisant, on mettra dans la liste des items à compiler le type -\verb|inter::selType|, qui lui sera compilé depuis le pack \verb|inter|. -Dans \verb|inter| le typeff ne sera donc pas un type abstrait, mais -un type structure. - -En bref, le processus de compilation consiste en une liste de ``tâches'' de compilation -à effectuer, chaque tâche étant constituée d'un item particulier dans un pack particulier. - -Reprenons l'exemple... - -\section{Tâche ``node \verb|mainPack::preced|''} - -\subsubsection{Environnement de n\oe ud} - -La compil se fait dans un environnement de résolution des références (dont l'implémentation -est à définir). Ici, on s'intéresse juste à ce qu'il doit faire, pas à comment il est fait~! - -Tout ce qu'on sait au départ, c'est que cet env est lié à \verb|mainPack|, c'est-à-dire -qu'il cherche cherche les items nécessaires en priorité dans \verb|mainPack|. - -L'environnement de départ est un ``pack env'' avec 3 espaces de noms -bien différenciés (const, types et opérateurs). - -Pour traiter un n\oe ud, on a besoin d'un ``node env'' où on retrouve les espaces de noms -type et opérateurs, mais où on a un nouvel espace, les flots~: -\begin{itemize} -\item en priorité les variables du n\oe ud (input, output, local), -\item sinon des constantes du package. -\end{itemize} - -Pour~: -\begin{verbatim} -node preced(in: inter::selType) returns (out: inter::selType); -var out2 : inter::selType; -\end{verbatim} -on a donc dans l'env node~: -\begin{itemize} -\item \verb|in|, ident d'entrée, typé par la typexp \verb|inter::selType|, -\item \verb|out|, ident de sortie, typé par la typexp \verb|inter::selType|, -\item \verb|out2|, ident de locale, typé par la typexp \verb|inter::selType|. -\end{itemize} - -La première chose à faire est de type-checker ces variables, c'est-à-dire -de leur associer un typeff. Dans les trois cas, on doit traiter -la même typexp \verb|inter::selType| (on est malin, on le fera une seule -fois et on tabulera). - -Vu depuis le pack courant, on obtient un typeff ``type abstrait de nom \verb|inter::selType|''. - -\subsubsection{Profil du n\oe ud} -En même temps (ou avant ou juste après) qu'on élabore le node-env, on calcule et stocke -le profil du n\o eud, c'est-à-dire essentiellement sont type ``fonctionnel''. On obtient -un truc du style \verb|inter::selType -> inter::selType|. -Dans un programme plus compilqué il faut tenir compte des horloges, la notion -de profil est donc un peu plus compliquée. - -\subsubsection{Traitement du body du n\oe ud} - -Toutes les équations du n\oe ud doivent être traitées. On doit faire essentiellement trois choses~: -\begin{itemize} -\item type-checking (le type de la left-part correspond au type de la right-part), -\item clock-checking (similaire, c'est un calcul de type aussi), -\item def-checking~: traitement plus global qui consiste à vérifier que toutes -les variables produites sont bien définies de manière unique -\end{itemize} -Tous ces traitements peuvent être fait en même temps ou en séquence (à voir). -Le résultat doit être un ensemble ``d'équations effectives'', c'est-à-dire -certainement correctes, et sans doute récrites sous une forme -``facile à exécuter'' (c'est pas encore très clair~: c'est lié à -la définition qu'on a du code intermédiaire \verb|lic|). - -On a une équation~: -\begin{verbatim} -out, out2 = inter::preced( in ); -\end{verbatim} -En général, on n'a pas 1 type mais une liste de type par partie droite/gauche -(c'est lié à la notion de tuple implicite). - -Ici, pour la partie droite on calcule la liste de typeff \verb|[inter::selType;inter::selType]|. - -Pour la partie droite, on traite la valexp \verb|inter::preced( in )|~: -\begin{itemize} -\item récursivement, on traite la liste d'argument \verb|in|, qui est typée \verb|[inter::selType]|. -\item puis on cherche le profil de l'opérateur \verb|inter::preced|~: - \begin{itemize} - \item on trouve que c'est un node provided par \verb|inter|, avec le profil déclaré~: - \verb|node preced(in: selType) returns (out, out2: selType)|, - \item ce profil est traité pour optenir un profil effectif~: - \verb|inter::selType -> inter::selType * inter::selType| - \item cette information suffit à continuer le traitement local, mais on note qu'il faudra - effectuer la tâche de compilation \verb|node inter::preced| - \item on résout \verb|(inter::selType -> inter::selType * inter::selType)| appliqué - à \verb|[inter::selType]| qui donne finalement la liste de typeff - \verb|[inter::selType;inter::selType]| pour la partie droite. - \end{itemize} -\item on vérifie que partie gauche et droite sont compatibles (même type) : le type-checking -réussit. -\end{itemize} -Pour les programmes plus compliqués, on doit aussi tenir compte des horloges. - -Au cours du traitement, ou après, on fait le def-ckecing~: -toutes les ssorties/locales sont marquées comme indéfinies. -Chaque fois qu'on traite une partie gauche, on marque les variables -définies par l'équation. Attention, dans le cas de tableaux ou de structures, -la définition peut être partielle, ce qui complique un peu. -Si une variable (ou un morceau de variable) est défini plusieurs fois, il y a erreur. -Si à la fin une variable (ou un morceau de variable) n'est pas défini, il y a erreur. - -Au final, si tout va bien, on a construit un version ``compilée'' du corps -du n\oe ud, éventuellement légérement différente de la version source -(le formar lic à définir). - -\section{Tâche ``type \verb|inter::selType|''} - -On traite la déclaration du type (vu de l'intérieur du pack \verb|inter|~: -\begin{verbatim} -type selType = { i: int; b: bool; r: real }; -\end{verbatim} - -On crée une déclaration compilée équivalente (c'est une structure avec les champs etc.). -Le typeff de réference dans le pack est crée~: c'est tout simplement l'ident (\verb|selType|). - -\section{Tâche ``node \verb|inter::preced|''} - -Similaire à ce qu'on a déjà vu. -\begin{verbatim} -node preced(in: selType) returns (out, out2: selType); -let - out2 = { i = 0; b = true; r = .0}; --pSel::fby1(in); - out.i = pint::fby1(out2.i, in.i); - out.b = pbool::fby1(out2.b, in.b); - out.r = preal::fby1(out2.r, in.r); -tel -\end{verbatim} -Ça va nous conduire à rechercher les profils ``provided'' des n\oe uds -\verb|pint::fby1|, \verb|pbool::fby1|, \verb|preal::fby1|, -et à mettre ces même n\oe uds dans la liste des tâche de compil. - -etc. - -\section{Quelques points importants} - -Dans les tâches de compil on va avoir aussi~: -\begin{itemize} -\item évaluation statique de constante, pour pouvoir traiter les types tableaux, -les paramètres statiques. Dans ce cas, le ``consteff'' est une vraie constante -compile-time (2, 12, true, 42). -Normelement, ga ne concerne QUE les entiers et les booléens, pas les réels (à vérifier), -\item compilation standard de constantes~; dans ce cas on n'est pas obligés à -aller jusqu'à l'évaluation complète (on peut garder des expressions, des constantes -abstraites etc.). -\item en général, un n\oe ud à compiler n'est pas un simple ident~: c'est un ident -plus une liste de paramètres statiques effectifs (ce qu'on appèle les arguments -statiques). En général, un tâche de compil de n\oe ud sera caractérisée par~: -\begin{verbatim} -packid::nodeid << type t = typeff; const n = consteff >> -\end{verbatim} - -\end{itemize} - -\end{itemize} diff --git a/notes-pascal/exemplecompil.txt b/notes-pascal/exemplecompil.txt deleted file mode 100644 index 0e893f55..00000000 --- a/notes-pascal/exemplecompil.txt +++ /dev/null @@ -1,70 +0,0 @@ - - -1) Expansion des modèles ------------------------- -Réalisée dans le module SrcTab - -Exemple : - - model modSimple - needs - type t; - provides - node fby1(init, fb: t) returns (next: t); - body - - node fby1(init, fb: t) returns (next: t); - let - next = init -> pre fb; - tel - end - -et : - - package pint is modSimple(int); - -on instancie ``syntaxiquement'', et tout ce passe comme ci on avait un pack : - - package pint - provides - type t = int; - node fby1(init, fb: t) returns (next: t); - body - node fby1(init, fb: t) returns (next: t); - let - next = init -> pre fb; - tel - -2) Tables des items -------------------- - -Dans SrcTab, on a une table de pack_mng. Chaque -pack a (au plus) deux tables de symboles pour résoudre -les références SIMPLES (juste un ident) : -- une pour traiter le corps (la def) du pack -- une optionnelle pour traiter la partie provide - (si pas de provide, alors on a une seule table pour les deux) - -N.B. Les SymbolTab restent au niveau syntaxique : -- ident de type -> extern + nom complet - ou local + def syntaxique -(et pareil pour const et oper) - - -3) Compilation à la demande ---------------------------- - -Le cas général est la compilation d'une instance -de template (noeud avec arguments statiques). Le -cas simple est une version dégénérée. - -On demande donc la compil d'un noeud AVEC ses arguments statiques -déjà résolus (le tout s'appele un node_key). - -La compil se fait dans un GlobalEnv qui gère les "items" -déjà compilés. La structure du Global suit celle du SrcTab : -pour chaque pack, on a : -- un PackEnv "body", -- un éventuel PackEnv "provide" - - diff --git a/notes-pascal/pack+static.problemes b/notes-pascal/pack+static.problemes deleted file mode 100644 index 940e3b4e..00000000 --- a/notes-pascal/pack+static.problemes +++ /dev/null @@ -1,150 +0,0 @@ - -Probleme initial : - Au niveau syntaxe, les noeuds/functions avec params statiques - sont pas prévus dans le "provides" des package - -Sol : Ajout dans la synaxe -> ok - -Probleme 2 : - - Pour la compilation "lazy", on a besoin de la nature (const, type, node) - des params statiques attendus pour pouvoir evaluer correctement les - argument statiques donnÃs - - Il y avait un magouille prevue pour ca (entre autre) dans Ast2lic : - via le champs global_symbol de IdSolver on peut retrouver - le "source" des noeuds et donc leurs params statiques - (cf. get_abstract_static_params) - Mais ca ne marche INTRINSEQUEMENT que pour les noeuds references SANS - package (i.e toto et pas titi::toto) - -Sol : ajout de all_src dans IdSolver, ce qui permet en fait - de retrouver n'importe quelle info source si besoin - (c'est un peu la grosse Bertha quoi) - -Problemes restant ? -- c'est un peu violent, pas dans l'esprit de IdSolver, - qui se voulait un mecanisme d'abstraction du source ... -- du coup, le role de OdSolver.global_symbol est moins clair : - est-ce c'est encore necessaire de le trimballer ? - - -XXX- Il reste encore des trucs bizarre, nottament quand on appelle - depuis un package -Sol : il suffit de commenter un assert dans solve_x_idref, rien a faire - dans le cas de params statique puisque on a reussi a arriver - jusque la, cést que le "genre"des params statiques est ok - - -Tests d'utilisation de dadic.lv6 (source + bas) : - -1) sans package - --------------- -(* fichier x5.lv6 *) -node x5 = Dadic::Mult<<5>>; - -./_build/src/main.byte dadic.lv6 x5.lv6 - --> OK -(n.b. avec un warning pas necessaire: -Warning. in file "/net/estrop/local/pascal/git/lus2lic/dadic.lv6", line 42, col 5 to 8, token 'Mult': ----> Dadic::Mult<<const n = 1>> is declared as a node, but it uses no memory (i.e., it is a function). - -2) avec package SANS uses -------------------------- -(* fichier toto1.lv6 *) -package Toto1 -provides - node x5(x:bool)returns (y:bool); -body - node x5 = Dadic::Mult<<5>>; -end - -./_build/src/main.byte dadic.lv6 toto1.lv6 -n Toto1::x5 - --> OK (meme warning) - - -3) avec package ET uses -------------------------- -(* fichier toto2.lv6 *) -package Toto2 -uses Dadic; -provides - node x5(x:bool)returns (y:bool); -body - node x5 = Mult<<5>>; -end - -./_build/src/main.byte dadic.lv6 toto2.lv6 -n Toto2::x5 -ec - --> KO -*** oops: lus2lic internal error - File "src/licTab.ml", line 323, column 20 -*** when compiling lustre programs dadic.lv6, toto2.lv6 - -*** You migth want to sent a bug report to jahier@imag.fr - -Sol : voir ci dessus, ca marche - -fichier dadic.lv6 -(****************************************************** -dadic.lv6 version 1.00 -******************************************************) -package Dadic -provides - (* O : x -> 2*x *) - node O(x : bool) returns (y : bool); - (* I : x -> 2*x + 1 *) - node I(x : bool) returns (y : bool); - (* Add : x,y -> x + y *) - node Add(x, y : bool) returns (xpy : bool); - (* Chs : x -> -x *) - node Chs(x : bool) returns (ux : bool); - (* Mult : const n, x -> n*x *) - node Mult<<const n : int>>(x : bool) returns (y : bool); - (* OfInt : const n -> x *) -body - node O(x : bool) returns (y : bool); let y = false -> pre x; tel - node I(x : bool) returns (y : bool); let y = true -> pre x; tel - node Add(x, y : bool) returns (xpy : bool); - var c : bool; - let - c = if (false -> pre c) then (x or y) else (x and y); - xpy = ((false-> pre c) = (x = y)); - tel - node Chs(x : bool) returns (ux : bool); - var after_x : bool; - let - ux = if (after_x) then (not x) else (x); - after_x = false -> pre(after_x or x); - tel - node Mult<<const n : int>>(x : bool) returns (y : bool); - let - y = with (n < 0) then ( - Mult<<-n>>(Chs(x)) - ) - else with (n = 0) then false - else with (n = 1) then x - else with ((n mod 2) = 0) then ( - Mult<<n div 2>>(O(x)) - ) else ( --(n div 2) = 1 - Add(Mult<<n div 2>>(O(x)), x) - ); - tel - (* ici -> pas de noeuds sans entree ? *) - node OfInt<<const n : int>>(_:bool) returns (y : bool); - let - y = with (n = -1) then true - else with (n = 0) then false - else with ((n mod 2) = 0) then - O(OfInt<<n div 2>>(true)) - else with (n > 0) then - I(OfInt<<n div 2>>(true)) - else - --attention aux négatifs ! - I(OfInt<<(n-1) div 2>>(true)); - tel -end - - diff --git a/README.org b/notes.org similarity index 92% rename from README.org rename to notes.org index 5f8b6cf1..286730c4 100644 --- a/README.org +++ b/notes.org @@ -5,29 +5,10 @@ Pour installer les outils de cross compilation (gcc et ocaml) : aptitude install mingw32 mingw32-binutils mingw32-runtime mingw32-ocaml gcc-mingw32 - -sur grivola, le cross-compilateur gcc est la : - /usr/i586-mingw32msvc/bin - - - - -* cloning - -you need ocaml, rdbg-plugin, (more ?) - -#+BEGIN_SRC sh -git clone file:///usr/local/src/lustre/repos/lus2lic.git lus2lic -cd lus2lic -make -make test -#+END_SRC -~ * Tests (=./test=) requires 'sudo apt-get install dejagnu' - The idea is to run those tests before *each commit*. All tests are controlled by file:test/Makefile; which runs the diff --git a/src/lv6version.ml b/src/lv6version.ml index 7d8f670a..ee94718d 100644 --- a/src/lv6version.ml +++ b/src/lv6version.ml @@ -1,7 +1,7 @@ (** Automatically generated from Makefile *) let tool = "lus2lic" let branch = "master" -let commit = "631" -let sha_1 = "985f0039a1a3e13cc876be36e8b0e77fb0471e28" +let commit = "632" +let sha_1 = "d1b062d3a67a2e288c8904f60b9c9874c11b0707" let str = (branch ^ "." ^ commit ^ " (" ^ sha_1 ^ ")") let maintainer = "jahier@imag.fr" diff --git a/todo.org b/todo.org deleted file mode 100644 index 8b8f0d7f..00000000 --- a/todo.org +++ /dev/null @@ -1,571 +0,0 @@ -#+TODO: TODO(!) STARTED(!) WAITING(!) | DONE(d!) CANCELED(c) -#+CATEGORY: lv6 - -* Failures spotted by non reg tests (13) - -** TODO Front-end error (1) - - State "TODO" from "" [2014-08-26 Tue 10:20] - - cat lus2lic*.log | grep "FAIL: without any option:" | sed s/'FAIL: without any option:'/-/ - -1. ./lus2lic -o bug_map_fby.lic bug_map_fby.lus - map<<fby, n>> pas supporté - -** TODO soc2c (2) - - State "TODO" from "" [2014-08-26 Tue 10:20] - -cat lus2lic*.log | grep "FAIL: Generate c code :" | sed s/'FAIL: Generate c code :'/-/ - -1) ./lus2lic -2c should_work/cond01.lus -n cond01 - the type of + in condact<<+,0>> is not inferred - -2) ./lus2lic -2c should_work/filter.lus -n filter - a false cycle is detected - -** TODO Divergences -exec et ecexe (4) - - State "TODO" from "" [2014-07-11 Fri 16:54] - - grep "FAIL:" lus2lic*.log | grep "exec" | grep "ecexe" | sed s/'FAIL: Try to compare lus2lic -exec and ecexe:'/-/ - - -1) ../utils/test_lus2lic_no_node should_work/filter.lus - spurious cycle detected (cf plus haut) - -2) ../utils/test_lus2lic_no_node should_work/Gyroscope.lus -3) ../utils/test_lus2lic_no_node should_work/Gyroscope2.lus - #ERROR: Output takes on nil - c'est le ec qui a l'air fautif, car j'arrive a reproduire - le pb avec ecexe et lus2lic -exec semble fonctionner - -4) ../utils/test_lus2lic_no_node should_work/cond01.lus - cf plus haut (polymorphisme et iterateur) - -* lus2lic -2C -** TODO lic2c : le jour ou on genere du code C, y'a peut-etre des trucs a recuperer - - State "TODO" from "" [2012-12-10 Mon 14:32] -chez Cedric Pasteur qui a une implementation pour optimiser la maj -des tableaux -http://www.di.ens.fr/~pouzet/bib/lctes12.pdf - -** TODO lic2c : Ca plante si un identificateur lustre comporte un "'" - -bin oui, ca n'est pas legal en C. Du coup je fais quoi ? -Je rejete ? - -** TODO Reject file name that cannot be used to build valid C ident when using the -2c option - - State "TODO" from "" [2014-05-23 Fri 17:20] -** TODO lic2c : Ca plante si un identificateur lustre se nomme double... - - State "TODO" from "" [2014-06-13 Fri 16:59] -** TODO lic2c : types externes utilisés en I/O du main pas supportés - - file:test/should_work/simple.lus lus2lic -2c should_work/simple.lus -n simple - types externes - -faire comme pour _assign_EXT_TYPE en s'inspirant de ce que fait ec2c - -** TODO lic2c : slice en partie gauche pas traitée - -1. file:test/should_work/morel.lus lus2lic -2c should_work/morel.lus -n morel -2. file:test/should_work/morel2.lus lus2lic -2c should_work/morel2.lus -n morel2 -3. file:test/should_work/morel3.lus lus2lic -2c should_work/morel3.lus -n morel3 -4. file:test/should_work/morel4.lus lus2lic -2c should_work/morel4.lus -n morel4 -5. file:test/should_work/left.lus lus2lic -2c should_work/left.lus -n left - -Quand ca sera corrigé, rétablir les tests correspondant dans -file:~/lus2lic/test/site.exp (cf proc does_not_contain_left_slices) - -** TODO lic2c : polymorphisme - - State "TODO" from "" [2014-07-09 Wed 17:13] - lus2lic -2c should_work/cond01.lus -n cond01 - -echoue aussi en mode exec. - -Je devrais pourvoir accepter celui la, non ? - -** TODO Question : remettre en cause le choix de représentation des Soc.key ? - - State "TODO" from "" [2014-06-27 Fri 15:29] - -En effet, il ne reste plus que les ite à etre polymorphes, et c'est à cause des -soc polymorphes que je me trimbale le profile du soc dans les Soc.key ! - -par ailleur, l2lSplit ne devrait pas splitter les ites, si on veut -pouvoir faire l'optimisation qui consiste à n'executer qu'une des 2 -branches si les noeuds ne font pas d'effet de bord. - -** TODO nommage des soc à mémoires avec valeurs initiales - -Pour distinguer les différentes instances de soc à memoire (arrow -et fby), j'utilise le hash de leur valeur initiale, ce qui est faux, -car hash n'est pas une injection. - -Est-ce la bonne approche ? Une alternative serait de n'avoir qu'une -seule soc et de faire la bonne initialisation en passant la valeur -initiale en argument de la fonction reset. - -Une autre solution serait d'utiliser un générateur de nom unique, par -exemple basé sur un compteur. - -[...] sauf qu'en fait, la fonction de hash renvoie toujours la meme -valeur (bug) et que ca marche tres bien. Ce qui prouve bien que ca ne -sert a rien cette affaire. - -* lus2lic -ec -** le merge n'est pas expansé et ecexe ne le connais pas -1. ./myec2c -o modes3x2_v4.c modes3x2_v4.ec -2. ./myec2c -o modes3x2_v3.c modes3x2_v3.ec - -> le merge de type enum n'est pas expansé. - -3. ./myec2c -o test_merge.c test_merge.ec - -> genere un "when not clk" pas supporté pas ec - -* Packages, modeles, etc. -** STARTED Il ne detecte plus les erreurs de type lors d'instanciation de noeuds - - State "STARTED" from "TODO" [2013-01-28 Mon 17:02] - cf échange de mails avec PAscal le 28/01/2013 - - State "TODO" from "" [2012-12-21 Fri 11:08] -#+begin_src sh -cd test; ./lus2lic -vl 2 --nonreg-test should_fail/type/parametric_node2.lus -#+end_src - -file:test/should_fail/type/parametric_node2.lus - -Ah bah oui, c'est écrit ici : -file:src/ast2lic.ml::202 - - (* NOUVELLE VERSION ÉPURÉE : - ON ne fait AUCUNE vérif de cohérence de types pour les param statiques, - on ne vérifie QUE la nature (pour pouvoir résoudre les args qui sont des idents - A FAIRE + TARD ? !! - *) - -fixer le commentaire "OBSOLETE ET UN PEU FAUX" - file:/~/lus2lic/src/lic.ml::440 - -** TODO mauvais numero de ligne lors d'erreur d'instanciation de parametres de noeud - - State "TODO" from "" [2012-12-21 Fri 10:58] - -#+begin_src sh -cd src; ../objlinux/lus2lic -vl 2 --nonreg-test should_fail/type/parametric_node.lus -#+end_src - - Opening file /home/jahier/lus2lic/test/should_fail/type/parametric_node.lus - Error in file "parametric_node.lus", line 4, col 17 to 17, token 'n': - can't eval type: bad array size, int expected but get real - -le message serait meilleur s'il indiquait la ligne 17 où l'erreur est effectuée - -file:src/astInstanciateModel.ml -file:test/should_fail/type/parametric_node.lus - -* Testing process -** TODO Quand tous les test sont ok: comprendre pourquoi test_lus2lic_no_node et rdbg divergent - SCHEDULED: <2014-09-08 Mon> - - State "TODO" from "" [2013-12-10 Tue 13:37] -En fait, c'est le bis qui semble avoir raison à chaque fois -a voir quand j'aurais tous les tests qui passent - -pour voir la liste des tests que échouent : file:~/lus2lic/test/lus2lic.sum - -** STARTED [#B] utiliser rdbg -lurette a la place de lurettetop dans les test de non reg - SCHEDULED: <2014-11-03 Mon> - - State "STARTED" from "TODO" [2013-12-06 Fri 17:37] - - State "TODO" from "" [2013-11-27 Wed 18:18] - -Pour cela, il suffit de modifier le fichier file:~/lus2lic/test/site.exp - -ca marche, mais c'est plus lent (100->183s). c'est sans doute parce que -je passe par des sockets. - -Il faudrait passer par des cmxs pour l'env et l'oracle, mais ca -complique un peu le script car il faut générer les bons cmxs. - -[...] - -Voila, je passe maintenant par des cmxs. Malheureusement, je passe à -300s car je passe pas mal de temps à generer ces cmxs, et comme je ne -fais que 10 step à chaque fois, c'est cet aspect qui domine... - -Bon, sinon, si on regarde juste nested.lus, sur 10 pas, l'overhead a l'air -d'etre autour de 2% - - -Sur plus.lus pendant 10000 steps, j'ai -|--------------+------| -| rdbg -socket | 9:44 | -| rdbg -cmxs | 8:40 | -| lurettetop | 4:00 | -|--------------+------| - -Sur nested.lus pendant 10 steps, j'ai : -|--------------+----------| -| rdbg -socket | 64s | -| rdbg -cmxs | 185s !!! | -| lurettetop | 53.3s | -|--------------+----------| - -Comment c'est possible ce truc ???!!! - -nested.ec possede certes plus de 7000 variables (dont pres de 6000 -sont locales), du coup manipuler des listes n'aide pas. Mais c'est le -cas pour les 3. - -Le mode socket ne transmet pas les var locales, d'ou la difference ? - -Est-ce une bonne idée d'utiliser des listes d'ailleurs. au niveau des -mli, peut-etre. Mais je devrais peut-etre m'en affranchir plus vite -pour traiter ce genre d'exemple... - -** TODO Testing node with enums don't work - - State "TODO" from "" [2013-05-28 Tue 14:46] - -indeed, ec requires they are extern const, and lus2lic requires to have int - -- one solution would be that -eei generates correct ec, by inlining constant -- I could also add enums in Lutin - -Actually, I should do both... - -../utils/test_lus2lic_no_node should_work/enum0.lus - -en fait, l'option --gen-auto-test traduit les types enums en entier ; du coup -l'appel depuis l'oracle au noeud à tester est mal typé... - -** TODO Écrire un test qui mette en jeu exhaustivement tous les operateurs - - State "TODO" from "" [2013-03-19 Tue 10:38] -** TODO try to compile the C code resulting from ec2c at some point - - State "TODO" from "" [2013-01-18 Fri 23:12] -in particular, are nodes using extern nodes generated properly? - -** TODO les (nouveaux) tests ne capturent pas les changements de # lignes dans les should_fail - - State "TODO" from "" [2013-01-11 Fri 11:15] - -** TODO Nommage des variables fraiches : Reprendre LicVarName.ml - - State "TODO" from "" [2013-01-16 Wed 18:03] -car c'est completement n'importe quoi (j'ai réussit a faire des clashs -entre les var inventées dans split et dans ExpandNodes !!) - -Pascal a introduit un mecanisme qui shunte LicName -> en discuter avec lui. - -** TODO Il faudrait traiter proprement les programmes lutin (et lustre) qui débordent (int) - - State "TODO" from "" [2013-05-10 Fri 17:28] - - ../utils/test_lus2lic_no_node should_work/test_node_expand.lus - ../utils/test_lus2lic_no_node should_work/test_node_expand2.lus -** TODO au sujet des tests de non-regression - - State "TODO" from "" [2013-04-23 Tue 17:31] - -Actuellement, test_lus2lic_no_node, je compare lus2lic -ec + ecexe et lus2lic -exec. - -Ca serait bien de faire la meme chose en passant par lus2lic -lv4 + -lus2ec voir. - -** TODO lus2lic -ee -exec devrait utiliser des enums (a la ecexe) - - State "TODO" from "" [2013-05-07 Tue 16:36] - -** TODO le test des programmes packagés ne fonctionne pas - - State "TODO" from "" [2013-05-10 Fri 10:52] -modifer -file:~/lus2lic/utils/test_lus2lic_no_node - -** TODO quand une assertion est violée dans ecexe, ca fait des trucs zzardbi dans lurette - - State "TODO" from "" [2014-09-04 Thu 13:46] - -par exemple, decommenter le assert dans file:test/should_work/test_node_expand2.lus -et lancer - /home/jahier/lus2lic/test/../utils/test_lus2lic_no_node should_work/test_node_expand2.lus - -il dit 'A SUT input is missing: o1' -tout en cachant la vraie erreur (assert error) - -* Divers -** TODO lv4 enum types are not compatible with lutin ones - - State "TODO" from "" [2014-03-28 Fri 15:49] -For lv6, it's ok, so, well... - -I'd need to add support for enums in Lutin to fix this one. - - --> Or the -eei option could do something else (inlining const definition) -indeed, -ec -eei generates ec code that is not syntactically correct for ecexe. - -Should I do this (const inlining) with 'ec -eei only ? it seems fair enough - --> Other idea. Go though V4 and lus2ec. - -** TODO lus2lic : reprendre unifyClock.ml proprement - SCHEDULED: <2014-11-10 Mon> - - State "TODO" from "" [2013-09-24 Tue 16:35] -cf file:~/lus2lic/src/unifyClock.ml -http://www.cs.cornell.edu/courses/cs3110/2011sp/lectures/lec26-type-inference/type-inference.htm - -** TODO Soc2cIdent.key_op2str est faux - - State "TODO" from "" [2014-08-13 Wed 17:33] -** TODO Extern and ec - -lus2lic should_work/decl.lus -n decl -ec - -generates incorrect ec code instead of raising an error. - -** TODO Revoir le nommage des instances de noeuds parametriques - par ex, pour should_work/NONREG/param_struct.lus - ca invente des noms bien débiles du point de vue du nom du pack. - Style 'mk_tab__param_struct::toto_toto_3' - alors qu'aucun package ne s'appelle 'mk_tab__param_struct' - -** TODO le with devrait opérer sur une val_exp, pas sur un ident. - - State "TODO" from "" [2013-02-12 Tue 18:31] - -** TODO l2lCheckOutputs.ml Unbound value VarMap.bindings -en mode cross-win32 car pas defini en 3.11 - - State "TODO" from "" [2013-02-22 Fri 08:27] -** TODO Découper un peu les fonctions dans src/lic2soc.ml - - State "TODO" from "" [2013-03-19 Tue 10:26] -le role et le perimetre get_leaf en particulier n'est pas clair. -de plus son code est dupliqué. -file:src/lic2soc.ml - -** TODO pb sur le GYRO : bug dans le prog ou dans le compilo ??? - - State "TODO" from "" [2013-05-31 Fri 16:30] - - ../utils/test_lus2lic_no_node should_work/Gyroscope2.lus - ../utils/test_lus2lic_no_node should_work/Gyroscope.lus - -si je lance ecexe dessus, j'obtiens un - "#ERROR: Output takes on nil" -au step 3 -Mais curieusement, via lus2lic -exec, je n'ai pas de soucis. - -* Pas clair -** WAITING Regarder si on pourrait se passer du PREDEF_CALL (et de passer par le CALL normal) - - State "WAITING" from "STARTED" [2013-02-06 Wed 17:14] - - State "STARTED" from "TODO" [2013-02-06 Wed 17:14] - - State "TODO" from "" [2012-10-26 Fri 14:59] -cf file:./src/lic.ml::206 - -Mouais. C'est pas clair. Si on regarde par exemple ici : - file:src/ast2lic.ml:407 -On voit qu'on n'y fait pas le même traitement. -À voir avec Pascal. - -** TODO Dans file:src/eff.ml::195 on pourrait virer la notion de call by name -qui ne sert que pour les structures. Mais au niveau du Eff, on -pourrait s'en être débarrassé au profit d'un appel par position. A -faire au moment de la compilation des expressions. - -question : est-ce que cela nous prive d'une optim pour le traitement -du with ? -comment fait caml ? - - State "TODO" from "" [2012-10-26 Fri 14:59] - - -** TODO operateurs iterables - - State "TODO" from "" [2012-03-30 Fri 17:03] -- mettre dans la doc -- voir si on ne pourrait pas completer la liste -en mettant tous les operateurs unaires de - file:~/lus2lic/src/syntaxTreeCore.ml::91 -dans - file:~/lus2lic/src/predef.ml::62 -- tout au moins, eviter les assert false sur -#+BEGIN_CENTER lustre :exports bug_map_fby.lus -type state = struct { - idy : int; - leader : int; - level : int -}; -const n=5; -const inits = [ - state { idy = 33; leader = 5; level = 2} , - state { idy = 41; leader = 5; level = 3} , - state { idy = 21; leader = 5; level = 4} , - state { idy = 10; leader = 10; level = 0} , - state { idy = 75; leader = 75; level = 0} -] ; -const O = false; -const I = true; -const connect = [ - [ O, I, O, O, I ], - [ I, O, I, O, O ], - [ O, I, O, I, O ], - [ O, O, I, O, I ], - [ I, O, O, I, O ] -]; -node algo (clk: bool; ps: state; neigh: bool^5) returns (ns: state); -let - ns = if clk then - state { idy = ps.idy ; leader = ps.leader; level = ps.level + 1 } - else - state { idy = ps.idy ; leader = ps.leader; level = ps.level }; -tel -node simu(ck:bool^5) returns (s: state^n); -var ps : state^n; -let - ps = map<<fby, 5>>(inits, s); - s = map<<algo, n>> (ck, ps, connect); -tel -#+END_CENTER - -bon, y'a plus d'erreur, mais ca ne compile pas. Est-ce choquant ? - -** TODO Verifier les boucles combinatoires meme quand on ne genere pas de ec - - State "TODO" from "STARTED" [2013-01-29 Tue 09:49] - - ./lus2lic should_fail/semantics/deploop.lus - -On pourrait utiliser file:src/misc.ml pour prendre finement en compte les -struct et les arrays. - -** TODO Faut-il jeter ces self loop ? Sans doute pas. - - State "TODO" from "" [2013-05-10 Fri 17:44] -../utils/test_lus2lic_no_node should_work/filter.lus -../utils/test_lus2lic_no_node should_work/activation2.lus -../utils/test_lus2lic_no_node should_work/activation1.lus -../utils/test_lus2lic_no_node should_work/speedcontrol.lus - -solution : -l2lSplit: split access of access in left parts. - -indeed, consider the following example: - - z.y.y = z.x.x; - -which is fine. But if we transform it into - - z.y.y = v0.x; - v0 = z.x; - - -we have a cycle !!! - -but what if we split further, it's fine again - - v1 = z.y - v1.y = v0.x; - v0 = z.x; - --> split more ! - -** TODO Enlever Abstract_type_eff de Lic.type_ ou vérifier partout que c'est correct. - - State "TODO" from "" [2012-12-20 Thu 17:26] -dans lic.ml, on definit les types compilés ainsi : -and type_ = - | Bool_type_eff - | Int_type_eff - | Real_type_eff - | Abstract_type_eff of Ident.long * type_ - | Array_type_eff of type_ * int - ... - -Mais est-ce vraiment utile de garder le Abstract_type_eff à ce niveau ? - -en effet, ca oblige à traiter les 2 cas en permanence (par ex lors des -transfos l2l). - -Pascal suggere carrément de -- definir un type - -#+begin_src ocaml -type type_ref of string -#+end_src -- transformer les expressions lic de telle sorte que il n'y ait plus - de type_ mais juste des type_ref - -Car en fait, actuellement, le type Lic.type_ sert à faire la verif de -type et a representer le type des expressions lic. Du coup le type -des expressions est inutilement compliqué; d'ou l'idée d'avoir juste -des "type_ref of string" (Ce qui simplifiera (?) le travail des -passes ultérieures, style lic2c). - -Bon, je ferai ca quand tous les tests fonctionneront et pendant que -j'essairais de me passer de ulglyStuff/id_solver. A voir aussi ce qui -sera le plus pratique quand je me remettrai à bosser sur le -lic2c/licexe - - -Autre idée : Dans LicPrg, ne plus utiliser de Lic.type_ mais des -LicPrg.type_ (=string) -+ une table LicPrg.type_ -> Lic.type au cas où - -l2lAliasTypes fait plus au moins le boulot. Faudrait intergrer cette -passe à la fonction qui construit le LicPrg initial. - -boarf ; ca fait beaucoup de bazard pour pas grand chose. Ce qui -simplifierait les choses pour la suite, c'est de ne plus avoir de -Lic.type_ du tout dans les val_exp et autre. - -Autre idée : je fais ca lors du passage à la structure de données -suivante (soc). Oui, ca fait du sens. en plus, les l2l* utilisent les -infos Lic.type_, donc autant attendre un peu avant de s'en passer. - - -** TODO C'est normal qu'il se plante au step 2 celui la ??? - - State "TODO" from "" [2013-05-31 Fri 16:42] - ../utils/test_lus2lic_no_node should_work/sincos.lus - - - - - -* a classer - -** Fix 'make rel-test' in release-v6 dir -** bug clock tim - - State "TODO" from "" [2013-09-23 Mon 11:13] - -donc c'est file:~/lus2lic/src/l2lExpandNodes.ml le coupable on dirait -en effet, quand on ne branche que l'expansion de noeud - ~/lus2lic/objlinux/lus2lic ~/xxx/test.lus -n verify -en > xxx.ec -on obtient - - uw1:bool when cw; ici 3 - _u1_5:bool when cr; ici 1 -puis - _u1_5 = uw1; -ce qui ne peut pas marcher... - - ===> creating _uw1_1 from uw1 with clock on true(cw) on base - ===> creating _u1_5 from u1 with clock on true(cr) on base - -uw1 : bool when cw; -u1 : bool when cw; - -c'est donc _u1_5 qui n'est pas sur la bonne horloge ? - -a l'appel de - OK2 = (mem(cr, ur1) = mem(cw, uw1)); -ne se prendrait-il pas les pieds dans le tapi ? - -car _u1_5 est créé lors de l'un de ces 2 appels - -[...] - -bon, si dans mem je renomme cw en clk, ca marche !!! -c'est un probleme de clash de nom de variable !!! - -[...] - -Finalement, le pb est plutot la il semblerait : -file:~/lus2lic/src/evalClock.ml::83 - -** Generate macro for simple predef op in -2c mode. -** Add a --2c-stack that favor the use of stack vs heap - -indeed, currently, a soc call is done like that - -#+BEGIN_SRC C - set_input(ctx, i1); - step(ctx); - get_output(ctx,o1); -#+END_SRC - -by using the stack, I mean something like - -#+BEGIN_SRC C - step(i,o); -#+END_SRC - -** in Soc2cextern.cpy_def: shouldn't I use macro instead of function to be consistent ? -file:~/lus2lic/src/soc2cExtern.ml::28 - -I could even define a default version using memcpy as for arrays BTW. - diff --git a/todo.org_archive b/todo.org_archive deleted file mode 100644 index fc122154..00000000 --- a/todo.org_archive +++ /dev/null @@ -1,1374 +0,0 @@ -# -*- mode: org -*- - - -Archived entries from file /home/jahier/lus2lic/todo.org - -* TODO Mettre à jour le tout nouveau file:README.org wrt src - SCHEDULED: <2012-12-10 Mon> - - State "TODO" from "" [2012-12-10 Mon 17:02] - :PROPERTIES: - :ARCHIVE_TIME: 2012-12-13 Thu 15:37 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Urgent - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -* TODO Renommer tous les modules et faire du ménage - SCHEDULED: <2012-12-10 Mon> - - State "TODO" from "" [2012-12-10 Mon 16:55] - :PROPERTIES: - :ARCHIVE_TIME: 2012-12-13 Thu 15:37 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Urgent - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -* TODO rebrancher le nodeExpand.ml et structArrayExpand.ml - SCHEDULED: <2012-12-20 Thu> - - State "TODO" from "" [2012-12-10 Mon 16:55] - :PROPERTIES: - :ARCHIVE_TIME: 2012-12-20 Thu 17:23 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Urgent - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -file:src/l2lExpandNodes.mli -file:src/l2lExpandArrays.mli - -que Pascal les a débranché lors de son ménage d'été. - -* TODO Pascal a shunté mon LicName dans split. Avait-il (une bonne) raison ? - SCHEDULED: <2012-12-20 Thu> - - State "TODO" from "" [2012-12-17 Mon 16:37] - :PROPERTIES: - :ARCHIVE_TIME: 2012-12-20 Thu 17:23 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Urgent - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -par ex, file:~/lus2lic/src/l2lExpandArrays.ml::50 -dois-je faire comme lui ou comme avant ? - -* TODO le mode ec genere tous les noeuds (ce que n'aime pas ec2c) - - State "TODO" from "" [2013-01-11 Fri 09:33] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-11 Fri 18:15 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Regressions introduites par Pascal - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -* TODO il ne faut pas générer l'alias de type en ec - - State "TODO" from "" [2013-01-11 Fri 09:41] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-11 Fri 18:15 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Regressions introduites par Pascal - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -file:/tmp/t0.ec - -* TODO y'a un List.fold_left2 qui plante - - State "TODO" from "" [2013-01-11 Fri 10:08] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-16 Wed 16:30 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Regressions introduites par Pascal - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -oops: lus2lic internal error -File "objlinux/l2lExpandNodes.ml", line 131, column 4 -when compiling lustre program should_work/test.lus -file:test/should_work/test.lus -file:~/lus2lic/src/l2lExpandNodes.ml::131 - - -* TODO Ya un probleme avec ce fichier lustre (compilait avant) - - State "TODO" from "" [2013-01-07 Mon 16:20] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-17 Thu 10:57 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Urgent - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -../objlinux/lus2lic should_work/lionel/triSel.lus -en -ei -o /tmp/xxx.lus - -* TODO le -o ne fonctionne plus - SCHEDULED: <2013-01-07 Mon> - - State "TODO" from "" [2013-01-07 Mon 14:28] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-17 Thu 10:57 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Urgent - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -* TODO pb dans la verif de définition unique de variable en mode -en - - State "TODO" from "" [2013-01-11 Fri 09:49] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-17 Thu 10:58 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Regressions introduites par Pascal - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -file:~/lus2lic/testsuite/should_work/heater_control.lus::39 - -* TODO Regression dans le mode -ec - - State "TODO" from "" [2013-01-11 Fri 09:33] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-17 Thu 10:59 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Regressions introduites par Pascal - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -undefined new var : -file:testsuite/should_work/Gyroscope2.lus -file:/home/jahier/lus2lic/testsuite/should_work/deSimone.lus::47 - -var defined twice: -file:/home/jahier/lus2lic/testsuite/should_work/heater_control.lus - -Peut-etre est-ce lié au pb précédent ? plus précisement, peut-etre -que le bug existait mais qu'on ne le voyait pas car tous les noeuds -n'étaient pas générés ? - -Quoiqu'il en soit, c'est interessant de tester tous les noeuds ce que -ne font pas mes scripts tcl en l'état. - -* TODO internal error in l2lExpandArrays.ml with -esa - - State "TODO" from "" [2013-01-18 Fri 10:48] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-18 Fri 18:01 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Regressions introduites par Pascal - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -./lus2lic -esa -o /tmp/ply02.ec should_work/broken/ply02.lus - - oops: lus2lic internal error -File "objlinux/l2lExpandArrays.ml", line 213, column 14 - when compiling lustre program file:test/should_work/broken/ply02.lus - -nb : le mode -en ne marche pas bas bien non plus... - - ./lus2lic -en -o /tmp/ply02.ec should_work/broken/ply02.lus - Error in file "/home/jahier/lus2lic/test/should_work/broken/ply02.lus", line 8, col 2 to 2, token 'o': - Variable o is already defined. - -ok : it was dut to a bug in l2lRmPoly.ml: var types were not susbtituted in "Lic.left". - -* TODO Refaire marcher les tests de non-reg qui sont cassés - SCHEDULED: <2013-01-07 lun.> - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-21 lun. 09:17 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Regressions introduites par Pascal - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -suites aux modifs de Pascal de l'été 2012 - - State "TODO" from "" [2012-10-26 Fri 14:59] - -En fait, ce qui est cassé, c'est surtout le -ec puisqu'il n'a pas -rebranché l'expansion de tableau et de noeud. - -il a fait - - mv tests _tests - - mkdir tests - - cp _tests/Makefile tests - - créer des tests qu'il a mis dans tests... - -* DONE compat pb with array type def - - State "DONE" from "WAITING" [2013-01-21 lun. 09:28] - - State "STARTED" from "WAITING" [2013-01-21 lun. 09:27] - - State "TODO" from "" [2013-01-19 Sat 09:40] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-21 lun. 09:29 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Regressions introduites par Pascal - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: DONE - :END: -file:test/should_work/broken/pfs.lus::43 -./lus2lic -ec -o /tmp/pfs.ec should_work/broken/pfs.lus - Error in file "/home/jahier/lus2lic/test/should_work/broken/pfs.lus", line 43, col 22 to 22, token '[': - syntax error - -It's not clear it should be valid v6: i put it into the to_sort dir. - -* TODO autoriser les , dans les structures ? - - State "TODO" from "" [2013-01-19 Sat 09:56] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-21 lun. 09:30 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Regressions introduites par Pascal - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -./lus2lic -o /tmp/Gyro.out should_work/broken/Gyro.lus - Error in file "/home/jahier/lus2lic/test/should_work/broken/Gyro.lus", line 11, col 42 to 42, token ',': - - -* TODO mixing v6 packages and v4 implicit package does not work. Should it? - - State "TODO" from "" [2013-01-19 Sat 09:36] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-21 lun. 09:32 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Regressions introduites par Pascal - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - ./lus2lic -o /tmp/old_style_and_pack.out should_work/broken/old_style_and_pack.lus -Error in file "/home/jahier/lus2lic/test/should_work/broken/old_style_and_pack.lus", -line 17, col 1 to 4, token 'node': - -file:test/should_work/broken/old_style_and_pack.lus - --> to_sort - -* TODO Mettre le sha dans l'affichage de --version - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-21 lun. 09:40 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Pas dur - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -car c'est plus facile dans git pour retrouver ses petits - - State "TODO" from "" [2012-10-26 Fri 14:59] - -* TODO Changer la facon de numeroter les versions dans lus2lic (faire comme dans lurette) - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-21 lun. 09:43 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Vieux trucs (?) - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - [2010-11-08 Mon] -* TODO Verifier les boucles combinatoires - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-24 Thu 09:13 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Languages issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -quand on genere du ec (car ec2c ne fait pas la verif !) - [2010-06-07 Mon] - -On pourrait peut-etre le faire en modifiant celui la : file:src/l2lCheckOutputs.ml ? - -* TODO pb d'instance de package ??? - - State "TODO" from "" [2013-01-19 Sat 09:43] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-25 Fri 11:25 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Packages, modeles, etc. - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - ./lus2lic -o /tmp/packages.out should_work/broken/packages.lus - ./lus2lic -ec -o /tmp/packages.ec should_work/broken/packages.lus - Error in file "/home/jahier/lus2lic/test/should_work/broken/packages.lus", line 22, col 27 to 29, token 'int': - syntax error - -file:test/should_work/broken/packages.lus::22 - -ok : c'etait juste un pb de syntaxe (depuis toujours vraisemblablement...) - -* TODO instanciation de noeuds ne marche pas ? - - State "TODO" from "" [2013-01-19 Sat 10:02] - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-29 Tue 09:37 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Packages, modeles, etc. - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -./lus2lic -o /tmp/multipar.out should_work/broken/multipar.lus -file:test/should_work/broken/multipar.lus::20 - Error in file "/home/jahier/lus2lic/test/should_work/broken/multipar.lus", line 20, col 12 to 12, token 'g': - unknown node: g - known nodes are: sil, bok, gup, lis - -FAIL: without any option: ./lus2lic { -o /tmp/multipar.out should_work/broken/multipar.lus} -* TODO Condact is not working - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-29 Tue 16:31 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Languages issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - file:test/should_work/broken/cond01.lus - - State "TODO" from "" [2013-01-18 Fri 23:18] - ./lus2lic -ec -o /tmp/cond01.ec should_work/broken/cond01.lus - - oops: lus2lic internal error - File "objlinux/l2lExpandMetaOp.ml", line 310, column 4 - when compiling lustre program should_work/broken/cond01.lus - -* TODO Merge is not working - :PROPERTIES: - :ARCHIVE_TIME: 2013-01-31 Thu 17:52 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Languages issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -./lus2lic should_work/broken/merge.lus -file:test/should_work/broken/merge.lus::7 - -* TODO fix unresolved tests (timeout -> performance bugs) - - State "TODO" from "" [2013-01-11 Fri 11:04] - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-04 Mon 21:33 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Testing process - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -par ex, file:./test/should_work/ec.lus prend un temps infini alors -qu'il n'est pas si gros (y'a 500 variables, mais bon). bon, en fait -il prend 26 secondes, ce qui n'est pas infini, mais bien long tout de -meme. - -nb: c'était deja le cas avant les changements de Pascal. - -cf file:test/lus2lic.gprof -69% du temps est passé dans unify clock !!!!! - -J'ai l'impression que c'est lié au fait que ce programme ne definit -que des contantes. Or les constantes sont potentiellement sur -n'importe quelle horloge, ce qui fait que l'algo manipule un gros paquet -de 'clock_var of int' et que l'on passe beaucoup de temps à faire des -apply_substs2 - -cf file:test/perf/ contenant les resultats de gprof et ocamlprof sur ec.lus - ------> ca y est, j'ai trouvé : encore une histoire de Verbose pas lazy !!! - -* TODO Certains programmes dans should_fail n'echouent qu'en ec (ou bien c'est ec2c) ou l'inverse - - State "TODO" from "STARTED" [2013-01-23 Wed 18:26] - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-06 Wed 16:09 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Testing process - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -du coup les stats sont un peu fausses. a revoir. - -* TODO on devrait se passer de 'static_arg list' pour le champ =PREDEF_CALL= - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-06 Wed 17:06 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Aesthetes issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -(c'est censé marcher) -cf file:./src/lic.ml::206 - - State "TODO" from "" [2012-10-26 Fri 14:59] - - -* TODO le Eff.WITH (aka if statique) n'a pas lieu d'être ! - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-06 Wed 17:57 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Aesthetes issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -y virer !! - - State "TODO" from "" [2012-10-26 Fri 14:59] - -* TODO const_to_val_eff n'a vraiment rien à faire dans UnifyClock !!! - - - State "TODO" from "" [2013-01-29 Tue 14:26] - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-07 Thu 09:42 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Aesthetes issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -file:src/unifyClock.ml::271 - -mouarf, pourquoi pas en fait. - -* TODO aucune fonction dans Lic.*_to_string ne devrait dependre des options de compil - - State "TODO" from "" [2013-02-01 Fri 17:54] - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-07 Thu 09:54 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Aesthetes issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -cf le XXX file:src/lic.ml::655 - -* TODO Rajouter le with à la caml pour les structures - - State "TODO" from "" [2012-10-26 Fri 14:59] - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-07 Thu 16:10 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Languages issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -main peut-on l'appeller with ? -file:test/should_work/struct_with.lus - - -* TODO Refaire une passe pour virer une fois pour toute cette histoire d'idref dans Eff. - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-13 Wed 09:22 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Aesthetes issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - cf file:/~/lus2lic/src/lic.ml::189 -QU: Pascal l'a fait ? - - -En fait, il y a 3 types d'idents -- long : - + pack+nom - + Sert à dénoter les items (node/type/const) externes au pack courant - -- t : - + juste le nom - + Sert à dénoter les items locaux au pack courant + les variables - -- idref : - + le pack est en option - + utile dans les premieres phases de la compil - + actuellement utilisé comme machin pour ranger des trucs dont on - ne sait pas trop s'il s'agit d'Ident.t ou Ident.long et qui - permet d'entretenir une espece de flou désagréable dans le code - et mon esprit... - - -les idref sont sensé disparaitre une fois que tous les problemes -d'identificateurs ont été résolu (ce qui n'est pas le cas -actuellement). - -Le Lic.id_solver est là pour résoudre les ident.t ; bizzarement, il -prend en entrée ces fameux idref que je voudrais voir disparaitre de -Lic. - -Le truc, c'est que cet id_solver permet aussi de récuperer des infos -sur les long, d'ou le idref qui est plus versatile... - -sol 1 : dupliquer id2const, id2type, etc et créer des long2const, etc. -du coup, plus d'idref ! - -* TODO Définir les fonctions de UglyStuff proprement - - State "TODO" from "" [2012-12-10 Mon 16:38] - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-13 Wed 09:23 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Aesthetes issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -file:~/lus2lic/src/uglyStuff.ml -bon j'y ai mis dans IdSolver ; c'est pas si choquant maintenant que -ces fonctions ne sont plus dans Lic. - -* TODO definir un Lic.STRUCT_WITH plutot que de passer par un type option - - State "TODO" from "" [2013-02-12 Tue 18:32] - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-13 Wed 09:31 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Aesthetes issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -* TODO Mettre tout les val_exp dans les operand dans Lic - - State "TODO" from "" [2013-02-12 Tue 18:30] - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-13 Wed 11:16 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Aesthetes issues - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -XXX essayer de virer le constructeur Oper qui n'a pas l'air de servir à grand chose -* STARTED Intégrer le résultat de mly2bnf dans le manuel - :PROPERTIES: - :ARCHIVE_TIME: 2013-02-13 Wed 14:15 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Divers - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: STARTED - :END: -* TODO tableaux (hat, array, etc) - - State "TODO" from "" [2013-03-19 Tue 10:33] - :PROPERTIES: - :ARCHIVE_TIME: 2013-03-22 Fri 10:25 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -* TODO diese et nor - - State "TODO" from "" [2013-03-30 Sat 14:31] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-02 Tue 10:21 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -* TODO meta operateurs - - State "TODO" from "" [2013-03-19 Tue 10:33] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-02 Tue 10:37 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -* TODO when, current - - State "TODO" from "" [2013-03-19 Tue 10:33] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-03 Wed 08:50 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -* TODO merge - - State "TODO" from "" [2013-03-19 Tue 10:33] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-05 Fri 15:13 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -* TODO fby - - State "TODO" from "" [2013-04-04 Thu 17:10] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-05 Fri 15:13 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -* TODO condact - - State "TODO" from "" [2013-03-19 Tue 10:33] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-05 Fri 17:23 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - - -* TODO Traiter la fleche plus proprement. - - State "TODO" from "" [2013-04-02 Tue 08:33] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-08 Mon 13:07 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -En fait il me suffirait de m'inspirer de ce que j'ai fait dans le condact -avec la variable "first_instant" !!! - -* TODO Translate the fby properly into a soc - - State "TODO" from "" [2013-04-04 Thu 17:10] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-08 Mon 13:07 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -vs "-> pre" as it is done actually in file:~/lus2lic/src/ast2lic.ml::468 - -* TODO slice - - State "TODO" from "" [2013-04-05 Fri 11:18] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-08 Mon 13:27 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -* TODO Unifier les modules Data de Lustre V6 et Lutin - - State "TODO" from "" [2013-04-02 Tue 08:33] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-17 Wed 10:52 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -ie. rajouter les tableaux, struct, et enum en lutin quitte à ne pas s'en servir -tout de suite. - -Ca va facilité l'utilisation sans duplic de code du module rif_base -* TODO revoir l'intégration à rif_base et genlex - - State "TODO" from "" [2013-03-19 Tue 10:25] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-17 Wed 10:52 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -* TODO Integrer ce mode -exec dans lurette, à la facon dont je l'ai fait pour Lutin - - State "TODO" from "" [2013-03-30 Sat 14:35] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-17 Wed 10:53 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -Question : comment j'integre ? via un lus2lic.a ? - -file:~/lurette/source/common/lustreRun.mli - -* TODO Trouver un moyen d'automatiser des tests - - State "TODO" from "" [2013-03-19 Tue 10:35] - :PROPERTIES: - :ARCHIVE_TIME: 2013-04-23 Tue 16:54 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -via lurette ? -en comparant le mode -exec avec le résultat obtenu via ec puis ec2c - -faudrait rajouter une option dans lurette qui, en cas de variables -manquantes, genere le programme lutin qui va bien (loop true) plutot -que de lancer luciole - -Un truc de ce gout là semble fonctionner : - - - ./lus2lic _trivial3_condact_oracle.lus -n trivial3_condact_oracle -ec > trivial3_condact_oracl - - -./lus2lic trivial3.lus -n trivial3_condact --gen-autotest -./lus2lic trivial3.lus -n trivial3_condact -ec >> _trivial3_condact_oracle.lus -./lus2lic _trivial3_condact_oracle.lus -n trivial3_condact_oracle -ec > trivial3_condact_oracle.ec -~/lurette/bin/lurettetop -rp "sut:v6:trivial3.lus:trivial3_condact" -rp "env:lutin:_trivial3_condact_env.lut" -rp "oracle:ec:trivial3_condact_oracle.ec:" -go - -Reste à l'integrer dans file:test/lus2lic.tests/non-reg.exp - -* TODO assert violation ~/lus2lic/src/socExecValue.ml::239 - - State "TODO" from "" [2013-05-10 Fri 17:38] - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-14 Tue 16:38 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - ../utils/test_lus2lic_no_node should_work/X3.lus - -* TODO assert violation ~/lus2lic/src/socExecValue.ml::267 - - State "TODO" from "" [2013-05-10 Fri 17:38] - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-16 Thu 09:06 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -../utils/test_lus2lic_no_node should_work/is_stable.lus - -* TODO oops: lus2lic internal error - - State "TODO" from "" [2013-05-14 Tue 14:35] - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-16 Thu 13:50 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - File "objlinux/lic2soc.ml", line 648, column 14 - -./lus2lic should_work/noeudsIndependants.lus -n noeudsIndependants --gen-autotest -np - -C'est parce que il y a un clash avec Lustre::gt qui est polymorphe, -et donc l'alias vers gt ne genere pas de code... - -Il faudrait vraiment que je trouve un moyen de ne pas remplir les tables avec -le contenu du module Lustre de facon strict (ie, le faire lazy !!) - -cf file:src/licTab.ml::68 - -Bon, finalement, j'oblige les gens a ecrire Lustre::gt et puis ca marre. - -* TODO oops: lus2lic internal error - - State "TODO" from "" [2013-05-10 Fri 17:46] - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-21 Tue 09:31 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - File "objlinux/lic2soc.ml", line 680, column 18 - when compiling lustre program should_work/morel3.lus --> It was due to a bad handling in slices apprearinf at the lhs od equations. -* TODO pb avec -en sur programme avec des when - - State "TODO" from "" [2013-05-21 Tue 11:10] - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-21 Tue 17:30 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Divers - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - ./lus2lic _ck5_oracle.lus -n ck5_oracle -en - -* oops: lus2lic internal error - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-31 Fri 13:55 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :END: - File "objlinux/data.ml", line 114, column 15 - when compiling lustre program should_work/left.lus - - ./lus2lic should_work/left.lus -exec - -* oops: lus2lic internal error - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-31 Fri 13:56 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :END: - File "objlinux/data.ml", line 114, column 15 - when compiling lustre program should_work/left.lus - - ./lus2lic should_work/left.lus -exec - -* TODO oops: lus2lic internal error - - State "TODO" from "" [2013-05-10 Fri 18:05] - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-31 Fri 13:56 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - File "objlinux/lic2soc.ml", line 680, column 18 - when compiling lustre program should_work/left.lus - - -* TODO internal error - - State "TODO" from "" [2013-05-10 Fri 17:19] - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-31 Fri 15:52 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - File "objlinux/unifyType.ml", line 106, column 3 - ../utils/test_lus2lic_no_node should_work/t1.lus - -file:src/unifyType.ml::110 - -* TODO Fix a bug occurring using -en and -esa together. - - State "TODO" from "" [2013-04-24 Wed 09:22] - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-31 Fri 16:10 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Testing process - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -#+begin_src sh -./lus2lic _assertion_oracle.lus -n assertion_oracle -en -esa -#+end_src - -** Error in file "/home/jahier/lus2lic/test/_assertion_oracle.lus", line 38, col 3 to 7, token 'v02_1': -** -** Variable _0v02_1_1 is already defined. -#+end_src - --> on verra ca quand les autres test passeront ; je ferai alors une passe -complete qur le nommage des variables fraiches. - - -* Performances - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-31 Fri 16:24 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_CATEGORY: lv6 - :END: -Ceux là sont particulierement long (dont certains vraiment sans raison) -en fait, quand ecexe se plante (oracle), il bloque tout le monde... - - - -# of unresolved testcases 12 - -../utils/test_lus2lic_no_node should_work/assertion.lus -../utils/test_lus2lic_no_node should_work/normal.lus -../utils/test_lus2lic_no_node should_work/Gyroscope2.lus - ../utils/test_lus2lic_no_node should_work/ELMU.lus - ../utils/test_lus2lic_no_node should_work/aux.lus -../utils/test_lus2lic_no_node should_work/X1.lus -../utils/test_lus2lic_no_node should_work/alarme.lus -../utils/test_lus2lic_no_node should_work/onlyroll2.lus -../utils/test_lus2lic_no_node should_work/integrator.lus -../utils/test_lus2lic_no_node should_work/over2.lus - - -* WAITING Ya un probleme avec ce fichier lustre (compilait avant) - - State "WAITING" from "STARTED" [2013-01-17 Thu 10:48] - - State "STARTED" from "TODO" [2013-01-17 Thu 10:48] - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-31 Fri 17:05 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Pas clair - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: WAITING - :END: -file:test/should_work/call/call04.lus - -il semble y avoir une confusion entre parametre et arguments lors -d'appels de noeuds définis via des itérateurs de tableau - -idem pour -file:test/should_work/fab_test/morel2.lus -et pleins d'autres. hm, y'aurait pas d'itérateurs dans celui la. - --> ok : c'était à de l2lAliasType (que j'ai déranché du coup) qui -faisait que les types lic n'étaient plus uniques et du coup les -substitutions dans l'expansion des noeuds ne se faisaient plus -correctement. - -je met en attente en attendant de savoir ce qu'on fait de ce module. -moi j'ai bien envie de virer AbstractType de Lic.type_. En effet, j'avais -fait attention à tous les virer pour éviter les soucis, mais le plus -propre c'est d'y virer vraiment. - -Pascal lui, s'en est servi pour faire des types alias, alors que ca -n'est pas fait pour. Cela dit, si on créé des types alias, on risque -d'avoir le meme genre de soucis. A quoi ca sert d'avoir de tels types -? pour moi le role de la compil ca serait plutot de les virer que de -les rajouter, mais bon. A discuter. cf point d'apres - -* TODO Les assertions qui echouent font planter les tests : reflechir a une parade - :PROPERTIES: - :ARCHIVE_TIME: 2013-05-31 Fri 17:21 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Divers - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -car apres tout, c'est voulu dans le prog, et ca n'est donc pas un pb du compilo - - - State "TODO" from "" [2013-05-31 Fri 16:30] - ../utils/test_lus2lic_no_node should_work/assertion.lus - ../utils/test_lus2lic_no_node should_work/drapfab.lus - ../utils/test_lus2lic_no_node should_work/s.lus - ../utils/test_lus2lic_no_node should_work/eq1.lus - ../utils/test_lus2lic_no_node should_work/lecteur.lus - ../utils/test_lus2lic_no_node should_work/alarme.lus - -* TODO pb gen-autotest - - State "TODO" from "" [2013-06-03 Mon 09:51] - :PROPERTIES: - :ARCHIVE_TIME: 2013-06-03 Mon 09:57 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -../utils/test_lus2lic_no_node should_work/plus.lus - + ./lus2lic _plus_oracle.lus -n plus_oracle -lv4 -eei -en --no-prefix -o lv4_plus_oracle.lus - - Error in file "/home/jahier/lus2lic/test/_plus_oracle.lus", line 6, col 28 to 28, token '=': - tuple size error: - the tuple size is - 4 for the left-hand-side, and - 1 for the right-hand-side (in c_bis,d_bis,e_bis,f_bis = a + b) - -et aussi : -../utils/test_lus2lic_no_node should_work/bred.lus -../utils/test_lus2lic_no_node should_work/alias.lus -../utils/test_lus2lic_no_node should_work/bred_lv4.lus -../utils/test_lus2lic_no_node should_work/minus.lus - -* TODO il reste des pbs de portée de nom - - State "TODO" from "" [2013-06-03 Mon 09:56] - :PROPERTIES: - :ARCHIVE_TIME: 2013-06-03 Mon 10:21 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - ./lus2lic should_work/myplus.lus -n plus -ec -../utils/test_lus2lic_no_node should_work/minus.lus - -* TODO Lurette trouve un mismatch sur ce prog au step 0 - - State "TODO" from "" [2013-05-10 Fri 17:08] - :PROPERTIES: - :ARCHIVE_TIME: 2013-06-04 Tue 10:15 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -../utils/test_lus2lic_no_node should_work/mapiter.lus -../utils/test_lus2lic_no_node should_work/arrays.lus -../utils/test_lus2lic_no_node should_work/nested.lus -../utils/test_lus2lic_no_node should_work/matrice.lus -../utils/test_lus2lic_no_node should_work/mapdeRed.lus -../utils/test_lus2lic_no_node should_work/over2.lus -../utils/test_lus2lic_no_node should_work/predefOp.lus -file:test/should_work/predefOp.lus - -* TODO Lurette trouve un mismatch sur ce prog au step 2 - - State "TODO" from "" [2013-05-10 Fri 17:08] - :PROPERTIES: - :ARCHIVE_TIME: 2013-06-04 Tue 14:16 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -../utils/test_lus2lic_no_node should_work/cond01.lus - -* TODO - - State "TODO" from "" [2014-06-16 Mon 08:59] - :PROPERTIES: - :ARCHIVE_TIME: 2014-06-16 Mon 10:50 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - - lus2lic -exec should_work/map.lus -n pbmap -ne prend pas en compte la valeur du pre - -* TODO Lurette trouve un mismatch sur ce prog au step 7 - - State "TODO" from "" [2013-05-10 Fri 17:08] - :PROPERTIES: - :ARCHIVE_TIME: 2014-06-16 Mon 11:00 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - - ../utils/test_lus2lic_no_node should_work/call07.lus - -file:test/should_work/call07.lus - -* TODO pb en utilisant -2c et -esa en meme temps - - State "TODO" from "" [2014-07-04 Fri 16:16] - :PROPERTIES: - :ARCHIVE_TIME: 2014-07-10 Thu 10:17 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -2C - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - - lus2lic should_work/modes3x2_v4.lus -n modes3x2_v4 -esa -o xxx -2c - -* TODO Lurette trouve un mismatch sur ce prog au step 1 - - State "TODO" from "" [2013-05-10 Fri 17:08] - :PROPERTIES: - :ARCHIVE_TIME: 2014-08-07 Thu 12:27 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -../utils/test_lus2lic_no_node should_work/pipeline.lus - -file:test/should_work/pipeline.lus - -* TODO Lurette trouve un mismatch sur ce prog au step 6 - - State "TODO" from "" [2013-05-10 Fri 17:08] - :PROPERTIES: - :ARCHIVE_TIME: 2014-08-07 Thu 12:27 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -file:test/should_work/deSimone.lus - -../utils/test_lus2lic_no_node should_work/deSimone.lus - -* TODO Lurette trouve un mismatch sur ce prog au step 2 - - State "TODO" from "" [2013-05-10 Fri 17:08] - :PROPERTIES: - :ARCHIVE_TIME: 2014-08-07 Thu 12:27 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -../utils/test_lus2lic_no_node should_work/test.lus - -file:test/should_work/test.lus - -* TODO le traitement du condact ne marche plus - - State "TODO" from "" [2014-06-27 Fri 15:26] - :PROPERTIES: - :ARCHIVE_TIME: 2014-08-07 Thu 16:15 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: lus2lic -exec - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -depuis le 2eme commit du 18-06-2014 - - lus2lic should_work/test_condact.lus -n test_condact -exec - - -once the activation condition has been true, and when it is false it -returns the default value instead of the previous one. -* TODO Use severale machine to launch tests in paralell - - State "TODO" from "" [2014-08-14 Thu 11:23] - :PROPERTIES: - :ARCHIVE_TIME: 2014-08-22 Fri 10:38 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Testing process - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -* TODO Traiter TOUS les warnings !!! - - State "TODO" from "" [2014-08-13 Wed 17:33] - :PROPERTIES: - :ARCHIVE_TIME: 2014-08-26 Tue 10:19 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Divers - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -* TODO lus2lic genere du ec mal typé !! - - State "TODO" from "" [2013-05-10 Fri 17:24] - :PROPERTIES: - :ARCHIVE_TIME: 2014-09-03 Wed 11:04 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Testing process - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - - ../utils/test_lus2lic_no_node should_work/predef03.lus - -* TODO pour ceux la ils suffit d'expanser. Comment eviter que les tests echouent ? - :PROPERTIES: - :ARCHIVE_TIME: 2014-09-03 Wed 11:04 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Testing process - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -- lus2lic -2c should_work/activation2.lus -n activation2 -- lus2lic -2c should_work/activation1.lus -n activation1 -- lus2lic -2c should_work/asservi.lus -n asservi -- lus2lic -2c should_work/speedcontrol.lus -n speedcontrol -* TODO pb d'horloge - - State "TODO" from "" [2014-08-13 Wed 17:33] - :PROPERTIES: - :ARCHIVE_TIME: 2014-09-03 Wed 11:07 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Divers - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -#+BEGIN_SRC lustre -node xxx(x:int;c:bool) returns (res1,res2:int); -var - y:int when c; - k:int when c; -let - y = x when c; - k = (0 fby (k+1)) when c ;-- erreur ici, alors que ca semble bon - res1 = current(y); - res2 = current(k); -tel -#+END_SRC - -clock error: ' on c on base' is not a sub-clock of ' on base' -en plus le message est bizzare - -D'une maniere generale, les messages d'erreur en cas de pb d'horloge sont vraiment mauvais. - --> non, en fait, le when c ne sert a rien piur definir le k. -* TODO msg d'erreur un peu mauvais sur ce programme - :PROPERTIES: - :ARCHIVE_TIME: 2014-09-03 Wed 11:11 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Divers - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -#+begin_src lustre -node argos_oracle(a:bool;b:bool;s0:bool;s1:bool;s2:bool) returns(ok:bool;s0_bis:bool;s1_bis:bool;s2_bis:bool); -let - (s0_bis,s1_bis,s2_bis) = argos(a,b); -s0=s0_bis; - s1=s1_bis; - s2=s2_bis; -tel; -#+end_src - --> ah bon ? bof. - -* TODO ce noeud ne compile pas en mode -ec - - State "TODO" from "" [2013-04-17 Wed 15:51] - :PROPERTIES: - :ARCHIVE_TIME: 2014-09-03 Wed 11:12 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Divers - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -#+begin_src lustre -node trivial3(e: int ^2) returns (x: int ^6); -var - c: int ^6; -let - c = e|e|e; - x[0..2] = c[3..5]; - x[3..5] = c[0..2]; - -tel -#+end_src - --> maintenant si - -* TODO pb en mode -esa avec les itérateurs - - State "TODO" from "" [2014-06-05 Thu 10:00] - :PROPERTIES: - :ARCHIVE_TIME: 2014-09-03 Wed 11:14 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Divers - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: -lus2lic should_work/minus.lus -n minus -esa -lus2lic should_work/normal.lus -n normal -esa - --> plus maintenant - -* TODO divergence -exec et -2c (1) - - State "TODO" from "" [2014-07-11 Fri 12:02] - :PROPERTIES: - :ARCHIVE_TIME: 2014-09-04 Thu 14:42 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: Failures spotted by non reg tests (13) - :ARCHIVE_CATEGORY: lv6 - :ARCHIVE_TODO: TODO - :END: - -grep "FAIL:" lus2lic*.log | grep "exec" | grep "\-2c" | sed s/'FAIL: Try to compare lus2lic -exec and -2c:'/-/ - -1) ../utils/compare_exec_and_2c should_work/PCOND.lus 48319 - Failure occured in lurette: The oracle first output should be a bool; - but ok has type nil - -* A option to inline the simple nodes such as AND, OR, NOT etc. - :PROPERTIES: - :ARCHIVE_TIME: 2014-10-01 Wed 17:31 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: a classer/Willie's wishes - :ARCHIVE_CATEGORY: lv6 - :END: - -* The expansion of nodes with -efn --expand-following-nodes [easy] - :PROPERTIES: - :ARCHIVE_TIME: 2014-10-02 Thu 14:54 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: a classer/Willie's wishes - :ARCHIVE_CATEGORY: lv6 - :END: - -the current available options are: - --en, --expand-nodes - Expand the main node (use the first node if no one is -specified). --den, --do_not-expand-nodes <string> - Do not expand the specified node (meaningful with -en only of -course). - -It might be better if another option such as -efn --expand-following-nodes -<string> -The nodes which are not in the string will not be expanded. - -* Generate a copy of memcpy and replace the sizeof operator with the actual size of the structure. - :PROPERTIES: - :ARCHIVE_TIME: 2014-10-02 Thu 17:54 - :ARCHIVE_FILE: ~/lus2lic/todo.org - :ARCHIVE_OLPATH: a classer/Willie's wishes - :ARCHIVE_CATEGORY: lv6 - :END: - - It seems that the "assert" operator will generate "array" structure - where the number of the element depending on the number of the - arguments to the "assert". The generated C code tries to make a - copy of this structure with memcpy and giving - sizeof(the_structure_to_copy) as the argument. - - Since OTAWA does not handle memcpy, could you generate a version of - memcpy (contains a for loop) for each memcpy call. (Or just to - paste the for loop to replace the memcpy call), while the iteration - count of the for loop is given (in actual value) so that ORANGE can - handle it..... - - -je comprend pas tout, mais ce que je retiens, c'est de remplacer les memcpy -par des appels a des fonctions (ou des macros) qui par default utiliseraient -des memcpy - -genre - - _assign_ip2(ctx.x, ctx.y); - -#+BEGIN_SRC C -#ifndef _assign_ip2 -#define _assign_ip2(dest, source) memcpy(dest, source, sizeof(dest)) -#endif -#+END_SRC - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rundbg b/utils/rundbg similarity index 100% rename from rundbg rename to utils/rundbg -- GitLab