This commit changes the C API function `wasm_module_new` to use the Rust API `Module::from_binary` which performs verification of the module, as per the C API spec. This also introduces a `EngineBuilder` type to the C# API that can be used to construct an `Engine` with the various Wasmtime configuration options. This is required to get the C# tests passing since they use reference types and multi-value. Fixes #859.
56 lines
1.4 KiB
C#
56 lines
1.4 KiB
C#
using System;
|
|
|
|
namespace Wasmtime
|
|
{
|
|
/// <summary>
|
|
/// Represents the Wasmtime engine.
|
|
/// </summary>
|
|
public class Engine : IDisposable
|
|
{
|
|
/// <summary>
|
|
/// Constructs a new <see cref="Engine" />.
|
|
/// </summary>
|
|
public Engine()
|
|
{
|
|
Handle = Interop.wasm_engine_new();
|
|
|
|
if (Handle.IsInvalid)
|
|
{
|
|
throw new WasmtimeException("Failed to create Wasmtime engine.");
|
|
}
|
|
}
|
|
|
|
internal Engine(Interop.WasmConfigHandle config)
|
|
{
|
|
Handle = Interop.wasm_engine_new_with_config(config);
|
|
config.SetHandleAsInvalid();
|
|
|
|
if (Handle.IsInvalid)
|
|
{
|
|
throw new WasmtimeException("Failed to create Wasmtime engine.");
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Creates a new Wasmtime <see cref="Store" />.
|
|
/// </summary>
|
|
/// <returns>Returns the new <see cref="Store" />.</returns>
|
|
public Store CreateStore()
|
|
{
|
|
return new Store(this);
|
|
}
|
|
|
|
/// <inheritdoc/>
|
|
public void Dispose()
|
|
{
|
|
if (!Handle.IsInvalid)
|
|
{
|
|
Handle.Dispose();
|
|
Handle.SetHandleAsInvalid();
|
|
}
|
|
}
|
|
|
|
internal Interop.EngineHandle Handle { get; private set; }
|
|
}
|
|
}
|