Deliver GALAGA tutorial and akbasic enemy scripting example #39

Closed
logikoma wants to merge 7 commits from 34 into feature/reduce_memory_usage
3 changed files with 28 additions and 0 deletions
Showing only changes of commit dde1d91c6e - Show all commits

View File

@@ -23,6 +23,7 @@ akerr_ErrorContext *akbasic_scanner_zero(akbasic_Runtime *obj)
obj->current = 0; obj->current = 0;
obj->start = 0; obj->start = 0;
obj->hasError = false; obj->hasError = false;
obj->tokentype = AKBASIC_TOK_UNDEFINED;
SUCCEED_RETURN(errctx); SUCCEED_RETURN(errctx);
} }
@@ -409,6 +410,16 @@ akerr_ErrorContext *akbasic_scanner_scan(akbasic_Runtime *obj, const char *line,
obj->current = 0; obj->current = 0;
obj->start = 0; obj->start = 0;
obj->hasError = false; obj->hasError = false;
/*
* The `REM` early-exit below leaves `tokentype` holding AKBASIC_TOK_REM,
* and the loop's post-switch check reads it before the first character of
* the *next* line has assigned anything. A line whose first character
* carries no token of its own -- leading whitespace -- then re-triggered
* the REM break and scanned to nothing: every indented line after a REM
* was silently skipped. A numbered program never saw it, because the line
* number is the first token and overwrites the leftover.
*/
obj->tokentype = AKBASIC_TOK_UNDEFINED;
/* /*
* Cleared here rather than by each caller, so the flag always describes the * Cleared here rather than by each caller, so the flag always describes the
* line this call just scanned. It used to be cleared only in * line this call just scanned. It used to be cleared only in

View File

@@ -0,0 +1,14 @@
REM The line after this comment is indented, and it must still run: the
REM scanner's REM early-exit used to leave TOK_REM armed, and the next
REM line's leading whitespace re-triggered it -- every indented line
REM after a REM was silently skipped. Unnumbered on purpose: a numbered
REM line's first token overwrites the leftover and hides the defect.
PRINT 1
REM an indented statement follows
PRINT 2
REM an indented multi-line DEF body, the shape that found it
DEF F(N#)
REM a comment inside the body
RETURN N# + 5
PRINT F(10)
END

View File

@@ -0,0 +1,3 @@
1
2
15