[R] Compilation conditionnelle

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Dinosaure
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 06 oct. 2011 15:36
Status : Hors ligne

[R] Compilation conditionnelle

#1

Message par Dinosaure » sam. 13 juin 2015 20:32

Bonjour, je viens de réaliser une (mini) liste d'instructions pré-processeur, qui permettent de compiler différentes parties d'un programme suivant les cas désirés.

Instructions ajoutées : NOM (paramètre optionnel1) (paramètre optionnel2)
- #SET (<string varname>) (= <string value>)
- #IF (<string varname>) (= <string value>)
- #ELSE
- #FI

Exemple d'utilisation :

Code : Tout sélectionner

ConsoleWrite("On... ")
#SET debugmode = False
_main()
ConsoleWrite("This way exit. ")
Exit

Func _main()
    #if debugmode = False
        For $i = 1 To 3
            ConsoleWrite("No ")
        Next

        MsgBox(0, "debugmode ?", False)
    #else

#       ConsoleWrite("Way. ")
#       MsgBox(0, "debugmode ?", True)
    #fi
EndFunc
Les nouveaux opérateurs ne sont pas soumis à la casse : ils sont forcés en majuscule lors de leur passage au pré-compilateur.

En pièce-jointe, le code source modifié du wrappeur. Les plus gros changements étant sur la fonction Retrieve_PreProcessor_Info(), ainsi que quelques nouvelles UDFs (_SelectOpt(), ConsoleWriteLine(), etc) placées dans une #Region adéquate.
Pour l'exploiter, il faut d'abord le compiler sous un autre nom (i.e "AutoIt3Wrapper_NEW.exe"), puis le renommer à la main "AutoIt3Wrapper.exe" dans le répertoire SciTE\AutoIt3Wrapper. AutoIt3Wrapper.exe étant utilisé pour compiler les programmes, il ne peut évidemment se remplacer lui-même à la volée.

En ce qui concerne #IF, ce que j'ai trouvé de plus simple pour éviter l'exécution d'une ligne de commande, c'est d'y placer le préfixe "# ". Si vous connaissez mieux, je prends !

À noter que seul l'opérateur "=" est disponible pour les tests de #IF. Est-ce que ça vaut la peine d'en rajouter ?
Vous pensez quoi de ces opérations ?

Cordialement,
D.

P.S : Je sais que la demande n'est pas nouvelle (exemple en novembre 2010), juste je n'ai pas trouvé d'implémentations fonctionnelle, alors je l'ai fait. Vous en pensez quoi ?²

Edit 28/06/2015 : retirage de Wrapper édité. Bande de coquinous. :oops:
Modifié en dernier par Dinosaure le dim. 28 juin 2015 22:45, modifié 3 fois.

jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2018
Enregistré le : lun. 30 mars 2009 21:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

Re: [..] Compilation conditionnelle

#2

Message par jchd » sam. 13 juin 2015 21:16

Faut-il te traduire la réponse de Jos (Forum US) qui, je pense, sait de quoi il parle ?
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.

Dinosaure
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 06 oct. 2011 15:36
Status : Hors ligne

Re: [..] Compilation conditionnelle

#3

Message par Dinosaure » dim. 14 juin 2015 10:59

Celle où il dit ''les lignes seront quand-même compilées quoi qu'il arrive. Mais je pourrais me tromper" ?
Effectivement, il se trompe sur le résultat...
Essaie de changer dans l'exemple de mon message plus haut la valeur de debugmode, les lignes impactées ne seront pas exécutées. (ou pas exécutables, plus précisément.)

Edition : Trompé de "réponse", je suis en discussion aussi sur le forum US avec Jos, qui me fait remarquer que j'ai travaillé sur une vieille version du wrapper. C'est possible, j'ai dû commencer à faire les modifs sur la version installée chez moi, puis été obligé de passer à la dernière version à cause de l'opérateur ternaire absent.
Ça ne change rien au concept, juste un détail sur la technique.

Et donc, le concept peut-il être intéressant ?

Dinosaure
Niveau 1
Niveau 1
Messages : 14
Enregistré le : jeu. 06 oct. 2011 15:36
Status : Hors ligne

Re: [R] Compilation conditionnelle

#4

Message par Dinosaure » dim. 28 juin 2015 12:01

De Jos, après de nombreux échanges, et une proposition (partiellement fonctionnelle) d'exploiter un préprocesseur externe :
Source : https://www.autoitscript.com/forum/topi ... nt=1255310
autoit3wrapper doesnt perform these type of actions and never will.
-> autoit3wrapper n'effectue pas ce genre de tâches, et ne le fera jamais.

Comment dire, pour une raison de désaccord sur l'implémentation, la fonctionnalité ne sera pas disponible pour les gens.
Dommage, je maintiendrai quand-même manuellement ma propre version d'un préprocesseur permettant la compilation conditionnelle et l'exploitation de macros. Bisous à tous.

Répondre