Sign in to follow this  
RCL

switch...case bug

Recommended Posts

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

Share this post


Link to post
Share on other sites
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:


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;
}
}


Share this post


Link to post
Share on other sites
Quote:
Original post by WitchLord
I feel really silly now. It turns out that I can't even write a simple bubble sort [wink].


Nobody is guaranteed from mistakes :-)

Thanks, it works now.

Cheers,
RCL

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this