@@ -773,26 +773,9 @@ export function compileCall(
773773 }
774774 }
775775 case BuiltinSymbols . nameof : {
776+ let value : string | null = null ;
777+ let resultType : Type | null = evaluateConstantType ( compiler , typeArguments , operands , reportNode ) ;
776778 compiler . currentType = compiler . program . stringInstance . type ;
777-
778- if ( checkTypeOptional ( typeArguments , reportNode , compiler )
779- | checkArgsOptional ( operands , 0 , 1 , reportNode , compiler ) ) {
780- compiler . error (
781- DiagnosticCode . Operation_not_supported ,
782- reportNode . typeArgumentsRange
783- ) ;
784- return module . unreachable ( ) ;
785- }
786-
787- let expression = new StringLiteralExpression ( ) ;
788- let resultType : Type | null = null ;
789-
790- if ( typeArguments !== null && typeArguments . length > 0 ) {
791- resultType = typeArguments [ 0 ] ;
792- } else {
793- resultType = evaluateConstantType ( compiler , typeArguments , operands , reportNode ) ;
794- }
795-
796779 if ( resultType === null ) {
797780 compiler . error (
798781 DiagnosticCode . Operation_not_supported ,
@@ -802,31 +785,30 @@ export function compileCall(
802785 }
803786
804787 if ( resultType . classReference !== null ) {
805- expression . value = resultType . classReference . name ;
788+ value = resultType . classReference . name ;
806789 } else if ( resultType . signatureReference !== null ) {
807- expression . value = "Function" ;
790+ value = "Function" ;
808791 } else {
809- let kind = resultType . kind ;
810- switch ( kind ) {
811- case TypeKind . BOOL : expression . value = "bool" ; break ;
812- case TypeKind . I8 : expression . value = "i8" ; break ;
813- case TypeKind . U8 : expression . value = "u8" ; break ;
814- case TypeKind . I16 : expression . value = "i16" ; break ;
815- case TypeKind . U16 : expression . value = "u16" ; break ;
816- case TypeKind . I32 : expression . value = "i32" ; break ;
817- case TypeKind . U32 : expression . value = "u32" ; break ;
818- case TypeKind . F32 : expression . value = "f32" ; break ;
819- case TypeKind . I64 : expression . value = "i64" ; break ;
820- case TypeKind . U64 : expression . value = "u64" ; break ;
821- case TypeKind . F64 : expression . value = "f64" ; break ;
822- case TypeKind . ISIZE : expression . value = "isize" ; break ;
823- case TypeKind . USIZE : expression . value = "usize" ; break ;
824- case TypeKind . VOID : expression . value = "void" ; break ;
825- default : expression . value = "unknown" ; break ;
792+ switch ( resultType . kind ) {
793+ case TypeKind . BOOL : value = "bool" ; break ;
794+ case TypeKind . I8 : value = "i8" ; break ;
795+ case TypeKind . U8 : value = "u8" ; break ;
796+ case TypeKind . I16 : value = "i16" ; break ;
797+ case TypeKind . U16 : value = "u16" ; break ;
798+ case TypeKind . I32 : value = "i32" ; break ;
799+ case TypeKind . U32 : value = "u32" ; break ;
800+ case TypeKind . F32 : value = "f32" ; break ;
801+ case TypeKind . I64 : value = "i64" ; break ;
802+ case TypeKind . U64 : value = "u64" ; break ;
803+ case TypeKind . F64 : value = "f64" ; break ;
804+ case TypeKind . ISIZE : value = "isize" ; break ;
805+ case TypeKind . USIZE : value = "usize" ; break ;
806+ case TypeKind . VOID : value = "void" ; break ;
807+ default : value = "unknown" ; break ;
826808 }
827809 }
828810
829- return compiler . compileStringLiteral ( expression ) ;
811+ return compiler . ensureStaticString ( value ) ;
830812 }
831813
832814 // === Math ===================================================================================
0 commit comments