aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2024-01-21 16:06:09 +0000
committerMichael Williamson <mike@zwobble.org>2024-01-21 16:06:09 +0000
commitf4c370d0a0b62f3a85e19f492107138d9a9fb4a2 (patch)
tree829ef8e185cbf1cda7871004128c154d3fc34641 /src/main/java
parent5a22d7506a26cde1d7e7083c788fff7d067f6f9a (diff)
Rename platformTarget to target
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java146
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmFunctionContext.java4
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmGlobalContext.java12
-rw-r--r--src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmModuleContext.java6
-rw-r--r--src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java166
5 files changed, 167 insertions, 167 deletions
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
index d17b85ac..8810f886 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvm.java
@@ -27,22 +27,22 @@ import java.util.Optional;
import java.util.stream.StreamSupport;
public class PatioToLlvm {
- private static LlvmFunctionDeclaration allocDeclaration(LlvmTarget platformTarget) {
+ private static LlvmFunctionDeclaration allocDeclaration(LlvmTarget target) {
return new LlvmFunctionDeclaration(
"shed__runtime__gc_alloc",
LlvmTypes.pointer(LlvmTypes.INT_8),
List.of(
- new LlvmParam(platformTarget.sizeT(), "size"),
- new LlvmParam(platformTarget.sizeT(), "children_offset"),
- new LlvmParam(platformTarget.sizeT(), "children_count")
+ new LlvmParam(target.sizeT(), "size"),
+ new LlvmParam(target.sizeT(), "children_offset"),
+ new LlvmParam(target.sizeT(), "children_count")
)
);
}
private static final LlvmType EXCEPTION_TAG_TYPE = LlvmTypes.INT_32;
- private static LlvmType exceptionValueType(LlvmTarget platformTarget) {
- return platformTarget.patioIntType();
+ private static LlvmType exceptionValueType(LlvmTarget target) {
+ return target.patioIntType();
}
private static final Lazy<Integer> JMP_BUF_SIZE = Lazy.of(() -> readJmpBufSize());
@@ -63,10 +63,10 @@ public class PatioToLlvm {
return LlvmTypes.array(JMP_BUF_SIZE.get(), LlvmTypes.INT_8);
}
- private static LlvmFunctionDeclaration setjmpDeclaration(LlvmTarget platformTarget) {
+ private static LlvmFunctionDeclaration setjmpDeclaration(LlvmTarget target) {
return new LlvmFunctionDeclaration(
"_setjmp",
- platformTarget.cIntType(),
+ target.cIntType(),
List.of(
new LlvmParam(LlvmTypes.pointer(LlvmTypes.VOID), "env")
)
@@ -82,10 +82,10 @@ public class PatioToLlvm {
false
);
- private static LlvmGlobalDefinition exceptionValueDeclaration(LlvmTarget platformTarget) {
+ private static LlvmGlobalDefinition exceptionValueDeclaration(LlvmTarget target) {
return new LlvmGlobalDefinition(
"patio__runtime__exceptions_exception_value",
- exceptionValueType(platformTarget),
+ exceptionValueType(target),
Optional.empty(),
false,
false,
@@ -93,13 +93,13 @@ public class PatioToLlvm {
);
}
- private static LlvmFunctionDeclaration throwDeclaration(LlvmTarget platformTarget) {
+ private static LlvmFunctionDeclaration throwDeclaration(LlvmTarget target) {
return new LlvmFunctionDeclaration(
"patio__runtime__exceptions_throw",
LlvmTypes.pointer(LlvmTypes.VOID),
List.of(
new LlvmParam(EXCEPTION_TAG_TYPE, "exception_tag"),
- new LlvmParam(exceptionValueType(platformTarget), "exception_value")
+ new LlvmParam(exceptionValueType(target), "exception_value")
)
);
}
@@ -117,11 +117,11 @@ public class PatioToLlvm {
PatioToLlvmGlobalContext globalContext
) {
var context = globalContext.enterModule()
- .addTopLevelEntity(allocDeclaration(globalContext.platformTarget()))
- .addTopLevelEntity(setjmpDeclaration(globalContext.platformTarget()))
+ .addTopLevelEntity(allocDeclaration(globalContext.target()))
+ .addTopLevelEntity(setjmpDeclaration(globalContext.target()))
.addTopLevelEntity(EXCEPTION_HANDLER_DECLARATION)
- .addTopLevelEntity(exceptionValueDeclaration(globalContext.platformTarget()))
- .addTopLevelEntity(throwDeclaration(globalContext.platformTarget()))
+ .addTopLevelEntity(exceptionValueDeclaration(globalContext.target()))
+ .addTopLevelEntity(throwDeclaration(globalContext.target()))
.addTopLevelEntity(RETHROW_DECLARATION);
for (var patioCompilationUnitElement : patioCompilationUnit.elements()) {
@@ -135,7 +135,7 @@ public class PatioToLlvm {
patioFunctionDeclaration.name(),
patioTypeToLlvmType(
patioFunctionDeclaration.returnType(),
- globalContext.platformTarget()
+ globalContext.target()
)
);
}
@@ -150,7 +150,7 @@ public class PatioToLlvm {
patioFunctionDefinition.name(),
patioTypeToLlvmType(
patioFunctionDefinition.returnType(),
- globalContext.platformTarget()
+ globalContext.target()
)
);
}
@@ -194,11 +194,11 @@ public class PatioToLlvm {
patioDataElementImmutable.name(),
patioDataLayoutToLlvmType(
patioDataElementImmutable.value().layout(),
- context.platformTarget()
+ context.target()
),
Optional.of(patioDataValueToLlvmOperand(
patioDataElementImmutable.value(),
- context.platformTarget()
+ context.target()
)),
true,
true,
@@ -214,11 +214,11 @@ public class PatioToLlvm {
patioDataElementMutable.name(),
patioDataLayoutToLlvmType(
patioDataElementMutable.initialValue().layout(),
- context.platformTarget()
+ context.target()
),
Optional.of(patioDataValueToLlvmOperand(
patioDataElementMutable.initialValue(),
- context.platformTarget()
+ context.target()
)),
false,
true,
@@ -234,11 +234,11 @@ public class PatioToLlvm {
patioFunctionDeclaration.name(),
patioTypeToLlvmType(
patioFunctionDeclaration.returnType(),
- context.platformTarget()
+ context.target()
),
patioFunctionDeclaration.params().stream()
.map(patioParam -> new LlvmParam(
- patioTypeToLlvmType(patioParam.type(), context.platformTarget()),
+ patioTypeToLlvmType(patioParam.type(), context.target()),
patioParam.name()
))
.toList()
@@ -249,14 +249,14 @@ public class PatioToLlvm {
PatioFunctionDefinition patioFunctionDefinition,
PatioToLlvmModuleContext moduleContext
) {
- var platformTarget = moduleContext.platformTarget();
+ var target = moduleContext.target();
var functionContext = moduleContext.enterFunction();
for (var patioLocal : patioFunctionDefinition.locals()) {
functionContext = functionContext.addPatioLocalToType(
patioLocal.ref(),
- patioTypeToLlvmType(patioLocal.type(), platformTarget)
+ patioTypeToLlvmType(patioLocal.type(), target)
);
}
for (var patioParam : patioFunctionDefinition.params()) {
@@ -277,13 +277,13 @@ public class PatioToLlvm {
patioFunctionDefinition.name(),
patioTypeToLlvmType(
patioFunctionDefinition.returnType(),
- platformTarget
+ target
),
StreamSupport.stream(patioFunctionDefinition.params().spliterator(), false)
.map(patioParam -> new LlvmParam(
patioTypeToLlvmType(
patioParam.type(),
- platformTarget
+ target
),
patioParam.name()
))
@@ -311,7 +311,7 @@ public class PatioToLlvm {
case PatioAllocHeap patioAllocHeap -> {
var llvmType = patioDataLayoutToLlvmType(
patioAllocHeap.layout(),
- context.platformTarget()
+ context.target()
);
var sizeResult = sizeOf(llvmType, context);
var size = sizeResult.value();
@@ -329,7 +329,7 @@ public class PatioToLlvm {
var offset = offsetResult.value();
context = offsetResult.context();
- var allocDeclaration = allocDeclaration(context.platformTarget());
+ var allocDeclaration = allocDeclaration(context.target());
yield context.addInstruction(allocDeclaration.call(
Optional.of(destination),
List.of(
@@ -349,7 +349,7 @@ public class PatioToLlvm {
destination,
patioDataLayoutToLlvmType(
patioAllocStack.layout(),
- context.platformTarget()
+ context.target()
)
));
}
@@ -366,7 +366,7 @@ public class PatioToLlvm {
destination,
LlvmTypes.INT_1,
patioOperandToLlvmOperand(patioBoolToInt.value(), context),
- context.platformTarget().patioIntType()
+ context.target().patioIntType()
));
}
@@ -415,7 +415,7 @@ public class PatioToLlvm {
yield context.addInstruction(new LlvmPtrToInt(
destination,
patioOperandToLlvmOperand(patioDataPtrToInt.value(), context),
- context.platformTarget().patioIntType()
+ context.target().patioIntType()
));
}
@@ -476,7 +476,7 @@ public class PatioToLlvm {
yield context.addInstruction(new LlvmAdd(
destination,
- context.platformTarget().patioIntType(),
+ context.target().patioIntType(),
patioOperandToLlvmOperand(patioIntAdd.left(), context),
patioOperandToLlvmOperand(patioIntAdd.right(), context)
));
@@ -490,7 +490,7 @@ public class PatioToLlvm {
yield context.addInstruction(new LlvmIcmp(
destination,
LlvmConditionCode.EQ,
- context.platformTarget().patioIntType(),
+ context.target().patioIntType(),
patioOperandToLlvmOperand(patioIntEquals.left(), context),
patioOperandToLlvmOperand(patioIntEquals.right(), context)
));
@@ -504,7 +504,7 @@ public class PatioToLlvm {
yield context.addInstruction(new LlvmIcmp(
destination,
LlvmConditionCode.NE,
- context.platformTarget().patioIntType(),
+ context.target().patioIntType(),
patioOperandToLlvmOperand(patioIntNotEqual.left(), context),
patioOperandToLlvmOperand(patioIntNotEqual.right(), context)
));
@@ -517,7 +517,7 @@ public class PatioToLlvm {
yield context.addInstruction(new LlvmSub(
destination,
- context.platformTarget().patioIntType(),
+ context.target().patioIntType(),
patioOperandToLlvmOperand(patioIntSub.left(), context),
patioOperandToLlvmOperand(patioIntSub.right(), context)
));
@@ -530,7 +530,7 @@ public class PatioToLlvm {
yield context.addInstruction(new LlvmTrunc(
destination,
- context.platformTarget().patioIntType(),
+ context.target().patioIntType(),
patioOperandToLlvmOperand(patioIntToBool.value(), context),
LlvmTypes.INT_1
));
@@ -543,7 +543,7 @@ public class PatioToLlvm {
yield context.addInstruction(new LlvmIntToPtr(
destination,
- context.platformTarget().patioIntType(),
+ context.target().patioIntType(),
patioOperandToLlvmOperand(patioIntToDataPtr.value(), context)
));
}
@@ -597,7 +597,7 @@ public class PatioToLlvm {
pointer,
LlvmTypes.pointer(patioDataLayoutToLlvmType(
patioMemoryLoad.layout(),
- context.platformTarget()
+ context.target()
)),
patioOperandToLlvmOperand(patioMemoryLoad.pointer(), context),
patioDataOffsetsToLlvmOffsets(patioMemoryLoad.layout(), patioMemoryLoad.offset())
@@ -608,7 +608,7 @@ public class PatioToLlvm {
patioDataOffsetToLlvmType(
patioMemoryLoad.layout(),
patioMemoryLoad.offset(),
- context.platformTarget()
+ context.target()
),
pointer
));
@@ -625,7 +625,7 @@ public class PatioToLlvm {
pointer,
LlvmTypes.pointer(patioDataLayoutToLlvmType(
patioMemoryStore.layout(),
- context.platformTarget()
+ context.target()
)),
patioOperandToLlvmOperand(patioMemoryStore.pointer(), context),
patioDataOffsetsToLlvmOffsets(patioMemoryStore.layout(), patioMemoryStore.offset())
@@ -635,7 +635,7 @@ public class PatioToLlvm {
patioDataOffsetToLlvmType(
patioMemoryStore.layout(),
patioMemoryStore.offset(),
- context.platformTarget()
+ context.target()
),
patioOperandToLlvmOperand(patioMemoryStore.value(), context),
pointer
@@ -731,7 +731,7 @@ public class PatioToLlvm {
}
case PatioThrow throw_ -> {
- var throwDeclaration = throwDeclaration(context.platformTarget());
+ var throwDeclaration = throwDeclaration(context.target());
context = context.addInstruction(throwDeclaration.call(
Optional.empty(),
List.of(
@@ -782,7 +782,7 @@ public class PatioToLlvm {
var setjmpValue = setjmpValueResult.value();
context = setjmpValueResult.context();
- var setjmpDeclaration = setjmpDeclaration(context.platformTarget());
+ var setjmpDeclaration = setjmpDeclaration(context.target());
context = context.addInstruction(setjmpDeclaration.call(
Optional.of(setjmpValue),
List.of(jmpBuf)
@@ -835,7 +835,7 @@ public class PatioToLlvm {
var exceptionValueTarget = exceptionValueTargetResult.value();
context = exceptionValueTargetResult.context();
- var exceptionValueDeclaration = exceptionValueDeclaration(context.platformTarget());
+ var exceptionValueDeclaration = exceptionValueDeclaration(context.target());
branches.add(new Branch(
catchBodyStartLabel,
@@ -844,7 +844,7 @@ public class PatioToLlvm {
restorePreviousExceptionHandlerInstruction,
new LlvmLoad(
exceptionValueTarget,
- exceptionValueType(context.platformTarget()),
+ exceptionValueType(context.target()),
new LlvmVariableGlobal(exceptionValueDeclaration.name())
)
),
@@ -1070,19 +1070,19 @@ public class PatioToLlvm {
private static LlvmType patioDataOffsetToLlvmType(
PatioDataLayout patioDataLayout,
List<Integer> patioOffsets,
- LlvmTarget platformTarget
+ LlvmTarget target
) {
return patioDataOffsetToLlvmType(
patioDataLayout,
TreePVector.from(patioOffsets),
- platformTarget
+ target
);
}
private static LlvmType patioDataOffsetToLlvmType(
PatioDataLayout patioDataLayout,
PVector<Integer> patioOffsets,
- LlvmTarget platformTarget
+ LlvmTarget target
) {
// TODO: check that offset is valid?
return switch (patioDataLayout) {
@@ -1090,7 +1090,7 @@ public class PatioToLlvm {
patioDataOffsetToLlvmType(
patioDataLayoutArray.element(),
patioOffsets.minus(0),
- platformTarget
+ target
);
case PatioDataLayoutBool patioDataLayoutBool ->
@@ -1106,13 +1106,13 @@ public class PatioToLlvm {
LlvmTypes.pointer(LlvmTypes.VOID);
case PatioDataLayoutInt patioDataLayoutInt ->
- platformTarget.patioIntType();
+ target.patioIntType();
case PatioDataLayoutStruct patioDataLayoutStruct ->
patioDataOffsetToLlvmType(
patioDataLayoutStruct.elements().get(patioOffsets.get(0)),
patioOffsets.minus(0),
- platformTarget
+ target
);
};
}
@@ -1142,7 +1142,7 @@ public class PatioToLlvm {
LlvmTypes.pointer(LlvmTypes.VOID);
case PatioInt patioInt ->
- context.platformTarget().patioIntType();
+ context.target().patioIntType();
case PatioLocalRef patioLocalRef ->
context.patioLocalToType(patioLocalRef);
@@ -1174,7 +1174,7 @@ public class PatioToLlvm {
private static LlvmType patioTypeToLlvmType(
PatioType patioType,
- LlvmTarget platformTarget
+ LlvmTarget target
) {
return switch (patioType) {
case PatioBoolType patioBoolType ->
@@ -1190,7 +1190,7 @@ public class PatioToLlvm {
LlvmTypes.pointer(LlvmTypes.VOID);
case PatioIntType patioIntType ->
- platformTarget.patioIntType();
+ target.patioIntType();
case PatioVoidType patioVoidType ->
LlvmTypes.VOID;
@@ -1199,7 +1199,7 @@ public class PatioToLlvm {
private static LlvmType patioDataLayoutToLlvmType(
PatioDataLayout layout,
- LlvmTarget platformTarget
+ LlvmTarget target
) {
return switch (layout) {
case PatioDataLayoutArray patioDataLayoutArray ->
@@ -1207,7 +1207,7 @@ public class PatioToLlvm {
patioDataLayoutArray.size(),
patioDataLayoutToLlvmType(
patioDataLayoutArray.element(),
- platformTarget
+ target
)
);
@@ -1224,12 +1224,12 @@ public class PatioToLlvm {
LlvmTypes.pointer(LlvmTypes.VOID);
case PatioDataLayoutInt patioDataLayoutInt ->
- platformTarget.patioIntType();
+ target.patioIntType();
case PatioDataLayoutStruct patioDataLayoutStruct ->
LlvmTypes.structure(
patioDataLayoutStruct.elements().stream()
- .map(element -> patioDataLayoutToLlvmType(element, platformTarget))
+ .map(element -> patioDataLayoutToLlvmType(element, target))
.toList()
);
};
@@ -1237,19 +1237,19 @@ public class PatioToLlvm {
private static LlvmOperand patioDataLayoutToZeroedLlvmOperand(
PatioDataLayout layout,
- LlvmTarget platformTarget
+ LlvmTarget target
) {
return switch (layout) {
case PatioDataLayoutArray patioDataLayoutArray ->
new LlvmOperandArray(
patioDataLayoutToLlvmType(
patioDataLayoutArray.element(),
- platformTarget
+ target
),
Lists.repeat(
patioDataLayoutToZeroedLlvmOperand(
patioDataLayoutArray.element(),
- platformTarget
+ target
),
patioDataLayoutArray.size()
)
@@ -1274,8 +1274,8 @@ public class PatioToLlvm {
new LlvmOperandStructure(
patioDataLayoutStruct.elements().stream()
.map(element -> new LlvmTypedOperand(
- patioDataLayoutToLlvmType(element, platformTarget),
- patioDataLayoutToZeroedLlvmOperand(element, platformTarget)
+ patioDataLayoutToLlvmType(element, target),
+ patioDataLayoutToZeroedLlvmOperand(element, target)
))
.toList()
);
@@ -1284,17 +1284,17 @@ public class PatioToLlvm {
private static LlvmOperand patioDataValueToLlvmOperand(
PatioDataValue value,
- LlvmTarget platformTarget
+ LlvmTarget target
) {
return switch (value) {
case PatioDataValueArray patioDataValueArray -> {
var llvmType = patioDataLayoutToLlvmType(
patioDataValueArray.elementLayout(),
- platformTarget
+ target
);
var llvmElements = patioDataValueArray.elements().stream()
- .map(element -> patioDataValueToLlvmOperand(element, platformTarget))
+ .map(element -> patioDataValueToLlvmOperand(element, target))
.toList();
yield new LlvmOperandArray(llvmType, llvmElements);
@@ -1316,8 +1316,8 @@ public class PatioToLlvm {
new LlvmOperandStructure(
patioDataValueStruct.elements().stream()
.map(element -> new LlvmTypedOperand(
- patioDataLayoutToLlvmType(element.layout(), platformTarget),
- patioDataValueToLlvmOperand(element, platformTarget)
+ patioDataLayoutToLlvmType(element.layout(), target),
+ patioDataValueToLlvmOperand(element, target)
))
.toList()
);
@@ -1349,7 +1349,7 @@ public class PatioToLlvm {
new LlvmPtrToInt(
size,
sizePtr,
- context.platformTarget().patioIntType()
+ context.target().patioIntType()
)
)
.toResult(size);
@@ -1374,7 +1374,7 @@ public class PatioToLlvm {
offsetPtr,
LlvmTypes.pointer(patioDataLayoutToLlvmType(
patioDataLayout,
- context.platformTarget()
+ context.target()
)),
new LlvmOperandNull(),
patioDataOffsetsToLlvmOffsets(patioDataLayout, patioOffset)
@@ -1384,7 +1384,7 @@ public class PatioToLlvm {
new LlvmPtrToInt(
offset,
offsetPtr,
- context.platformTarget().patioIntType()
+ context.target().patioIntType()
)
)
.toResult(offset);
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmFunctionContext.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmFunctionContext.java
index 8ec1e6b3..783186ce 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmFunctionContext.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmFunctionContext.java
@@ -61,8 +61,8 @@ class PatioToLlvmFunctionContext {
this.loopLabels = loopLabels;
}
- LlvmTarget platformTarget() {
- return this.moduleContext.platformTarget();
+ LlvmTarget target() {
+ return this.moduleContext.target();
}
LlvmType functionNameToReturnType(String functionName) {
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmGlobalContext.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmGlobalContext.java
index ab0a241f..4077ce6e 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmGlobalContext.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmGlobalContext.java
@@ -9,25 +9,25 @@ public class PatioToLlvmGlobalContext {
return new PatioToLlvmGlobalContext(target, P.map());
}
- private final LlvmTarget platformTarget;
+ private final LlvmTarget target;
private final PMap<String, Integer> exceptionTypeNameToTag;
private PatioToLlvmGlobalContext(
- LlvmTarget platformTarget,
+ LlvmTarget target,
PMap<String, Integer> exceptionTypeNameToTag
) {
- this.platformTarget = platformTarget;
+ this.target = target;
this.exceptionTypeNameToTag = exceptionTypeNameToTag;
}
- public LlvmTarget platformTarget() {
- return this.platformTarget;
+ public LlvmTarget target() {
+ return this.target;
}
PatioToLlvmGlobalContext allocateExceptionTag(String exceptionTypeName) {
var tag = this.exceptionTypeNameToTag.size() + 1;
return new PatioToLlvmGlobalContext(
- this.platformTarget,
+ this.target,
this.exceptionTypeNameToTag.plus(exceptionTypeName, tag)
);
}
diff --git a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmModuleContext.java b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmModuleContext.java
index 6315e0aa..e5cf0dfc 100644
--- a/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmModuleContext.java
+++ b/src/main/java/org/shedlang/compiler/backends/llvm/codegen/PatioToLlvmModuleContext.java
@@ -33,13 +33,13 @@ class PatioToLlvmModuleContext {
PatioToLlvmGlobalContext.Result<LlvmModule> toModule() {
return this.globalContext.toResult(new LlvmModule(
- this.globalContext.platformTarget().targetTriple(),
+ this.globalContext.target().targetTriple(),
this.topLevelEntities
));
}
- LlvmTarget platformTarget() {
- return this.globalContext.platformTarget();
+ LlvmTarget target() {
+ return this.globalContext.target();
}
PatioToLlvmModuleContext addFunctionNameToReturnType(String functionName, LlvmType returnType) {
diff --git a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
index f22a5c00..2fd8916f 100644
--- a/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
+++ b/src/main/java/org/shedlang/compiler/backends/wasm/PatioToWasm.java
@@ -26,7 +26,7 @@ public class PatioToWasm {
public static WasmModule generateCompilationUnit(
PatioCompilationUnit patioCompilationUnit,
- WasmTarget platformTarget
+ WasmTarget target
) {
var module = WasmModule.EMPTY.addImport(new WasmImport(
"env",
@@ -34,8 +34,8 @@ public class PatioToWasm {
new WasmImportDescriptor.Func(
ALLOC_NAME,
new WasmFuncType(
- List.of(platformTarget.sizeT(), platformTarget.sizeT(), platformTarget.sizeT()),
- List.of(platformTarget.dataPointerType())
+ List.of(target.sizeT(), target.sizeT(), target.sizeT()),
+ List.of(target.dataPointerType())
)
)
));
@@ -46,27 +46,27 @@ public class PatioToWasm {
new WasmImportDescriptor.Func(
STACK_ALLOC_NAME,
new WasmFuncType(
- List.of(platformTarget.sizeT()),
- List.of(platformTarget.dataPointerType())
+ List.of(target.sizeT()),
+ List.of(target.dataPointerType())
)
)
));
- var wasmMemoryBuilder = WasmMemoryBuilder.empty(platformTarget.indexType());
+ var wasmMemoryBuilder = WasmMemoryBuilder.empty(target.indexType());
for (var patioCompilationUnitElement : patioCompilationUnit.elements()) {
switch (patioCompilationUnitElement) {
case PatioDataElementImmutable patioDataElementImmutable -> {
wasmMemoryBuilder = wasmMemoryBuilder.add(
patioDataElementImmutable.name(),
- patioDataValueToBytes(patioDataElementImmutable.value(), platformTarget),
+ patioDataValueToBytes(patioDataElementImmutable.value(), target),
WasmAlignment.ALIGN_32_BIT
).memory();
}
case PatioDataElementMutable patioDataElementMutable -> {
wasmMemoryBuilder = wasmMemoryBuilder.add(
patioDataElementMutable.name(),
- patioDataValueToBytes(patioDataElementMutable.initialValue(), platformTarget),
+ patioDataValueToBytes(patioDataElementMutable.initialValue(), target),
WasmAlignment.ALIGN_32_BIT
).memory();
}
@@ -75,11 +75,11 @@ public class PatioToWasm {
var wasmFuncType = new WasmFuncType(
patioFunctionDeclaration.params().stream()
- .map(param -> patioTypeToWasmValueType(param.type(), platformTarget))
+ .map(param -> patioTypeToWasmValueType(param.type(), target))
.toList(),
patioTypeToWasmResultTypes(
patioFunctionDeclaration.returnType(),
- platformTarget
+ target
)
);
@@ -93,7 +93,7 @@ public class PatioToWasm {
module = module.addTag(new WasmTag(
WasmTagType.EXCEPTION,
patioExceptionTypeDefinition.name(),
- List.of(platformTarget.patioIntType())
+ List.of(target.patioIntType())
));
}
case PatioFunctionDefinition patioFunctionDefinition -> {
@@ -103,7 +103,7 @@ public class PatioToWasm {
var wasmLocals = new ArrayList<WasmLocal>();
for (var patioLocal : patioFunctionDefinition.locals()) {
- var wasmLocal = patioLocalToWasmLocal(patioLocal, platformTarget);
+ var wasmLocal = patioLocalToWasmLocal(patioLocal, target);
switch (patioLocal.localType()) {
case PARAM -> {
wasmParams.add(wasmLocal);
@@ -116,12 +116,12 @@ public class PatioToWasm {
var wasmResultTypes = patioTypeToWasmResultTypes(
patioFunctionDefinition.returnType(),
- platformTarget
+ target
);
var context = generateInstructions(
patioFunctionDefinition.body(),
- Context.forFunction(platformTarget, module, Lists.concat(wasmParams, wasmLocals))
+ Context.forFunction(target, module, Lists.concat(wasmParams, wasmLocals))
);
module = context.module;
@@ -157,28 +157,28 @@ public class PatioToWasm {
PatioInstruction patioInstruction,
Context context
) {
- var platformTarget = context.platformTarget;
+ var target = context.target;
return switch (patioInstruction) {
case PatioAllocHeap patioAllocHeap -> {
context = context
.addInstruction(wasmIntConst(
- platformTarget.sizeT(),
+ target.sizeT(),
sizeOf(
patioAllocHeap.layout(),
- platformTarget
+ target
)
))
.addInstruction(wasmIntConst(
- platformTarget.sizeT(),
+ target.sizeT(),
offsetOf(
patioAllocHeap.layout(),
patioAllocHeap.gcChildrenOffset(),
- platformTarget
+ target
)
))
.addInstruction(wasmIntConst(
- platformTarget.sizeT(),
+ target.sizeT(),
patioAllocHeap.gcChildrenCount()
))
.addInstruction(new WasmCall(new WasmFuncName(ALLOC_NAME)))
@@ -190,8 +190,8 @@ public class PatioToWasm {
case PatioAllocStack patioAllocStack -> {
context = context
.addInstruction(wasmIntConst(
- platformTarget.sizeT(),
- sizeOf(patioAllocStack.layout(), platformTarget)
+ target.sizeT(),
+ sizeOf(patioAllocStack.layout(), target)
))
.addInstruction(new WasmCall(new WasmFuncName(STACK_ALLOC_NAME)))
.addInstruction(new WasmLocalSet(context.wasmLocalIndex(patioAllocStack.destination())));
@@ -205,7 +205,7 @@ public class PatioToWasm {
case PatioBoolToInt patioBoolToInt -> {
context = generateOperand(patioBoolToInt.value(), context);
- if (platformTarget == WasmTarget.WASM64) {
+ if (target == WasmTarget.WASM64) {
context = context.addInstruction(new WasmI64ExtendI32Unsigned());
}
@@ -235,7 +235,7 @@ public class PatioToWasm {
context = generateOperand(patioCallPointer.functionPointer(), context);
- if (context.platformTarget == WasmTarget.WASM64) {
+ if (context.target == WasmTarget.WASM64) {
context = context.addInstruction(new WasmI32WrapI64());
}
@@ -285,35 +285,35 @@ public class PatioToWasm {
case PatioIntAdd patioIntAdd ->
generateBinaryOperation(
patioIntAdd,
- wasmIntAdd(platformTarget.patioIntType()),
+ wasmIntAdd(target.patioIntType()),
context
);
case PatioIntEquals patioIntEquals ->
generateBinaryOperation(
patioIntEquals,
- wasmIntEq(platformTarget.patioIntType()),
+ wasmIntEq(target.patioIntType()),
context
);
case PatioIntNotEqual patioIntNotEqual ->
generateBinaryOperation(
patioIntNotEqual,
- wasmIntNe(platformTarget.patioIntType()),
+ wasmIntNe(target.patioIntType()),
context
);
case PatioIntSub patioIntSub ->
generateBinaryOperation(
patioIntSub,
- wasmIntSub(platformTarget.patioIntType()),
+ wasmIntSub(target.patioIntType()),
context
);
case PatioIntToBool patioIntToBool -> {
context = generateOperand(patioIntToBool.value(), context);
- if (platformTarget == WasmTarget.WASM64) {
+ if (target == WasmTarget.WASM64) {
context = context.addInstruction(new WasmI32WrapI64());
}
@@ -366,7 +366,7 @@ public class PatioToWasm {
wasmMemoryArg(
patioMemoryLoad.layout(),
patioMemoryLoad.offset(),
- platformTarget
+ target
)
));
@@ -385,7 +385,7 @@ public class PatioToWasm {
wasmMemoryArg(
patioMemoryStore.layout(),
patioMemoryStore.offset(),
- platformTarget
+ target
)
));
@@ -418,10 +418,10 @@ public class PatioToWasm {
for (var patioSwitchCase : patioSwitch.cases()) {
context = generateOperand(patioSwitch.value(), context);
context = context.addInstruction(wasmIntConst(
- platformTarget.patioIntType(),
+ target.patioIntType(),
patioSwitchCase.value()
));
- context = context.addInstruction(wasmIntEq(platformTarget.patioIntType()));
+ context = context.addInstruction(wasmIntEq(target.patioIntType()));
context = context.enterIfInstruction(wasmBlockType);
context = generateBlockBody(patioSwitchCase.body(), context);
context = context.enterElse();
@@ -449,7 +449,7 @@ public class PatioToWasm {
case PatioTry try_ -> {
// TODO: don't assume we always have a Patio int
context = context.enterTryInstruction(
- new WasmBlockType(List.of(platformTarget.patioIntType()))
+ new WasmBlockType(List.of(target.patioIntType()))
);
context = generateBlockBody(try_.body(), context);
@@ -567,7 +567,7 @@ public class PatioToWasm {
case PatioDataPtr patioDataPtr -> {
var wasmMemoryAddress = new WasmMemoryAddress(patioDataPtr.name());
yield context.addInstruction(new WasmMemoryAddressConst(
- context.platformTarget.indexType(),
+ context.target.indexType(),
wasmMemoryAddress
));
}
@@ -577,7 +577,7 @@ public class PatioToWasm {
context = context
.addInstruction(new WasmTableElementIndexConst(wasmFuncName));
- if (context.platformTarget == WasmTarget.WASM64) {
+ if (context.target == WasmTarget.WASM64) {
context = context.addInstruction(new WasmI64ExtendI32Unsigned());
}
@@ -586,7 +586,7 @@ public class PatioToWasm {
case PatioInt patioInt ->
context.addInstruction(wasmIntConst(
- context.platformTarget.patioIntType(),
+ context.target.patioIntType(),
patioInt.value()
));
@@ -597,10 +597,10 @@ public class PatioToWasm {
};
}
- private static int sizeOf(PatioDataLayout layout, WasmTarget platformTarget) {
+ private static int sizeOf(PatioDataLayout layout, WasmTarget target) {
return switch (layout) {
case PatioDataLayoutArray patioDataLayoutArray ->
- sizeOf(patioDataLayoutArray.element(), platformTarget) * patioDataLayoutArray.size();
+ sizeOf(patioDataLayoutArray.element(), target) * patioDataLayoutArray.size();
case PatioDataLayoutBool patioDataLayoutBool ->
1;
@@ -609,17 +609,17 @@ public class PatioToWasm {
1;
case PatioDataLayoutDataPointer patioDataLayoutDataPointer ->
- platformTarget.dataPointerType().sizeBytes();
+ target.dataPointerType().sizeBytes();
case PatioDataLayoutFunctionPointer patioDataLayoutFunctionPointer ->
- platformTarget.functionPointerType().sizeBytes();
+ target.functionPointerType().sizeBytes();
case PatioDataLayoutInt patioDataLayoutInt ->
- platformTarget.patioIntType().sizeBytes();
+ target.patioIntType().sizeBytes();
case PatioDataLayoutStruct patioDataLayoutStruct ->
patioDataLayoutStruct.elements().stream()
- .map(element -> sizeOf(element, platformTarget))
+ .map(element -> sizeOf(element, target))
.reduce(0, Integer::sum);
};
}
@@ -627,14 +627,14 @@ public class PatioToWasm {
private static int offsetOf(
PatioDataLayout patioDataLayout,
List<Integer> patioOffsets,
- WasmTarget platformTarget
+ WasmTarget target
) {
var wasmOffset = 0;
for (var patioOffset : patioOffsets) {
switch (patioDataLayout) {
case PatioDataLayoutArray patioDataLayoutArray -> {
- var elementSize = sizeOf(patioDataLayoutArray.element(), platformTarget);
+ var elementSize = sizeOf(patioDataLayoutArray.element(), target);
wasmOffset += elementSize * patioOffset;
patioDataLayout = patioDataLayoutArray.element();
}
@@ -656,7 +656,7 @@ public class PatioToWasm {
case PatioDataLayoutStruct patioDataLayoutStruct -> {
for (var i = 0; i < patioOffset; i++) {
var element = patioDataLayoutStruct.elements().get(i);
- wasmOffset += sizeOf(element, platformTarget);
+ wasmOffset += sizeOf(element, target);
}
patioDataLayout = patioDataLayoutStruct.elements().get(patioOffset);
}
@@ -669,9 +669,9 @@ public class PatioToWasm {
private static WasmMemoryArg wasmMemoryArg(
PatioDataLayout patioDataLayout,
List<Integer> patioOffsets,
- WasmTarget platformTarget
+ WasmTarget target
) {
- var wasmOffset = offsetOf(patioDataLayout, patioOffsets, platformTarget);
+ var wasmOffset = offsetOf(patioDataLayout, patioOffsets, target);
// TODO: alignment
return new WasmMemoryArg(wasmOffset, WasmAlignment.NONE);
@@ -679,12 +679,12 @@ public class PatioToWasm {
private static byte[] patioDataValueToBytes(
PatioDataValue value,
- WasmTarget platformTarget
+ WasmTarget target
) {
- var bytes = ByteBuffer.allocate(sizeOf(value, platformTarget));
+ var bytes = ByteBuffer.allocate(sizeOf(value, target));
bytes.order(ByteOrder.LITTLE_ENDIAN);
- patioDataValueToBytes(value, bytes, platformTarget);
+ patioDataValueToBytes(value, bytes, target);
return bytes.array();
}
@@ -692,12 +692,12 @@ public class PatioToWasm {
private static void patioDataValueToBytes(
PatioDataValue value,
ByteBuffer bytes,
- WasmTarget platformTarget
+ WasmTarget target
) {
switch (value) {
case PatioDataValueArray patioDataValueArray -> {
for (var element : patioDataValueArray.elements()) {
- patioDataValueToBytes(element, bytes, platformTarget);
+ patioDataValueToBytes(element, bytes, target);
}
}
case PatioDataValueBool patioDataValueBool -> {
@@ -710,7 +710,7 @@ public class PatioToWasm {
bytes.putInt(0);
}
case PatioDataValueInt patioDataValueInt -> {
- switch (platformTarget) {
+ switch (target) {
case WASM32 -> {
bytes.putInt(patioDataValueInt.value());
}
@@ -721,21 +721,21 @@ public class PatioToWasm {
}
case PatioDataValueStruct patioDataValueStruct -> {
for (var element : patioDataValueStruct.elements()) {
- patioDataValueToBytes(element, bytes, platformTarget);
+ patioDataValueToBytes(element, bytes, target);
}
}
}
}
- private static int sizeOf(PatioDataValue value, WasmTarget platformTarget) {
- return sizeOf(value.layout(), platformTarget);
+ private static int sizeOf(PatioDataValue value, WasmTarget target) {
+ return sizeOf(value.layout(), target);
}
private static WasmLocal patioLocalToWasmLocal(
PatioLocal local,
- WasmTarget platformTarget
+ WasmTarget target
) {
- return new WasmLocal(local.name(), patioTypeToWasmValueType(local.type(), platformTarget));
+ return new WasmLocal(local.name(), patioTypeToWasmValueType(local.type(), target));
}
private static List<WasmValueType> patioOperandsToWasmValueTypes(
@@ -754,13 +754,13 @@ public class PatioToWasm {
// TODO: push into PatioOperand?
return switch (operand) {
case PatioBool patioBool ->
- patioTypeToWasmValueType(PatioTypes.BOOL, context.platformTarget);
+ patioTypeToWasmValueType(PatioTypes.BOOL, context.target);
case PatioDataPtr patioDataPtr ->
- patioTypeToWasmValueType(PatioTypes.DATA_POINTER, context.platformTarget);
+ patioTypeToWasmValueType(PatioTypes.DATA_POINTER, context.target);
case PatioFunctionPtr patioFunctionPtr ->
- patioTypeToWasmValueType(PatioTypes.FUNCTION_POINTER, context.platformTarget);
+ patioTypeToWasmValueType(PatioTypes.FUNCTION_POINTER, context.target);
case PatioInt patioInt ->
- patioTypeToWasmValueType(PatioTypes.INT, context.platformTarget);
+ patioTypeToWasmValueType(PatioTypes.INT, context.target);
case PatioLocalRef patioLocalRef ->
context.wasmLocalType(patioLocalRef);
};
@@ -768,7 +768,7 @@ public class PatioToWasm {
private static WasmValueType patioTypeToWasmValueType(
PatioType type,
- WasmTarget platformTarget
+ WasmTarget target
) {
return switch (type) {
case PatioBoolType patioBoolType ->
@@ -776,11 +776,11 @@ public class PatioToWasm {
case PatioByteType patioByteType ->
WasmValueType.I32;
case PatioDataPointerType patioDataPointerType ->
- platformTarget.dataPointerType();
+ target.dataPointerType();
case PatioFunctionPointerType patioFunctionPointerType ->
- platformTarget.functionPointerType();
+ target.functionPointerType();
case PatioIntType patioIntType ->
- platformTarget.patioIntType();
+ target.patioIntType();
case PatioVoidType patioVoidType ->
throw new IllegalArgumentException("Cannot have void values");
};
@@ -788,11 +788,11 @@ public class PatioToWasm {
private static List<WasmValueType> patioTypeToWasmResultTypes(
PatioType type,
- WasmTarget platformTarget
+ WasmTarget target
) {
return type instanceof PatioVoidType
? List.of()
- : List.of(patioTypeToWasmValueType(type, platformTarget));
+ : List.of(patioTypeToWasmValueType(type, target));
}
private static WasmInstruction wasmIntConst(WasmValueType wasmValueType, int value) {
@@ -879,7 +879,7 @@ public class PatioToWasm {
) {}
public static Context forFunction(
- WasmTarget platformTarget,
+ WasmTarget target,
WasmModule module,
List<WasmLocal> locals
) {
@@ -895,7 +895,7 @@ public class PatioToWasm {
}
return new Context(
- platformTarget,
+ target,
module,
P.vector(),
P.stack(),
@@ -905,7 +905,7 @@ public class PatioToWasm {
);
}
- private final WasmTarget platformTarget;
+ private final WasmTarget target;
private final WasmModule module;
private final PVector<WasmInstruction> instructions;
private final PStack<PVector<WasmInstruction>> instructionsStack;
@@ -914,7 +914,7 @@ public class PatioToWasm {
private final PStack<WasmStructuredInstructionBuilder> structuredInstructionBuilderStack;
private Context(
- WasmTarget platformTarget,
+ WasmTarget target,
WasmModule module,
PVector<WasmInstruction> instructions,
PStack<PVector<WasmInstruction>> instructionsStack,
@@ -922,7 +922,7 @@ public class PatioToWasm {
WasmStructuredInstructionBuilder structuredInstructionBuilder,
PStack<WasmStructuredInstructionBuilder> structuredInstructionBuilderStack
) {
- this.platformTarget = platformTarget;
+ this.target = target;
this.module = module;
this.instructions = instructions;
this.instructionsStack = instructionsStack;
@@ -933,7 +933,7 @@ public class PatioToWasm {
private Context addType(WasmFuncType type) {
return new Context(
- this.platformTarget,
+ this.target,
this.module.addType(type),
this.instructions,
this.instructionsStack,
@@ -945,7 +945,7 @@ public class PatioToWasm {
private Context addInstruction(WasmInstruction instruction) {
return new Context(
- this.platformTarget,
+ this.target,
this.module,
this.instructions.plus(instruction),
this.instructionsStack,
@@ -966,7 +966,7 @@ public class PatioToWasm {
public Context enterBlockInstruction() {
return new Context(
- this.platformTarget,
+ this.target,
this.module,
P.vector(),
this.instructionsStack.plus(this.instructions),
@@ -987,7 +987,7 @@ public class PatioToWasm {
public Context enterLoopInstruction() {
return new Context(
- this.platformTarget,
+ this.target,
this.module,
P.vector(),
this.instructionsStack.plus(this.instructions),
@@ -1008,7 +1008,7 @@ public class PatioToWasm {
public Context enterIfInstruction(WasmBlockType blockType) {
return new Context(
- this.platformTarget,
+ this.target,
this.module,
P.vector(),
this.instructionsStack.plus(this.instructions),
@@ -1020,7 +1020,7 @@ public class PatioToWasm {
public Context enterElse() {
return new Context(
- this.platformTarget,
+ this.target,
this.module,
P.vector(),
this.instructionsStack,
@@ -1037,7 +1037,7 @@ public class PatioToWasm {
public Context enterTryInstruction(WasmBlockType blockType) {
return new Context(
- this.platformTarget,
+ this.target,
this.module,
P.vector(),
this.instructionsStack.plus(this.instructions),
@@ -1049,7 +1049,7 @@ public class PatioToWasm {
public Context enterCatch(WasmTagName tagName) {
return new Context(
- this.platformTarget,
+ this.target,
this.module,
P.vector(),
this.instructionsStack,
@@ -1066,7 +1066,7 @@ public class PatioToWasm {
public Context exitStructuredInstruction() {
var context = new Context(
- this.platformTarget,
+ this.target,
this.module,
this.instructionsStack.get(0),
this.instructionsStack.minus(0),