From 0984cad6e314800cf1bc3fe604e1e48f0ed85ed7 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Wed, 21 Jun 2023 23:41:55 +0100 Subject: Move import identifier onto function --- .../backends/wasm/structure/WasmBinaryFormat.java | 15 +++++++++++---- .../backends/wasm/structure/ast/imports/WasmImport.java | 1 - .../wasm/structure/ast/imports/WasmImportDescriptor.java | 2 +- 3 files changed, 12 insertions(+), 6 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormat.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormat.java index 14e31070..2ac60424 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormat.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/WasmBinaryFormat.java @@ -14,6 +14,7 @@ import java.util.HashMap; import java.util.HexFormat; import java.util.List; import java.util.Map; +import java.util.stream.Stream; public class WasmBinaryFormat { private static final byte[] WASM_MAGIC = HexFormat.of().parseHex("0061736D"); @@ -115,11 +116,17 @@ public class WasmBinaryFormat { private static void writeNameSectionFunctionNameSubsection(WasmModule module, BinaryWriter writer) throws IOException { writeSection((byte) 1, writer, () -> { + var importedFunctions = module.imports().stream() + .flatMap(import_ -> switch (import_.descriptor()) { + case WasmImportDescriptor.Func func -> Stream.of(func); + }) + .toList(); + writeVec( - module.imports(), - (importIndex, import_) -> { - writeFuncIndex(importIndex, writer); - writeString(module.imports().get(importIndex).identifier(), writer); + importedFunctions, + (funcIndex, func) -> { + writeFuncIndex(funcIndex, writer); + writeString(func.identifier(), writer); }, writer ); diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImport.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImport.java index 5f7c7768..bc576758 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImport.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImport.java @@ -3,7 +3,6 @@ package org.shedlang.compiler.backends.wasm.structure.ast.imports; public record WasmImport( String moduleName, String entityName, - String identifier, WasmImportDescriptor descriptor ) { } diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImportDescriptor.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImportDescriptor.java index 10acc19f..7b095863 100644 --- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImportDescriptor.java +++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/imports/WasmImportDescriptor.java @@ -3,5 +3,5 @@ package org.shedlang.compiler.backends.wasm.structure.ast.imports; import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmFuncType; public sealed interface WasmImportDescriptor { - record Func(WasmFuncType type) implements WasmImportDescriptor {} + record Func(String identifier, WasmFuncType type) implements WasmImportDescriptor {} } -- cgit v1.2.3