Browse Source

* Added BigInt

Michael Van Canneyt 1 year ago
parent
commit
a7db8e9f8b
1 changed files with 27 additions and 4 deletions
  1. 27 4
      packages/rtl/src/js.pas

+ 27 - 4
packages/rtl/src/js.pas

@@ -424,11 +424,10 @@ type
     constructor new(aElement1 : JSValue); varargs; overload;
     constructor new(aElement1 : JSValue); varargs; overload;
     class function _of() : TJSArray; varargs; external name 'of'; 
     class function _of() : TJSArray; varargs; external name 'of'; 
     class function isArray(a: JSValue) : Boolean;
     class function isArray(a: JSValue) : Boolean;
-{$IFDEF JAVASCRIPT2015}    
     class function from(a : JSValue) : TJSArray;
     class function from(a : JSValue) : TJSArray;
     class function from(arrayLike : JSValue; mapFunction : TJSMapFunctionCallBack): TJSArray; overload;
     class function from(arrayLike : JSValue; mapFunction : TJSMapFunctionCallBack): TJSArray; overload;
     class function from(arrayLike : JSValue; mapFunction : TJSMapFunctionCallBack; thisArg : JSValue): TJSArray; overload;
     class function from(arrayLike : JSValue; mapFunction : TJSMapFunctionCallBack; thisArg : JSValue): TJSArray; overload;
-{$ENDIF}
+
     function concat(el : JSValue) : TJSArray; varargs;
     function concat(el : JSValue) : TJSArray; varargs;
     function copyWithin(aTarget : NativeInt) : TJSArray;overload; // not in IE
     function copyWithin(aTarget : NativeInt) : TJSArray;overload; // not in IE
     function copyWithin(aTarget, aStart : NativeInt) : TJSArray;overload; // not in IE
     function copyWithin(aTarget, aStart : NativeInt) : TJSArray;overload; // not in IE
@@ -1056,6 +1055,13 @@ type
     class property POSITIVE_INFINITY: TJSNumber read FPOSITIVE_INFINITY;
     class property POSITIVE_INFINITY: TJSNumber read FPOSITIVE_INFINITY;
   end;
   end;
 
 
+  TJSBigInt = class external name 'BigInt' (TJSObject)
+     constructor new(aValue : JSValue);
+     class function asIntN(Size : Integer;aValue : TJSBigInt) : NativeInt;
+     class function asUIntN(Size : Integer;aValue : TJSBigInt) : NativeInt;
+
+  end;
+
 var
 var
   // JSArguments can be used in procedures/functions to provide access to the 'arguments' array.
   // JSArguments can be used in procedures/functions to provide access to the 'arguments' array.
   JSArguments: TJSFunctionArguments; external name 'arguments';
   JSArguments: TJSFunctionArguments; external name 'arguments';
@@ -1066,7 +1072,8 @@ var
 
 
 function Symbol : TJSSymbol;
 function Symbol : TJSSymbol;
 function Symbol(Description : String) : TJSSymbol;
 function Symbol(Description : String) : TJSSymbol;
-
+function AsNumber(v : JSValue) : Double; assembler;
+function AsIntNumber(v : JSValue) : NativeInt; assembler;
 Function JSValueArrayOf(Args : Array of const) : TJSValueDynArray;
 Function JSValueArrayOf(Args : Array of const) : TJSValueDynArray;
 function new(aElements: TJSValueDynArray) : TJSObject; overload;
 function new(aElements: TJSValueDynArray) : TJSObject; overload;
 function JSDelete(const Obj: JSValue; const PropName: string): boolean; assembler; overload;
 function JSDelete(const Obj: JSValue; const PropName: string): boolean; assembler; overload;
@@ -1095,6 +1102,7 @@ function isNull(const v: JSValue): boolean; assembler;
 function isNumber(const v: JSValue): boolean; external name 'rtl.isNumber';
 function isNumber(const v: JSValue): boolean; external name 'rtl.isNumber';
 function isObject(const v: JSValue): boolean; external name 'rtl.isObject'; // true if not null and a JS Object
 function isObject(const v: JSValue): boolean; external name 'rtl.isObject'; // true if not null and a JS Object
 function isRecord(const v: JSValue): boolean; assembler;
 function isRecord(const v: JSValue): boolean; assembler;
+function isBigint(const v: JSValue): boolean; assembler;
 function isString(const v: JSValue): boolean; external name 'rtl.isString';
 function isString(const v: JSValue): boolean; external name 'rtl.isString';
 function isUndefined(const v: JSValue): boolean; assembler;
 function isUndefined(const v: JSValue): boolean; assembler;
 function isDefined(const v: JSValue): boolean; assembler;
 function isDefined(const v: JSValue): boolean; assembler;
@@ -1122,7 +1130,17 @@ Const
 
 
 implementation
 implementation
 
 
-Function JSValueArrayOf(Args : Array of const) : TJSValueDynArray;
+function AsNumber(v: JSValue): Double; assembler;
+asm
+  return Number(v);
+end;
+
+function AsIntNumber(v: JSValue): NativeInt;
+asm
+  return Number(v);
+end;
+
+function JSValueArrayOf(Args: array of const): TJSValueDynArray;
 
 
 var
 var
   I : Integer;
   I : Integer;
@@ -1232,6 +1250,11 @@ asm
       && (typeof(v.$assign)==="function");
       && (typeof(v.$assign)==="function");
 end;
 end;
 
 
+function isBigint(const v: JSValue): boolean; assembler;
+asm
+  return typeof(v) === 'bigint';
+end;
+
 function isUndefined(const v: JSValue): boolean; assembler;
 function isUndefined(const v: JSValue): boolean; assembler;
 asm
 asm
   return v == undefined;
   return v == undefined;