Skip to content

DVM v10 language: structured control flow, subroutines, arrays, mapkeys, Bool, Int, CONST (fixes #125) - #126

Open
liqdmetal wants to merge 1 commit into
DEROFDN:community-devfrom
liqdmetal:feat/dvm-language
Open

liqdmetal wants to merge 1 commit into
DEROFDN:community-devfrom
liqdmetal:feat/dvm-language

Conversation

@liqdmetal

Copy link
Copy Markdown

Summary

One reviewable PR replacing seven stacked PRs (#101, #103, #107, #109, #111,
#115, #117).
The complete DVM v10 language: structured BASIC.

What's in it

Item Syntax What it gives
L1 FOR x = a TO b [STEP z] / NEXT, WHILE/WEND, block IF/ELSE/ENDIF structured loops replace GOTO spaghetti
L2 GOSUB <line> / RETURN shared helper reuse inside one contract
L3 DIM a(n) AS type, a[i], arrlen(a) list semantics + loops over arrays
L4 mapkeys() enumerate SC state keys (batch/paged contracts)
L6 DIM b AS Bool, TRUE/FALSE, &&/`
L7 CONST name = value immutable named constants
L8 enforced version gate new syntax hard-requires version("10.0.0")
L9 DIM i AS Int, negative literals, signed arithmetic signed 64-bit ints (deltas, negatives)

Design notes (why it's safe)

  • All gated >=10.0.0 — pre-fork contracts can never accidentally parse new
    syntax (gateControlFlow rejects versions without version()).
  • Arrays (*[]Variable), Bool, Int are Locals-only — never serialized to
    RamStore/storage, so the change is consensus-neutral on the state tree.
  • Variable.Array is a pointer so Variable stays comparable (it's a map key).
  • Block-IF coexists with the existing single-line IF THEN GOTO (untouched).
  • RETURN pops the CallStack when non-empty (subroutine return), otherwise
    the existing function-return semantics are unchanged.

Tests

14 files, 8 control-flow test suites (L1–L9) covering: FOR sum/step/nesting,
WHILE countdown, IF/ELSE both branches, nested GOSUB, array fill via loop +
get/set + arrlen, Bool logic + params, CONST immutability, Int negative
arithmetic, and version-gate rejection. Plus a wargame test.

Supersedes

Closes #101, #103, #107, #109, #111, #115, #117 in favour of this single
package.

…Int, CONST

Rebuilt on DEROFDN community-dev (post-DEROFDN#129 func_table refactor).

L1 FOR/WHILE/block-IF, L2 GOSUB, L3 arrays+arrlen, L4 mapkeys,
L6 Bool, L7 CONST, L8 version gate, L9 Int. All Locals-only
(consensus-neutral). arrlen/mapkeys func_table entries merged into the
refactored grouped map. 33 language tests pass, full dvm suite green.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant