aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-24 20:27:10 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-24 20:27:10 +0100
commit45a5f9dcf85130a08f4cee847b43ac4c70cfc163 (patch)
tree18ba71fd870c5eccfdf2757453e55ef3dddb9105 /src/main/java
parented5a46b06e98420b32d4dad0b248466332cd0aae (diff)
Extract writeSize() function
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatModules.java13
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatSize.java31
2 files changed, 33 insertions, 11 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 f03cdd32..cddfb026 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
@@ -11,6 +11,7 @@ import java.util.HexFormat;
import static org.shedlang.compiler.backends.wasm.structure.binary.WasmBinaryFormatConventions.writeVec;
import static org.shedlang.compiler.backends.wasm.structure.binary.WasmBinaryFormatNameSection.writeNameSection;
+import static org.shedlang.compiler.backends.wasm.structure.binary.WasmBinaryFormatSize.writeSize;
import static org.shedlang.compiler.backends.wasm.structure.binary.WasmBinaryFormatTypes.*;
import static org.shedlang.compiler.backends.wasm.structure.binary.WasmBinaryFormatValues.writeString;
@@ -49,17 +50,7 @@ public class WasmBinaryFormatModules {
// * the actual contents
writer.writeByte(sectionId.id);
- var sizePosition = writer.position();
- Leb128Encoding.encodePaddedUnsignedInt32(0, writer);
-
- var contentStartPosition = writer.position();
- writeContent.write();
- var contentEndPosition = writer.position();
-
- var size = contentEndPosition - contentStartPosition;
- writer.seek(sizePosition);
- Leb128Encoding.encodePaddedUnsignedInt32(size, writer);
- writer.seek(contentEndPosition);
+ writeSize(writer, writeContent::write);
}
enum SectionId {
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatSize.java b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatSize.java
new file mode 100644
index 00000000..7a90bdb0
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/structure/binary/WasmBinaryFormatSize.java
@@ -0,0 +1,31 @@
+package org.shedlang.compiler.backends.wasm.structure.binary;
+
+import org.shedlang.compiler.backends.wasm.structure.BinaryWriter;
+
+import java.io.IOException;
+
+public class WasmBinaryFormatSize {
+ private WasmBinaryFormatSize() {
+ }
+
+ public interface Write {
+ void write() throws IOException;
+ }
+
+ public static void writeSize(
+ BinaryWriter writer,
+ Write writeContent
+ ) throws IOException {
+ var sizePosition = writer.position();
+ Leb128Encoding.encodePaddedUnsignedInt32(0, writer);
+
+ var contentStartPosition = writer.position();
+ writeContent.write();
+ var contentEndPosition = writer.position();
+
+ var size = contentEndPosition - contentStartPosition;
+ writer.seek(sizePosition);
+ Leb128Encoding.encodePaddedUnsignedInt32(size, writer);
+ writer.seek(contentEndPosition);
+ }
+}