Oxygen Basic

Information => Development => Topic started by: Aurel on April 23, 2015, 09:14:13 PM

Title: do we can this to?
Post by: Aurel on April 23, 2015, 09:14:13 PM
from bp.org ..by Ed Davis:
Quote
Interestingly, FreeBasic can use computed gotos for select case statements:

From the FreeBasic documentation:

Select Case As Const integer_expression
[ Case constant | enumeration ]
[ statements ]
[ Case Else ]
[ statements ]
End Select

If As Const is used, only integer constants (all numeric constants excluding the two floating-point constants: single and double) can be evaluated and the expression list supports simple constants and enumerations only. "To" ranges are supported, but "Is" relational operators are not.

With As Const, a jump table is created to contain the full range of integer Cases handled. This allows Select Case As Const to be faster than Select Case. However, the size of the range of values is limited, and the largest value in the range may be no higher than the smallest value + 4096.

Kind of neat I think!
Title: Re: do we can this to?
Post by: Charles Pegge on April 23, 2015, 10:45:53 PM
Hi Aurel,

Not in a case block but computed gotos / Jump Tables are easy to set up.

Code: OxygenBasic
  1. 'SETUP
  2. ======
  3. indexbase 1
  4. sys t={@AA,@BB,@CC} 'map label addreses into table
  5.  
  6. 'TEST
  7. =====
  8.  
  9. token=2
  10. goto t[token]
  11.  
  12. AA:
  13. print "AA"
  14. jmp fwd done
  15.  
  16. BB:
  17. print "BB"
  18. jmp fwd done
  19.  
  20. CC:
  21. print "CC"
  22. jmp fwd done
  23.  
  24.  
  25.  
  26. done:
  27.  
Title: Re: do we can this to?
Post by: Aurel on April 24, 2015, 02:32:47 AM
ok Charles i will try  ;)
Title: Re: do we can this to?
Post by: Charles Pegge on April 24, 2015, 03:34:55 AM
You can also build the table this way, of course:

Assigning with a specific index will make the code clearer when there are many jump targets.

Code: OxygenBasic
  1. sys t[100]
  2. indexbase 1
  3. t[1]=@AA
  4. t[2]=@BB
  5. t[3]=@CC
  6. ...
  7.