Skip to content

The concrete class achieve the base class field value was incorrect. #199

Description

@LiaoPeng
classBase{age: number;constructor(age:number){this.age=age;}}classConcreteextendsBase{constructor(age:number){super(age);}getAge():number{returnthis.age;}}exportfunctiongetAge():number{letconcrete:Concrete=newConcrete(12);returnconcrete.getAge();}

When I call getAge(),I expected: 12, in fact I got 0.

Below is the wast text.

(module
(type$F (func (resultf64)))
(type$iFi (func (parami32f64) (resulti32)))
(type$ii (func (parami32) (resulti32)))
(type$iF (func (parami32) (resultf64)))
(type$v (func))
(global$~lib/allocator/arena/startOffset (muti32) (i32.const0))
(global$~lib/allocator/arena/offset (muti32) (i32.const0))
(memory$00)
(export"memory" (memory$0))
(export"getAge" (func$test_super/getAge))
(start$start)
(func$~lib/allocator/arena/__memory_allocate(; 0 ;) (type$ii) (param$0i32) (resulti32)
(local$1i32)
(local$2i32)
(local$3i32)
(local$4i32)
(if
(get_local$0)
(block
(if
(i32.gt_u
(get_local$0)
(i32.const1073741824)
)
(unreachable)
)
(if
(i32.gt_u
(tee_local$0
(i32.and
(i32.add
(i32.add
(tee_local$1
(get_global$~lib/allocator/arena/offset)
)
(get_local$0)
)
(i32.const7)
)
(i32.const-8)
)
)
(i32.shl
(tee_local$2
(current_memory)
)
(i32.const16)
)
)
(if
(i32.lt_s
(grow_memory
(select
(get_local$2)
(tee_local$4
(tee_local$3
(i32.shr_u
(i32.and
(i32.add
(i32.sub
(get_local$0)
(get_local$1)
)
(i32.const65535)
)
(i32.const-65536)
)
(i32.const16)
)
)
)
(i32.gt_s
(get_local$2)
(get_local$4)
)
)
)
(i32.const0)
)
(if
(i32.lt_s
(grow_memory
(get_local$3)
)
(i32.const0)
)
(unreachable)
)
)
)
(set_global$~lib/allocator/arena/offset
(get_local$0)
)
(return
(get_local$1)
)
)
)
(i32.const0)
)
(func$~lib/memory/memory.allocate(; 1 ;) (type$ii) (param$0i32) (resulti32)
(call$~lib/allocator/arena/__memory_allocate
(get_local$0)
)
)
(func$test_super/Concrete#constructor(; 2 ;) (type$iFi) (param$0i32) (param$1f64) (resulti32)
(local$2i32)
(if (resulti32)
(get_local$0)
(get_local$0)
(block (resulti32)
(f64.store
(tee_local$2
(call$~lib/memory/memory.allocate
(i32.const8)
)
)
(f64.const0)
)
(get_local$2)
)
)
)
(func$test_super/Concrete#getAge(; 3 ;) (type$iF) (param$0i32) (resultf64)
(f64.load
(get_local$0)
)
)
(func$test_super/getAge(; 4 ;) (type$F) (resultf64)
(call$test_super/Concrete#getAge
(call$test_super/Concrete#constructor
(i32.const0)
(f64.const12)
)
)
)
(func$start(; 5 ;) (type$v)
(set_global$~lib/allocator/arena/startOffset
(i32.const8)
)
(set_global$~lib/allocator/arena/offset
(get_global$~lib/allocator/arena/startOffset)
)
)
)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions