@@ -1523,6 +1523,8 @@ export class Compiler extends DiagnosticEmitter {
15231523 }
15241524
15251525 private ensureEnumToString ( enumElement : Enum , reportNode : Node ) : string | null {
1526+ if ( enumElement . toStringFunctionName ) return enumElement . toStringFunctionName ;
1527+
15261528 if ( ! this . compileEnum ( enumElement ) ) return null ;
15271529 if ( enumElement . is ( CommonFlags . Const ) ) {
15281530 this . errorRelated (
@@ -1531,13 +1533,16 @@ export class Compiler extends DiagnosticEmitter {
15311533 ) ;
15321534 return null ;
15331535 }
1536+
15341537 let members = enumElement . members ;
15351538 if ( ! members ) return null ;
1536- if ( enumElement . toStringFunctionName ) return enumElement . toStringFunctionName ;
1539+
1540+ let module = this . module ;
1541+ const isInline = enumElement . hasDecorator ( DecoratorFlags . Inline ) ;
1542+
15371543 const functionName = `${ enumElement . internalName } #${ CommonNames . EnumToString } ` ;
15381544 enumElement . toStringFunctionName = functionName ;
1539- const isInline = enumElement . hasDecorator ( DecoratorFlags . Inline ) ;
1540- let module = this . module ;
1545+
15411546 let exprs = new Array < ExpressionRef > ( ) ;
15421547 // when the values are the same, TS returns the last enum value name that appears
15431548 for ( let _keys = Map_keys ( members ) , _values = Map_values ( members ) , i = 1 , k = _keys . length ; i <= k ; ++ i ) {
@@ -1556,6 +1561,7 @@ export class Compiler extends DiagnosticEmitter {
15561561 }
15571562 exprs . push ( module . unreachable ( ) ) ;
15581563 module . addFunction ( functionName , TypeRef . I32 , TypeRef . I32 , null , module . block ( null , exprs , TypeRef . I32 ) ) ;
1564+
15591565 return functionName ;
15601566 }
15611567
0 commit comments