Revert "wasi: job: write property object via separate wasi call"

This reverts commit 00c7d0ff4b.
This commit is contained in:
mattias 2022-05-25 20:14:29 +02:00
parent ce690d9de5
commit 8a314fdc0a
3 changed files with 23 additions and 47 deletions

View File

@ -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,

View File

@ -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';

View File

@ -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