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.
13 lines
293 B
Plaintext
13 lines
293 B
Plaintext
;; Benchmark: 1.0ms
|
|
;; Benchmark-Repeat: 3
|
|
;; Tests the effect of record inlining and field lookup optimization
|
|
;; Output: 10000
|
|
(do
|
|
(def config {:start 0 :limit 10000 :step 2})
|
|
(def x (.start config))
|
|
|
|
(while (< x (.limit config))
|
|
(do (assign x (+ x (.step config))) x))
|
|
x
|
|
)
|