Skip to content

Commit cb3be0b

Browse files
Fix Instance.GetMemories() ignored memories after the 1st non-memory export (#326)
* Fix similar Instance.GetFunctions(), GetTables(), GetGlobals() methods GetMemories() returned empty list for following code but worked fine after swapping 2 exports: (module (type $t0 (func)) (func $run) (memory $0 1) (export "run" (func $run)) (export "memory" (memory 0)) ) Co-authored-by: James Sturtevant <[email protected]>
1 parent 98d0987 commit cb3be0b

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

src/Instance.cs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -588,12 +588,15 @@ public Instance(Store store, Module module, params object[] imports)
588588
{
589589
for (var i = 0; i < int.MaxValue; i++)
590590
{
591-
if (TryGetExtern(i, ExternKind.Func) is not var (name, @extern))
591+
if (TryGetExtern(i) is not var (name, @extern))
592592
{
593593
break;
594594
}
595595

596-
yield return (name, _store.GetCachedExtern(@extern.of.func));
596+
if (@extern.kind == ExternKind.Func)
597+
{
598+
yield return (name, _store.GetCachedExtern(@extern.of.func));
599+
}
597600
}
598601

599602
GC.KeepAlive(_store);
@@ -607,12 +610,15 @@ public Instance(Store store, Module module, params object[] imports)
607610
{
608611
for (var i = 0; i < int.MaxValue; i++)
609612
{
610-
if (TryGetExtern(i, ExternKind.Table) is not var (name, @extern))
613+
if (TryGetExtern(i) is not var (name, @extern))
611614
{
612615
break;
613616
}
614617

615-
yield return (name, new Table(_store, @extern.of.table));
618+
if (@extern.kind == ExternKind.Table)
619+
{
620+
yield return (name, new Table(_store, @extern.of.table));
621+
}
616622
}
617623

618624
GC.KeepAlive(_store);
@@ -626,12 +632,15 @@ public Instance(Store store, Module module, params object[] imports)
626632
{
627633
for (var i = 0; i < int.MaxValue; i++)
628634
{
629-
if (TryGetExtern(i, ExternKind.Memory) is not var (name, @extern))
635+
if (TryGetExtern(i) is not var (name, @extern))
630636
{
631637
break;
632638
}
633639

634-
yield return (name, _store.GetCachedExtern(@extern.of.memory));
640+
if (@extern.kind == ExternKind.Memory)
641+
{
642+
yield return (name, _store.GetCachedExtern(@extern.of.memory));
643+
}
635644
}
636645

637646
GC.KeepAlive(_store);
@@ -645,12 +654,15 @@ public Instance(Store store, Module module, params object[] imports)
645654
{
646655
for (var i = 0; i < int.MaxValue; i++)
647656
{
648-
if (TryGetExtern(i, ExternKind.Global) is not var (name, @extern))
657+
if (TryGetExtern(i) is not var (name, @extern))
649658
{
650659
break;
651660
}
652661

653-
yield return (name, _store.GetCachedExtern(@extern.of.global));
662+
if (@extern.kind == ExternKind.Global)
663+
{
664+
yield return (name, _store.GetCachedExtern(@extern.of.global));
665+
}
654666
}
655667

656668
GC.KeepAlive(_store);

0 commit comments

Comments
 (0)