Search parent namespaces when resolving identifiers

This commit is contained in:
dcodeIO
2017-12-27 19:17:29 +01:00
parent ba61a5e414
commit eccac129ad
9 changed files with 264 additions and 253 deletions

View File

@ -6,36 +6,36 @@
(memory $0 1)
(export "memory" (memory $0))
(start $start)
(func $getter-setter/Foo.get_bar (; 0 ;) (type $i) (result i32)
(func $getter-setter/Foo.get:bar (; 0 ;) (type $i) (result i32)
(get_global $getter-setter/Foo._bar)
)
(func $getter-setter/Foo.set_bar (; 1 ;) (type $iv) (param $0 i32)
(func $getter-setter/Foo.set:bar (; 1 ;) (type $iv) (param $0 i32)
(set_global $getter-setter/Foo._bar
(get_local $0)
)
)
(func $start (; 2 ;) (type $v)
(if
(call $getter-setter/Foo.get_bar)
(call $getter-setter/Foo.get:bar)
(unreachable)
)
(call $getter-setter/Foo.set_bar
(call $getter-setter/Foo.set:bar
(i32.const 1)
)
(if
(i32.ne
(call $getter-setter/Foo.get_bar)
(call $getter-setter/Foo.get:bar)
(i32.const 1)
)
(unreachable)
)
(if
(block (result i32)
(call $getter-setter/Foo.set_bar
(call $getter-setter/Foo.set:bar
(i32.const 2)
)
(i32.ne
(call $getter-setter/Foo.get_bar)
(call $getter-setter/Foo.get:bar)
(i32.const 2)
)
)

View File

@ -7,12 +7,12 @@
(memory $0 1)
(export "memory" (memory $0))
(start $start)
(func $getter-setter/Foo.get_bar (; 0 ;) (type $i) (result i32)
(func $getter-setter/Foo.get:bar (; 0 ;) (type $i) (result i32)
(return
(get_global $getter-setter/Foo._bar)
)
)
(func $getter-setter/Foo.set_bar (; 1 ;) (type $iv) (param $0 i32)
(func $getter-setter/Foo.set:bar (; 1 ;) (type $iv) (param $0 i32)
(set_global $getter-setter/Foo._bar
(get_local $0)
)
@ -21,19 +21,19 @@
(if
(i32.eqz
(i32.eq
(call $getter-setter/Foo.get_bar)
(call $getter-setter/Foo.get:bar)
(i32.const 0)
)
)
(unreachable)
)
(call $getter-setter/Foo.set_bar
(call $getter-setter/Foo.set:bar
(i32.const 1)
)
(if
(i32.eqz
(i32.eq
(call $getter-setter/Foo.get_bar)
(call $getter-setter/Foo.get:bar)
(i32.const 1)
)
)
@ -43,10 +43,10 @@
(i32.eqz
(i32.eq
(block (result i32)
(call $getter-setter/Foo.set_bar
(call $getter-setter/Foo.set:bar
(i32.const 2)
)
(call $getter-setter/Foo.get_bar)
(call $getter-setter/Foo.get:bar)
)
(i32.const 2)
)

View File

@ -1,11 +1,17 @@
(module
(type $i (func (result i32)))
(type $v (func))
(global $namespace/Outer.Inner.aVar (mut i32) (i32.const 0))
(memory $0 1)
(export "test" (func $namespace/test))
(export "memory" (memory $0))
(func $namespace/test (; 0 ;) (type $v)
(block $__inlined_func$namespace/Outer.Inner.aFunc
(nop)
(start $start)
(func $start (; 0 ;) (type $v)
(drop
(block (result i32)
(block $__inlined_func$namespace/Outer.Inner.aFunc (result i32)
(get_global $namespace/Outer.Inner.aVar)
)
)
)
)
)

View File

@ -1,12 +1,16 @@
(module
(type $i (func (result i32)))
(type $v (func))
(global $namespace/Outer.Inner.aVar (mut i32) (i32.const 0))
(memory $0 1)
(export "test" (func $namespace/test))
(export "memory" (memory $0))
(func $namespace/Outer.Inner.aFunc (; 0 ;) (type $v)
(nop)
(start $start)
(func $namespace/Outer.Inner.aFunc (; 0 ;) (type $i) (result i32)
(get_global $namespace/Outer.Inner.aVar)
)
(func $namespace/test (; 1 ;) (type $v)
(call $namespace/Outer.Inner.aFunc)
(func $start (; 1 ;) (type $v)
(drop
(call $namespace/Outer.Inner.aFunc)
)
)
)

View File

@ -1,13 +1,11 @@
namespace Outer {
export namespace Inner {
export let aVar: i32;
export function aFunc(): void {}
export let aVar: i32 = 0;
export function aFunc(): i32 { return aVar; }
export enum anEnum { ONE = 1, TWO = 2 }
}
}
export function test(): void {
Outer.Inner.aVar;
Outer.Inner.aFunc();
Outer.Inner.anEnum.ONE;
}
Outer.Inner.aVar;
Outer.Inner.aFunc();
Outer.Inner.anEnum.ONE;

View File

@ -1,19 +1,25 @@
(module
(type $i (func (result i32)))
(type $v (func))
(global $namespace/Outer.Inner.aVar (mut i32) (i32.const 0))
(global $namespace/Outer.Inner.anEnum.ONE i32 (i32.const 1))
(global $namespace/Outer.Inner.anEnum.TWO i32 (i32.const 2))
(global $HEAP_BASE i32 (i32.const 4))
(memory $0 1)
(export "test" (func $namespace/test))
(export "memory" (memory $0))
(func $namespace/Outer.Inner.aFunc (; 0 ;) (type $v)
(start $start)
(func $namespace/Outer.Inner.aFunc (; 0 ;) (type $i) (result i32)
(return
(get_global $namespace/Outer.Inner.aVar)
)
)
(func $namespace/test (; 1 ;) (type $v)
(func $start (; 1 ;) (type $v)
(drop
(get_global $namespace/Outer.Inner.aVar)
)
(call $namespace/Outer.Inner.aFunc)
(drop
(call $namespace/Outer.Inner.aFunc)
)
(drop
(get_global $namespace/Outer.Inner.anEnum.ONE)
)
@ -70,7 +76,6 @@
GLOBAL: namespace/Outer.Inner.aVar
FUNCTION_PROTOTYPE: namespace/Outer.Inner.aFunc
ENUM: namespace/Outer.Inner.anEnum
FUNCTION_PROTOTYPE: namespace/test
[program.exports]
FUNCTION_PROTOTYPE: namespace/test
;)