Seite 1 von 2

Parserschwäche

Verfasst: 15.05.2011 22:05
von Frabbing
Warum ist eigentlich...

Code: Alles auswählen

a = *mem + ((currentpos-beginpos) * 2)
char.i = PeekB(a)
...nicht das gleiche wie...

Code: Alles auswählen

char.i = PeekB(*mem + ((currentpos-beginpos) * 2))
Das zweite geht nicht richtig, das erste schon. Ist doch eindeutig ein Bug, oder? >_<

Re: Parserschwäche

Verfasst: 15.05.2011 22:20
von Sirius-2337
Also ich bekomm bei beiden das gleiche Ergebniss

Code: Alles auswählen

*mem = AllocateMemory(1024)
RandomSeed(100)
RandomData(*mem, 1024)

currentpos = 102
beginpos   = 12

a = *mem + ((currentpos-beginpos) * 2)
char.i = PeekB(a)

Debug char

; - - - - - -

*mem = AllocateMemory(1024)
RandomSeed(100)
RandomData(*mem, 1024)

currentpos = 102
beginpos   = 12

char.i = PeekB(*mem + ((currentpos-beginpos) * 2))

Debug char

Re: Parserschwäche

Verfasst: 15.05.2011 22:51
von Frabbing
Jetzt geht es wieder, komisch... Bin sicher, das ich nichts verändert hab.
Werde ich auf jeden Fall im Auge behalten. Kommen solche Fehler denn ansonsten schonmal vor? Ist da was bekannt?

Re: Parserschwäche

Verfasst: 15.05.2011 23:00
von PMV
PB ist kein fehlerfreier Compiler. Es können immer und überall alle
möglichen (und unmögliche) Fehler auftreten, die du nicht zu
verantworten hast :wink: Das kann leider keiner ausschließen,
allerdings kann wohl keiner hier sagen, ob "genau so ein Fehler"
schon mal gemeldet wurde.

MFG PMV

Re: Parserschwäche

Verfasst: 16.05.2011 00:24
von Regenduft
Hmmm...

das klingt zwar stark nach Tippfehler, aber es ist evtl. möglich, dass es da wirklich einen seltsamen schwer reproduzierbaren Bug gibt... Betonung: EVENTUELL! (damit ich mich im Falle eines Denkfehlers nur zu 90% anstatt 100% lächerlich mache :wink:)

Hatte gedacht, es liegt an meinem verpfuschten System und hab' das ganze nach dem Win neu draufklatschen nicht weiter zu verfolgt.

Folgender (vermutlicher) Bug ist (bei mir) reproduzierbar:

Code: Alles auswählen

EnableExplicit

Global a = 0
Global b = 1
Global c = 10

Debug a + b * ( c / 100 * 3600 + c % 100 * 60 )
; Ausgabe = 0 (Falsch!)

Debug 0 + b * ( c / 100 * 3600 + c % 100 * 60 )
; "a" durch "0" ersetzt -> Ausgabe = 600 (OK!)

Debug a + 1 * ( c / 100 * 3600 + c % 100 * 60 )
; "b" durch "1" ersetzt -> Ausgabe = 600 (OK!)

Debug a + b * ( 10 / 100 * 3600 + 10 % 100 * 60 )
; "c" durch "10" ersetzt -> Ausgabe = 600 (OK!)

Debug a + b * c / 100 * 3600 + b * c % 100 * 60
; Klammer aufgelöst -> Ausgabe = 600 (OK!)
Habe ich hier ein Grundlegendes Low-Level-Verständnisproblem oder ist das ein Bug?

Lustiger Weise war das so, dass der Bug MITTEN in einem ewig langen Code sich absolut unberechenbar verhielt! Ab und zu war die Ausgabe korrekt:

Code: Alles auswählen

Debug a + b * ( c / 100 * 3600 + c % 100 * 60 )
; Ausgabe = einmal 0 (FALSCH); einmal 600 (OK!)
Desweiteren verhielt sich (MITTEN im Code) Folgendes genau umgekehrt wie erwartet/angedacht:

Code: Alles auswählen

If #PB_MessageRequester_Yes = MessageRequester("blind", "blind", #PB_MessageRequester_YesNo)
  Debug "Yes!" ; Ausgabe bei Buttonclick "No"!  FALSCH
