diff --git a/tests/compiler/class.debug.wat b/tests/compiler/class.debug.wat index 480d613d1b..4c0df43cb1 100644 --- a/tests/compiler/class.debug.wat +++ b/tests/compiler/class.debug.wat @@ -6,12 +6,13 @@ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32))) (type $i32_i32_i32_=>_none (func (param i32 i32 i32))) (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32))) + (type $none_=>_i32 (func (result i32))) (type $f32_f32_=>_f32 (func (param f32 f32) (result f32))) - (type $i32_f32_f32_=>_f32 (func (param i32 f32 f32) (result f32))) (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32))) - (type $none_=>_i32 (func (result i32))) + (type $i32_f32_f32_=>_f32 (func (param i32 f32 f32) (result f32))) (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32))) (global $class/Animal.ONE (mut i32) (i32.const 1)) + (global $class/PropertyPrototypeClass._one (mut i32) (i32.const 10)) (global $~lib/rt/itcms/total (mut i32) (i32.const 0)) (global $~lib/rt/itcms/threshold (mut i32) (i32.const 0)) (global $~lib/rt/itcms/state (mut i32) (i32.const 0)) @@ -26,11 +27,13 @@ (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) (global $~lib/native/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0)) + (global $class/a (mut i32) (i32.const 0)) + (global $class/zero (mut i32) (i32.const 0)) (global $~lib/native/ASC_RUNTIME i32 (i32.const 2)) - (global $~lib/rt/__rtti_base i32 (i32.const 512)) - (global $~lib/memory/__data_end i32 (i32.const 564)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 16948)) - (global $~lib/memory/__heap_base i32 (i32.const 16948)) + (global $~lib/rt/__rtti_base i32 (i32.const 560)) + (global $~lib/memory/__data_end i32 (i32.const 620)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17004)) + (global $~lib/memory/__heap_base i32 (i32.const 17004)) (memory $0 1) (data (i32.const 12) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e\00\00\00\00\00") (data (i32.const 76) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00 \00\00\00~\00l\00i\00b\00/\00r\00t\00/\00i\00t\00c\00m\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") @@ -40,9 +43,10 @@ (data (i32.const 268) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\14\00\00\00~\00l\00i\00b\00/\00r\00t\00.\00t\00s\00\00\00\00\00\00\00\00\00") (data (i32.const 320) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") (data (i32.const 348) "<\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00") - (data (i32.const 412) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") - (data (i32.const 460) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") - (data (i32.const 512) "\06\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\t\00\00\00\00\00\00") + (data (i32.const 412) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\10\00\00\00c\00l\00a\00s\00s\00.\00t\00s\00\00\00\00\00\00\00\00\00\00\00\00\00") + (data (i32.const 460) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h\00") + (data (i32.const 508) ",\00\00\00\00\00\00\00\00\00\00\00\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s\00\00\00") + (data (i32.const 560) "\07\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\02\t\00\00\00\00\00\00") (table $0 1 1 funcref) (elem $0 (i32.const 1)) (export "testGenericInitializer" (func $class/testGenericInitializer)) @@ -64,97 +68,6 @@ f32.convert_i32_s f32.add ) - (func $start:class - i32.const 4 - i32.const 4 - i32.eq - drop - global.get $class/Animal.ONE - drop - i32.const 1 - i32.const 2 - call $class/Animal.add - drop - f32.const 1 - f32.const 2 - call $class/Animal.sub - drop - ) - (func $class/Animal#instanceAdd (param $this i32) (param $a i32) (param $b i32) (result i32) - local.get $a - local.get $b - i32.add - global.get $class/Animal.ONE - i32.add - ) - (func $class/Animal#instanceSub (param $this i32) (param $a f32) (param $b f32) (result f32) - local.get $a - local.get $b - f32.sub - global.get $class/Animal.ONE - f32.convert_i32_s - f32.add - ) - (func $class/Animal#set:one (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store $0 - ) - (func $class/Animal#set:two (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store16 $0 offset=4 - ) - (func $class/Animal#set:three (param $0 i32) (param $1 i32) - local.get $0 - local.get $1 - i32.store8 $0 offset=6 - ) - (func $class/test (param $animal i32) (result i32) - (local $ptr i32) - (local $cls i32) - local.get $animal - i32.const 1 - i32.const 2 - call $class/Animal#instanceAdd - drop - local.get $animal - f32.const 1 - f32.const 2 - call $class/Animal#instanceSub - drop - local.get $animal - i32.load $0 - drop - local.get $animal - i32.load16_s $0 offset=4 - drop - local.get $animal - i32.load8_s $0 offset=6 - drop - local.get $animal - i32.const 0 - i32.const 1 - i32.add - call $class/Animal#set:one - local.get $animal - i32.const 1 - i32.const 1 - i32.add - call $class/Animal#set:two - local.get $animal - i32.const 1 - i32.const 1 - i32.add - i32.const 1 - i32.add - call $class/Animal#set:three - local.get $animal - local.set $ptr - local.get $ptr - local.set $cls - local.get $cls - ) (func $~lib/rt/itcms/Object#set:nextWithColor (param $0 i32) (param $1 i32) local.get $0 local.get $1 @@ -2227,6 +2140,115 @@ memory.fill $0 local.get $ptr ) + (func $class/PropertyPrototypeClass#set:two (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store $0 + ) + (func $class/PropertyPrototypeClass#set:_three (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store $0 offset=4 + ) + (func $class/PropertyPrototypeClass#set:three (param $this i32) (param $a i32) + local.get $this + local.get $a + call $class/PropertyPrototypeClass#set:_three + ) + (func $class/PropertyPrototypeClass#get:three (param $this i32) (result i32) + local.get $this + i32.load $0 offset=4 + ) + (func $class/PropertyPrototypeClass#get:two (param $0 i32) (result i32) + local.get $0 + i32.load $0 + ) + (func $class/PropertyPrototypeClass.set:one (param $a i32) + local.get $a + global.set $class/PropertyPrototypeClass._one + ) + (func $class/PropertyPrototypeClass#changeOne (param $this i32) + i32.const 11 + call $class/PropertyPrototypeClass.set:one + ) + (func $class/PropertyPrototypeClass.get:one (result i32) + global.get $class/PropertyPrototypeClass._one + ) + (func $class/Animal#instanceAdd (param $this i32) (param $a i32) (param $b i32) (result i32) + local.get $a + local.get $b + i32.add + global.get $class/Animal.ONE + i32.add + ) + (func $class/Animal#instanceSub (param $this i32) (param $a f32) (param $b f32) (result f32) + local.get $a + local.get $b + f32.sub + global.get $class/Animal.ONE + f32.convert_i32_s + f32.add + ) + (func $class/Animal#set:one (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store $0 + ) + (func $class/Animal#set:two (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store16 $0 offset=4 + ) + (func $class/Animal#set:three (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + i32.store8 $0 offset=6 + ) + (func $class/test (param $animal i32) (result i32) + (local $ptr i32) + (local $cls i32) + local.get $animal + i32.const 1 + i32.const 2 + call $class/Animal#instanceAdd + drop + local.get $animal + f32.const 1 + f32.const 2 + call $class/Animal#instanceSub + drop + local.get $animal + i32.load $0 + drop + local.get $animal + i32.load16_s $0 offset=4 + drop + local.get $animal + i32.load8_s $0 offset=6 + drop + local.get $animal + i32.const 0 + i32.const 1 + i32.add + call $class/Animal#set:one + local.get $animal + i32.const 1 + i32.const 1 + i32.add + call $class/Animal#set:two + local.get $animal + i32.const 1 + i32.const 1 + i32.add + i32.const 1 + i32.add + call $class/Animal#set:three + local.get $animal + local.set $ptr + local.get $ptr + local.set $cls + local.get $cls + ) (func $~lib/rt/itcms/__link (param $parentPtr i32) (param $childPtr i32) (param $expectMultiple i32) (local $child i32) (local $var$4 i32) @@ -2335,10 +2357,17 @@ ) (func $~lib/rt/__visit_globals (param $0 i32) (local $1 i32) + global.get $class/a + local.tee $1 + if + local.get $1 + local.get $0 + call $~lib/rt/itcms/__visit + end i32.const 224 local.get $0 call $~lib/rt/itcms/__visit - i32.const 432 + i32.const 480 local.get $0 call $~lib/rt/itcms/__visit i32.const 32 @@ -2384,23 +2413,26 @@ block $invalid block $~lib/array/Array block $class/GenericInitializer - block $class/Animal - block $~lib/arraybuffer/ArrayBufferView - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load $0 - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $class/Animal $class/GenericInitializer $~lib/array/Array $invalid + block $class/PropertyPrototypeClass + block $class/Animal + block $~lib/arraybuffer/ArrayBufferView + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load $0 + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $~lib/arraybuffer/ArrayBufferView $class/Animal $class/PropertyPrototypeClass $class/GenericInitializer $~lib/array/Array $invalid + end + return end return end + local.get $0 + local.get $1 + call $~lib/arraybuffer/ArrayBufferView~visit return end - local.get $0 - local.get $1 - call $~lib/arraybuffer/ArrayBufferView~visit return end return @@ -2419,6 +2451,45 @@ ) (func $~start call $start:class + ) + (func $~stack_check + global.get $~lib/memory/__stack_pointer + global.get $~lib/memory/__data_end + i32.lt_s + if + i32.const 17024 + i32.const 17072 + i32.const 1 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + ) + (func $start:class + (local $0 i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i64.const 0 + i64.store $0 + i32.const 4 + i32.const 4 + i32.eq + drop + global.get $class/Animal.ONE + drop + i32.const 1 + i32.const 2 + call $class/Animal.add + drop + f32.const 1 + f32.const 2 + call $class/Animal.sub + drop memory.size $0 i32.const 16 i32.shl @@ -2436,19 +2507,129 @@ i32.const 320 call $~lib/rt/itcms/initLazy global.set $~lib/rt/itcms/fromSpace - ) - (func $~stack_check + i32.const 0 + call $class/PropertyPrototypeClass#constructor + global.set $class/a + loop $while-continue|0 + global.get $class/a + local.tee $0 + global.get $class/zero + call $class/PropertyPrototypeClass#set:three + local.get $0 + call $class/PropertyPrototypeClass#get:three + local.set $0 + local.get $0 + if + i32.const 1 + global.set $class/zero + br $while-continue|0 + end + end + loop $while-continue|1 + global.get $~lib/memory/__stack_pointer + global.get $class/a + local.tee $0 + i32.store $0 + local.get $0 + global.get $class/zero + call $class/PropertyPrototypeClass#set:two + local.get $0 + call $class/PropertyPrototypeClass#get:two + local.set $0 + local.get $0 + if + i32.const 1 + global.set $class/zero + br $while-continue|1 + end + end + global.get $class/a + local.set $1 global.get $~lib/memory/__stack_pointer - global.get $~lib/memory/__data_end - i32.lt_s + local.get $1 + i32.store $0 offset=4 + local.get $1 + call $class/PropertyPrototypeClass#get:three + i32.const 0 + i32.eq + i32.eqz if - i32.const 16976 - i32.const 17024 + i32.const 0 + i32.const 432 + i32.const 67 i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $class/zero + i32.const 0 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 68 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $class/a + local.set $1 + global.get $~lib/memory/__stack_pointer + local.get $1 + i32.store $0 offset=4 + local.get $1 + call $class/PropertyPrototypeClass#changeOne + call $class/PropertyPrototypeClass.get:one + i32.const 11 + i32.eq + i32.eqz + if + i32.const 0 + i32.const 432 + i32.const 70 i32.const 1 call $~lib/builtins/abort unreachable end + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + ) + (func $class/PropertyPrototypeClass#constructor (param $0 i32) (result i32) + (local $1 i32) + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + call $~stack_check + global.get $~lib/memory/__stack_pointer + i32.const 0 + i32.store $0 + local.get $0 + i32.eqz + if + global.get $~lib/memory/__stack_pointer + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store $0 + end + local.get $0 + i32.const 2 + call $class/PropertyPrototypeClass#set:two + local.get $0 + i32.const 11 + call $class/PropertyPrototypeClass#set:_three + local.get $0 + local.set $1 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $1 ) (func $~lib/array/Array#constructor (param $0 i32) (param $1 i32) (result i32) (local $2 i32) @@ -2469,7 +2650,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 16 - i32.const 5 + i32.const 6 call $~lib/rt/itcms/__new local.tee $0 i32.store $0 @@ -2492,8 +2673,8 @@ i32.shr_u i32.gt_u if - i32.const 432 i32.const 480 + i32.const 528 i32.const 70 i32.const 60 call $~lib/builtins/abort @@ -2555,7 +2736,7 @@ if global.get $~lib/memory/__stack_pointer i32.const 4 - i32.const 4 + i32.const 5 call $~lib/rt/itcms/__new local.tee $0 i32.store $0 diff --git a/tests/compiler/class.release.wat b/tests/compiler/class.release.wat index 3d9a8b1102..610251d93a 100644 --- a/tests/compiler/class.release.wat +++ b/tests/compiler/class.release.wat @@ -18,7 +18,9 @@ (global $~lib/rt/itcms/white (mut i32) (i32.const 0)) (global $~lib/rt/itcms/fromSpace (mut i32) (i32.const 0)) (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0)) - (global $~lib/memory/__stack_pointer (mut i32) (i32.const 17972)) + (global $class/a (mut i32) (i32.const 0)) + (global $class/zero (mut i32) (i32.const 0)) + (global $~lib/memory/__stack_pointer (mut i32) (i32.const 18028)) (memory $0 1) (data (i32.const 1036) "<") (data (i32.const 1048) "\01\00\00\00(\00\00\00A\00l\00l\00o\00c\00a\00t\00i\00o\00n\00 \00t\00o\00o\00 \00l\00a\00r\00g\00e") @@ -31,12 +33,14 @@ (data (i32.const 1372) "<") (data (i32.const 1384) "\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s") (data (i32.const 1436) ",") - (data (i32.const 1448) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 1448) "\01\00\00\00\10\00\00\00c\00l\00a\00s\00s\00.\00t\00s") (data (i32.const 1484) ",") - (data (i32.const 1496) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") - (data (i32.const 1536) "\06\00\00\00 \00\00\00\00\00\00\00 ") - (data (i32.const 1564) " ") - (data (i32.const 1580) "\02\t") + (data (i32.const 1496) "\01\00\00\00\1c\00\00\00I\00n\00v\00a\00l\00i\00d\00 \00l\00e\00n\00g\00t\00h") + (data (i32.const 1532) ",") + (data (i32.const 1544) "\01\00\00\00\1a\00\00\00~\00l\00i\00b\00/\00a\00r\00r\00a\00y\00.\00t\00s") + (data (i32.const 1584) "\07\00\00\00 \00\00\00\00\00\00\00 ") + (data (i32.const 1612) " \00\00\00\00\00\00\00 ") + (data (i32.const 1636) "\02\t") (export "testGenericInitializer" (func $class/testGenericInitializer)) (export "memory" (memory $0)) (export "test" (func $export:class/test)) @@ -44,9 +48,15 @@ (func $~lib/rt/itcms/visitRoots (local $0 i32) (local $1 i32) + global.get $class/a + local.tee $0 + if + local.get $0 + call $byn-split-outlined-A$~lib/rt/itcms/__visit + end i32.const 1248 call $byn-split-outlined-A$~lib/rt/itcms/__visit - i32.const 1456 + i32.const 1504 call $byn-split-outlined-A$~lib/rt/itcms/__visit i32.const 1056 call $byn-split-outlined-A$~lib/rt/itcms/__visit @@ -123,7 +133,7 @@ i32.load $0 offset=8 i32.eqz local.get $0 - i32.const 17972 + i32.const 18028 i32.lt_u i32.and i32.eqz @@ -172,7 +182,7 @@ i32.const 1 else local.get $1 - i32.const 1536 + i32.const 1584 i32.load $0 i32.gt_u if @@ -186,7 +196,7 @@ local.get $1 i32.const 3 i32.shl - i32.const 1540 + i32.const 1588 i32.add i32.load $0 i32.const 32 @@ -751,10 +761,10 @@ if unreachable end - i32.const 17984 + i32.const 18032 i32.const 0 i32.store $0 - i32.const 19552 + i32.const 19600 i32.const 0 i32.store $0 loop $for-loop|0 @@ -765,7 +775,7 @@ local.get $0 i32.const 2 i32.shl - i32.const 17984 + i32.const 18032 i32.add i32.const 0 i32.store $0 offset=4 @@ -783,7 +793,7 @@ i32.add i32.const 2 i32.shl - i32.const 17984 + i32.const 18032 i32.add i32.const 0 i32.store $0 offset=96 @@ -801,13 +811,13 @@ br $for-loop|0 end end - i32.const 17984 - i32.const 19556 + i32.const 18032 + i32.const 19604 memory.size $0 i32.const 16 i32.shl call $~lib/rt/tlsf/addMemory - i32.const 17984 + i32.const 18032 global.set $~lib/rt/tlsf/ROOT ) (func $~lib/rt/itcms/step (result i32) @@ -892,7 +902,7 @@ local.set $0 loop $while-continue|0 local.get $0 - i32.const 17972 + i32.const 18028 i32.lt_u if local.get $0 @@ -992,7 +1002,7 @@ unreachable end local.get $0 - i32.const 17972 + i32.const 18028 i32.lt_u if local.get $0 @@ -1015,7 +1025,7 @@ i32.const 4 i32.add local.tee $0 - i32.const 17972 + i32.const 18028 i32.ge_u if global.get $~lib/rt/tlsf/ROOT @@ -1519,7 +1529,7 @@ global.set $~lib/memory/__stack_pointer block $folding-inner0 global.get $~lib/memory/__stack_pointer - i32.const 1588 + i32.const 1644 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -1528,7 +1538,7 @@ i32.store $0 local.get $0 i32.const 4 - i32.const 4 + i32.const 5 call $~lib/rt/itcms/__new local.tee $0 i32.store $0 @@ -1537,7 +1547,7 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 1588 + i32.const 1644 i32.lt_s br_if $folding-inner0 global.get $~lib/memory/__stack_pointer @@ -1546,7 +1556,7 @@ i64.store $0 local.get $1 i32.const 16 - i32.const 5 + i32.const 6 call $~lib/rt/itcms/__new local.tee $1 i32.store $0 @@ -1605,8 +1615,8 @@ global.set $~lib/memory/__stack_pointer return end - i32.const 18000 i32.const 18048 + i32.const 18096 i32.const 1 i32.const 1 call $~lib/builtins/abort @@ -1616,14 +1626,17 @@ block $folding-inner0 block $invalid block $~lib/array/Array - block $class/Animal - block $~lib/string/String - block $~lib/arraybuffer/ArrayBuffer - local.get $0 - i32.const 8 - i32.sub - i32.load $0 - br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner0 $class/Animal $folding-inner0 $~lib/array/Array $invalid + block $class/PropertyPrototypeClass + block $class/Animal + block $~lib/string/String + block $~lib/arraybuffer/ArrayBuffer + local.get $0 + i32.const 8 + i32.sub + i32.load $0 + br_table $~lib/arraybuffer/ArrayBuffer $~lib/string/String $folding-inner0 $class/Animal $class/PropertyPrototypeClass $folding-inner0 $~lib/array/Array $invalid + end + return end return end @@ -1651,38 +1664,150 @@ end ) (func $~start - memory.size $0 - i32.const 16 - i32.shl - i32.const 17972 + (local $0 i32) + global.get $~lib/memory/__stack_pointer + i32.const 8 i32.sub + global.set $~lib/memory/__stack_pointer + block $folding-inner0 + global.get $~lib/memory/__stack_pointer + i32.const 1644 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i64.const 0 + i64.store $0 + memory.size $0 + i32.const 16 + i32.shl + i32.const 18028 + i32.sub + i32.const 1 + i32.shr_u + global.set $~lib/rt/itcms/threshold + i32.const 1172 + i32.const 1168 + i32.store $0 + i32.const 1176 + i32.const 1168 + i32.store $0 + i32.const 1168 + global.set $~lib/rt/itcms/pinSpace + i32.const 1204 + i32.const 1200 + i32.store $0 + i32.const 1208 + i32.const 1200 + i32.store $0 + i32.const 1200 + global.set $~lib/rt/itcms/toSpace + i32.const 1348 + i32.const 1344 + i32.store $0 + i32.const 1352 + i32.const 1344 + i32.store $0 + i32.const 1344 + global.set $~lib/rt/itcms/fromSpace + local.get $0 + i32.const 4 + i32.sub + global.set $~lib/memory/__stack_pointer + global.get $~lib/memory/__stack_pointer + i32.const 1644 + i32.lt_s + br_if $folding-inner0 + global.get $~lib/memory/__stack_pointer + local.tee $0 + i32.const 0 + i32.store $0 + local.get $0 + i32.const 8 + i32.const 4 + call $~lib/rt/itcms/__new + local.tee $0 + i32.store $0 + local.get $0 + i32.const 2 + i32.store $0 + local.get $0 + i32.const 11 + i32.store $0 offset=4 + global.get $~lib/memory/__stack_pointer + i32.const 4 + i32.add + global.set $~lib/memory/__stack_pointer + local.get $0 + global.set $class/a + loop $while-continue|0 + global.get $class/a + local.tee $0 + global.get $class/zero + i32.store $0 offset=4 + local.get $0 + i32.load $0 offset=4 + if + i32.const 1 + global.set $class/zero + br $while-continue|0 + end + end + loop $while-continue|1 + global.get $~lib/memory/__stack_pointer + global.get $class/a + local.tee $0 + i32.store $0 + local.get $0 + global.get $class/zero + i32.store $0 + local.get $0 + i32.load $0 + if + i32.const 1 + global.set $class/zero + br $while-continue|1 + end + end + global.get $~lib/memory/__stack_pointer + global.get $class/a + local.tee $0 + i32.store $0 offset=4 + local.get $0 + i32.load $0 offset=4 + if + i32.const 0 + i32.const 1456 + i32.const 67 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $class/zero + if + i32.const 0 + i32.const 1456 + i32.const 68 + i32.const 1 + call $~lib/builtins/abort + unreachable + end + global.get $~lib/memory/__stack_pointer + local.tee $0 + global.get $class/a + i32.store $0 offset=4 + local.get $0 + i32.const 8 + i32.add + global.set $~lib/memory/__stack_pointer + return + end + i32.const 18048 + i32.const 18096 i32.const 1 - i32.shr_u - global.set $~lib/rt/itcms/threshold - i32.const 1172 - i32.const 1168 - i32.store $0 - i32.const 1176 - i32.const 1168 - i32.store $0 - i32.const 1168 - global.set $~lib/rt/itcms/pinSpace - i32.const 1204 - i32.const 1200 - i32.store $0 - i32.const 1208 - i32.const 1200 - i32.store $0 - i32.const 1200 - global.set $~lib/rt/itcms/toSpace - i32.const 1348 - i32.const 1344 - i32.store $0 - i32.const 1352 - i32.const 1344 - i32.store $0 - i32.const 1344 - global.set $~lib/rt/itcms/fromSpace + i32.const 1 + call $~lib/builtins/abort + unreachable ) (func $export:class/test (param $0 i32) (result i32) (local $1 i32) @@ -1691,11 +1816,11 @@ i32.sub global.set $~lib/memory/__stack_pointer global.get $~lib/memory/__stack_pointer - i32.const 1588 + i32.const 1644 i32.lt_s if - i32.const 18000 i32.const 18048 + i32.const 18096 i32.const 1 i32.const 1 call $~lib/builtins/abort diff --git a/tests/compiler/class.ts b/tests/compiler/class.ts index 93a95068da..676fd132d8 100644 --- a/tests/compiler/class.ts +++ b/tests/compiler/class.ts @@ -40,3 +40,31 @@ class GenericInitializer { export function testGenericInitializer(): void { new GenericInitializer(); } + +class PropertyPrototypeClass { + private static _one: i32 = 10; + two:i32 = 2; + private _three: i32 = 11; + static get one(): i32 { return PropertyPrototypeClass._one; } + static set one(a: i32) { + PropertyPrototypeClass._one = a; + } + get three():i32 {return this._three;} + set three(a:i32){this._three = a;} + changeOne():void{ + PropertyPrototypeClass.one = 11; + } +} + +let a = new PropertyPrototypeClass(); +let zero = i32(0); +while(a.three = zero) { + zero = 1; +} +while(a.two = zero) { + zero = 1; +} +assert(a.three == 0); +assert(zero == 0); +a.changeOne(); +assert(PropertyPrototypeClass.one == 11);