Skip to content

Commit b2b0480

Browse files
authored
Fix CI. (#305)
* Fix CI. This commit: * Updates target framework to `net8.0`. * Fixes the `externref` API to match recent changes in upstream Wasmtime. * Remove WASI "snapshot 0" from the tests (so old!). * Bump .NET version in CI. * Attempt to fix Windows CI.
1 parent 76b39fa commit b2b0480

26 files changed

+141
-213
lines changed

.github/workflows/main.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
- uses: actions/checkout@v2
4242
- uses: actions/setup-dotnet@v1
4343
with:
44-
dotnet-version: '7.0.x'
44+
dotnet-version: '8.0.x'
4545
# workaround for actions/setup-dotnet#155
4646
- name: Clear package cache
4747
run: dotnet clean Wasmtime.sln && dotnet nuget locals all --clear

benchmarks/simple/simple.csproj

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
2-
3-
<PropertyGroup>
4-
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
6-
</PropertyGroup>
7-
8-
<ItemGroup>
9-
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
10-
<ProjectReference Include="..\..\src\Wasmtime.csproj" />
11-
</ItemGroup>
12-
13-
</Project>
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<OutputType>Exe</OutputType>
5+
<TargetFramework>net8.0</TargetFramework>
6+
</PropertyGroup>
7+
8+
<ItemGroup>
9+
<PackageReference Include="BenchmarkDotNet" Version="0.12.1" />
10+
<ProjectReference Include="..\..\src\Wasmtime.csproj" />
11+
</ItemGroup>
12+
13+
</Project>

examples/consumefuel/consumefuel.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net8.0</TargetFramework>
66
</PropertyGroup>
77

88
<ItemGroup>

examples/externref/externref.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net8.0</TargetFramework>
66
</PropertyGroup>
77

88
<ItemGroup>

examples/funcref/funcref.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net8.0</TargetFramework>
66
</PropertyGroup>
77

88
<ItemGroup>

examples/global/global.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net8.0</TargetFramework>
66
</PropertyGroup>
77

88
<ItemGroup>

examples/hello/hello.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net8.0</TargetFramework>
66
<Nullable>enable</Nullable>
77
</PropertyGroup>
88

examples/memory/memory.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net8.0</TargetFramework>
66
</PropertyGroup>
77

88
<ItemGroup>

examples/storedata/storedata.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net8.0</TargetFramework>
66
<ImplicitUsings>enable</ImplicitUsings>
77
<Nullable>enable</Nullable>
88
</PropertyGroup>

examples/table/table.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
<PropertyGroup>
44
<OutputType>Exe</OutputType>
5-
<TargetFramework>net7.0</TargetFramework>
5+
<TargetFramework>net8.0</TargetFramework>
66
</PropertyGroup>
77

88
<ItemGroup>

src/Function.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public bool CheckTypeSignature(Type? returnType = null, params Type[] parameters
132132
}
133133

134134
// Validate the return type(s)
135-
if(returnType != null)
135+
if (returnType != null)
136136
{
137137
// Multiple return types are represented by a tuple.
138138
if (returnType.IsTupleType())
@@ -295,7 +295,7 @@ private unsafe void InvokeWithoutReturn(Span<ValueRaw> arguments, StoreContext s
295295
Span<Value> args = stackalloc Value[Parameters.Count];
296296
for (var i = 0; i < arguments.Length; ++i)
297297
{
298-
args[i] = arguments[i].ToValue(Parameters[i]);
298+
args[i] = arguments[i].ToValue(store, Parameters[i]);
299299
}
300300

301301
// Make some space to store the return results
@@ -641,14 +641,14 @@ internal static unsafe IntPtr InvokeUntypedCallback(UntypedCallbackDelegate call
641641

642642
for (int i = 0; i < argumentsSpan.Length; i++)
643643
{
644-
argumentsSpan[i] = args[i].ToValueBox();
644+
argumentsSpan[i] = args[i].ToValueBox(caller.Store);
645645
}
646646

647647
callback(caller, argumentsSpan, resultsSpan);
648648

649649
for (int i = 0; i < resultsSpan.Length; i++)
650650
{
651-
results[i] = resultsSpan[i].ToValue(resultKinds[i]);
651+
results[i] = resultsSpan[i].ToValue(caller.Store, resultKinds[i]);
652652
}
653653
}
654654
finally

src/Global.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ public Global(Store store, ValueKind kind, object? initialValue, Mutability muta
117117
throw new InvalidOperationException("Failed to create global type, invalid ValueKind or Mutability");
118118
}
119119

120-
var value = Value.FromObject(initialValue, Kind);
120+
var value = Value.FromObject(store, initialValue, Kind);
121121
var error = Native.wasmtime_global_new(store.Context.handle, globalType, in value, out this.global);
122122
GC.KeepAlive(store);
123123

@@ -155,7 +155,7 @@ public void SetValue(object? value)
155155
throw new InvalidOperationException("The global is immutable and cannot be changed.");
156156
}
157157

158-
var v = Value.FromObject(value, Kind);
158+
var v = Value.FromObject(store, value, Kind);
159159
Native.wasmtime_global_set(store.Context.handle, this.global, in v);
160160
GC.KeepAlive(store);
161161

@@ -300,7 +300,7 @@ public T GetValue()
300300
Native.wasmtime_global_get(context.handle, _global.global, out var v);
301301
GC.KeepAlive(_store);
302302

303-
var result = _converter.Unbox(_store, v.ToValueBox());
303+
var result = _converter.Unbox(_store, v.ToValueBox(_store));
304304
v.Dispose();
305305

306306
return result;
@@ -317,7 +317,7 @@ public void SetValue(T value)
317317
throw new InvalidOperationException("The global is immutable and cannot be changed.");
318318
}
319319

320-
using (var v = _converter.Box(value).ToValue(_global.Kind))
320+
using (var v = _converter.Box(value).ToValue(_store, _global.Kind))
321321
{
322322
var context = _store.Context;
323323
Native.wasmtime_global_set(context.handle, _global.global, in v);

src/Instance.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -667,7 +667,7 @@ public Instance(Store store, Module module, params object[] imports)
667667

668668
if (type != null && type.Value != @extern.kind)
669669
{
670-
return null;
670+
return null;
671671
}
672672

673673
var name = Encoding.UTF8.GetString(namePtr, checked((int)nameLen));

src/Linker.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ private void Define<T>(string module, string name, T item)
6060
}
6161

6262
var ext = item.AsExtern();
63-
63+
6464
using var nameBytes = name.ToUTF8(stackalloc byte[Math.Min(64, name.Length * 2)]);
6565
using var moduleBytes = module.ToUTF8(stackalloc byte[Math.Min(64, module.Length * 2)]);
6666

src/Table.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ public Table(Store store, TableKind kind, object? initialValue, uint initial, ui
7878
limits
7979
));
8080

