From 692018ec4ffbcc92d50ce5f4d6678fa35513c38f Mon Sep 17 00:00:00 2001 From: Luxferre Date: Sat, 13 Jun 2026 22:54:39 +0300 Subject: [PATCH] Actually, self-modification is possible but... --- README.md | 1 + lttb-manual.md | 2 ++ 2 files changed, 3 insertions(+) diff --git a/README.md b/README.md index 1363444..b32a304 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ The LTTB specification expands upon the original Design Notes in the following m - Any invalid statement (including `REM`) can be used for comments. - No command can be abbreviated inside `IF` statements. - `LET` and `THEN` keywords are optional. +- `IF` statements also allow inserting line numbers after `THEN`, making it possible to write self-modifying programs. - A special `RND(n)` function is introduced that generates a random number from 0 to `n-1`. - The `NEW` command is synonym to `CLEAR`. - The `BYE` command can be used to exit the interpreter. diff --git a/lttb-manual.md b/lttb-manual.md index 6b63c05..6977b87 100644 --- a/lttb-manual.md +++ b/lttb-manual.md @@ -62,6 +62,8 @@ Execute a statement `[stmt]` if the relation denoted by `relop` holds between `[ Examples: `IF A > B THEN LET C = A-B`, `IF X<1000 THEN GOTO 400` +Non-standard extension: if the `[stmt]` statement starts with a line number, LTTB doesn't execute it immediately but instead overwrites the original line with the number it starts with. This allows writing self-modifying programs in LTTB. + ### `GOTO [expr]` Direct jump. Evaluates `[expr]` to a line number and continues execution of the program from that line number. If the computed line number is outside the valid range (1 to 32767), the program halts.