* Adjust wasmtime interface to latest version

This commit is contained in:
Michaël Van Canneyt 2023-10-30 09:16:03 +01:00
parent 6045b3a6bd
commit f2d5deb26d
3 changed files with 26 additions and 23 deletions

View File

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

View File

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

View File

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