blob: aa3441483c106afe76803c073604812c26963f10 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
1. Nested functions should inherit constants from parent scopes, but not
local variables. At the moment the former works, but when trying to
(incorrectly) use a local variable from an outer scope in an inner
function, the compiler crashes:
foo :: () {
x := 42;
X :: 69;
bar :: () int { return x; } /* not fine; breaks */
baz :: () int { return X; } /* totally fine */
}
This is presumably due to the compiler maintaining a single tree of
scopes where a scope contains information for both constants and
variables. If this is indeed the cause, then there should most
probably be separate scope-trees; one which has scopes for constants,
and one which has scopes for variables.
2. Recursive functions crash the compiler.
foo :: () { return foo(); } /* breaks */
3. The following example function has a use-after-free for a yet
undiagnosed reason:
iota :: () int {
x: int = -1;
return x;
}
|