Przeglądaj źródła

* Adjust wasmtime interface to latest version

Michaël Van Canneyt 1 rok temu
rodzic
commit
f2d5deb26d

+ 6 - 4
packages/wasmtime/examples/helloworld.pp

@@ -1,3 +1,5 @@
+{$mode objfpc}
+{$h+}
 program helloworld;
 
 uses classes,ctypes, wasmtime;
@@ -73,14 +75,14 @@ begin
     exit_with_error('failed to parse wat', error, Nil);
   wasm_byte_vec_delete(@wat);
 
-  Writeln('Compiling module...\n');
+  Writeln('Compiling module...');
 
   error:=wasmtime_module_new(engine, Puint8_t(wasm.data), wasm.size, @module);
   wasm_byte_vec_delete(@wasm);
   if (error <> nil) then
     exit_with_error('failed to compile module', error, nil);
 
-  Writeln('Creating callback...\n');
+  Writeln('Creating callback...');
   hello_ty:=wasm_functype_new_0_0();
   wasmtime_func_new(context, hello_ty, @hello_callback, Nil, Nil, @hello);
 
@@ -91,7 +93,7 @@ begin
   if (error<>nil) or (trap <>Nil) then
     exit_with_error('failed to instantiate', error, trap);
 
-  Writeln('Extracting export...\n');
+  Writeln('Extracting export...');
   ok:=wasmtime_instance_export_get(context, @instance, PAnsiChar('run'), 3, @run) ;
   if OK=0 then
     exit_with_error('failed to get run export', nil, nil);
@@ -103,7 +105,7 @@ begin
   if (error<>nil) or (trap<>nil) then
     exit_with_error('failed to call function', error, trap);
 
-  Writeln('All finished!\n');
+  Writeln('All finished!');
   wasmtime_module_delete(module);
   wasmtime_store_delete(store);
   wasm_engine_delete(engine);

+ 14 - 19
packages/wasmtime/examples/wasi.pp

@@ -1,3 +1,5 @@
+{$mode objfpc}
+{$h+}
 program wasi;
 
 uses classes,ctypes, wasmtime;
@@ -10,17 +12,17 @@ var
 begin
   Writeln(stderr, 'error: ', message);
   S:='';
-  if (error <> Nil)  then
-    begin
-    write('Error: ');
-    wasmtime_error_message(error, @error_message);
-    wasmtime_error_delete(error)
-    end
-  else
+  if Trap<>nil then
     begin
     write('Trap: ');
     wasm_trap_message(trap, @error_message);
     wasm_trap_delete(trap);
+    end
+  else
+    begin
+    write('Error: ');
+    wasmtime_error_message(error, @error_message);
+    wasmtime_error_delete(error)
     end;
   SetLength(S,error_message.size);
   Move(error_message.data^,S[1],error_message.size);
@@ -58,7 +60,7 @@ begin
 
   F:=TMemoryStream.Create;
   try
-    F.LoadFromFile('helloworld.wasm');
+    F.LoadFromFile('hello.wasm');
     wasm_byte_vec_new_uninitialized(@wasm, F.Size);
     Move(F.Memory^,wasm.data^,F.Size);
   finally
@@ -100,17 +102,10 @@ begin
   // And call it!
   Writeln('Calling export...');
   error:=wasmtime_func_call(context, @func, nil, 0, nil, 0, @trap);
-  if (Trap<>Nil) then
-    begin
-    // exit_proc is reported as trap.
-    if wasmtime_trap_exit_status(trap,@status)<>0 then
-      Writeln('Wasm program exited with status: ',Status)
-    else
-      exit_with_error('failed to run default export for module', error, trap);
-    end
-  else if (error<>nil) then
-    exit_with_error('failed to run default export for module', error, trap);
-
+  if wasmtime_error_exit_status(error,@status)<>0 then
+    Writeln('Wasm program exited with status: ',Status)
+  else 
+    exit_with_error('Error while running default export for module', error, trap);
   // Clean up after ourselves at this point
   Writeln('All finished!\n');
   wasmtime_module_delete(module);

+ 6 - 0
packages/wasmtime/src/wasmtime.pp

@@ -809,6 +809,8 @@ var
   wasi_config_preopen_dir : function(config:Pwasi_config_t; path:PAnsiChar; guest_path:PAnsiChar):T_Bool;
   wasmtime_error_delete : procedure(error:Pwasmtime_error_t); cdecl;
   wasmtime_error_message : procedure(error:Pwasmtime_error_t; message:Pwasm_name_t); cdecl;
+  wasmtime_error_exit_status : function(p1: pwasmtime_error_t; status : pcint) : T_bool; cdecl;
+  wasmtime_error_wasm_trace : procedure(p1: pwasmtime_error_t; res: pwasm_frame_vec_t); cdecl ;
   wasmtime_config_debug_info_set : procedure(_para1:Pwasm_config_t; _para2:T_Bool); cdecl;
   wasmtime_config_interruptable_set : procedure(_para1:Pwasm_config_t; _para2:T_Bool); cdecl;
   wasmtime_config_consume_fuel_set : procedure(_para1:Pwasm_config_t; _para2:T_Bool); cdecl;
@@ -1542,6 +1544,8 @@ begin
   wasi_config_preopen_dir:=nil;
   wasmtime_error_delete:=nil;
   wasmtime_error_message:=nil;
+  wasmtime_error_exit_status:=nil;
+  wasmtime_error_wasm_trace:=nil;
   wasmtime_config_debug_info_set:=nil;
   wasmtime_config_interruptable_set:=nil;
   wasmtime_config_consume_fuel_set:=nil;
@@ -1958,6 +1962,8 @@ begin
   pointer(wasi_config_preopen_dir):=GetProcAddress(hlib,'wasi_config_preopen_dir');
   pointer(wasmtime_error_delete):=GetProcAddress(hlib,'wasmtime_error_delete');
   pointer(wasmtime_error_message):=GetProcAddress(hlib,'wasmtime_error_message');
+  pointer(wasmtime_error_exit_status):=GetProcAddress(hlib,'wasmtime_error_exit_status');
+  pointer(wasmtime_error_wasm_trace):=GetProcAddress(hlib,'wasmtime_error_wasm_trace');
   pointer(wasmtime_config_debug_info_set):=GetProcAddress(hlib,'wasmtime_config_debug_info_set');
   pointer(wasmtime_config_interruptable_set):=GetProcAddress(hlib,'wasmtime_config_interruptable_set');
   pointer(wasmtime_config_consume_fuel_set):=GetProcAddress(hlib,'wasmtime_config_consume_fuel_set');