Cleanup; Fix an issue with 'let' declarations reusing a local

This commit is contained in:
dcodeIO
2018-02-14 19:21:31 +01:00
parent b1c6ccab2a
commit d31e484b15
13 changed files with 684 additions and 484 deletions

View File

@ -1,9 +1,13 @@
(module
(type $iv (func (param i32)))
(type $v (func))
(memory $0 1)
(export "memory" (memory $0))
(start $start)
(func $start (; 0 ;) (type $v)
(func $scoped/fn (; 0 ;) (type $iv) (param $0 i32)
(nop)
)
(func $start (; 1 ;) (type $v)
(local $0 i32)
(loop $continue|0
(if
@ -42,5 +46,8 @@
)
)
)
(call $scoped/fn
(i32.const 42)
)
)
)

View File

@ -12,3 +12,15 @@ for (let aGlobal /* that shadows */: i32 = 0; aGlobal < 1; ++aGlobal)
let /* still not */ aConstant: f32 = 10;
}
}
// regression test: reused local should be updated with new requested type
function fn(c: i32): void {
{
let a: bool = 0;
}
{
let b: i32;
b = c; // should not issue a conversion warning mentioning 'bool'
}
}
fn(42);

View File

@ -1,4 +1,5 @@
(module
(type $iv (func (param i32)))
(type $v (func))
(global $scoped/aGlobal (mut i32) (i32.const 1))
(global $scoped/aConstant i32 (i32.const 3))
@ -7,7 +8,28 @@
(memory $0 1)
(export "memory" (memory $0))
(start $start)
(func $start (; 0 ;) (type $v)
(func $scoped/fn (; 0 ;) (type $iv) (param $0 i32)
(local $1 i32)
;;@ scoped.ts:18:2
(block
;;@ scoped.ts:19:4
(set_local $1
;;@ scoped.ts:19:18
(i32.const 0)
)
)
;;@ scoped.ts:21:2
(block
;;@ scoped.ts:22:4
(nop)
;;@ scoped.ts:23:4
(set_local $1
;;@ scoped.ts:23:8
(get_local $0)
)
)
)
(func $start (; 1 ;) (type $v)
(local $0 i32)
(local $1 i32)
(local $2 i64)
@ -92,5 +114,10 @@
)
)
)
;;@ scoped.ts:26:0
(call $scoped/fn
;;@ scoped.ts:26:3
(i32.const 42)
)
)
)