aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-24 21:19:17 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-24 21:19:17 +0100
commit812f1c44f064c797687e739b8c722d9f528ecef6 (patch)
tree8142c660b9242808944e0490795a3c3c24613396 /src/main/java
parent1a43e1686bd55f5607459a80ff3cc8e34bbfde70 (diff)
Add names for functions
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmFunction.java1
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatNameSection.java34
2 files changed, 22 insertions, 13 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmFunction.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmFunction.java
index 0f295e90..2e5cf592 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmFunction.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmFunction.java
@@ -7,6 +7,7 @@ import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmValueType;
import java.util.List;
public record WasmFunction(
+ String name,
List<WasmLocal> params,
List<WasmLocal> locals,
List<WasmValueType> resultTypes,
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatNameSection.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatNameSection.java
index 2fc0e176..3f5b7061 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatNameSection.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatNameSection.java
@@ -7,6 +7,7 @@ import org.shedlang.compiler.backends.wasm.structure.ast.modules.WasmImportDescr
import org.shedlang.compiler.backends.wasm.structure.binary.WasmBinaryFormatModules.SectionId;
import java.io.IOException;
+import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
@@ -62,12 +63,16 @@ public class WasmBinaryFormatNameSection {
// == Name Maps ==
- private static void writeNameMap(BinaryWriter writer, List<WasmImportDescriptor.Func> importedFunctions) throws IOException {
+ private record NameAssoc(int index, String name) {
+
+ }
+
+ private static void writeNameMap(BinaryWriter writer, List<NameAssoc> assocs) throws IOException {
writeVec(
- importedFunctions,
- (funcIndex, func) -> {
- writeFuncIndex(funcIndex, writer);
- writeString(func.identifier(), writer);
+ assocs,
+ assoc -> {
+ writeFuncIndex(assoc.index, writer);
+ writeString(assoc.name, writer);
},
writer
);
@@ -77,14 +82,17 @@ public class WasmBinaryFormatNameSection {
private static void writeFunctionNameSubsection(WasmModule module, BinaryWriter writer) throws IOException {
writeNameSubsection(NameSubsectionId.FUNCTION_NAMES, writer, () -> {
- var importedFunctions = module.imports().stream()
- .flatMap(import_ -> switch (import_.descriptor()) {
- case WasmImportDescriptor.Func func -> Stream.of(func);
- default -> Stream.empty();
- })
- .toList();
-
- writeNameMap(writer, importedFunctions);
+ var functionNames = new ArrayList<NameAssoc>();
+ for (var import_ : module.imports()) {
+ if (import_.descriptor() instanceof WasmImportDescriptor.Func func) {
+ functionNames.add(new NameAssoc(functionNames.size(), func.identifier()));
+ }
+ }
+ for (var function : module.functions()) {
+ functionNames.add(new NameAssoc(functionNames.size(), function.name()));
+ }
+
+ writeNameMap(writer, functionNames);
});
}