Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,14 @@

class WasmModuleProcessorTest {

private static Compilation compile(String source) {
return javac().withProcessors(new WasmModuleProcessor())
.compile(JavaFileObjects.forResource(source));
}

@Test
void resolvesWasmModuleFromClassPathNotJustClassOutput() {
Compilation compilation =
javac().withProcessors(new WasmModuleProcessor())
.compile(JavaFileObjects.forResource("IterFactModule.java"));
Compilation compilation = compile("IterFactModule.java");

assertThat(compilation).succeededWithoutWarnings();

Expand All @@ -22,14 +25,31 @@ void resolvesWasmModuleFromClassPathNotJustClassOutput() {

@Test
void reportsMissingWasmModule() {
Compilation compilation =
javac().withProcessors(new WasmModuleProcessor())
.compile(JavaFileObjects.forResource("MissingModule.java"));
Compilation compilation = compile("MissingModule.java");

assertThat(compilation).failed();

assertThat(compilation)
.hadErrorContaining("Failed to load wasmFile")
.inFile(JavaFileObjects.forResource("MissingModule.java"));
}

@Test
void skipsTagExportAndStillGeneratesFunctionExport() {
Compilation compilation = compile("TagExportModule.java");

assertThat(compilation).succeededWithoutWarnings();

assertThat(compilation).generatedSourceFile("endive.testing.TagExportModule_ModuleExports");
}

@Test
void generatesTagImportBindingAlongsideFunctionImport() {
Compilation compilation = compile("TagImportModule.java");

assertThat(compilation).succeededWithoutWarnings();

assertThat(compilation).generatedSourceFile("endive.testing.TagImportModule_Host");
assertThat(compilation).generatedSourceFile("endive.testing.TagImportModule_ModuleImports");
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package endive.testing;

import run.endive.annotations.WasmModuleInterface;

@WasmModuleInterface("tag-export.wasm")
public class TagExportModule {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package endive.testing;

import run.endive.annotations.WasmModuleInterface;

@WasmModuleInterface("tag-import.wasm")
public class TagImportModule {}
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,8 @@ public Map<String, CompilationUnit> generate() {
case FUNCTION:
exportFieldType = parseType("ExportFunction");
break;
case TAG:
continue;
}
exportsClass.addField(
exportFieldType,
Expand Down Expand Up @@ -479,6 +481,18 @@ exportApplyHandle, new IntegerLiteralExpr("0")),
"addTable",
NodeList.nodeList(importObj.apply("ImportTable"))));
continue;
} else if (importedFun.importType() == ExternalType.TAG) {
cu.addImport("run.endive.runtime.TagInstance");
importMethod.setType("TagInstance");
importMethod.removeBody();

importsCu.addImport("run.endive.runtime.ImportTag");
toImportValuesBody.addStatement(
new MethodCallExpr(
new NameExpr("imports"),
"addTag",
NodeList.nodeList(importObj.apply("ImportTag"))));
continue;
}
// we now know it's a function
assert (importedFun.importType() == ExternalType.FUNCTION);
Expand Down
Loading