summary_step5.3.md 1.6 KB

V3 step 5.3 — Math, WholeIO, input (done 2026-09-22)

Third stdlib landing. Suite 93/93 (50 run — incl. 4 trap-aborts, 4 sessions, 2 session-output, 2 session-input, 1 unit — + 43 reject). LL(1)-clean, zero gm2 warnings.

Math (stdlib/math)

Direct libm bindings via EXTERNAL (the routine names are valid Modula-2 identifiers and match the C symbols): sqrt, exp, ln, sin, cos, arctan, plus fabs exposed as abs, and the constants Pi / E. REAL parameters/returns lower as QBE d. Harness now links -lm.

MathProg → 12 (sqrt(144.0) + sin(0.0)).

Input (runtime/syslib/shim.c + SysIO)

Shim additions m2readchar (fgetc), m2readint (whitespace-skipping signed decimal). SysIO gains ReadChar / ReadInt; the harness gains expect_run_files_in (pipes stdin). ReadProg reads two integers and prints the sum → 42.

WholeIO (stdlib/wholeio)

Classic WriteInt / WriteCard / ReadInt(VAR) / ReadCard(VAR) over the shim integer routines. WholeIOProg reads two ints and prints their product → 42.

Notes

  • External functions returning CHAR/INTEGER bind directly (m2readchar() : CHAR, m2readint() : INTEGER); a zero-parameter external call is name().
  • math.def REAL constants are emitted as globals flushed at main startup (existing REAL-const path), so Math.Pi loads correctly in clients.

Deferred to 5.4+

Files, Storage / SYSTEM (ALLOCATE/DEALLOCATE, ADDRESS, generic pointers — needs SYSTEM types), explicit external link names, string escapes, ReadString. Traps still $abort.