From cc1e4cd0040faf71035386829ddc333ba1eb6a2a Mon Sep 17 00:00:00 2001 From: dcode Date: Wed, 3 Apr 2019 14:53:47 +0200 Subject: [PATCH] expose runtime id of exported class --- src/compiler.ts | 11 ++++++++++- tests/compiler/exports.optimized.wat | 4 ++++ tests/compiler/exports.untouched.wat | 4 ++++ tests/compiler/resolve-nested.optimized.wat | 4 ++++ tests/compiler/resolve-nested.untouched.wat | 4 ++++ 5 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/compiler.ts b/src/compiler.ts index 304c5f38..90313d90 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -605,10 +605,19 @@ export class Compiler extends DiagnosticEmitter { } break; } + case ElementKind.CLASS: { + // make the class name itself represent its runtime id + if (!(element).type.isUnmanaged) { + let module = this.module; + let internalName = (element).internalName; + module.addGlobal(internalName, NativeType.I32, false, module.createI32((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; diff --git a/tests/compiler/exports.optimized.wat b/tests/compiler/exports.optimized.wat index f7376270..4bb693c9 100644 --- a/tests/compiler/exports.optimized.wat +++ b/tests/compiler/exports.optimized.wat @@ -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)) diff --git a/tests/compiler/exports.untouched.wat b/tests/compiler/exports.untouched.wat index 31dc552f..e975a0c7 100644 --- a/tests/compiler/exports.untouched.wat +++ b/tests/compiler/exports.untouched.wat @@ -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)) diff --git a/tests/compiler/resolve-nested.optimized.wat b/tests/compiler/resolve-nested.optimized.wat index ba434f71..9bf204a7 100644 --- a/tests/compiler/resolve-nested.optimized.wat +++ b/tests/compiler/resolve-nested.optimized.wat @@ -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)) diff --git a/tests/compiler/resolve-nested.untouched.wat b/tests/compiler/resolve-nested.untouched.wat index 9b79543a..00b7ed83 100644 --- a/tests/compiler/resolve-nested.untouched.wat +++ b/tests/compiler/resolve-nested.untouched.wat @@ -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))