Else
  Debug "No!"  ; Ausgabe bei Buttonclick "Yes"! FALSCH
EndIf
Wenn ich den Code aber isoliert hatte, lief alles einwandfrei!

Deswiteren lief alles einwandfrei, wenn ich die Bedingung umgedreht hatte:

Code: Alles auswählen

If MessageRequester("blind", "blind", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
  Debug "Yes!" ; Ausgabe bei Buttonclick "Yes"! RICHTIG
Else
  Debug "No!"  ; Ausgabe bei Buttonclick "No"!   RICHTIG
EndIf
War leider so doof und hatte das nimmer getestet. Frabbing hat mich jetzt aber dran erinnert. Ich habe leider nurnoch den ersten (isolierten) Code. Beim ersten Auftreten hatte ich noch PB 4.51 drauf, jetzt PB 4.60 beta 3.

BTW: Der Code von Sirius-2337 ergibt bei mir (wie eigentlich zu erwarten) auch korrekte Werte.

Re: Parserschwäche

Verfasst: 16.05.2011 07:05
von Nino
Regenduft hat geschrieben:Folgender (vermutlicher) Bug ist (bei mir) reproduzierbar:

Code: Alles auswählen

EnableExplicit

Global a = 0
Global b = 1
Global c = 10

Debug a + b * ( c / 100 * 3600 + c % 100 * 60 )
; Ausgabe = 0 (Falsch!)

Debug 0 + b * ( c / 100 * 3600 + c % 100 * 60 )
; "a" durch "0" ersetzt -> Ausgabe = 600 (OK!)

Debug a + 1 * ( c / 100 * 3600 + c % 100 * 60 )
; "b" durch "1" ersetzt -> Ausgabe = 600 (OK!)

Debug a + b * ( 10 / 100 * 3600 + 10 % 100 * 60 )
; "c" durch "10" ersetzt -> Ausgabe = 600 (OK!)

Debug a + b * c / 100 * 3600 + b * c % 100 * 60
; Klammer aufgelöst -> Ausgabe = 600 (OK!)
Habe ich hier ein Grundlegendes Low-Level-Verständnisproblem oder ist das ein Bug?
Das ist ein Bug. Auch wenn ich das a am Ende addiere oder ganz weglasse, erhalte ich das richtige Ergebnis (PB 4.51 unter Windows XP x86):

Code: Alles auswählen

EnableExplicit

Define a = 0
Define b = 1
Define c = 10

Debug a + b * ( c / 100 * 3600 + c % 100 * 60 )
; Ausgabe = 0 (falch!)

Debug b * ( c / 100 * 3600 + c % 100 * 60 ) + a
; Ausgabe = 600 (richtig)

Debug b * ( c / 100 * 3600 + c % 100 * 60 )
; Ausgabe = 600 (richtig)
Durch Addition der Variablen a mit dem Wert 0 darf sich das Ergebnis in keinem Fall ändern.

Grüße, Nino

Re: Parserschwäche

Verfasst: 16.05.2011 09:38
von Frabbing
Dann bin ich ja einigermassen beruhigt, dass es nicht zwingend an mir liegt (oder eben auch nicht, weil es tatsächlich Parserbugs gibt).
das klingt zwar stark nach Tippfehler, aber es ist evtl. möglich, dass es da wirklich einen seltsamen schwer reproduzierbaren Bug gibt... Betonung: EVENTUELL!
Tippfehler schliesse ich aus. Hatte natürlich in der Variablenliste nachgesehen.
Da werde ich in Zukunft wohl Werte aufdröseln, bevor ich sie an eine Funktion schicke.

Re: Parserschwäche

Verfasst: 16.05.2011 17:53
von mk-soft
Habs mal ins englische Bugforum gestellt

Re: Parserschwäche

Verfasst: 16.05.2011 17:59
von ts-soft
mk-soft hat geschrieben:Habs mal ins englische Bugforum gestellt
Hoffentlich merkt niemand, das falsch falsch geschrieben ist :lol:

Re: Parserschwäche

Verfasst: 16.05.2011 18:01
von mk-soft
Für den Inhalt meiner Arbeit bin ich nicht verantwortlich... Copy and Paste :mrgreen: