@@ -127,10 +127,11 @@ export namespace BuiltinNames {
127127 export const trace = "~lib/builtins/trace" ;
128128 export const seed = "~lib/builtins/seed" ;
129129
130- export const isInteger = "~lib/builtins/isInteger" ;
131- export const isFloat = "~lib/builtins/isFloat" ;
132130 export const isBoolean = "~lib/builtins/isBoolean" ;
131+ export const isInteger = "~lib/builtins/isInteger" ;
133132 export const isSigned = "~lib/builtins/isSigned" ;
133+ export const isFloat = "~lib/builtins/isFloat" ;
134+ export const isVector = "~lib/builtins/isVector" ;
134135 export const isReference = "~lib/builtins/isReference" ;
135136 export const isString = "~lib/builtins/isString" ;
136137 export const isArray = "~lib/builtins/isArray" ;
@@ -758,6 +759,17 @@ export const function_builtins = new Map<string,(ctx: BuiltinContext) => Express
758759
759760// === Static type evaluation =================================================================
760761
762+ // isBoolean<T!>() / isBoolean<T?>(value: T) -> bool
763+ function builtin_isBoolean ( ctx : BuiltinContext ) : ExpressionRef {
764+ var compiler = ctx . compiler ;
765+ var module = compiler . module ;
766+ var type = checkConstantType ( ctx ) ;
767+ compiler . currentType = Type . bool ;
768+ if ( ! type ) return module . unreachable ( ) ;
769+ return reifyConstantType ( ctx , module . i32 ( type . isBooleanValue ? 1 : 0 ) ) ;
770+ }
771+ builtins . set ( BuiltinNames . isBoolean , builtin_isBoolean ) ;
772+
761773// isInteger<T!>() / isInteger<T?>(value: T) -> bool
762774function builtin_isInteger ( ctx : BuiltinContext ) : ExpressionRef {
763775 var compiler = ctx . compiler ;
@@ -769,38 +781,38 @@ function builtin_isInteger(ctx: BuiltinContext): ExpressionRef {
769781}
770782builtins . set ( BuiltinNames . isInteger , builtin_isInteger ) ;
771783
772- // isFloat <T!>() / isFloat <T?>(value: T) -> bool
773- function builtin_isFloat ( ctx : BuiltinContext ) : ExpressionRef {
784+ // isSigned <T!>() / isSigned <T?>(value: T) -> bool
785+ function builtin_isSigned ( ctx : BuiltinContext ) : ExpressionRef {
774786 var compiler = ctx . compiler ;
775787 var module = compiler . module ;
776788 var type = checkConstantType ( ctx ) ;
777789 compiler . currentType = Type . bool ;
778790 if ( ! type ) return module . unreachable ( ) ;
779- return reifyConstantType ( ctx , module . i32 ( type . isFloatValue ? 1 : 0 ) ) ;
791+ return reifyConstantType ( ctx , module . i32 ( type . isSignedIntegerValue ? 1 : 0 ) ) ;
780792}
781- builtins . set ( BuiltinNames . isFloat , builtin_isFloat ) ;
793+ builtins . set ( BuiltinNames . isSigned , builtin_isSigned ) ;
782794
783- // isBoolean <T!>() / isBoolean <T?>(value: T) -> bool
784- function builtin_isBoolean ( ctx : BuiltinContext ) : ExpressionRef {
795+ // isFloat <T!>() / isFloat <T?>(value: T) -> bool
796+ function builtin_isFloat ( ctx : BuiltinContext ) : ExpressionRef {
785797 var compiler = ctx . compiler ;
786798 var module = compiler . module ;
787799 var type = checkConstantType ( ctx ) ;
788800 compiler . currentType = Type . bool ;
789801 if ( ! type ) return module . unreachable ( ) ;
790- return reifyConstantType ( ctx , module . i32 ( type . isBooleanValue ? 1 : 0 ) ) ;
802+ return reifyConstantType ( ctx , module . i32 ( type . isFloatValue ? 1 : 0 ) ) ;
791803}
792- builtins . set ( BuiltinNames . isBoolean , builtin_isBoolean ) ;
804+ builtins . set ( BuiltinNames . isFloat , builtin_isFloat ) ;
793805
794- // isSigned <T!>() / isSigned <T?>(value: T) -> bool
795- function builtin_isSigned ( ctx : BuiltinContext ) : ExpressionRef {
806+ // isVector <T!>() / isVector <T?>(value: T) -> bool
807+ function builtin_isVector ( ctx : BuiltinContext ) : ExpressionRef {
796808 var compiler = ctx . compiler ;
797809 var module = compiler . module ;
798810 var type = checkConstantType ( ctx ) ;
799811 compiler . currentType = Type . bool ;
800812 if ( ! type ) return module . unreachable ( ) ;
801- return reifyConstantType ( ctx , module . i32 ( type . isSignedIntegerValue ? 1 : 0 ) ) ;
813+ return reifyConstantType ( ctx , module . i32 ( type . isVectorValue ? 1 : 0 ) ) ;
802814}
803- builtins . set ( BuiltinNames . isSigned , builtin_isSigned ) ;
815+ builtins . set ( BuiltinNames . isVector , builtin_isVector ) ;
804816
805817// isReference<T!>() / isReference<T?>(value: T) -> bool
806818function builtin_isReference ( ctx : BuiltinContext ) : ExpressionRef {
0 commit comments