@@ -27,7 +27,7 @@ TOKENS {
2727 TOK_SHL8, TOK_0, TOK_1
2828 # PUSH plus composed PUSH ops
2929 TOK_PUSH, TOK_PUSH_VAR_LOAD
30- TOK_PUSH_NUM, TOK_PUSH_BYTE, TOK_PUSH_0, TOK_PUSH_1
30+ TOK_PUSH_NUM, TOK_PUSH_BYTE, TOK_PUSH_0, TOK_PUSH_1, TOK_POP
3131 # Numeric operators
3232 TOK_NEG, TOK_ABS, TOK_SGN, TOK_ADD, TOK_SUB, TOK_MUL, TOK_DIV, TOK_MOD
3333 # Operators on VAR
@@ -90,7 +90,7 @@ EXTERN {
9090 E_CONST_STRING
9191 E_VAR_CREATE, E_VAR_SET_TYPE, E_LABEL_SET_TYPE
9292 E_VAR_WORD, E_VAR_SEARCH
93- E_LABEL, E_LABEL_DEF
93+ E_LABEL, E_LABEL_DEF, E_LABEL_EXEC, E_DO_EXEC
9494 E_PUSH_VAR, E_POP_VAR
9595
9696# @if EXTENDED
@@ -629,6 +629,16 @@ PAUSE_OPT:
629629 EXPR
630630 E_EOL emit { TOK_0 }
631631
632+ # Optional expression for EXEC
633+ OPT_EXPR:
634+ EXPR emit { TOK_PUSH }
635+ pass
636+
637+ # Optional variable in PROC
638+ OPT_PROC_VAR:
639+ VAR_WORD_SAVE emit { TOK_POP, TOK_VAR_STORE } E_POP_VAR
640+ pass
641+
632642# Parse a line
633643PARSE_LINE_COMMAND: statement
634644 " ." E_REM
@@ -678,9 +688,9 @@ PARSE_LINE_COMMAND: statement
678688 " PAuse" PAUSE_OPT emit TOK_PAUSE
679689 " INC" VAR_WORD_LVALUE_SADDR emit TOK_INC
680690 " DEc" VAR_WORD_LVALUE_SADDR emit TOK_DEC
681- " PRoc" emit { TOK_JUMP, LT_PROC_DATA } E_PUSH_LT E_LABEL_DEF emit LT_PROC_2 E_PUSH_LT
691+ " PRoc" emit { TOK_JUMP, LT_PROC_DATA } E_PUSH_LT E_LABEL_DEF emit LT_PROC_2 E_PUSH_LT OPT_PROC_VAR
682692 " ENDProc" E_POP_PROC_2 emit TOK_RET E_POP_PROC_DATA
683- " EXEc" emit { TOK_CALL, VT_UNDEF } E_LABEL
693+ " EXEc" E_LABEL_EXEC OPT_EXPR emit { TOK_CALL } E_DO_EXEC
684694 " DAta" DATA_VAR DATA_END
685695 " END" emit TOK_END
686696# @if FASTBASIC_FP
0 commit comments