@@ -29,7 +29,7 @@ export namespace WASM {
2929 [ 'i64' , Integer . i64 ]
3030 ] ) ;
3131
32- export interface Value < T extends Type > {
32+ export interface Value < T extends Type > {
3333 type : T ;
3434 value : T extends Integer ? bigint : number ;
3535 }
@@ -49,12 +49,21 @@ export namespace WASM {
4949 }
5050 }
5151
52- export interface Nothing extends Value < Special > { }
52+ export interface Nothing extends Value < Special > {
53+ }
5354
5455 export const nothing : Nothing = {
5556 type : Special . nothing , value : 0
5657 }
5758
59+ export const nan : WASM . Value < Special > = { value : NaN , type : Special . nan } ;
60+
61+ export const negnan : WASM . Value < Special > = { value : - NaN , type : Special . nan } ;
62+
63+ export const infinity : WASM . Value < Special > = { value : Infinity , type : Special . infinity } ;
64+
65+ export const neginfinity : WASM . Value < Special > = { value : - Infinity , type : Special . infinity } ;
66+
5867 export function u32 ( n : bigint ) : WASM . Value < Integer > {
5968 return { value : n , type : Integer . u32 } ;
6069 }
@@ -63,12 +72,14 @@ export namespace WASM {
6372 return { value : n , type : Integer . i32 } ;
6473 }
6574
66- export function f32 ( n : number ) : WASM . Value < Float > {
67- return { value : n , type : Float . f32 } ;
75+ const determineType : ( n : number ) => WASM . Type = ( n : number ) => n === Infinity || n === - Infinity ? Special . infinity : ( isNaN ( n ) ? Special . nan : Float . f64 ) ;
76+
77+ export function f32 ( n : number ) : WASM . Value < Type > {
78+ return { value : n , type : determineType ( n ) } ;
6879 }
6980
70- export function f64 ( n : number ) : WASM . Value < Float > {
71- return { value : n , type : Float . f64 } ;
81+ export function f64 ( n : number ) : WASM . Value < Type > {
82+ return { value : n , type : determineType ( n ) } ;
7283 }
7384
7485 export function u64 ( n : bigint ) : WASM . Value < Integer > {
0 commit comments