expose runtime id of exported class

This commit is contained in:
dcode 2019-04-03 14:53:47 +02:00
parent 50c49e4275
commit cc1e4cd004
5 changed files with 26 additions and 1 deletions

View File

@ -605,10 +605,19 @@ export class Compiler extends DiagnosticEmitter {
}
break;
}
case ElementKind.CLASS: {
// make the class name itself represent its runtime id
if (!(<Class>element).type.isUnmanaged) {
let module = this.module;
let internalName = (<Class>element).internalName;
module.addGlobal(internalName, NativeType.I32, false, module.createI32((<Class>element).ensureId()));
module.addGlobalExport(internalName, prefix + name);
}
break;
}
// just traverse members below
case ElementKind.ENUM:
case ElementKind.CLASS:
case ElementKind.NAMESPACE:
case ElementKind.FILE:
case ElementKind.TYPEDEFINITION: break;

View File

@ -21,6 +21,8 @@
(global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0))
(global $~lib/allocator/arena/offset (mut i32) (i32.const 0))
(global $~lib/argc (mut i32) (i32.const 0))
(global $exports/Car i32 (i32.const 1))
(global $exports/vehicles.Car i32 (i32.const 3))
(export "memory" (memory $0))
(export "table" (table $0))
(export "add" (func $exports/add))
@ -31,6 +33,7 @@
(export "Animal.DOG" (global $exports/Animal.DOG))
(export "animals.Animal.CAT" (global $exports/animals.Animal.CAT))
(export "animals.Animal.DOG" (global $exports/animals.Animal.DOG))
(export "Car" (global $exports/Car))
(export "Car#get:doors" (func $exports/Car#get:numDoors))
(export "Car#set:doors" (func $exports/Car#set:numDoors))
(export "Car#constructor" (func $exports/Car#constructor|trampoline))
@ -39,6 +42,7 @@
(export "Car#openDoors" (func $exports/Car#openDoors))
(export "Car.TIRES" (global $exports/Car.TIRES))
(export "Car.getNumTires" (func $exports/Car.getNumTires))
(export "vehicles.Car" (global $exports/vehicles.Car))
(export "vehicles.Car#get:doors" (func $exports/Car#get:numDoors))
(export "vehicles.Car#set:doors" (func $exports/Car#set:numDoors))
(export "vehicles.Car#constructor" (func $exports/vehicles.Car#constructor|trampoline))

View File

@ -25,6 +25,8 @@
(global $~lib/ASC_NO_ASSERT i32 (i32.const 0))
(global $~lib/memory/HEAP_BASE i32 (i32.const 48))
(global $~lib/argc (mut i32) (i32.const 0))
(global $exports/Car i32 (i32.const 1))
(global $exports/vehicles.Car i32 (i32.const 3))
(export "memory" (memory $0))
(export "table" (table $0))
(export "add" (func $exports/add))
@ -35,6 +37,7 @@
(export "Animal.DOG" (global $exports/Animal.DOG))
(export "animals.Animal.CAT" (global $exports/animals.Animal.CAT))
(export "animals.Animal.DOG" (global $exports/animals.Animal.DOG))
(export "Car" (global $exports/Car))
(export "Car#get:doors" (func $Car#get:doors))
(export "Car#set:doors" (func $Car#set:doors))
(export "Car#constructor" (func $exports/Car#constructor|trampoline))
@ -43,6 +46,7 @@
(export "Car#openDoors" (func $exports/Car#openDoors))
(export "Car.TIRES" (global $exports/Car.TIRES))
(export "Car.getNumTires" (func $exports/Car.getNumTires))
(export "vehicles.Car" (global $exports/vehicles.Car))
(export "vehicles.Car#get:doors" (func $vehicles.Car#get:doors))
(export "vehicles.Car#set:doors" (func $vehicles.Car#set:doors))
(export "vehicles.Car#constructor" (func $exports/vehicles.Car#constructor|trampoline))

View File

@ -6,8 +6,12 @@
(memory $0 0)
(table $0 1 funcref)
(elem (i32.const 0) $null)
(global $resolve-nested/Outer.InnerClass i32 (i32.const 1))
(global $resolve-nested/Outer.Inner.EvenInnerClass i32 (i32.const 2))
(export "memory" (memory $0))
(export "table" (table $0))
(export "Outer.InnerClass" (global $resolve-nested/Outer.InnerClass))
(export "Outer.Inner.EvenInnerClass" (global $resolve-nested/Outer.Inner.EvenInnerClass))
(export "Outer.Inner.evenInner" (func $resolve-nested/Outer.Inner.evenInner))
(export "Outer.inner" (func $resolve-nested/Outer.inner))
(export "outer" (func $resolve-nested/outer))

View File

@ -21,8 +21,12 @@
(global $resolve-nested/b (mut i32) (i32.const 0))
(global $resolve-nested/c (mut i32) (i32.const 0))
(global $~lib/memory/HEAP_BASE i32 (i32.const 8))
(global $resolve-nested/Outer.InnerClass i32 (i32.const 1))
(global $resolve-nested/Outer.Inner.EvenInnerClass i32 (i32.const 2))
(export "memory" (memory $0))
(export "table" (table $0))
(export "Outer.InnerClass" (global $resolve-nested/Outer.InnerClass))
(export "Outer.Inner.EvenInnerClass" (global $resolve-nested/Outer.Inner.EvenInnerClass))
(export "Outer.Inner.evenInner" (func $resolve-nested/Outer.Inner.evenInner))
(export "Outer.inner" (func $resolve-nested/Outer.inner))
(export "outer" (func $resolve-nested/outer))