81-
var value = Value.FromObject(initialValue, Kind);
81+
var value = Value.FromObject(store, initialValue, Kind);
8282
var error = Native.wasmtime_table_new(store.Context.handle, tableType, in value, out this.table);
8383
GC.KeepAlive(store);
8484
value.Dispose();
@@ -132,7 +132,7 @@ public Table(Store store, TableKind kind, object? initialValue, uint initial, ui
132132
/// <param name="value">The value to set.</param>
133133
public void SetElement(uint index, object? value)
134134
{
135-
var v = Value.FromObject(value, Kind);
135+
var v = Value.FromObject(store, value, Kind);
136136
var error = Native.wasmtime_table_set(store.Context.handle, this.table, index, v);
137137
GC.KeepAlive(store);
138138
v.Dispose();
@@ -162,7 +162,7 @@ public uint GetSize()
162162
/// <returns>Returns the previous number of elements in the table.</returns>
163163
public uint Grow(uint delta, object? initialValue)
164164
{
165-
var v = Value.FromObject(initialValue, Kind);
165+
var v = Value.FromObject(store, initialValue, Kind);
166166

167167
var error = Native.wasmtime_table_grow(store.Context.handle, this.table, delta, v, out var prev);
168168
GC.KeepAlive(store);

src/TrapException.cs

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,9 +243,6 @@ public TrapException(string message, Exception? inner) : base(message, inner) {
243243
/// </summary>
244244
public TrapCode Type { get; private set; }
245245

246-
/// <inheritdoc/>
247-
protected TrapException(SerializationInfo info, StreamingContext context) : base(info, context) { }
248-
249246
internal TrapException(string message, IReadOnlyList<TrapFrame>? frames, TrapCode type, Exception? innerException = null)
250247
: base(message, innerException)
251248
{

src/Value.cs

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -222,7 +222,7 @@ public static bool TryGetKind(Type type, out ValueKind kind)
222222
return false;
223223
}
224224

225-
public static Value FromValueBox(ValueBox box)
225+
public static Value FromValueBox(Store store, ValueBox box)
226226
{
227227
var value = new Value();
228228
value.kind = box.Kind;
@@ -235,33 +235,36 @@ public static Value FromValueBox(ValueBox box)
235235
if (box.ExternRefObject is not null)
236236
{
237237
value.of.externref = Native.wasmtime_externref_new(
238+
store.Context.handle,
238239
GCHandle.ToIntPtr(GCHandle.Alloc(box.ExternRefObject)),
239240
Finalizer
240241
);
242+
243+
GC.KeepAlive(store);
241244
}
242245
}
243246

244247
return value;
245248
}
246249

247-
public ValueBox ToValueBox()
250+
public ValueBox ToValueBox(Store store)
248251
{
249252
if (kind != ValueKind.ExternRef)
250253
{
251254
return new ValueBox(kind, of);
252255
}
253256
else
254257
{
255-
return new ValueBox(ResolveExternRef());
258+
return new ValueBox(ResolveExternRef(store));
256259
}
257260
}
258261

259-
public static Value FromObject(object? o, TableKind kind)
262+
public static Value FromObject(Store store, object? o, TableKind kind)
260263
{
261-
return FromObject(o, (ValueKind)kind);
264+
return FromObject(store, o, (ValueKind)kind);
262265
}
263266

264-
public static Value FromObject(object? o, ValueKind kind)
267+
public static Value FromObject(Store store, object? o, ValueKind kind)
265268
{
266269
var value = new Value();
267270
value.kind = kind;
@@ -306,9 +309,12 @@ public static Value FromObject(object? o, ValueKind kind)
306309
if (!(o is null))
307310
{
308311
value.of.externref = Native.wasmtime_externref_new(
312+
store.Context.handle,
309313
GCHandle.ToIntPtr(GCHandle.Alloc(o)),
310314
Value.Finalizer
311315
);
316+
317+
GC.KeepAlive(store);
312318
}
313319
break;
314320

@@ -360,7 +366,7 @@ public static Value FromObject(object? o, ValueKind kind)
360366
return of.v128;
361367

362368
case ValueKind.ExternRef:
363-
return ResolveExternRef();
369+
return ResolveExternRef(store);
364370

365371
case ValueKind.FuncRef:
366372
return store.GetCachedExtern(of.funcref);
@@ -370,13 +376,13 @@ public static Value FromObject(object? o, ValueKind kind)
370376
}
371377
}
372378

373-
private object? ResolveExternRef()
379+
private object? ResolveExternRef(Store store)
374380
{
375381
if (of.externref == IntPtr.Zero)
376382
{
377383
return null;
378384
}
379-
var data = Native.wasmtime_externref_data(of.externref);
385+
var data = Native.wasmtime_externref_data(store.Context.handle, of.externref);
380386
if (data == IntPtr.Zero)
381387
{
382388
return null;
@@ -392,13 +398,13 @@ public static class Native
392398
public static extern void wasmtime_val_delete(in Value val);
393399

394400
[DllImport(Engine.LibraryName)]
395-
public static extern IntPtr wasmtime_externref_new(IntPtr data, Finalizer? finalizer);
401+
public static extern IntPtr wasmtime_externref_new(IntPtr context, IntPtr data, Finalizer? finalizer);
396402

397403
[DllImport(Engine.LibraryName)]
398-
public static extern IntPtr wasmtime_externref_data(IntPtr externref);
404+
public static extern IntPtr wasmtime_externref_data(IntPtr context, IntPtr externref);
399405

400406
[DllImport(Engine.LibraryName)]
401-
public static extern void wasmtime_externref_delete(IntPtr externref);
407+
public static extern void wasmtime_externref_delete(IntPtr context, IntPtr externref);
402408

403409
[DllImport(Engine.LibraryName)]
404410
public static extern IntPtr wasmtime_externref_from_raw(IntPtr context, IntPtr raw);

src/ValueBox.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ public V128 AsV128()
8484
public Function AsFunction(Store store)
8585
{
8686
ThrowIfNotOfCorrectKind(ValueKind.FuncRef);
87-
87+
8888
return store.GetCachedExtern(Union.funcref);
8989
}
9090

@@ -100,12 +100,12 @@ public Function AsFunction(Store store)
100100
return (T?)ExternRefObject;
101101
}
102102

103-
internal Value ToValue(ValueKind convertTo)
103+
internal Value ToValue(Store store, ValueKind convertTo)
104104
{
105105
if (convertTo != Kind)
106-
return Value.FromValueBox(ConvertTo(convertTo));
106+
return Value.FromValueBox(store, ConvertTo(convertTo));
107107

108-
return Value.FromValueBox(this);
108+
return Value.FromValueBox(store, this);
109109
}
110110

111111
private ValueBox ConvertTo(ValueKind convertTo)

src/ValueRaw.cs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -263,15 +263,15 @@ private GenericValueRawConverter()
263263

264264
try
265265
{
266-
var data = Value.Native.wasmtime_externref_data(externref);
266+
var data = Value.Native.wasmtime_externref_data(storeContext.handle, externref);
267267
if (data != IntPtr.Zero)
268268
{
269269
o = GCHandle.FromIntPtr(data).Target!;
270270
}
271271
}
272272
finally
273273
{
274-
Value.Native.wasmtime_externref_delete(externref);
274+
Value.Native.wasmtime_externref_delete(storeContext.handle, externref);
275275
}
276276
}
277277

@@ -285,6 +285,7 @@ public void Box(StoreContext storeContext, Store store, ref ValueRaw valueRaw, T
285285
if (value is not null)
286286
{
287287
var externref = Value.Native.wasmtime_externref_new(
288+
storeContext.handle,
288289
GCHandle.ToIntPtr(GCHandle.Alloc(value)),
289290
Value.Finalizer);
290291

@@ -300,7 +301,7 @@ public void Box(StoreContext storeContext, Store store, ref ValueRaw valueRaw, T
300301
{
301302
// We still must delete the old externref afterwards because
302303
// wasmtime_externref_to_raw doesn't transfer ownership.
303-
Value.Native.wasmtime_externref_delete(externref);
304+
Value.Native.wasmtime_externref_delete(storeContext.handle, externref);
304305
}
305306
}
306307

0 commit comments

Comments
 (0)