Symptoms
Code compiles fine, but when you run it you get the error:
Assign Stack Ref Error - Out of range
You may also see other errors like:
CHeap::Delete - ERROR(2) Attempting to delete invalid block 00AE6024 (Task=tInterpreter)
DoNumberExpression - Error 2 Tk=0x2008
GetNumber - Error 1 Tk=0x0000
Cause
Having a SWITCH/CASE statement inside a WAIT:
DEFINE_VARIABLE
X
DEFINE_CALL 'Switch Case In A Wait' (X)
{
WAIT 20
{
X++
IF (X > 2)
X = 0
SWITCH (X)
{
CASE 2:
SEND_STRING 0,FORMAT('SWITCH 2, X = %d',X)
CASE 1:
SEND_STRING 0,FORMAT('SWITCH 1, X = %d',X)
DEFAULT:
SEND_STRING 0,'DEFAULT'
}
}
}
DEFINE_PROGRAM
CALL 'Switch Case In A Wait' (X)
// end
Resolution
Modify the code so it uses a SELECT/ACTIVE statement instead:
DEFINE_VARIABLE
X
DEFINE_CALL 'Select Active In A Wait' (X)
{
WAIT 20
{
X++
IF (X > 2)
X = 0
SELECT
{
ACTIVE (X = 2):
SEND_STRING 0,FORMAT('SWITCH 2, X = %d',X)
ACTIVE (X = 1):
SEND_STRING 0,FORMAT('SWITCH 1, X = %d',X)
ACTIVE (1):
SEND_STRING 0,'DEFAULT'
}
}
}
DEFINE_PROGRAM
CALL 'Select Active In A Wait' (X)
// end