was passiert eigentlich, wenn ich einer Prototyp-Variable eine nicht passende Prozedur übergebe?
Mit nicht passend meine ich hierbei die Anzahl der Parameter.
Nach der x64-Aufrufskonvention, welche ja auch in PB genutzt wird, sollte dies im Bereich von 0 bis 4 Parametern eigentlich keine rolle spielen,
da zuviel übergebene Parameter (also die Register) einfach nicht abgefragt werden und
zuwenig übergebene Parameter einfach den aktuellen Wert der Register nutzen.
Damit sollte es also nie zu Problemen mit dem Stack kommen, oder?
Code: Alles auswählen
Prototype.i Test(Alpha.i, Beta.i=-102)
Procedure Test1(Alpha, Beta.i=-2) ; Anderer Default-Wert für zweiten Parameter
Protected Gamma.i = -3, Delta = -4
Debug "Alpha = "+Alpha
Debug "Beta = "+Beta
Debug "Gamma = "+Gamma
Debug "Delta = "+Delta
EndProcedure
Procedure Test2(Alpha, Beta.i) ; Zweiter Parameter ist nicht optional
Protected Gamma.i = -3, Delta = -4
Debug "Alpha = "+Alpha
Debug "Beta = "+Beta
Debug "Gamma = "+Gamma
Debug "Delta = "+Delta
EndProcedure
Procedure Test3(Alpha) ; Zweiter Parameter fehlt
Protected Gamma.i = -3, Delta = -4
Debug "Alpha = "+Alpha
Debug "Beta = "+Beta
Debug "Gamma = "+Gamma
Debug "Delta = "+Delta
EndProcedure
Procedure Test4(Alpha, Beta.i, Gamma.i=-103) ; Dritter Parameter optional
Protected Blub.i = -3, Delta = -4
Debug "Alpha = "+Alpha
Debug "Beta = "+Beta
Debug "Gamma = "+Gamma+" (undefiniert)"
Debug "Delta = "+Delta
EndProcedure
Procedure Test5(Alpha, Beta.i, Gamma.i) ; Dritter Parameter nötig
Protected Blub.i = -3, Delta = -4
Debug "Alpha = "+Alpha
Debug "Beta = "+Beta
Debug "Gamma = "+Gamma+" (undefiniert)"
Debug "Delta = "+Delta
EndProcedure
Define Call1.Test = @Test1()
Define Call2.Test = @Test2()
Define Call3.Test = @Test3()
Define Call4.Test = @Test4()
Define Call5.Test = @Test5()
Debug "Anderer Default-Wert für 2. Parameter"
Call1(123, 456)
Call1(123)
Debug "Zweiter Parameter ist nicht optional"
Call2(123, 456)
Call2(123)
Debug "Zweiter Parameter fehlt"
Call3(123, 456)
Call3(123)
Debug "Dritter Parameter optional"
Call4(123, 456)
Call4(123)
Debug "Dritter Parameter nötig"
Call5(123, 456)
Call5(123)