switch...case bug
Hi
There seems to be a bug in AngelScript. Here is the code that reproduces it:
===== 8< =====
int main()
{
int i;
for ( i = 0; i <= 5; i ++ )
{
switch ( i )
{
case 5: Log( "5" ); break;
case 4: Log( "4" ); break;
case 3: Log( "3" ); break;
case 2: Log( "2" ); break;
case 1: Log( "1" ); break;
default: Log( "default" ); break;
}
}
return 0;
}
===== >8 =====
The output is:
===== 8< =====
default
default
default
default
4
default
===== >8 =====
'Works' with AngelScript 1.9.0.
If cases are sorted ascending, everything is Ok.
Cheers,
RCL
Thanks, for the detailed report. I'll check it out. If the fix is simple I'll tell you here, otherwise I'll release an update soon.
I feel really silly now. It turns out that I can't even write a simple bubble sort [wink].
The fix for this bug is to replace the loop in as_compiler.as line 691 with the following:
The fix for this bug is to replace the loop in as_compiler.as line 691 with the following:
for( int fwd = 1; fwd < caseValues.GetLength(); fwd++ ) { for( int bck = fwd - 1; bck >= 0; bck-- ) { int bckp = bck + 1; if( caseValues[bck] > caseValues[bckp] ) { // Swap the values in both arrays int swap = caseValues[bckp]; caseValues[bckp] = caseValues[bck]; caseValues[bck] = swap; swap = caseLabels[bckp]; caseLabels[bckp] = caseLabels[bck]; caseLabels[bck] = swap; } else break; } }
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement