Files
RustAst/examples/macro_hygiene.myc
Michael Schimmel beb693a068 Refactor: Implement block scoping and statement separation
This commit introduces fundamental changes to Myc's language structure
to enhance type safety and scoping clarity.

Key changes include:
- Introducing local scopes for `do` blocks.
- Separating statements (`def`, `assign`) from expressions, where
  statements now have no return value and are only allowed within
  blocks.
- A block now consists of multiple statements followed by a single final
  expression.
- Stricter validation rules are enforced, such as disallowing
  redefinition of local symbols in the same scope while allowing
  shadowing of outer symbols.
- Compiler errors are generated for statements used in expression
  contexts.

The implementation involved modifications to the AST, parser, binder
(scope-stack), and various compiler passes, along with VM runtime
optimizations.
2026-03-09 16:38:44 +01:00

9 lines
141 B
Plaintext

;; Benchmark: 246ns
;; Benchmark-Repeat: 8261
;; Output: 5
(do
(def y 1)
(macro m1 [x] `(do (def y 10) (assign y 4) y))(m1 8)
(+ y (m1 8))
)