dmsc / fastbasic

FastBasic - Fast BASIC interpreter for the Atari 8-bit computers
GNU General Public License v2.0
139 stars 20 forks source link

SELECT...CASE #92

Open mdraith opened 4 months ago

mdraith commented 4 months ago

Would be nice to have the following:

SELECT A
CASE 1:
  PRINT "A"
CASE 2 TO 4:
  PRINT "B-D"
DEFAULT:
  PRINT "OTHER"
ENDSELECT
EricCarrGH commented 1 month ago

FYI, I had mentioned this in the past and @dmsc has replied:

No, I did not include a "SELECT CASE" statement, because is not that easy to implement: the result of the select expression needs to be stored in some place, and then compared with different values in each case. And from a speed perspective, a IF...ELIF...ELIF...ENDIF sequence using a variable should be faster.

.. in this thread: https://forums.atariage.com/topic/349675-fastbasic-help/

So, it likely would not be added.

Perhaps in the future, if enough people desire, a pre-processer could convert SELECT CASE to IF/ELIF/ENDIF statements before sending it to the compiler:

IF A=1
  PRINT "A"
ELIF A>=2 AND A<=4
  PRINT "B-D"
ELSE
  PRINT "OTHER"
ENDIF

comparing potential minified differences:

' SELECT CASE
S.A:C.1:?"A":C.2T.4:?"B-D":D.:?"OTHER":E.

' IF/ELIF
I.A=1:?"A":ELI.A>1A.A<5:?"B-D":EL.:?"OTHER":E.