Bug on "Declare ..." + new constant

Just starting out? Need help? Post your questions and find answers here.
Ulix
User
User
Posts: 48
Joined: Wed Jan 23, 2008 12:45 pm
Location: France, Montpellier

Bug on "Declare ..." + new constant

Post by Ulix »

Translation by google! :oops:

Hello everyone !

I post in the bug section because of 2 reasons:

- The response of the compilo, which are not (in my opinion) appropriate ... see 3rd my test!
- Difficult to detect (with CompilerIf Defined (test, #PB_Procedure) = #False) the previous statements made in the main program!
Here comes my proposal (which I should have put in the section: Suggestion and improvement!
But in the bug section, I'm sure Fred will take a look! :mrgreen:

To understand, my approach will see there: http://www.purebasic.fr/french/viewtopi ... =1&t=17236
(sorry it's in french) :oops:

Test code (lower)

Thank you in advance
Ulix

;===================== En français !!

Bonjour a tous !

Je poste dans la section bug a cause de 2 raisons :

- La réponse du compilo, qui ne sont pas (a mon avis) approprier... voir 3ème mon test !
- Difficulté de détecter (avec CompilerIf Defined(test, #PB_Procedure) = #False) les précédent déclarations faite dans le programme principal !
Ici intervient ma proposition (que j'aurais du mettre dans la section : Suggestion et amélioration !
Mais dans la section bug, je suis sûr que Fred y jettera un oeil ! :mrgreen:

Pour comprendre, ma démarche allez voir là : http://www.purebasic.fr/french/viewtopi ... =1&t=17236
(désoler c'est en français)

Code de test :

; Note : pour tester Commenté/décommenter
;==============
; 1er test : Décommenté le "Declare test()" et décommenté la "Procedure test()" dans le programme principal
; Retour compilo : Rien !
; Retour debug : Module Déclare déjà faite Conforme a l'attente !
; : Module Procedure déja présente Conforme a l'attente !
; Procedure utilisé : La procedure du Programme principal Conforme a l'attente !
;==============
; 2ème test : Commenté le "Declare test()" et décommenté la "Procedure test()" dans le programme principal
; Retour compilo : Rien !
; Retour debug : Module Déclare déjà faite ERREUR : pas conforme a l'attente ! Utilisé une autre constante peut-être ????
; AJOUTER : une nouvelle constante : #PB_Declare pour pouvoir testé l'existance d'une déclaration !!!!
; : Module Procedure déja présente Conforme a l'attente !
; Procedure utilisé : La procedure du Programme principal Conforme a l'attente !
;==============
; 3ème test : Décommenté le "Declare test()"et commenté la "Procedure test()" dans le programme principal
; Retour compilo : Message d'erreur : "The procedure 'test()' has been declared but not defined." Conforme a l'attente !
; A MODIFIER : Que le compilo passe d'abord par le module pour vérifier est exécute : "Ajout : Module Procedure"
; Retour debug : ????
;==============
; 4ème test : Commenté le "Declare test()"et commenté la "Procedure test()" dans le programme principal
; Retour compilo : Message d'erreur : "Ligne xx: test() is not a function, array, list, map or macro." Pas conforme a l'attente !
; Le compilo aurait dù passé par le module est faire le "Declare" et la "Procedure"
; : A MODIFIER : Que le compilo passe d'abord par le module pour vérifier et :
; executer : "Ajout : Module Declare"
; executer : "Ajout : Module Procedure"
; puisqu'il sagit de procedure déclarer dans la section public (accésible depuis l'extérieur du module)
; Retour debug : ????
;==============


; Programme principale
; Ici : Enumeration
; Ici : Structure
; ici : Globale
; Ici : Déclaration

Declare test() ; <===== Commenté/décommenté pour tester le code


; Ici mes includes de mes modules
; XIncludeFile "xxxx... module "
;=============================

DeclareModule Patate
;Toutes les Procedures déclarer ici seront accésible depuis l'extérieure du module !

CompilerIf Defined(test, #PB_Procedure) = #False ; Si Declare"test" est déjà declarer
Debug "Module Déclare déjà faite"
; Ne rien faire
CompilerElse
Debug "Ajout : Module Declare"
Declare test()
CompilerEndIf

EndDeclareModule

Module Patate

CompilerIf Defined(test, #PB_Procedure) = #False ; Si Procedure"test" est présente
Debug "Module Procedure déja présente"
; Ne rien faire
CompilerElse
Debug "Ajout : Module Procedure"
Procedure test()
Debug "Utilise La procedure du Module"
EndProcedure
CompilerEndIf

EndModule

;==========================

UseModule Patate

; Mes procedure du programme principales


; Procedure test()
; Debug "Utilise La procedure du Programme principal" ;<===== Commenté/décommenté la procedure pour tester le code
; EndProcedure

; Lancement du programme
test()



Merci d'avance
Ulix
User avatar
Josh
Addict
Addict
Posts: 1183
Joined: Sat Feb 13, 2010 3:45 pm

Re: Bug on "Declare ..." + new constant

Post by Josh »

Where you use Defined, test() is not known either by the procedure itself nor by declare. Furthermore, you exclude test() anyway through your CompilerIf.

Compiler conditions always run from top to bottom and are resolved at compile time. So your code looks like this:

Code: Select all

DeclareModule Patate

  Debug "Module Déclare déjà faite"

EndDeclareModule

Module Patate

  Debug "Module Procedure déja présente"

EndModule

;==========================

UseModule Patate

;	Mes procedure du programme principales


; Procedure test()
; Debug "Utilise La procedure du Programme principal"	;<===== Commenté/décommenté la procedure pour tester le code	
; EndProcedure

;	Lancement du programme
test()
No bug, next time please post in questions section. You can assume that such trivial errors would already be posted 100,000 times before and therefore the bug is more likely to be found in your code.

ADDED:

You should write your posts in the section where they belong and not where you think Fred would rather read. If everyone did that, we could throw away the layout of the forum.
sorry for my bad english
Post Reply