aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-27 19:15:48 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-27 19:15:48 +0100
commit20c96c0faeef62752b6b42f751a366d6f4b25bb0 (patch)
tree00cb070370006a57f0b1c0d8e116ce466a3bb7af /src/main/java
parent57c58c2e977135c06be1147cff4b731c52e4aa8e (diff)
Write func index placeholder value
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatModules.java2
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryWriter.java8
2 files changed, 8 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatModules.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatModules.java
index 9052c390..da479ca9 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatModules.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatModules.java
@@ -327,7 +327,7 @@ public class WasmBinaryFormatModules {
public static void serializeModule(WasmModule module, OutputStream outputStream) throws IOException {
var indexTable = WasmIndexTable.fromModule(module);
- var writer = new WasmBinaryWriter();
+ var writer = new WasmBinaryWriter(indexTable);
writer.writeBytes(WASM_MAGIC);
writer.writeBytes(WASM_VERSION);
writeTypeSection(module.types(), writer);
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryWriter.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryWriter.java
index 6636c5d1..b3edd8f7 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryWriter.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryWriter.java
@@ -13,9 +13,14 @@ import java.util.*;
public class WasmBinaryWriter {
private final BinaryWriter writer = new BinaryWriter();
private final Map<Integer, List<WasmRelocationEntry>> relocationEntries = new HashMap<>();
+ private final WasmIndexTable indexTable;
private int sectionIndex = -1;
private int sectionContentsStart = -1;
+ public WasmBinaryWriter(WasmIndexTable indexTable) {
+ this.indexTable = indexTable;
+ }
+
public void writeByte(int value) {
writer.writeByte(value);
}
@@ -49,9 +54,10 @@ public class WasmBinaryWriter {
}
public void writeFuncIndex(WasmFuncName funcName) throws IOException {
+ var funcIndex = indexTable.funcIndex(funcName);
writeRelocatableIndex(
WasmRelocationType.FUNCTION_INDEX_LEB,
- () -> writePaddedUnsignedInt32(0),
+ () -> writePaddedUnsignedInt32(funcIndex.value()),
new WasmRelocatableIndex.FuncIndex(funcName.value())
);
}