aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-30 18:56:13 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-30 18:56:13 +0100
commitd198788e4d4da184bf6a931ce2cceb19288659d5 (patch)
tree9497f6a249395ecdf0d8193cc778c25b3e3e746c /src/main/java
parenta5728591c5341fe8b64060916baf735bc2438eb2 (diff)
Replace WasmDataSymbol with WasmDataElement
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmMemoryBuilder.java37
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/linking/WasmDataSymbol.java9
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmDataElement.java8
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmDataSegment.java3
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatLinking.java30
5 files changed, 45 insertions, 42 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmMemoryBuilder.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmMemoryBuilder.java
index df72afc4..d2a13ee6 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmMemoryBuilder.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmMemoryBuilder.java
@@ -3,8 +3,6 @@ package org.shedlang.compiler.backends.wasm;
import org.pcollections.OrderedPMap;
import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmExpression;
import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmI32Const;
-import org.shedlang.compiler.backends.wasm.structure.ast.linking.WasmDataSegmentIndex;
-import org.shedlang.compiler.backends.wasm.structure.ast.linking.WasmDataSymbol;
import org.shedlang.compiler.backends.wasm.structure.ast.linking.WasmMemoryAddress;
import org.shedlang.compiler.backends.wasm.structure.ast.modules.*;
import org.shedlang.compiler.backends.wasm.structure.ast.types.WasmLimits;
@@ -37,28 +35,21 @@ public class WasmMemoryBuilder {
new WasmImportDescriptor.Memory(new WasmMemoryType(WasmLimits.min(pageCount)))
));
- if (entities.size() > 0) {
- var dataSegmentIndex = module.dataSegments().size();
- for (var entity : entities.values()) {
- module = module
- .addDataSegment(new WasmDataSegment(
- ".data." + entity.name,
- entity.data,
- new WasmExpression(List.of(new WasmI32Const(0))),
- WasmAlignment.ALIGN_32_BIT,
- List.of(
- new WasmDataSymbol(
- entity.name,
- // TODO: remove the data segment index from data symbol (its redundant)
- new WasmDataSegmentIndex(dataSegmentIndex),
- 0,
- entity.data.length
- )
+ for (var entity : entities.values()) {
+ module = module
+ .addDataSegment(new WasmDataSegment(
+ ".data." + entity.name,
+ entity.data,
+ new WasmExpression(List.of(new WasmI32Const(0))),
+ WasmAlignment.ALIGN_32_BIT,
+ List.of(
+ new WasmDataElement(
+ entity.name,
+ 0,
+ entity.data.length
)
- ));
-
- dataSegmentIndex++;
- }
+ )
+ ));
}
return module;
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/linking/WasmDataSymbol.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/linking/WasmDataSymbol.java
deleted file mode 100644
index 864d46e9..00000000
--- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/linking/WasmDataSymbol.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package org.shedlang.compiler.backends.wasm.structure.ast.linking;
-
-public record WasmDataSymbol(
- String name,
- WasmDataSegmentIndex dataSegmentIndex,
- int offset,
- int size
-) {
-}
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmDataElement.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmDataElement.java
new file mode 100644
index 00000000..6448e9dd
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmDataElement.java
@@ -0,0 +1,8 @@
+package org.shedlang.compiler.backends.wasm.structure.ast.modules;
+
+public record WasmDataElement(
+ String name,
+ int offset,
+ int size
+) {
+}
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmDataSegment.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmDataSegment.java
index 911a6a01..7d3351c7 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmDataSegment.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/ast/modules/WasmDataSegment.java
@@ -1,7 +1,6 @@
package org.shedlang.compiler.backends.wasm.structure.ast.modules;
import org.shedlang.compiler.backends.wasm.structure.ast.instructions.WasmExpression;
-import org.shedlang.compiler.backends.wasm.structure.ast.linking.WasmDataSymbol;
import java.util.List;
@@ -10,6 +9,6 @@ public record WasmDataSegment(
byte[] init,
WasmExpression offset,
WasmAlignment alignment,
- List<WasmDataSymbol> symbols
+ List<WasmDataElement> elements
) {
}
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatLinking.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatLinking.java
index de46dd3f..fa64106a 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatLinking.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatLinking.java
@@ -201,10 +201,10 @@ public class WasmBinaryFormatLinking {
case SymbolInfo.Data data -> {
writer.writeByte(SymbolType.DATA.id);
writeFlags(data.flags, writer);
- writer.writeString(data.dataSymbol.name());
- writeDataSegmentIndex(data.dataSymbol.dataSegmentIndex(), writer);
- writer.writeUnsignedInt32(data.dataSymbol.offset());
- writer.writeUnsignedInt32(data.dataSymbol.size());
+ writer.writeString(data.name());
+ writeDataSegmentIndex(data.dataSegmentIndex(), writer);
+ writer.writeUnsignedInt32(data.offset());
+ writer.writeUnsignedInt32(data.size());
}
case SymbolInfo.Global global -> {
writer.writeByte(SymbolType.GLOBAL.id);
@@ -315,16 +315,24 @@ public class WasmBinaryFormatLinking {
}
var memoryAddressToSymbolIndex = new HashMap<WasmMemoryAddress, WasmSymbolIndex>();
+ var dataSegmentIndex = 0;
for (var dataSegment : module.dataSegments()) {
- for (var dataSymbol : dataSegment.symbols()) {
- var symbolInfo = new SymbolInfo.Data(List.of(), dataSymbol);
+ for (var dataElement : dataSegment.elements()) {
+ var symbolInfo = new SymbolInfo.Data(
+ List.of(),
+ dataElement.name(),
+ new WasmDataSegmentIndex(dataSegmentIndex),
+ dataElement.offset(),
+ dataElement.size()
+ );
var symbolIndex = new WasmSymbolIndex(symbolInfos.size());
symbolInfos.add(symbolInfo);
memoryAddressToSymbolIndex.put(
- new WasmMemoryAddress(dataSymbol.name()),
+ new WasmMemoryAddress(dataElement.name()),
symbolIndex
);
}
+ dataSegmentIndex++;
}
var globalNameToSymbolIndex = new HashMap<String, WasmSymbolIndex>();
@@ -373,7 +381,13 @@ public class WasmBinaryFormatLinking {
record Global(List<SymbolFlag> flags, WasmGlobalIndex globalIndex, String name) implements SymbolInfo {
}
- record Data(List<SymbolFlag> flags, WasmDataSymbol dataSymbol) implements SymbolInfo {
+ record Data(
+ List<SymbolFlag> flags,
+ String name,
+ WasmDataSegmentIndex dataSegmentIndex,
+ int offset,
+ int size
+ ) implements SymbolInfo {
}
}