From 6a7524418a88fbcbba65b0172f047266eafead64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Fri, 26 Apr 2024 18:14:46 +0200 Subject: [PATCH] * Create objects directly --- packages/wasm-job/src/job.js.pas | 41 +++++++++++++++++++++++++++++++- 1 file changed, 40 insertions(+), 1 deletion(-) diff --git a/packages/wasm-job/src/job.js.pas b/packages/wasm-job/src/job.js.pas index 96af8a372f..fa0bbb2ce0 100644 --- a/packages/wasm-job/src/job.js.pas +++ b/packages/wasm-job/src/job.js.pas @@ -13,7 +13,7 @@ unit JOB.Js; {$H+} {$ModeSwitch advancedrecords} -{$define VerboseJOB} +{off $define VerboseJOB} interface @@ -319,6 +319,8 @@ type constructor JOBCast(const Intf: IJSObject); overload; constructor JOBCreateFromID(aID: TJOBObjectID); virtual; // use this only for the owner (it will release it on free) constructor JOBCreateGlobal(const aID: UnicodeString); virtual; + constructor JOBCreate(Args : Array of const); + class function JSClassName : UnicodeString; virtual; class function Cast(const Intf: IJSObject): IJSObject; overload; destructor Destroy; override; property JOBObjectID: TJOBObjectID read FJOBObjectID; @@ -1024,6 +1026,12 @@ function __job_get_global( NameLen: longint ): TJOBObjectID; external JOBExportName name JOBFn_GetGlobal; +function __job_create_object( + NameP: PWideChar; + NameLen: longint; + ArgP: PByte + ): TJOBObjectID; external JOBExportName name JOBFn_CreateObject; + function JOBCallback(const Func: TJOBCallback; Data, Code: Pointer; Args: PByte): PByte; function VarRecToJSValue(const V: TVarRec): TJOB_JSValue; @@ -1071,7 +1079,9 @@ end; function __job_callback(w: NativeInt): boolean; begin + {$IFDEF VERBOSEJOB} writeln('__job_callback w=',w); + {$ENDIF} Result:=true; end; @@ -2714,7 +2724,9 @@ var begin v:=Args[Index].VVariant^; t:=VarType(v); + {$IFDEF VERBOSEJOB} writeln('AddVariant Index=',Index,' VarType=',t); + {$ENDIF} case t of varEmpty: Prep(1,JOBArgUndefined); @@ -2920,11 +2932,38 @@ begin FJOBObjectIDOwner:=true; end; +constructor TJSObject.JOBCreate(Args : Array of const); + +var + N : Unicodestring; + InvokeArgs: PByte; + +begin + N:=JSClassName; + if Length(Args)>0 then + InvokeArgs:=CreateInvokeJSArgs(Args) + else + InvokeArgs:=Nil; + FJobObjectID:=__job_create_object(PWideChar(N),Length(N),InvokeArgs); + {$IFDEF VERBOSEJOB} + Writeln('[',ClassName,'] Created new object with ID: ',FJobObjectID); + {$ENDIF} +end; + + class function TJSObject.Cast(const Intf: IJSObject): IJSObject; begin Result:=JOBCast(Intf); end; +class function TJSObject.JSClassName : UnicodeString; + +begin + Result:='Object'; +end; + + + destructor TJSObject.Destroy; begin if FJOBCastSrc<>nil then