Bonjour,
Ce n'est qu'un problème de pile.
Code : Tout sélectionner
Syntax
Goto <label>
Description
Cette commande permet de transférer directement l'exécution du programme à l'emplacement d'un label. Soyez attentif en utilisant Goto car une mauvaise utilisation peut provoquer une fin anormale du programme...
Note: Pour sortir d'une boucle en toute sécurité, vous devez toujours utiliser Break à la place de Goto et ne l'utilisez pas dans un bloc Select/EndSelect, à moins que vous ayez les aptitudes nécessaire pour gérer la pile vous-même.
Avec un !POP RAX sur X64 cela fonctionne.
Code : Tout sélectionner
Procedure.i rolldice(nb.i,type.i,option=0)
rollz:
retry=0
Debug "rollz"
result=0
Debug "nb"+nb
For rol=1 To nb
result+Random(type,1)
Next
Debug result
Select option
Case 1
If result<10
Debug "result < 10 "
!POP RAX ; PEUT ETRE !POP EAX SUR x86 ???
Goto rollz
EndIf
EndSelect
ProcedureReturn result
EndProcedure
For a= 1 To 10
rolldice(3,6,1)
Next
Il me semble que FakeReturn fonctionnait avant, mais plus maintenant.
Peut-être faudrait il fabriquer une macro, en attendant une instruction intégrée ?