mirror of
https://github.com/imjasonh/nescript
synced 2026-07-08 00:45:38 +00:00
analyzer: reject functions with more than 4 parameters (E0506)
The v0.1 calling convention passes parameters through four fixed zero-page slots ($04-$07). Functions declared with 5+ parameters were silently dropped past the 4th, producing a runtime miscompile with no compile-time signal — a trap I hit while building the War example (arm_fly took 6 params and silently corrupted fly_card and fly_face_up). Add E0506 to the analyzer so the over-arity case becomes a clear compile-time error pointing at the user's `fun` declaration with guidance toward globals or splitting. New tests cover both the 5- param rejection and the 4-param accept boundary. Documented in examples/war/COMPILER_BUGS.md §1, language-guide.md "Restrictions" section, and the error code table. https://claude.ai/code/session_0143dTgh3UeRrtfHgQwzcv5z
This commit is contained in:
parent
8ababdcec4
commit
155a0e7096
4 changed files with 69 additions and 0 deletions
|
|
@ -280,6 +280,7 @@ reset_score()
|
|||
|
||||
- **No recursion.** Both direct and indirect recursion are compile errors (`E0402`).
|
||||
- **Call depth limit.** The default maximum call depth is 8. Exceeding it produces error `E0401`.
|
||||
- **Maximum 4 parameters per function.** The v0.1 calling convention passes parameters via four fixed zero-page slots (`$04`-`$07`). Declaring a function with 5+ parameters produces error `E0506`. Pack additional state into globals or split the function into smaller helpers.
|
||||
|
||||
---
|
||||
|
||||
|
|
@ -1203,6 +1204,7 @@ reference NEScript variables.
|
|||
| E0503 | Undefined function |
|
||||
| E0504 | Missing start declaration |
|
||||
| E0505 | Multiple start declarations|
|
||||
| E0506 | Function has too many parameters (max 4) |
|
||||
|
||||
### Warnings (W01xx)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue