Mal wieder die Makros

Hier werden, insbesondere in den Beta-Phasen, Bugmeldungen gepostet. Das offizielle BugForum ist allerdings hier.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm... ich muss mich wohl bei dir entschuldigen, da hat mich ts gestern wohl aufs Glatteis geführt.

ich kann nur vermuten, dass es sich dabei um einen konflikt in der verarbeitungsreihenfolge handelt.

da PB ausdrücklich ein one-pass-compiler ist, ergeben sich manchmal probleme daraus,
in welcher reihenfolge die umwandlungsschritte pro kommando ausgeführt werden.

möglicher weise wird hier nicht zuerst das Macro ersetzt und dann der literale string allociert,
deswegen steht "_a_" nicht literal im speicher, wie der test es benötigt.

das müßte dann aber auch bei IF auftreten, nicht nur bei CASE.

grundsätzlich aber schon ein Konflikt, der zumindest hinterfragt werden muss.
es wäre zumindest in die Help aufzunehmen, wenn man Macros nicht in Cases verwenden kann.

PS:
oh, edel hat inzwischen den ASM-Output gecheckt...
da bin ich etwas eingerostet... sagt mir nicht so viel.
aber wenn edel sagt, dass da eine diskrepanz besteht,
wird das wohl zutreffen.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Beitrag von - chris - »

Code: Alles auswählen

Macro DoubleQuote
  "
EndMacro
Macro DoubleUnderscore(Name)
  "_"+DoubleQuote#Name#DoubleQuote+"_"
EndMacro

Procedure CallBug(Name$)

  Debug DoubleUnderscore(f)

  a$ = DoubleUnderscore(a)
  b$ = DoubleUnderscore(b)
  c$ = DoubleUnderscore(c)
  d$ = DoubleUnderscore(d)
  e$ = DoubleUnderscore(e)
  f$ = DoubleUnderscore(f)
    
  Select Name$
    Case a$
      ;...
    Case b$
      ;...
    Case c$
      ;...
    Case d$
      ;...
    Case e$
      ;...
    Case f$
      Debug "OK"
      ;...
  EndSelect
EndProcedure


CallBug("_f_") 

Wenn ich das so mache funktioniert das ganze.


Bei Debug DoubleUnderscore(f) fehlen die Anführungsstriche.

_f_

"_f_" so sollte es aussehen.
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Beitrag von Josef Sniatecki »

Klar, ist natürlich ein Umweg. Jedoch nicht sehr professionell. Die Variablen
werden immer wieder neu allociert und werden nach jedem aufruf
gesetzt. Dass nimmt einiges an speed.

PS: Gut das sich dieses Thema erledigt hat. Nun muss jemand Englisch
können, oder?
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Bei Debug DoubleUnderscore(f) fehlen die Anführungsstriche.

nein.
die DQs stehen im code, aber wenn du das an Debug übergibst, werden die natürlich weggelassen.
Debug "bla"
wird auch ohne DQs ausgegeben...

dass dein Beispiel funktioniert wundert mich jetzt nicht,
weil hier die statischen strings korrekt angelegt werden, jeder für sich.

[edit]

> Die Variablen werden immer wieder neu allociert und werden nach jedem aufruf
> gesetzt. Dass nimmt einiges an speed.

mach mal nen speedvergleich, wenn du die strings STATIC deklarierst...

aber klar, ist nur ein fishy workaround.

ob sich das zeitnah und aufwandsökonomisch beheben läßt,
oder ob man sagen muss "bis PB 5.0 haben Macros in Cases nix verloren"
wird sich zeigen müssen...


[edit2]

kann man eigentlich Konstantenwerte per Macros erzeugen lassen, oder werden die noch vorher ersetzt?
wenn das ginge, dann wäre das vielleicht ein brauchbares wörkeraund..?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
- chris -
Beiträge: 195
Registriert: 24.08.2005 19:52
Wohnort: Stadtallendorf

Beitrag von - chris - »

So jetzt ohne Variablen:

Code: Alles auswählen


Macro DoubleQuote
  "
EndMacro
Macro UnderLine
  _
EndMacro
Macro DoubleUnderscore(Name)
  Case DoubleQuote#UnderLine#Name#UnderLine#DoubleQuote
EndMacro

Procedure CallBug(Name$)
   
 Select Name$
   DoubleUnderscore(a)
     Debug "OK - a"
       ;...
   DoubleUnderscore(b)
       ;...
   DoubleUnderscore(c)
       ;...
   DoubleUnderscore(d)
       ;...
   DoubleUnderscore(e)
       ;...
   DoubleUnderscore(f)
     Debug "OK - f"
       ;...
  EndSelect
EndProcedure

CallBug("_a_") 

CallBug("_f_") 

[/code]
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

:lol: DAS nenne ich mal pfiffig! :allright:
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Josef Sniatecki
Beiträge: 657
Registriert: 02.06.2008 21:29
Kontaktdaten:

Beitrag von Josef Sniatecki »

Gute Idee :allright:
PB 4.61 | Windows Vista - 32Bit
Homepage

"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Benutzeravatar
edel
Beiträge: 3667
Registriert: 28.07.2005 12:39
Computerausstattung: GameBoy
Kontaktdaten:

Beitrag von edel »

Kaeru Gaman hat geschrieben: dass dein Beispiel funktioniert wundert mich jetzt nicht,
weil hier die statischen strings korrekt angelegt werden, jeder für sich.
Doch doch, die Strings werden richtig angelegt, nur niemals benutzt.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

edel hat geschrieben:
Kaeru Gaman hat geschrieben: dass dein Beispiel funktioniert wundert mich jetzt nicht,
weil hier die statischen strings korrekt angelegt werden, jeder für sich.
Doch doch, die Strings werden richtig angelegt, nur niemals benutzt.
du meinst in dem Beispiel, was den IMA erzeugt...
also wird da "nur" der Pointer verbummelt?

... hab jetzt deinen Kommentar noch mal gelesen... hatte ich wohl mißverstanden.

also, die statischen strings werden angelegt, aber PB "vergißt" wo sie sind und greift wild auf den Pool zu...?
lieg ich jetzt richtig?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Little John

Beitrag von Little John »

Kaeru Gaman hat geschrieben:da hat mich ts gestern wohl aufs Glatteis geführt.
Ich habe mich von dem Beispiel offenbar auch irreführen lassen. Du hast Recht, Josef. Sorry.

Gruß, Little John
Antworten