aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-23 11:39:03 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-23 11:39:03 +0100
commit2c1a7017af56de72f53f5ce126ccb5580bc3e42f (patch)
treed845b54f567d08fa1fb9ccff7110fe147f84fd57 /src/main/java
parenta5df38ed41f9554bafb2dbfb88c9f5ecbc7db4e7 (diff)
Extract WasmPatioCodeGen::generateOperandToLocal()
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java83
1 files changed, 43 insertions, 40 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java
index caf7880d..e7735ae3 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/WasmPatioCodeGen.java
@@ -129,14 +129,12 @@ public class WasmPatioCodeGen {
yield context;
}
- case PatioBoolToInt patioBoolToInt -> {
- context = generateOperand(patioBoolToInt.value(), context);
-
- var targetWasmLocalIndex = context.wasmLocalIndex(patioBoolToInt.target());
- context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex));
-
- yield context;
- }
+ case PatioBoolToInt patioBoolToInt ->
+ generateOperandToLocal(
+ patioBoolToInt.target(),
+ patioBoolToInt.value(),
+ context
+ );
case PatioCall patioCall -> {
for (var patioArg : patioCall.args()) {
@@ -181,14 +179,12 @@ public class WasmPatioCodeGen {
yield context;
}
- case PatioDataPtrToInt patioDataPtrToInt -> {
- context = generateOperand(patioDataPtrToInt.value(), context);
-
- var targetWasmLocalIndex = context.wasmLocalIndex(patioDataPtrToInt.target());
- context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex));
-
- yield context;
- }
+ case PatioDataPtrToInt patioDataPtrToInt ->
+ generateOperandToLocal(
+ patioDataPtrToInt.target(),
+ patioDataPtrToInt.value(),
+ context
+ );
case PatioIf patioIf -> {
context = generateOperand(patioIf.condition(), context);
@@ -238,32 +234,26 @@ public class WasmPatioCodeGen {
yield context;
}
- case PatioIntToBool patioIntToBool -> {
- context = generateOperand(patioIntToBool.value(), context);
-
- var targetWasmLocalIndex = context.wasmLocalIndex(patioIntToBool.target());
- context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex));
-
- yield context;
- }
-
- case PatioIntToDataPtr patioIntToDataPtr -> {
- context = generateOperand(patioIntToDataPtr.value(), context);
-
- var targetWasmLocalIndex = context.wasmLocalIndex(patioIntToDataPtr.target());
- context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex));
-
- yield context;
- }
-
- case PatioLocalStore patioLocalStore -> {
- context = generateOperand(patioLocalStore.value(), context);
+ case PatioIntToBool patioIntToBool ->
+ generateOperandToLocal(
+ patioIntToBool.target(),
+ patioIntToBool.value(),
+ context
+ );
- var targetWasmLocalIndex = context.wasmLocalIndex(patioLocalStore.target());
- context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex));
+ case PatioIntToDataPtr patioIntToDataPtr ->
+ generateOperandToLocal(
+ patioIntToDataPtr.target(),
+ patioIntToDataPtr.value(),
+ context
+ );
- yield context;
- }
+ case PatioLocalStore patioLocalStore ->
+ generateOperandToLocal(
+ patioLocalStore.target(),
+ patioLocalStore.value(),
+ context
+ );
case PatioMemoryLoad patioMemoryLoad -> {
context = generateOperand(patioMemoryLoad.pointer(), context);
@@ -300,6 +290,19 @@ public class WasmPatioCodeGen {
};
}
+ private static Context generateOperandToLocal(
+ PatioLocalRef target,
+ PatioOperand value,
+ Context context
+ ) {
+ context = generateOperand(value, context);
+
+ var targetWasmLocalIndex = context.wasmLocalIndex(target);
+ context = context.addInstruction(new WasmLocalSet(targetWasmLocalIndex));
+
+ return context;
+ }
+
private static Context generateOperand(
PatioOperand patioOperand,
Context context