Переглянути джерело

demo: wasidom: invoke string result

mattias 3 роки тому
батько
коміт
1bd4ed47ad
2 змінених файлів з 5 додано та 18 видалено
  1. 3 4
      demo/wasienv/dom/wadom_browser.pp
  2. 2 14
      demo/wasienv/dom/wadom_wasm.pas

+ 3 - 4
demo/wasienv/dom/wadom_browser.pp

@@ -1,7 +1,6 @@
 unit wadom_browser;
 
 {$mode objfpc}
-{$h+}
 
 interface
 
@@ -30,7 +29,7 @@ Type
     function GetStringResult(ResultP: NativeInt): TWasiDomResult; virtual;
     function ReleaseStringResult: TWasiDomResult; virtual;
     function GetInvokeArguments(View: TJSDataView; ArgsP: NativeInt): TJSValueDynArray; virtual;
-    function GetWasiDomResult(const v: jsvalue): TWasiDomResult;
+    function GetWasiDomResult(v: jsvalue): TWasiDomResult;
   Public
     Constructor Create(aEnv: TPas2JSWASIEnvironment); override;
     Procedure FillImportObject(aObject: TJSObject); override;
@@ -322,7 +321,7 @@ begin
   end;
 end;
 
-function TWADomBridge.GetWasiDomResult(const v: jsvalue): TWasiDomResult;
+function TWADomBridge.GetWasiDomResult(v: jsvalue): TWasiDomResult;
 begin
   case jstypeof(v) of
   'undefined': Result:=WasiDomResult_Undefined;
@@ -332,7 +331,7 @@ begin
   'symbol': Result:=WasiDomResult_Symbol;
   'bigint': Result:=WasiDomResult_BigInt;
   'function': Result:=WasiDomResult_Function;
-  'object': Result:=WasiDomResult_Object;
+  'object': if v=nil then Result:=WasiDomResult_Null else Result:=WasiDomResult_Object;
   else Result:=WasiDomResult_None;
   end;
 end;

+ 2 - 14
demo/wasienv/dom/wadom_wasm.pas

@@ -94,7 +94,7 @@ function __wasibridgefn_invoke_stringresult(
   FuncNameP: PChar;
   FuncNameLen: longint;
   ArgP: PByte;
-  ResultLenP: PNativeInt // length
+  ResultLenP: PByte // length
 ): TWasiDomResult; external WasiDomExportName name WasiBridgeFn_InvokeStringResult;
 
 function __wasibridgefn_getstringresult(
@@ -497,20 +497,9 @@ function TJSObject.InvokeJSUnicodeStringResult(const aName: string;
 var
   ResultLen: NativeInt;
   aError: TWasiDomResult;
-  InvokeArgs: PByte;
 begin
   ResultLen:=0;
-  if length(Args)=0 then
-    aError:=__wasibridgefn_invoke_stringresult(ObjectID,PChar(aName),length(aName),nil,@ResultLen)
-  else begin
-    InvokeArgs:=CreateInvokeJSArgs(Args);
-    try
-      aError:=__wasibridgefn_invoke_stringresult(ObjectID,PChar(aName),length(aName),InvokeArgs,@ResultLen);
-    finally
-      if InvokeArgs<>nil then
-        FreeMem(InvokeArgs);
-    end;
-  end;
+  aError:=InvokeJSOneResult(aName,Args,@__wasibridgefn_invoke_stringresult,@ResultLen);
   if aError<>WasiDomResult_String then
     WasiInvokeRaiseResultMismatch(aName,WasiDomResult_String,aError);
   if ResultLen=0 then
@@ -524,7 +513,6 @@ begin
       __wasibridgefn_releasestringresult();
   end;
   __wasibridgefn_getstringresult(PByte(Result));
-  writeln('TJSObject.InvokeJSUnicodeStringResult Result="',Result,'"');
 end;
 
 function TJSObject.InvokeJSObjResult(const aName: string;