diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-24 21:19:17 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-24 21:19:17 +0100 |
| commit | 812f1c44f064c797687e739b8c722d9f528ecef6 (patch) | |
| tree | 8142c660b9242808944e0490795a3c3c24613396 /src/main/java | |
| parent | 1a43e1686bd55f5607459a80ff3cc8e34bbfde70 (diff) | |
Add names for functions
Diffstat (limited to 'src/main/java')
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); }); } |
