@@ -655,9 +655,10 @@ export class Compiler extends DiagnosticEmitter {
655655 break ;
656656 }
657657 case ElementKind . PROPERTY_PROTOTYPE : {
658- let getter = ( < PropertyPrototype > element ) . getterPrototype ;
658+ let prototype = < PropertyPrototype > element ;
659+ let getter = prototype . getterPrototype ;
659660 if ( getter ) this . ensureModuleExport ( GETTER_PREFIX + name , getter , prefix ) ;
660- let setter = ( < PropertyPrototype > element ) . setterPrototype ;
661+ let setter = prototype . setterPrototype ;
661662 if ( setter ) this . ensureModuleExport ( SETTER_PREFIX + name , setter , prefix ) ;
662663 break ;
663664 }
@@ -699,28 +700,31 @@ export class Compiler extends DiagnosticEmitter {
699700 break ;
700701 }
701702 case ElementKind . PROPERTY : {
702- let getter = ( < Property > element ) . getterInstance ;
703+ let instance = < Property > element ;
704+ let getter = instance . getterInstance ;
703705 if ( getter ) this . ensureModuleExport ( GETTER_PREFIX + name , getter , prefix ) ;
704- let setter = ( < Property > element ) . setterInstance ;
706+ let setter = instance . setterInstance ;
705707 if ( setter ) this . ensureModuleExport ( SETTER_PREFIX + name , setter , prefix ) ;
706708 break ;
707709 }
708710 case ElementKind . FIELD : {
711+ let instance = < Field > element ;
709712 if ( element . is ( CommonFlags . COMPILED ) ) {
710713 let module = this . module ;
711- module . addFunctionExport ( ( < Field > element ) . internalGetterName , prefix + GETTER_PREFIX + name ) ;
714+ module . addFunctionExport ( instance . internalGetterName , prefix + GETTER_PREFIX + name ) ;
712715 if ( ! element . is ( CommonFlags . READONLY ) ) {
713- module . addFunctionExport ( ( < Field > element ) . internalSetterName , prefix + SETTER_PREFIX + name ) ;
716+ module . addFunctionExport ( instance . internalSetterName , prefix + SETTER_PREFIX + name ) ;
714717 }
715718 }
716719 break ;
717720 }
718721 case ElementKind . CLASS : {
722+ let instance = < Class > element ;
719723 // make the class name itself represent its runtime id
720- if ( ! ( < Class > element ) . type . isUnmanaged ) {
724+ if ( ! instance . type . isUnmanaged ) {
721725 let module = this . module ;
722- let internalName = ( < Class > element ) . internalName ;
723- module . addGlobal ( internalName , NativeType . I32 , false , module . i32 ( ( < Class > element ) . id ) ) ;
726+ let internalName = instance . internalName ;
727+ module . addGlobal ( internalName , NativeType . I32 , false , module . i32 ( instance . id ) ) ;
724728 module . addGlobalExport ( internalName , prefix + name ) ;
725729 }
726730 break ;
@@ -1501,8 +1505,7 @@ export class Compiler extends DiagnosticEmitter {
15011505 }
15021506 }
15031507 }
1504- var ctorInstance = instance . constructorInstance ;
1505- if ( ctorInstance ) this . compileFunction ( ctorInstance ) ;
1508+ this . ensureConstructor ( instance , instance . identifierNode ) ;
15061509 var instanceMembers = instance . members ;
15071510 if ( instanceMembers ) {
15081511 // TODO: for (let element of instanceMembers.values()) {
@@ -8704,14 +8707,17 @@ export class Compiler extends DiagnosticEmitter {
87048707 CommonNames . constructor ,
87058708 new FunctionPrototype (
87068709 CommonNames . constructor ,
8707- classInstance ,
8710+ classInstance , // bound
87088711 this . program . makeNativeFunctionDeclaration ( CommonNames . constructor ,
87098712 CommonFlags . INSTANCE | CommonFlags . CONSTRUCTOR
87108713 )
87118714 ) ,
87128715 new Signature ( this . program , null , classInstance . type , classInstance . type ) ,
87138716 contextualTypeArguments
87148717 ) ;
8718+ let members = classInstance . members ;
8719+ if ( ! members ) classInstance . members = members = new Map ( ) ;
8720+ members . set ( "constructor" , instance . prototype ) ;
87158721 }
87168722
87178723 instance . internalName = classInstance . internalName + INSTANCE_DELIMITER + "constructor" ;
0 commit comments