diff --git a/demo/wasienv/dom/job_browser.pp b/demo/wasienv/dom/job_browser.pp index cdecdb1..162c852 100644 --- a/demo/wasienv/dom/job_browser.pp +++ b/demo/wasienv/dom/job_browser.pp @@ -25,8 +25,7 @@ Type Protected function FindObject(ObjId: TJOBObjectID): TJSObject; virtual; function Invoke_JSResult(ObjId: TJOBObjectID; NameP, NameLen, Invoke, ArgsP: NativeInt; out JSResult: JSValue): TJOBResult; virtual; - function Invoke_NoResult(ObjId: TJOBObjectID; NameP, NameLen, ArgsP: NativeInt): TJOBResult; virtual; - function Set_JSProperty(ObjId: TJOBObjectID; NameP, NameLen, ArgsP: NativeInt): TJOBResult; virtual; + function Invoke_NoResult(ObjId: TJOBObjectID; NameP, NameLen, Invoke, ArgsP: NativeInt): TJOBResult; virtual; function Invoke_BooleanResult(ObjId: TJOBObjectID; NameP, NameLen, Invoke, ArgsP, ResultP: NativeInt): TJOBResult; virtual; function Invoke_DoubleResult(ObjId: TJOBObjectID; NameP, NameLen, Invoke, ArgsP, ResultP: NativeInt): TJOBResult; virtual; function Invoke_StringResult(ObjId: TJOBObjectID; NameP, NameLen, Invoke, ArgsP, ResultP: NativeInt): TJOBResult; virtual; @@ -75,7 +74,6 @@ end; procedure TJOBBridge.FillImportObject(aObject: TJSObject); begin aObject[JOBFn_InvokeNoResult]:=@Invoke_NoResult; - aObject[JOBFn_SetProperty]:=@Set_JSProperty; aObject[JOBFn_InvokeBooleanResult]:=@Invoke_BooleanResult; aObject[JOBFn_InvokeDoubleResult]:=@Invoke_DoubleResult; aObject[JOBFn_InvokeStringResult]:=@Invoke_StringResult; @@ -155,19 +153,12 @@ begin end; function TJOBBridge.Invoke_NoResult(ObjId: TJOBObjectID; NameP, NameLen, - ArgsP: NativeInt): TJOBResult; + Invoke, ArgsP: NativeInt): TJOBResult; var JSResult: JSValue; begin - Result:=Invoke_JSResult(ObjId,NameP,NameLen,JOBInvokeCall,ArgsP,JSResult); -end; - -function TJOBBridge.Set_JSProperty(ObjId: TJOBObjectID; NameP, NameLen, - ArgsP: NativeInt): TJOBResult; -var - JSResult: JSValue; -begin - Result:=Invoke_JSResult(ObjId,NameP,NameLen,JOBInvokeSetter,ArgsP,JSResult); + // invoke + Result:=Invoke_JSResult(ObjId,NameP,NameLen,Invoke,ArgsP,JSResult); end; function TJOBBridge.Invoke_BooleanResult(ObjId: TJOBObjectID; NameP, NameLen, diff --git a/demo/wasienv/dom/job_shared.pp b/demo/wasienv/dom/job_shared.pp index 6d1c458..d0ca02e 100644 --- a/demo/wasienv/dom/job_shared.pp +++ b/demo/wasienv/dom/job_shared.pp @@ -52,7 +52,6 @@ const JOBExportName = 'job'; JOBFn_InvokeNoResult = 'invoke_noresult'; - JOBFn_SetProperty = 'setproperty'; JOBFn_InvokeBooleanResult = 'invoke_boolresult'; JOBFn_InvokeDoubleResult = 'invoke_doubleresult'; JOBFn_InvokeStringResult = 'invoke_stringresult'; diff --git a/demo/wasienv/dom/job_wasm.pas b/demo/wasienv/dom/job_wasm.pas index 6b32992..e9aff95 100644 --- a/demo/wasienv/dom/job_wasm.pas +++ b/demo/wasienv/dom/job_wasm.pas @@ -42,6 +42,10 @@ Type jigCall, // call function jigGetter // read property ); + TJOBInvokeSetType = ( + jisCall, // call function + jisSetter // write property + ); TJSObject = class; TJSObjectClass = class of TJSObject; @@ -58,12 +62,11 @@ Type procedure InvokeJS_RaiseResultMismatch(const aName: string; Expected, Actual: TJOBResult); virtual; procedure InvokeJS_RaiseResultMismatchStr(const aName: string; const Expected, Actual: string); virtual; function CreateInvokeJSArgs(const Args: array of const): PByte; virtual; - procedure SetJSProperty(const aName: string; Const Args: Array of const); virtual; public constructor CreateFromID(aID: TJOBObjectID); virtual; destructor Destroy; override; property ObjectID: TJOBObjectID read FObjectID; - procedure InvokeJSNoResult(const aName: string; Const Args: Array of const); virtual; + procedure InvokeJSNoResult(const aName: string; Const Args: Array of const; Invoke: TJOBInvokeSetType = jisCall); virtual; function InvokeJSBooleanResult(const aName: string; Const Args: Array of const; Invoke: TJOBInvokeGetType = jigCall): Boolean; virtual; function InvokeJSDoubleResult(const aName: string; Const Args: Array of const; Invoke: TJOBInvokeGetType = jigCall): Double; virtual; function InvokeJSUnicodeStringResult(const aName: string; Const Args: Array of const; Invoke: TJOBInvokeGetType = jigCall): UnicodeString; virtual; @@ -93,16 +96,10 @@ function __job_invoke_noresult( ObjID: TJOBObjectID; NameP: PChar; NameLen: longint; + Invoke: longint; ArgP: PByte ): TJOBResult; external JOBExportName name JOBFn_InvokeNoResult; -function __job_setproperty( - ObjID: TJOBObjectID; - NameP: PChar; - NameLen: longint; - ArgP: PByte -): TJOBResult; external JOBExportName name JOBFn_SetProperty; - function __job_invoke_boolresult( ObjID: TJOBObjectID; NameP: PChar; @@ -157,6 +154,10 @@ const JOBInvokeCall, JOBInvokeGetter ); + InvokeSetToInt: array[TJOBInvokeSetType] of integer = ( + JOBInvokeCall, + JOBInvokeSetter + ); {$IFDEF VerboseJOB} function GetVarRecName(vt: word): string; @@ -505,21 +506,6 @@ begin {$ENDIF} end; -procedure TJSObject.SetJSProperty(const aName: string; - const Args: array of const); -var - InvokeArgs: PByte; -begin - if length(Args)<>1 then - InvokeJS_Raise(aName,'wrong arg count'); - InvokeArgs:=CreateInvokeJSArgs(Args); - try - __job_setproperty(ObjectID,PChar(aName),length(aName),InvokeArgs); - finally - FreeMem(InvokeArgs); - end; -end; - constructor TJSObject.CreateFromID(aID: TJOBObjectID); begin FObjectID:=aID; @@ -533,17 +519,17 @@ begin end; procedure TJSObject.InvokeJSNoResult(const aName: string; - const Args: array of const); + const Args: array of const; Invoke: TJOBInvokeSetType); var aError: TJOBResult; InvokeArgs: PByte; begin if length(Args)=0 then - aError:=__job_invoke_noresult(ObjectID,PChar(aName),length(aName),nil) + aError:=__job_invoke_noresult(ObjectID,PChar(aName),length(aName),InvokeSetToInt[Invoke],nil) else begin InvokeArgs:=CreateInvokeJSArgs(Args); try - aError:=__job_invoke_noresult(ObjectID,PChar(aName),length(aName),InvokeArgs); + aError:=__job_invoke_noresult(ObjectID,PChar(aName),length(aName),InvokeSetToInt[Invoke],InvokeArgs); finally if InvokeArgs<>nil then FreeMem(InvokeArgs); @@ -672,35 +658,35 @@ end; procedure TJSObject.WriteJSPropertyBoolean(const aName: string; Value: Boolean); begin - SetJSProperty(aName,[Value]); + InvokeJSNoResult(aName,[Value],jisSetter); end; procedure TJSObject.WriteJSPropertyDouble(const aName: string; Value: Double); begin - SetJSProperty(aName,[Value]); + InvokeJSNoResult(aName,[Value],jisSetter); end; procedure TJSObject.WriteJSPropertyUnicodeString(const aName: string; const Value: UnicodeString); begin - SetJSProperty(aName,[Value]); + InvokeJSNoResult(aName,[Value],jisSetter); end; procedure TJSObject.WriteJSPropertyUtf8String(const aName: string; const Value: String); begin - SetJSProperty(aName,[Value]); + InvokeJSNoResult(aName,[Value],jisSetter); end; procedure TJSObject.WriteJSPropertyObject(const aName: string; Value: TJSObject ); begin - SetJSProperty(aName,[Value]); + InvokeJSNoResult(aName,[Value],jisSetter); end; procedure TJSObject.WriteJSPropertyLongInt(const aName: string; Value: LongInt); begin - SetJSProperty(aName,[Value]); + InvokeJSNoResult(aName,[Value],jisSetter); end; initialization