Initial instance methods and field layout; More cleanup

This commit is contained in:
dcodeIO
2018-01-01 20:27:21 +01:00
parent 2888ba14ad
commit 3add4624c5
29 changed files with 2196 additions and 622 deletions

View File

@ -1,11 +1,70 @@
(module
(type $iii (func (param i32 i32) (result i32)))
(type $fff (func (param f32 f32) (result f32)))
(type $iiii (func (param i32 i32 i32) (result i32)))
(type $ifff (func (param i32 f32 f32) (result f32)))
(type $iv (func (param i32)))
(type $v (func))
(global $class/Animal.ONE (mut i32) (i32.const 1))
(memory $0 1)
(export "test" (func $class/test))
(export "memory" (memory $0))
(start $start)
(func $start (; 0 ;) (type $v)
(func $class/test (; 0 ;) (type $iv) (param $0 i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(local $4 i32)
(local $5 f32)
(local $6 f32)
(drop
(block (result i32)
(block $__inlined_func$class/Animal#instanceAdd (result i32)
(set_local $1
(get_local $0)
)
(set_local $2
(i32.const 1)
)
(set_local $3
(i32.const 2)
)
(i32.add
(i32.add
(get_local $2)
(get_local $3)
)
(get_global $class/Animal.ONE)
)
)
)
)
(drop
(block (result f32)
(block $__inlined_func$class/Animal#instanceSub<f32> (result f32)
(set_local $4
(get_local $0)
)
(set_local $5
(f32.const 1)
)
(set_local $6
(f32.const 2)
)
(f32.add
(f32.sub
(get_local $5)
(get_local $6)
)
(f32.convert_s/i32
(get_global $class/Animal.ONE)
)
)
)
)
)
)
(func $start (; 1 ;) (type $v)
(local $0 i32)
(local $1 i32)
(local $2 f32)
@ -20,8 +79,11 @@
(i32.const 2)
)
(i32.add
(get_local $0)
(get_local $1)
(i32.add
(get_local $0)
(get_local $1)
)
(get_global $class/Animal.ONE)
)
)
)
@ -35,9 +97,14 @@
(set_local $3
(f32.const 2)
)
(f32.sub
(get_local $2)
(get_local $3)
(f32.add
(f32.sub
(get_local $2)
(get_local $3)
)
(f32.convert_s/i32
(get_global $class/Animal.ONE)
)
)
)
)

View File

