From 812f1c44f064c797687e739b8c722d9f528ecef6 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 24 Jun 2023 21:19:17 +0100 Subject: Add names for functions --- .../wasm/structure/ast/modules/WasmFunction.java | 1 + .../binary/WasmBinaryFormatNameSection.java | 34 +++++++++++++--------- 2 files changed, 22 insertions(+), 13 deletions(-) (limited to 'src/main/java') 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 params, List locals, List 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 importedFunctions) throws IOException { + private record NameAssoc(int index, String name) { + + } + + private static void writeNameMap(BinaryWriter writer, List 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(); + 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); }); } -- cgit v1.2.3