Hallo,
und erstmal vielen Dank für den vielen Dank und die
Motivation weiter zu machen!

Habe heute auch schon weitergemacht und 2 neue Befehle
eingebaut. Werde aber erst noch weiter machen und die
nächste Version dann in den nächsten 1 oder 2 Tagen
hier rein stellen.
Zu dem Fehler:
$1FFFFFFFF ist ein legaler Wert für den Variablentyp Quad.
Das muß so sein, wie STARGÅTE bereits sagte, um zwischen
"Farbe" und "keine Farbe" zu unterscheiden.
RGBA()-Farben können schließlich den kompletten Long-Raum (32bit)
einnehmen. Man kann also nicht $1FFFFFFF nehmen, da dass dann
eine legale Farbe wäre.
Festzustellen ist: PureBasic gibt
keinen Syntaxfehler oder bemängelt
irgend etwas. Auf x86 läuft es wie es soll. Auf x64 gibt es einen
Assemblerfehler. Der Assembler meint $1FFFFFFFF ist kein
legales qword (Quad, 64bit), was imho nach einem Fehler im Assembler
aussieht.
Der Assemblerfehler kommt bei Default-Parameter vom Typ Quad:
Code: Alles auswählen
Procedure myBox(x.f, y.f, width.f, height.f, color.q=$1FFFFFFFF)
If color = $1FFFFFFFF
ProcedureReturn x+y+width+height
EndIf
EndProcedure
myBox(1,2,3,4,$FFFFFFFFFFFFFF) ; OK
myBox(1,2,3,4,$1FFFFFFFF) ; OK
myBox(1,2,3,4,5) ; OK
myBox(1,2,3,4) ; Assembler Error with default .q parameter
Das sollte einen Bugreport wert sein.
EDIT:
Der Unterschied im generierten Assemblercode:
Code: Alles auswählen
; myBox(1,2,3,4,$FFFFFFFFFFFFFF) ; OK
SUB rsp,8
MOV rax,72057594037927935
PUSH rax
[...]
; myBox(1,2,3,4) ; Assembler Error with default .q parameter
SUB rsp,8
PUSH qword 8589934591
Das sieht danach aus, als wenn es nicht erlaubt ist direkt qwords
auf den Stack zu pushen. Das würde heißen, PB generiert falschen
ASM-Code.
PB müßte dann auch für Default-Parameter den Code über das Register
generieren, der korrekt geht.