@ -1,23 +1,72 @@
(module
(type $iii (func (param i32 i32) (result i32)))
(type $fff (func (param f32 f32) (result f32)))
(type $iiii (func (param i32 i32 i32) (result i32)))
(type $ifff (func (param i32 f32 f32) (result f32)))
(type $iv (func (param i32)))
(type $v (func))
(global $class/Animal.ONE (mut i32) (i32.const 1))
(memory $0 1)
(export "test" (func $class/test))
(export "memory" (memory $0))
(start $start)
(func $class/Animal.add (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.add
(get_local $0)
(get_local $1)
(i32.add
(get_local $0)
(get_local $1)
)
(get_global $class/Animal.ONE)
)
)
(func $class/Animal.sub<f32> (; 1 ;) (type $fff) (param $0 f32) (param $1 f32) (result f32)
(f32.sub
(get_local $0)
(get_local $1)
(f32.add
(f32.sub
(get_local $0)
(get_local $1)
)
(f32.convert_s/i32
(get_global $class/Animal.ONE)
)
)
)
(func $start (; 2 ;) (type $v)
(func $class/Animal#instanceAdd (; 2 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(i32.add
(i32.add
(get_local $1)
(get_local $2)
)
(get_global $class/Animal.ONE)
)
)
(func $class/Animal#instanceSub<f32> (; 3 ;) (type $ifff) (param $0 i32) (param $1 f32) (param $2 f32) (result f32)
(f32.add
(f32.sub
(get_local $1)
(get_local $2)
)
(f32.convert_s/i32
(get_global $class/Animal.ONE)
)
)
)
(func $class/test (; 4 ;) (type $iv) (param $0 i32)
(drop
(call $class/Animal#instanceAdd
(get_local $0)
(i32.const 1)
(i32.const 2)
)
)
(drop
(call $class/Animal#instanceSub<f32>
(get_local $0)
(f32.const 1)
(f32.const 2)
)
)
)
(func $start (; 5 ;) (type $v)
(drop
(call $class/Animal.add
(i32.const 1)

View File

@ -1,9 +1,22 @@
class Animal {
static MAX: i32 = 1;
static add(a: i32, b: i32): i32 { return a + b; }
static sub<T>(a: T, b: T): T { return a - b; } // tsc does not allow this
class Animal<T> {
static ONE: i32 = 1;
static add(a: i32, b: i32): i32 { return a + b + Animal.ONE; }
static sub<T>(a: T, b: T): T { return a - b + <T>Animal.ONE; } // tsc does not allow this
one: i32 = 1; // 4
two: i16 = 2; // 6
three: i8 = 3; // 7
instanceAdd(a: i32, b: i32): i32 { return a + b + Animal.ONE; }
instanceSub<T>(a: T, b: T): T { return a - b + <T>Animal.ONE; } // tsc does not allow this
}
Animal.MAX;
assert(sizeof<Animal<f64>>() == 7);
Animal.ONE;
Animal.add(1,2);
Animal.sub<f32>(1.0, 2.0);
Animal.sub<f32>(1, 2);
export function test(animal: Animal<f64>): void {
animal.instanceAdd(1, 2);
animal.instanceSub<f32>(1, 2);
}

View File

@ -1,31 +1,92 @@
(module
(type $iii (func (param i32 i32) (result i32)))
(type $fff (func (param f32 f32) (result f32)))
(type $iiii (func (param i32 i32 i32) (result i32)))
(type $ifff (func (param i32 f32 f32) (result f32)))
(type $iv (func (param i32)))
(type $v (func))
(global $class/Animal.MAX (mut i32) (i32.const 1))
(global $class/Animal.ONE (mut i32) (i32.const 1))
(global $HEAP_BASE i32 (i32.const 4))
(memory $0 1)
(export "test" (func $class/test))
(export "memory" (memory $0))
(start $start)
(func $class/Animal.add (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(return
(i32.add
(get_local $0)
(get_local $1)
(i32.add
(get_local $0)
(get_local $1)
)
(get_global $class/Animal.ONE)
)
)
)
(func $class/Animal.sub<f32> (; 1 ;) (type $fff) (param $0 f32) (param $1 f32) (result f32)
(return
(f32.sub
(get_local $0)
(get_local $1)
(f32.add
(f32.sub
(get_local $0)
(get_local $1)
)
(f32.convert_s/i32
(get_global $class/Animal.ONE)
)
)
)
)
(func $start (; 2 ;) (type $v)
(func $class/Animal#instanceAdd (; 2 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
(return
(i32.add
(i32.add
(get_local $1)
(get_local $2)
)
(get_global $class/Animal.ONE)
)
)
)
(func $class/Animal#instanceSub<f32> (; 3 ;) (type $ifff) (param $0 i32) (param $1 f32) (param $2 f32) (result f32)
(return
(f32.add
(f32.sub
(get_local $1)
(get_local $2)
)
(f32.convert_s/i32
(get_global $class/Animal.ONE)
)
)
)
)
(func $class/test (; 4 ;) (type $iv) (param $0 i32)
(drop
(get_global $class/Animal.MAX)
(call $class/Animal#instanceAdd
(get_local $0)
(i32.const 1)
(i32.const 2)
)
)
(drop
(call $class/Animal#instanceSub<f32>
(get_local $0)
(f32.const 1)
(f32.const 2)
)
)
)
(func $start (; 5 ;) (type $v)
(if
(i32.eqz
(i32.eq
(i32.const 7)
(i32.const 7)
)
)
(unreachable)
)
(drop
(get_global $class/Animal.ONE)
)
(drop
(call $class/Animal.add
@ -88,9 +149,10 @@
FUNCTION_PROTOTYPE: usize
GLOBAL: HEAP_BASE
CLASS_PROTOTYPE: class/Animal
GLOBAL: class/Animal.MAX
GLOBAL: class/Animal.ONE
FUNCTION_PROTOTYPE: class/Animal.add
FUNCTION_PROTOTYPE: class/Animal.sub
FUNCTION_PROTOTYPE: class/test
[program.exports]
FUNCTION_PROTOTYPE: class/test
;)

View File

@ -0,0 +1,195 @@
(module
(type $v (func))
(type $i (func (result i32)))
(type $I (func (result i64)))
(type $f (func (result f32)))
(type $F (func (result f64)))
(type $iv (func (param i32)))
(type $ii (func (param i32) (result i32)))
(type $II (func (param i64) (result i64)))
(type $ff (func (param f32) (result f32)))
(type $FF (func (param f64) (result f64)))
(type $iiv (func (param i32 i32)))
(type $iii (func (param i32 i32) (result i32)))
(type $IiI (func (param i64 i32) (result i64)))
(type $fff (func (param f32 f32) (result f32)))
(type $FFF (func (param f64 f64) (result f64)))
(memory $0 1)
(export "memory" (memory $0))
(start $start)
(func $start (; 0 ;) (type $v)
(local $0 i32)
(local $1 i32)
(local $2 i64)
(local $3 f32)
(local $4 f64)
(local $5 i32)
(local $6 i32)
(local $7 i32)
(local $8 i32)
(local $9 i64)
(local $10 i32)
(local $11 f32)
(local $12 f32)
(local $13 f64)
(local $14 f64)
(block
(block $__inlined_func$function/v
(nop)
)
)
(drop
(block (result i32)
(block $__inlined_func$function/i (result i32)
(i32.const 0)
)
)
)
(drop
(block (result i64)
(block $__inlined_func$function/I (result i64)
(i64.const 0)
)
)
)
(drop
(block (result f32)
(block $__inlined_func$function/f (result f32)
(f32.const 0)
)
)
)
(drop
(block (result f64)
(block $__inlined_func$function/F (result f64)
(f64.const 0)
)
)
)
(block
(block $__inlined_func$function/iv
(set_local $0
(i32.const 0)
)
(nop)
)
)
(drop
(block (result i32)
(block $__inlined_func$function/ii (result i32)
(set_local $1
(i32.const 0)
)
(get_local $1)
)
)
)
(drop
(block (result i64)
(block $__inlined_func$function/II (result i64)
(set_local $2
(i64.const 0)
)
(get_local $2)
)
)
)
(drop
(block (result f32)
(block $__inlined_func$function/ff (result f32)
(set_local $3
(f32.const 0)
)
(get_local $3)
)
)
)
(drop
(block (result f64)
(block $__inlined_func$function/FF (result f64)
(set_local $4
(f64.const 0)
)
(get_local $4)
)
)
)
(block
(block $__inlined_func$function/iiv
(set_local $5
(i32.const 1)
)
(set_local $6
(i32.const 2)
)
(nop)
)
)
(drop
(block (result i32)
(block $__inlined_func$function/iii (result i32)
(set_local $7
(i32.const 1)
)
(set_local $8
(i32.const 2)
)
(i32.add
(get_local $7)
(get_local $8)
)
)
)
)
(drop
(block (result i64)
(block $__inlined_func$function/III (result i64)
(set_local $9
(i64.const 1)
)
(set_local $10
(i32.const 2)
)
(i64.add
(get_local $9)
(i64.extend_s/i32
(get_local $10)
)
)
)
)
)
(drop
(block (result f32)
(block $__inlined_func$function/fff (result f32)
(set_local $11
(f32.const 1)
)
(set_local $12
(f32.const 2)
)
(f32.add
(get_local $11)
(get_local $12)
)
)
)
)
(drop
(block (result f64)
(block $__inlined_func$function/FFF (result f64)
(set_local $13
(f64.const 1)
)
(set_local $14
(f64.const 2)
)
(f64.add
(get_local $13)
(get_local $14)
)
)
)
)
)
)

View File

@ -0,0 +1,145 @@
(module
(type $v (func))
(type $i (func (result i32)))
(type $I (func (result i64)))
(type $f (func (result f32)))
(type $F (func (result f64)))
(type $iv (func (param i32)))
(type $ii (func (param i32) (result i32)))
(type $II (func (param i64) (result i64)))
(type $ff (func (param f32) (result f32)))
(type $FF (func (param f64) (result f64)))
(type $iiv (func (param i32 i32)))
(type $iii (func (param i32 i32) (result i32)))
(type $IiI (func (param i64 i32) (result i64)))
(type $fff (func (param f32 f32) (result f32)))
(type $FFF (func (param f64 f64) (result f64)))
(memory $0 1)
(export "memory" (memory $0))
(start $start)
(func $function/v (; 0 ;) (type $v)
(nop)
)
(func $function/i (; 1 ;) (type $i) (result i32)
(i32.const 0)
)
(func $function/I (; 2 ;) (type $I) (result i64)
(i64.const 0)
)
(func $function/f (; 3 ;) (type $f) (result f32)
(f32.const 0)
)
(func $function/F (; 4 ;) (type $F) (result f64)
(f64.const 0)
)
(func $function/iv (; 5 ;) (type $iv) (param $0 i32)
(nop)
)
(func $function/ii (; 6 ;) (type $ii) (param $0 i32) (result i32)
(get_local $0)
)
(func $function/II (; 7 ;) (type $II) (param $0 i64) (result i64)
(get_local $0)
)
(func $function/ff (; 8 ;) (type $ff) (param $0 f32) (result f32)
(get_local $0)
)
(func $function/FF (; 9 ;) (type $FF) (param $0 f64) (result f64)
(get_local $0)
)
(func $function/iiv (; 10 ;) (type $iiv) (param $0 i32) (param $1 i32)
(nop)
)
(func $function/iii (; 11 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(i32.add
(get_local $0)
(get_local $1)
)
)
(func $function/III (; 12 ;) (type $IiI) (param $0 i64) (param $1 i32) (result i64)
(i64.add
(get_local $0)
(i64.extend_s/i32
(get_local $1)
)
)
)
(func $function/fff (; 13 ;) (type $fff) (param $0 f32) (param $1 f32) (result f32)
(f32.add
(get_local $0)
(get_local $1)
)
)
(func $function/FFF (; 14 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(f64.add
(get_local $0)
(get_local $1)
)
)
(func $start (; 15 ;) (type $v)
(call $function/v)
(drop
(call $function/i)
)
(drop
(call $function/I)
)
(drop
(call $function/f)
)
(drop
(call $function/F)
)
(call $function/iv
(i32.const 0)
)
(drop
(call $function/ii
(i32.const 0)
)
)
(drop
(call $function/II
(i64.const 0)
)
)
(drop
(call $function/ff
(f32.const 0)
)
)
(drop
(call $function/FF
(f64.const 0)
)
)
(call $function/iiv
(i32.const 1)
(i32.const 2)
)
(drop
(call $function/iii
(i32.const 1)
(i32.const 2)
)
)
(drop
(call $function/III
(i64.const 1)
(i32.const 2)
)
)
(drop
(call $function/fff
(f32.const 1)
(f32.const 2)
)
)
(drop
(call $function/FFF
(f64.const 1)
(f64.const 2)
)
)
)
)

View File

@ -0,0 +1,35 @@
function v(): void {}
function i(): i32 { return 0; }
function I(): i64 { return 0; }
function f(): f32 { return 0; }
function F(): f64 { return 0; }
v();
i();
I();
f();
F();
function iv(a: i32): void {}
function ii(a: i32): i32 { return a; }
function II(a: i64): i64 { return a; }
function ff(a: f32): f32 { return a; }
function FF(a: f64): f64 { return a; }
iv(0);
ii(0);
II(0);
ff(0);
FF(0);
function iiv(a: i32, b: i32): void {}
function iii(a: i32, b: i32): i32 { return a + b; }
function III(a: i64, b: i32): i64 { return a + b; }
function fff(a: f32, b: f32): f32 { return a + b; }
function FFF(a: f64, b: f64): f64 { return a + b; }
iiv(1, 2);
iii(1, 2);
III(1, 2);
fff(1, 2);
FFF(1, 2);

View File

@ -0,0 +1,231 @@
(module
(type $v (func))
(type $i (func (result i32)))
(type $I (func (result i64)))
(type $f (func (result f32)))
(type $F (func (result f64)))
(type $iv (func (param i32)))
(type $ii (func (param i32) (result i32)))
(type $II (func (param i64) (result i64)))
(type $ff (func (param f32) (result f32)))
(type $FF (func (param f64) (result f64)))
(type $iiv (func (param i32 i32)))
(type $iii (func (param i32 i32) (result i32)))
(type $IiI (func (param i64 i32) (result i64)))
(type $fff (func (param f32 f32) (result f32)))
(type $FFF (func (param f64 f64) (result f64)))
(global $HEAP_BASE i32 (i32.const 4))
(memory $0 1)
(export "memory" (memory $0))
(start $start)
(func $function/v (; 0 ;) (type $v)
)
(func $function/i (; 1 ;) (type $i) (result i32)
(return
(i32.const 0)
)
)
(func $function/I (; 2 ;) (type $I) (result i64)
(return
(i64.const 0)
)
)
(func $function/f (; 3 ;) (type $f) (result f32)
(return
(f32.const 0)
)
)
(func $function/F (; 4 ;) (type $F) (result f64)
(return
(f64.const 0)
)
)
(func $function/iv (; 5 ;) (type $iv) (param $0 i32)
)
(func $function/ii (; 6 ;) (type $ii) (param $0 i32) (result i32)
(return
(get_local $0)
)
)
(func $function/II (; 7 ;) (type $II) (param $0 i64) (result i64)
(return
(get_local $0)
)
)
(func $function/ff (; 8 ;) (type $ff) (param $0 f32) (result f32)
(return
(get_local $0)
)
)
(func $function/FF (; 9 ;) (type $FF) (param $0 f64) (result f64)
(return
(get_local $0)
)
)
(func $function/iiv (; 10 ;) (type $iiv) (param $0 i32) (param $1 i32)
)
(func $function/iii (; 11 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32)
(return
(i32.add
(get_local $0)
(get_local $1)
)
)
)
(func $function/III (; 12 ;) (type $IiI) (param $0 i64) (param $1 i32) (result i64)
(return
(i64.add
(get_local $0)
(i64.extend_s/i32
(get_local $1)
)
)
)
)
(func $function/fff (; 13 ;) (type $fff) (param $0 f32) (param $1 f32) (result f32)
(return
(f32.add
(get_local $0)
(get_local $1)
)
)
)
(func $function/FFF (; 14 ;) (type $FFF) (param $0 f64) (param $1 f64) (result f64)
(return
(f64.add
(get_local $0)
(get_local $1)
)
)
)
(func $start (; 15 ;) (type $v)
(call $function/v)
(drop
(call $function/i)
)
(drop
(call $function/I)
)
(drop
(call $function/f)
)
(drop
(call $function/F)
)
(call $function/iv
(i32.const 0)
)
(drop
(call $function/ii
(i32.const 0)
)
)
(drop
(call $function/II
(i64.const 0)
)
)
(drop
(call $function/ff
(f32.const 0)
)
)
(drop
(call $function/FF
(f64.const 0)
)
)
(call $function/iiv
(i32.const 1)
(i32.const 2)
)
(drop
(call $function/iii
(i32.const 1)
(i32.const 2)
)
)
(drop
(call $function/III
(i64.const 1)
(i32.const 2)
)
)
(drop
(call $function/fff
(f32.const 1)
(f32.const 2)
)
)
(drop
(call $function/FFF
(f64.const 1)
(f64.const 2)
)
)
)
)
(;
[program.elements]
GLOBAL: NaN
GLOBAL: Infinity
FUNCTION_PROTOTYPE: isNaN
FUNCTION_PROTOTYPE: isFinite
FUNCTION_PROTOTYPE: clz
FUNCTION_PROTOTYPE: ctz
FUNCTION_PROTOTYPE: popcnt
FUNCTION_PROTOTYPE: rotl
FUNCTION_PROTOTYPE: rotr
FUNCTION_PROTOTYPE: abs
FUNCTION_PROTOTYPE: max
FUNCTION_PROTOTYPE: min
FUNCTION_PROTOTYPE: ceil
FUNCTION_PROTOTYPE: floor
FUNCTION_PROTOTYPE: copysign
FUNCTION_PROTOTYPE: nearest
FUNCTION_PROTOTYPE: reinterpret
FUNCTION_PROTOTYPE: sqrt
FUNCTION_PROTOTYPE: trunc
FUNCTION_PROTOTYPE: load
FUNCTION_PROTOTYPE: store
FUNCTION_PROTOTYPE: sizeof
FUNCTION_PROTOTYPE: select
FUNCTION_PROTOTYPE: unreachable
FUNCTION_PROTOTYPE: current_memory
FUNCTION_PROTOTYPE: grow_memory
FUNCTION_PROTOTYPE: parseInt
FUNCTION_PROTOTYPE: parseFloat
FUNCTION_PROTOTYPE: changetype
FUNCTION_PROTOTYPE: assert
FUNCTION_PROTOTYPE: i8
FUNCTION_PROTOTYPE: i16
FUNCTION_PROTOTYPE: i32
FUNCTION_PROTOTYPE: i64
FUNCTION_PROTOTYPE: u8
FUNCTION_PROTOTYPE: u16
FUNCTION_PROTOTYPE: u32
FUNCTION_PROTOTYPE: u64
FUNCTION_PROTOTYPE: bool
FUNCTION_PROTOTYPE: f32
FUNCTION_PROTOTYPE: f64
FUNCTION_PROTOTYPE: isize
FUNCTION_PROTOTYPE: usize
GLOBAL: HEAP_BASE
FUNCTION_PROTOTYPE: function/v
FUNCTION_PROTOTYPE: function/i
FUNCTION_PROTOTYPE: function/I
FUNCTION_PROTOTYPE: function/f
FUNCTION_PROTOTYPE: function/F
FUNCTION_PROTOTYPE: function/iv
FUNCTION_PROTOTYPE: function/ii
FUNCTION_PROTOTYPE: function/II
FUNCTION_PROTOTYPE: function/ff
FUNCTION_PROTOTYPE: function/FF
FUNCTION_PROTOTYPE: function/iiv
FUNCTION_PROTOTYPE: function/iii
FUNCTION_PROTOTYPE: function/III
FUNCTION_PROTOTYPE: function/fff
FUNCTION_PROTOTYPE: function/FFF
[program.exports]
;)