IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Sepi Discussion :

Mises à jour régulières de Sepi


Sujet :

Sepi

  1. #41
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Mise à jour du zip Sepi.zip ainsi que EssaisSepi.zip, avec les premières bases de l'interpréteur Sepi

    Pour tester, exécuter d'abord une fois comme c'est présenté pour créer les unités externes. Puis retirer le . dans {.$DEFINE LOAD2} dans le .dpr pour exécuter ces unités.

    Ca doit donc donner :
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    program EssaisSepi;
     
    {$APPTYPE CONSOLE}
     
    {.$DEFINE LOAD1}
    {$DEFINE LOAD2}
    Les quelques premières lignes affichées sont le résultat de l'exécution de routines Sepi par l'interpréteur

    Voir l'unité TestRuntime pour les détails

    Ne répondez 'Y' à la question que si vous redirigez la sortie standard vers un fichier, sinon vous allez perdre du temps pour rien Cela affiche une quantité astronomique de renseignements sur tous les types/variables/méthodes de toutes les unités les plus importantes de la RTL et VCL Mais ça ça le faisait déjà avant ; la nouveauté c'est ce que j'ai indiqué ci-dessus.
    Revision: 164
    ----
    - Suppression de l'unité SepiValues.pas, qui n'a jamais été utile depuis le début ;
    - Ajout de 5 unités dans le package SepiInterpreter, ce qui constitue les premières bases de l'interpréteur Sepi.

    Revision: 163
    ----
    - Ajout dans TSepiMethod d'une propriété CodeHandler, indiquant un objet quelconque, celui qui gère l'exécution de la méthode : elle peut être utilisée pour optimiser des appels entre deux méthodes utilisant le même type de gestionnaire d'exécution ;
    - Ajout dans TSepiType d'une propriété ResultBehavior, qui spécifie comment est renvoyée une valeur de ce type ;
    - Ajout dans TSepiParamCallInfo d'un champ supplémentaire, SepiStackOffset, indiquant l'offset dans la pile selon les modifications de l'interpréteur Sepi (cela revient uniquement à placer les registres utilisés dans register au sommet de la pile).

    Revision: 162
    ----
    Ajout d'une classe TAbsoluteMemoryStream dans ScClasses.pas.

    Revision: 161
    ----
    Amélioration de ScCoroutines.pas : la taille de pile minimum est réduite à deux fois la taille de page du système (en général 2*4096 donc), plutôt que 64 Ko.

    Revision: 160
    ----
    Ajout de quatre unités dans la SCL : ScClasses.pas, ScCoroutines.pas, ScEnumerators.pas et ScPipes.pas, qui constituent des fonctionnalités de coroutines, d'énumérateurs et de pipes.

    Revision: 159
    ----
    La SCL (et la SCL seulement) passe sous license GPL avec l'exception Classpath.

    Revision: 158
    ----
    La SCL (et la SCL seulement) passe sous license GPL avec l'exception Classpath.

    Revision: 157
    ----
    Ajout des informations de licence GNU General Public License.

    Revision: 156
    ----
    TSepiMethodSignature renommée en TSepiSignature.

    Revision: 155
    ----
    Extension de SetBit/ClearBit/ToggleBit/TestBit pour supporter n'importe quel type de valeur (paramètre non typé) et des indices de bits supérieurs à 255.

    Revision: 154
    ----
    Toutes les références à DeclareUnit de Pascal Script ont été supprimées : le support des unités n'est pas activé par défaut dans Pascal Script.

    Revision: 153
    ----
    TSepiParam descend maintenant de TObject. Les paramètres sont possédés et enregistrés/chargés par la signature.

    Revision: 152
    ----
    TSepiUnit descend maintenant de TSepiMeta et non plus de TSepiType.

    Revision: 151
    ----
    Revues mineures dans SepiPS.

    Revision: 150
    ----
    sizeof remplacé par SizeOf.

    Revision: 149
    ----
    Remise en forme du code selon les conventions adoptées par CodeGear (partie 3 - fin).

    Revision: 148
    ----
    Remise en forme du code selon les conventions adoptées par CodeGear (partie 2).

    Revision: 147
    ----
    Remise en forme du code selon les conventions adoptées par CodeGear (partie 1).

    Revision: 146
    ----
    Quelques revues du code du package SepiPS, en profitant de nouvelles améliorations de Sepi.

    Revision: 145
    ----
    Révision des informations de version de tous les packages et programmes.

    Revision: 144
    ----
    Encore une revue dans le traitement des paramètres :
    - Le paramètre caché Result n'est plus créé que si il est effectivement transmis en tant que paramètre (par adresse) ;
    - Réécriture de TSepiMethodSignature.MakeCallInfo, avec une nouvelle correction de register.

    Revision: 143
    ----
    Toutes les classes TSepiMetaXXX ont été renommées en TSepiXXX. Excepté TSepiMeta et TSepiMetaList : il faut encore leur trouver un nom.

    Revision: 142
    ----
    Correction du traitement des méthodes register.

    Revision: 141
    ----
    Correction de MakeProcOfRegisterMethod et MakeProcOfCDeclMethod.

    Revision: 140
    ----
    L'usage de TlsAlloc et Co. dans ScDelphiLanguage.pas a été remplacé par une variable threadvar.

    Revision: 139
    ----
    Modification des uses dans SepiImports et SepiAddons pour refléter les changements de la révision précédente.

    Revision: 138
    ----
    Intégration dans le trunk des modifications de l'expérimental reflexion-non-meta, range r131-r133.

    Revision: 127
    ----
    Ajoute d'une propriété IsEmpty dans TCustomValueBucketList.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  2. #42
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Mise à jour deux mêmes zip avec prise en charge des variables locales et des paramètres qui requièrent une initialisation (genre string avec son comptage des références).
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  3. #43
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Mis à jour avec une routine travaillant sur une instance de TStrings, et donc testant les appels de méthodes virtuelles

    Note : j'ai remarqué que mon interpréteur ne prenait pas du tout en compte la convention d'appel safecall, ni en appels entrant, ni en appels sortant. Le support de cette convention d'appel sera pour plus tard, quand ce qui est plus important que ça fonctionnera
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  4. #44
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Re-mise à jour avec une routine qui cette fois instancie, utilise et libère une string list. Elle appelle également une routine qu'on lui passe en paramètre par pointeur de procédure.

    Voici les logs Subversion depuis les derniers que j'ai montrés :
    Revision: 170
    ----
    - Ajout de trois OpCodes permettant de lire les RTTI d'un type, la classe Delphi (TClass) d'une classe, et le code d'une méthode ;
    - Correction de SepiOutCalls.pas pour l'appel de constructeur (qui ont un ResultBehavior égal à rbNone bien que renvoyant quelque chose) ;
    - Correction des OpCodes BasicCall et SignedCall, qui étaient tout à fait invalides.

    Revision: 169
    ----
    Support des appels de méthodes d'interfaces.

    Revision: 168
    ----
    Revue du système d'adressage des variables, qui est maintenant beaucoup plus puissant. On peut faire beaucoup plus d'opérations en une seule instruction, comme par exemple : aller chercher un champ de la VMT d'un objet élément indexé par une variable d'un tableau statique local.

    Revision: 167
    ----
    - Changement dans les OpCodes des CALL, pour mieux prendre en compte les différents cas de figure (pointeurs de fonctions et fonctions virtuelles/dynamiques en particulier) ;
    - Prise en compte dans l'interpréteur des paramètres passés par valeur, ayant les contraintes de recopie en local ou de finalisation.

    Revision: 166
    - Ajout de la routine de compiler magic AddRef (alias de @AddRefArray) dans ScCompilerMagic.pas ;
    - Ajout d'une propriété SafeResultBehavior dans TSepiType, permettant de simplifier les écritures avec des procédures (résultat nil) ;

    Revision: 165
    ----
    Prise en charge des variables locales qui requièrent une initialisation dans l'interpréteur.
    Va être temps que je me mette à écrire un assembleur, parce que les tests commencent à être longs à écrire à la main en Byte-Code
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  5. #45
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Nouvelle mise à jour, avec support des opérateurs is et as (facile), mais surtout avec support des exceptions et des gestionnaires d'exceptions try-finally et try-except

    Maintenant l'interpréteur possède tout ce qui lui est essentiel. S'il faut ajouter quelque chose, ce sera des "instructions de haut niveau", et ça se fera en quelques minutes. Par exemple, je vais probablement ajouter des instructions pour les opérations sur les ensembles, et d'autres pour les routines les plus importantes sur les tableaux et les chaînes de caractères.

    Je rappelle que si vous avez la flemme de télécharger des zip pour voir à quoi ressemble le code, vous pouvez consulter le browser Subversion. Les sources du tronc commun de Sepi sont là :
    http://sepi.svn.sourceforge.net/view...nk/source/run/
    Et l'interpréteur est là :
    http://sepi.svn.sourceforge.net/view...piInterpreter/


    J'ai aussi joint l'unité TestRuntime.pas qui est dans le projet EssaisSepi.
    Fichiers attachés Fichiers attachés
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  6. #46
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Nouvelle mise à jour, avec un désassembleur minimal et un moyen d'attacher un débogueur à une unité d'exécution Sepi.

    Le projet EssaisSepi montre maintenant par défaut une sortie "déboguée", qui affiche toutes les instructions exécutées juste avant qu'elles ne soient exécutées.
    Vous pouvez activer la directive de compilation DEBUGGER_WAITS, en haut de TestRuntime.pas, et alors vous devrez appuyer sur Enter pour faire s'exécuter chaque instruction.
    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    unit TestRuntime;
     
    {$DEFINE USE_DEBUGGER}
    {.$DEFINE DEBUGGER_WAITS}
     
    interface
    C'est la base d'un débogueur très minimaliste, mais qui au moins permet de voir très vite quelle instruction Sepi se plante, plutôt que quelle instruction Delphi
    Revision: 177
    ----
    Ajout dans le paquet SepiInterpreter d'une unité SepiDisassembler.pas, qui propose un désassembleur Sepi minimal.

    Revision: 176
    ----
    Ajout de la possibilité d'ajouter un événement de débogage à un une unité d'exécution Sepi. Cet événement est déclenché avant l'exécution de chaque instruction Sepi, avec les informations de contexte d'exécution Sepi en paramètre.

    Revision: 175
    ----
    Quelques constantes et champs rendus accessibles depuis l'extérieur dans l'interpréteur.

    Revision: 174
    ----
    Ajout d'un OpCode MultiOn permettant de faire tous les tests "on" d'une exception en une fois, ce qui est d'une part plus facile pour le compilateur, et d'autre part plus rapide à l'exécution.

    Revision: 173
    ----
    Revue complète des gestionnaires d'exception : plus simple, plus logique et plus sûr. Le précédent était une bêtise par rapport à ça.

    Revision: 172
    ----
    Correction des gestionnaires d'exceptions except.
    Revision: 171
    ----
    - PrepareParams légèrement amélioré (ne réalloue pas systématiquement ce qu'il a déjà alloué) ;
    - Support des opérateurs is et as ;
    - Support des exceptions et des gestionnaires d'exceptions try-except et try-finally.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  7. #47
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Nouvelle mise à jour avec des instructions CALL plus évoluées, plus facile à interpréter et à compiler.
    Par ailleurs, l'interpréteur n'alloue désormais plus jamais de mémoire sur le tas durant l'exécution, ce qui est un bon point en matière de rapidité d'exécution
    Revision: 182
    ----
    Dans l'interpréteur Sepi, les instances de TSepiRuntimeContext et TAbsoluteMemoryStream sont allouées sur la pile par TSepiRuntimeMethod.Invoke, comme s'il s'agissait de records avancés. Cela permet d'accélérer l'interprétation en faisant en sorte que l'interpréteur n'alloue jamais de mémoire sur le tas durant l'exécution.

    Revision: 181
    ----
    - Revue complète des instructions CALL et de leur gestion. Désormais, elles contiennent en elle-même les paramètres à envoyer (plus de PreparedParams) ;
    - La méthode d'appel réel a donc été intégrée à TSepiRuntimeContext, ce qui a de plus permis de placer directement les paramètres sur la pile, et donc plus d'allocations sur le tas lors des appels ;
    - L'unité SepiOutCalls.pas a été supprimée.

    Revision: 180
    ----
    Corrections extrêmement minimes de style et de documentation.

    Revision: 179
    ----
    Ajout du désassemblage complet d'une instruction ON.

    Revision: 178
    ----
    Ajout d'un espace d'adressage mpZero, qui ne prend pas d'argument et pointe vers une zone mémoire pleine de zéros. C'est désormais cet espace qui est utilisé pour mpNoResult plutôt que mpConstant, ce qui est plus logique.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  8. #48
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Allez hop, une base d'assembleur pour Sepi, avec de nombreuses améliorations de l'interpréteur entre temps
    Le programme EssaisSepi montre comment fonctionne l'assembleur, qui existe sous forme de classes. Celui-ci n'analyse pas du code source, il formera un couche de bas niveau pour les compilateurs à venir.
    Revision: 189
    ----
    Début d'un assembleur Sepi, avec les unités SepiAssembler.pas et SepiAsmInstructions.pas, dans le package SepiCompiler.

    Revision: 188
    ----
    Les instructions RET et JRET ont été supprimées, et on se base maintenant sur la taille du code, autant au niveau de la méthode qu'au niveau des try/except/finally.

    Revision: 187
    ----
    Ajout d'une unité ScSerializer.pas, qui peut sérialiser des données de type chaînes, tableaux et record, malgré les initialisations.

    Revision: 186
    ----
    L'instruction Signed CALL a été supprimée, et l'instruction Basic CALL a été renommée en Address CALL. En effet, Signed CALL n'avait en pratique aucun avantage sur Basic CALL.

    Revision: 185
    ----
    Les destinations de JUMP sont maintenant toutes codées sur 2 octets (Smallint) et les destinations mémoire ne sont plus acceptées.

    Revision: 184
    ----
    NoConst, NoConstButZero, ZeroAsNil et compagnie remplacés par un paramètre Options de type TSepiAddressOptions, bien plus facile à lire et à maintenir.

    Revision: 183
    ----
    Toutes les constantes mpX ont été renommées msX, puisqu'elles signifient depuis un moment Memory Space et non plus Memory Place.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  9. #49
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Tellement peu de code en plus, et pourtant tellement de changements Voici la première classe entièrement Sepi, avec un constructeur et un destructeur codés en Sepi
    Allez donc voir en bas de l'unité TestRuntime.

    Pour les facilités du test, cette classe dérive de TComponent, pour profiter de son constructeur virtuel. Sinon j'aurais été obligé d'utiliser de l'ASM pour faire le test. Mais ça ne change rien au niveau du constructeur lui-même.
    Revision: 190
    ----
    SepiInCalls.pas prend maintenant en charge les constructeurs et les destructeurs.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  10. #50
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Salut Sébastien,
    les fichiers ZIP dans le premier message correspondent bien à la derniére version ?
    As-tu pensé en placer une version sur le site de Borland dédié aux codesource ?

    C'est bien tu ne laches pas l'affaire
    (La tenacité est une qualité trés recherchée dans les métiers du développement logiciel)

  11. #51
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par Laurent Dardenne Voir le message
    Salut Sébastien,
    Salut Ca fait plaisir de te voir passer par ici
    Citation Envoyé par Laurent Dardenne Voir le message
    les fichiers ZIP dans le premier message correspondent bien à la derniére version ?
    Oui, ce sont bien ceux-là que je mets toujours à jour.
    Citation Envoyé par Laurent Dardenne Voir le message
    As-tu pensé en placer une version sur le site de Borland dédié aux codesource ?
    Non, mais j'y penserai peut-être quand j'aurai un premier compilateur complet : à ce moment Sepi pourra être considéré comme en version Beta, et utilisable. Je n'en suis plus si loin, maintenant : avec l'analyse syntaxique utilisée dans l'importeur et l'assembleur que j'ai pour l'instant, il ne reste plus qu'à joindre les deux bouts avec un analyseur sémantique
    Citation Envoyé par Laurent Dardenne Voir le message
    C'est bien tu ne laches pas l'affaire
    (La tenacité est une qualité trés recherchée dans les métiers du développement logiciel)
    Et comment je ferais pour continuer FunLabyrinthe si j'abandonnais ? Non vraiment, ce projet me tient énormément à coeur ; et je ne vais pas abandonner si près du but
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  12. #52
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Plusieurs ajouts de facilités à l'assembleur. Sepi.zip et EssaisSepi.zip mis à jour, comme d'habitude
    Revision: 197
    ----
    Et encore d'autres facilités dans l'assembleur.

    Revision: 196
    ----
    Quelques modifications sur la méthode LookFor.

    Revision: 195
    ----
    Ajout d'autres facilités dans l'assembleur : espaces mémoires basés sur des chaînes de caractères, et paramètres des appels préparés sur base de signatures.

    Revision: 194
    ----
    Correction de l'interprétation de l'instruction ON.

    Revision: 193
    ----
    Ajout de deux méthodes IsVisibleFrom et LookFor dans TSepiMeta, qui permettent de faire des recherches d'un meta en tenant compte des visibilités, des imbrications, des héritages, et des uses.

    Revision: 192
    ----
    Ajout de quelques méthodes de facilité dans l'assembleur.

    Revision: 191
    ----
    Ajout d'une fonction GetParam dans TSepiSignature, et de propriétés ChildByName et ParamByName (par défaut) respectivement dans TSepiMeta et TSepiSignature.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  13. #53
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Fichiers mis à jour dans le premier post, comme d'habitude.

    L'assembleur est devenu compilateur et a beaucoup avancé, avec une meilleure gestion des variables locales et paramètres, et même temporaires.
    Une part majeure de la gestion des expressions et de la génération de leur code a été faite.

    Le projet EssaisSepi a peu changé depuis la dernière fois, mais propose tout de même, dans la compilation de Formula, l'utilisation des expressions pour compiler plutôt que directement les instructions assembleur.

    Il faut encore gérer les appels de méthode et les lecture/écriture des propriétés dans les expressions. Ensuite, je pourrai passer à d'autres TSepiInstruction que les TSepiTryExcept et TSepiTryFinally, donc la série des TSepiIfThenElse, TSepiWhile, TSepiCaseOf, etc.
    Revision: 230
    ----
    Dans SepiExpressions.pas :
    - Ajout d'une interface ISepiValue, qui devient base de ISepiReadableValue, ISepiWritableValue, ISepiAddressableValue, ISepiDirectValue, ISepiProperty et ISepiNilValue ;
    - TSepiCastOperator travaille sur des ISepiValue au lieu de ISepiExpression ;
    - Ajout de deux classes TSepiRecordFieldValue et TSepiObjectFieldValue pour gérer les champs de record et d'objet respectivement.

    Revision: 229
    ----
    Ajout dans TSepiUnitCompiler de deux méthodes GetPointerType et GetMetaClass qui permettent d'obtenir des types pointeur et meta-classe qui ne seront pas enregistrés dans l'unité.

    Revision: 228
    ----
    Propriété TSepiClass.CurrentVisibility déplacé dans TSepiMeta.

    Revision: 227
    ----
    Ajout de trois types d'expressions : l'adressage, le déréférencement, et les opération sur les types (SizeOf, TypeInfo, Low, High et Length).

    Revision: 226
    ----
    Revue des types tableau statique : ils n'enregistrent plus qu'une seule dimension, mais conserve le type d'index. Toutefois, les RTTI sont toujours créées en "court-circuitant" les imbrications de tableaux.

    Revision: 225
    ----
    - Ajout de trois méthodes Extract, Acquire et FindVarFromMemoryRef dans TSepiTempVarsLifeManager, pour gérer plus efficacement les variables temporaires ;
    - Ajout d'une méthode AttachToExpression dans ISepiExpressionPart, pour demander à une part d'expression de s'attacher à une expression sous tous les IID qu'elle supporte ;
    - ISepiConstantValue supprimée ; elle est remplacée par les méthodes GetIsConstant et GetConstValuePtr dans ISepiReadableValue ;
    - Ajout de nouvelles classes d'expressions pour les variables globales et locales, les conversions, et les opérations arithmétiques et logiques ;
    - Diverses modifications partout ailleurs dans SepiExpressions.pas.

    Revision: 224
    ----
    Ajout d'une méthode ClassImplementsInterface dans TSepiClass.

    Revision: 223
    ----
    TDynamicallyLinkedObject corrigé pour permettre d'être attaché plusieurs fois au même contrôleur (sous des IID différents).

    Revision: 222
    ----
    Ajout de deux nouvelles classes d'expressions pour les vraies constantes (et constantes littérales) et les transtypages.

    Revision: 221
    ----
    TSepiMemoryReference.SetSpace sur un meta a été découpée en deux : une pour TSepiConstant et une pour TSepiVariable, puisque c'étaient les deux seules restantes.

    Revision: 220
    ----
    - SepiExpression.pas renommée en SepiExpressions.pas ;
    - Ajout dans SepiCompiler.pas de quelques méthodes diverses pour rentre plus pratique la compilation ;
    - Ajout dans SepiExpressions.pas de quelques classes abstraites et non abstraites qui implémentent les interfaces.

    Revision: 219
    ----
    - Correction de l'enregistrement/chargement de TSepiVariable ;
    - TSepiConstant peut maintenant être créé sans valeur, et son enregistrement/chargement est géré de la même façon que TSepiVariable ;
    - TSepiMethod enregistre et charge maintenant ses enfants.

    Revision: 218
    ----
    Dans ScSerializer.pas, les deux routines WriteDataToStream et ReadDataFromStream ont été surchargées pour traiter de façon plus homogène les types qui n'ont pas de RTTI.

    Revision: 217
    ----
    - Ajout d'une unité SepiExpressions.pas avec des interfaces représentant les principales actions pouvant être faites sur des expressions Sepi ;
    - Ajout d'une classe TSepiTempVarsLifeManager pour gérer plus facilement la vie de variables temporaires à travers les récursions dans la compilation des expressions ;
    - Ajout de la licence dans SepiCompilerConsts.pas et SepiCompilerErrors.pas.

    Revision: 216
    ----
    - Ajout dans TSepiInstruction d'une propriété SourcePos et d'une méthode MakeError pour gérer les erreurs de compilation plus facilement ;
    - Ajout d'une interface ISepiExpression et de son implémentation TSepiExpression pour la gestion des expressions.

    Revision: 215
    ----
    Ajout d'une SepiCompilerErrors.pas pour gérer les erreurs de compilation.

    Revision: 214
    ----
    Ajout d'une méthode CopyData dans TSepiType, raccourci pour la routine du même nom dans ScTypInfo.pas sur un type Sepi.

    Revision: 213
    ----
    Dans TSepiMemoryReference :
    - Ajout d'une méthode Seal qui permet de sceller une référence mémoire, interdisant ainsi toute modification ultérieure ;
    - Ajout de deux méthodes CanRemoveDereference et RemoveDereference qui permettront d'éviter des LoadAddress non nécessaires ;
    - Ajout d'un constructeur Clone qui copie une référence mémoire, son statut de scellée exclu.

    Revision: 212
    ----
    Transformation complète du système de gestion des variables locales :
    - Au lieu d'être des TSepiField dans un TSepiRecordType, elles sont des TSepiLocalVar dans un TSepiLocalVariables, en relation 1 pour 1 avec TSepiMethodCompiler ;
    - Les paramètres sont intégrés aux variables locales ;
    - Les variables locales proposent la gestion de leur vie - actuellement c'est sans effet, mais TSepiLocalVariables.AllocateOffsets devrait être récrit plus tard pour intégrer un algorithme d'allocation des données qui pourra en tenir compte ;
    - Puisque les variables locales ne se voient affecter un offset qu'après la compilation (mais avant assemblage), le TSepiMemoryReference a dû retenir plus longtemps une référence à la TSepiLocalVar, ce qu'il fait désormais.

    Revision: 211
    ----
    Ajout dans ScTypInfo.pas d'une routine AreInitFinitCompatible qui permet de tester si deux types sont compatibles entre eux au niveau de l'initialisation/finalisation.

    Revision: 210
    ----
    Ajout d'une unité ScInterfaces.pas avec des interface et classes prévues pour la gestion d'interfaces liées dynamiquement à un contrôleur. C'est une version dynamique de la construction "implements".

    Revision: 209
    ----
    Ajout dans la SCL d'une unité ScIntegerSets.pas, avec une classe TScIntegerSet qui représente un ensemble d'entiers longs.

    Revision: 208
    ----
    Tout ce qui était appelé assembleur Sepi a été renommé en compilateur Sepi, suite aux derniers changements.

    Revision: 207
    ----
    - Ajout de quelques constantes ensemble de TSepiBaseType dans SepiOpCodes.pas.

    Revision: 206
    ----
    - Retrait du "support" des QWord, ainsi que du support des sar ;
    - Ajout d'une routine ConversionExists dans SepiRuntimeOperations.pas permettant de savoir si une conversion est supportée.

    Revision: 205
    ----
    Restructuration des instructions dans l'assembleur, afin de pouvoir aussi utiliser des instructions non assembleur.

    Revision: 204
    ----
    - Ajout de 4 fonctions InitializeValue, FinalizeValue, NewValue et DisposeValue dans TSepiType ;
    - Revue de la sérialisation des valeurs des variables (utilisation de ReadDataFromStream et WriteDataToStream).

    Revision: 203
    ----
    Le constructeur TSepiType.Clone n'est plus abstrait mais déclenche une exception ESepiError.

    Revision: 202
    ----
    Ajout du support de la création de sous-types énumérés.

    Revision: 201
    ----
    Ajout du support de clonage de type.

    Revision: 200
    ----
    Prise en charge des types énumérés compilés avec {$MINIMUMSIZE} différent de 1.

    Revision: 199
    ----
    - Ajout d'une propriété Tag dans TSepiMeta ;
    - Ajout de la possibilité de charger des unités natives via LoadFromStream ;
    - Correction d'un bug grave qui avait lieu lorsqu'un exception était levée durant le chargement d'une unité.

    Revision: 198
    ----
    - Dans TSepiMeta : ajout d'une méthode protégée ReAddChild et d'une propriété publique WasForward ;
    - Correction d'un bug dans SepiFindMetaClass ;
    - Ajout de deux méthodes ValueAsInteger et ValueAsCardinal dans TSepiOrdType ;
    - Correction d'un bug de la propriété DefaultValue e TSepiProperty ;
    - Correction d'un bug de numérotation des méthodes surchargées.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  14. #54
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Remis à jour, avec de nombreux nouveaux types d'expressions gérés, et l'ajout de plusieurs instructions de "haut niveau" (if..then, for..do, etc.).

    Les procédure de compilation dans le projet Sepi, jusqu'à SayHellos, utilisent désormais ces instructions et des expressions pour se compiler. Vous pourrez remarquer que c'est presque lisible, bien que ce soit du "code de génération de données de test"

    Les prochaines étapes seront la gestion des appels de méthode par adresse (avec des types événementiels) et normalement un instruction Multi-On de haut niveau. Peut-être aussi un case..of, mais peut-être pas pour tout de suite.

    Après cela, il sera temps, je pense, de terminer le programme d'importation d'unité, et en faire une variante qui compile complètement une unité Delphi avec Sepi.

    J'ai assez bon espoir d'avoir une version bêta d'ici la fin de mes vacances, c'est-à-dire pour le 14 septembre
    Revision: 234
    ----
    - Ajout d'une classe TSepiMetaClassValue, pour les valeurs qu'on pourrait assimiler à des constantes littérales de type meta-classe ;
    - Ajout des expressions d'appel de méthode (statique ou dynamique, mais pas par adresse) ;
    - Ajout d'une instruction d'appel d'invocable.

    Revision: 233
    ----
    - Ajout de l'instruction d'assignation ;
    - Changements mineurs dans les instructions try..except et try..finally.

    Revision: 232
    ----
    Ajout des classes TSepiIfThenElse, TSepiWhile et TSepiFor dans SepiInstructions.pas, qui gèrent à un niveau élevé des instructions if..then..else, while..do et repeat..until, et for..do respectivement.

    Revision: 231
    ----
    Ajout de méthodes de classe MakeXXX dans la plupart des classes concrètes de SepiExpressions.pas.
    Elles ont pour but de simplifier la création "à la main" d'expressions, ce qui pourra arriver même avec un véritable compilateur, si son langage est de très haut niveau et très orienté.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  15. #55
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Encore une mise à jour, avec des expressions pour les appels de méthodes surchargées, les appels de méthodes par adresse et les propriétés ; ainsi que de nouvelles instructions de haut niveau (raise, reraise et multi-on).

    Toutes les méthodes dans TestRuntime de EssaisSepi sont maintenant compilées avec toutes ces instructions et expressions.

    Maintenant, je me suis rendu compte que je ne gère pas encore les expressions de type ensemble, ce que je dois donc faire maintenant.

    Ensuite, c'est parti pour un compilateur à partir du source
    Revision: 235
    ----
    - Correction d'un bug de génération d'une instruction assembleur MULTION ;
    - Ajout des trois classes TSepiRaise, TSepiReraise et TSepiMultiOn qui fournissent les instructions de haut niveau raise, reraise et multi-on respectivement ;
    - Ajout d'une méthode UseTempVar dans TSepiFor et TSepiTryExcept ;
    - Ajout d'une méthode MatchesSignature dans TSepiCustomWithParams, et donc réorganisation du code des classes descendantes pour l'utiliser ;
    - Ajout du support des méthodes surchargées dans TSepiMethodCall ;
    - Ajout d'expressions pour les appels de méthodes par adresse (TSepiMethodRefCall) et les propriétés (TSepiPropertyValue) ;
    - Ajout de deux méthodes surchargées MakeOrdinalValue dans TSepiTrueConstValue.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  16. #56
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Nombreuses modifications, mais aucun changement dans EssaisSepi (enfin juste un identificateur renommé ^^). Par contre, l'importeur d'unité est... Comment dire... Devenu très bon. Je vais poster tout de suite dans le thread dédié.
    Revision: 256
    ----
    Quelques ajouts en matière de gestion des flottants constants.

    Revision: 255
    ----
    Ajout de deux méthodes ValueAsExtended et SetValueAsExtended dans TSepiFloatType.

    Revision: 254
    ----
    TSepiClass.ClassImplementsInterface modifié pour être valide même lorsque la classe est en cours de construction.

    Revision: 253
    ----
    StrRepresToStr gère les caractères #$hex.

    Revision: 252
    ----
    Ajout du support des redirecteurs de méthodes d'interface.

    Revision: 251
    ----
    Intégration des types caractère comme types de base, et donc support des conversions avec ceux-ci.

    Revision: 250
    ----
    - Ajout d'une variante de TSepiClass.LookForMember, qui travaille depuis la classe Self ;
    - SepiImportsSystem.pas importe les constantes système MaxInt et MaxLongint.

    Revision: 249
    ----
    TSepiVariable ne stocke plus ses données si la valeur est entièrement un zéro mémoire (ce qui arrive à chaque fois qu'une variable globale n'est pas initialisée).

    Revision: 248
    ----
    Ajout d'un mode lazy-load pour les grosses unités qui contiennent beaucoup d'enfants mais dont peu sont réellement utilisés. Dans ce mode, un enfant n'est chargé que lorsqu'il est demandé.

    Revision: 247
    ----
    Code de TSepiUnit.SaveToStream déplacé dans TSepiUnit.Save, ce qui est plus symétrique au vu de LoadFromStrea/Load.

    Revision: 246
    ----
    Ajout du support des pseudo-routines SizeOf, TypeInfo, Low, High, Length, Ord et Chr dans SepiDelphiLikeCompilerUtils.pas.

    Revision: 245
    ----
    Ajout d'un constructeur Clone dans TSepiTerminal.

    Revision: 244
    ----
    ISepiExpression.SourcePos est maintenant aussi modifiable.

    Revision: 243
    ----
    TSepiCastOperator a été enrichi de deux variantes correspondant aux pseudo-routines Ord() et Chr() du Delphi.

    Revision: 242
    ----
    TSepiCompilerErrorList déclenche une erreur fatale lorsque 100 erreurs ont été reportées.

    Revision: 241
    ----
    Correction mineures de bugs dans SepiReflection.

    Revision: 240
    ----
    Correction d'un bug dans la sérialisation de tableaux statiques.

    Revision: 239
    ----
    - Ajout d'une unité SepiDelphiLikeCompilerUtils.pas, qui propose des facilités de compilation pour les langages qui respectent les mêmes règles générales que le Delphi ;
    - Modifications des classes d'analyse syntaxique pour supporter certaines formes de non-déterminisme.

    Revision: 238
    ----
    Ajout de deux unités SepiParseTrees.pas et SepiLL1ParserUtils.pas dans SepiCompiler. Elles proposent des classes de gestion des arbres syntaxiques, orientés et facilités pour la compilation d'unités Sepi.

    Revision: 237
    ----
    Ajout de deux méthodes GetErroneousType et MakeErroneousTypeAlias dans TSepiUnitCompiler, qui permettent d'obtenir facilement un type erroné.

    Revision: 236
    ----
    Ajout d'une méthode MakeUnnamedChildName dans TSepiMeta, qui est utilisée entre autres lorsqu'un meta est créé sans nom.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  17. #57
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Et voilà ! À l'occasion de mon anniversaire, la première révision qui montre un Sepi fonctionnel, de la compilation à l'interprétation

    Toutes les instructions ne sont pas encore compilables (inherited, try, case, par exemple), mais le fichier bin\SepiDelphiCompiler\Sources\TestTypes.pas peut être compilé compilé puis exécuté correctement

    Je vais ouvrir un autre thread pour expliquer comment se servir de SepiDelphiCompiler et de SepiRun.

    Aussi, l'importeur d'unité est officiellement inséré dans les repos Sepi. Ainsi que ces deux programmes SepiDelphiCompiler et SepiRun (en tant que programmes exemples).

    Il n'y a donc que Sepi.zip qui a été mis à jour.
    Revision: 269
    ----
    Ajout de deux programmes exemples, SepiDelphiCompiler et Sepi, dans un nouveau groupe de projets SepiExamples90.
    Ces deux programmes permettent respectivement de compiler un source Delphi (avec son implémentation) en une unité compilée Sepi, et d'exécuter une unité compilée Sepi qui contient une routine "procedure Main;".

    Revision: 268
    ----
    SepiImportAll.bat modifié pour transmettre ses paramètres à ses appels de SepiDelphiUnitImporter.

    Revision: 267
    ----
    Binaires de SepiDelphiUnitImporter déplacés dans un sous-dossier propre : bin\SepiDelphiUnitImporter.

    Revision: 266
    ----
    Ajout d'un nouveau groupe de projets SepiTools, avec un programme SepiDelphiUnitImporter. Ce programme permet de produire une unité Delphi (munie d'une ressource) qui importe dans Sepi une unité Delphi native. Pour ce faire, il compile littéralement la partie interface de cette unité - et se sert donc de Sepi pour produire ce dont Sepi se servira !
    Après compilation de ce programme, le script SepiImportAll.bat importera toutes les unités de la RTL et la SCL/SVCL/SDL, et quelques unes de la VCL, et produira les unités SepiImportsXXX.pas requises pour la compilation des paquets présents dans SepiImports.

    Revision: 265
    ----
    - Ajout de deux méthodes AcquireObjResource et AcquirePtrResource dans TSepiMeta ;
    - Ajout d'un package SepiDelphiCompiler, qui contient un compilateur (presque terminé) de code source Delphi (peut être configuré pour compiler uniquement l'interface ou toute l'unité) ;
    - Correction d'une corruption dans le paquet SepiImportsRTLCommon.

    Revision: 264
    ----
    Correction d'erreur de compilation mineure dans SepiPSCompileTime.pas.

    Revision: 263
    ----
    Author: sjrd
    Date: 18:38:37, samedi 15 novembre 2008
    Message:
    - Les packages ne sont plus supportés pour Delphi 2006 ;
    - Suppression (enfin) des programmes SepiEdit et SepiOptions, ainsi que de nombreux paquets de conception (Dcl...) qui ne seront jamais utilisés.

    Revision: 262
    ----
    - Factorisation des deux types tableau dans la classe TSepiArrayType, tandis que les tableaux statiques sont maintenant de type TSepiStaticArrayType ;
    - Ajout de l'import de Write, Writeln et Readln dans SepiImportsSystem.pas ;
    - Correction d'un bug de maintien à jour de TSepiRoot.FSearchOrder ;
    - Revue du système de lazy-load de TSepiUnit, pour corriger un bug de chargement dans des cas de références circulaires ;
    - TSepiSignature.Equals a été améliorée pour supporter de nombreuses options ;
    - Ajout du support de plus d'opérations sur adresse différentes dans l'interpréteur ;
    - Support d'opérations unaires sur les Int64 dans l'interpréteur ;
    - Correction de bug de fonctionnement de TSepiMemoryReference.Assign et TSepiMemoryReference.Clone ;
    - Ajout dans SepiExpressions.pas du support d'une expression élément de tableau (statique ou dynamique) ;
    - Suppression des informations de débogage dans SepiParseTrees.pas et SepiLL1ParserUtils.pas, ce qui facilite le débogage des parsers ;
    - Ajout d'une propriété SepiContext dans TSepiParseTreeNode.

    Revision: 261
    ----
    Suppression des mentions 'platform' dans ScWindows.pas et SdAbout.pas.
    Revision: 260
    ----
    Tous les sources d'imports ont été supprimés, car ils sont désormais générés automatiquement. Avec ça, un répertoire resources\ est ajouté pour contenir toutes les ressources de Sepi, c'est-à-dire les unités compilées à importer.

    Revision: 259
    ----
    - Ajout dans TScIntegerSet d'un énumérateur et d'une propriété Modified ;
    - Ajout d'une unité ScConsoleUtils.pas pour le traitement de la ligne de commande.

    Revision: 258
    ----
    TSepiMethodRefType peut aussi être créé avec une TSepiSignature en paramètre.
    Revision: 257
    ----
    Les signatures peuvent maintenant être construites de manière plus fine, en ne passant pas par une signature texte à la Delphi.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  18. #58
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Mise à jour avec...

    Correction de quelques bugs, ajout du support des inherited, raise, try..finally et try..except sans les on, des opérateurs de comparaison.

    Et ajout officiel dans Sepi du générateur de compilateur Il est encore un peu "brouillon", mais moins que l'original, que j'avais écrit il y a 3 ans pour mon TFE
    Revision: 277
    ----
    Ajout d'un nouveau programme SepiParserGenerator dans le groupe de projets SepiTools. Ce programme génère automatiquement un parser à partir du fichier de description de la grammaire d'un langage.

    Revision: 276
    ----
    Ajout des opérateurs de comparaison dans le compilateur Delphi.

    Revision: 275
    ----
    - TSepiRaise vérifie le type de son argument ;
    - Re-correction de l'obtention du code dans TSepiMethod.Load ;
    - Support des instructions try..except, try..finally et raise ;
    - Ajout du fichier de description de la grammaire Delphi.

    Revision: 274
    ----
    SepiDelphiCompiler et SepiRun mis à jour, ainsi que le script de test Test.pas.

    Revision: 273
    ----
    - Correction du bug de FindNativeCode qui n'était jamais appelée pour les méthodes chargées ;
    - Correction du bug de TSepiPropertyValue qui ne s'attachait pas à l'expression en tant que ISepiProperty ;
    - Correction d'un bug de FieldSelection ;
    - Prise en charge de la construction inherited dans le compilateur Delphi.

    Revision: 272
    ----
    Ajout des mentions de licence dans les unités du paquet SepiDelphiCompiler.

    Revision: 271
    ----
    Mise à jour du XML de configuration de la documentation.

    Revision: 270
    ----
    Ajout de la mention des licences dans les trois nouveaux projets.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  19. #59
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Ajout du support de Continue/Break/Exit, ainsi que des on..do dans les except.

    (et support de l'opérateur de comparaison = qui avait été oublié )

    Prochaine étape : prise en charge des set.
    Revision: 282
    ----
    Support des on..do/else dans les clauses except, dans le compilateur Delphi.

    Revision: 281
    ----
    GenerateParser.bat fait une pause à la fin, ce qui permet de l'exécuter en double-cliquant dessus.

    Revision: 280
    ----
    Support de l'opérateur de comparaison =.

    Revision: 279
    ----
    - Ajout dans TSepiMethodCompiler de deux piles de références aux destinations des instructions Continue et Break, maintenues par les instructions de boucle ;
    - Ajout de trois classes TSepiContinue, TSepiBreak et TSepiExit dans SepiInstructions.pas, pour les instructions du même nom ;
    - Ajout dans SepiDelphiLikeCompilerUtils.pas de la gestion des pseudo-routines Continue, Break et Exit ;
    - Ajout des tests de Continue, Break et Exit dans le script de test.

    Revision: 278
    ----
    Correction d'un bug du désassembleur qui "croyait" encore que SAR existe.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  20. #60
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Bon eh bien voilà le support (encore imparfait) des ensembles. Un manque non négligeable encore est que la constante ensemble vide [] n'est pas encore supportée, à cause de problèmes de typage que je n'ai pas encore résolu. Et le in non plus.

    Revision: 284
    ----
    Support (basique) des ensembles (notamment le 'in' n'est pas encore implémenté).

    Revision: 283
    ----
    - Ajout des routines de compiler-magic de gestion des ensembles dans ScCompilerMagic.pas ;
    - Ajout d'une propriété IsEmpty dans TScIntegerSet.
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

Discussions similaires

  1. Réponses: 2
    Dernier message: 03/08/2013, 16h24
  2. Réponses: 1
    Dernier message: 26/03/2009, 16h48
  3. Mise à jour de la version de MySQL
    Par jobstar dans le forum Administration
    Réponses: 8
    Dernier message: 18/08/2003, 10h45
  4. mise à jour de champs time (interbase)
    Par pram dans le forum XMLRAD
    Réponses: 6
    Dernier message: 04/03/2003, 10h25
  5. Réponses: 2
    Dernier message: 12/02/2003, 15h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo