From f2d5deb26d396c86b9ff636540464d065647a91c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Van=20Canneyt?= Date: Mon, 30 Oct 2023 09:16:03 +0100 Subject: [PATCH] * Adjust wasmtime interface to latest version --- packages/wasmtime/examples/helloworld.pp | 10 ++++--- packages/wasmtime/examples/wasi.pp | 33 ++++++++++-------------- packages/wasmtime/src/wasmtime.pp | 6 +++++ 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/packages/wasmtime/examples/helloworld.pp b/packages/wasmtime/examples/helloworld.pp index 675310c1ca..a5692c0acc 100644 --- a/packages/wasmtime/examples/helloworld.pp +++ b/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); diff --git a/packages/wasmtime/examples/wasi.pp b/packages/wasmtime/examples/wasi.pp index 54cf15e398..1b115f071c 100644 --- a/packages/wasmtime/examples/wasi.pp +++ b/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); diff --git a/packages/wasmtime/src/wasmtime.pp b/packages/wasmtime/src/wasmtime.pp index 1789cdfb22..a9435b57cd 100644 --- a/packages/wasmtime/src/wasmtime.pp +++ b/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');