mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-13 18:24:19 +02:00
* Adjust wasmtime interface to latest version
This commit is contained in:
parent
6045b3a6bd
commit
f2d5deb26d
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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');
|
||||
|
Loading…
Reference in New Issue
Block a user