beb693a068
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.
9 lines
141 B
Plaintext
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))
|
|
)
|