aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-03 11:46:35 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-03 11:46:35 +0100
commitfc22eb6b047c5a3bbabdf728edb84cfdf81ba9b5 (patch)
tree2405cf68c1c89d38ff87100bbbe7268b38afe0b6 /src/main/java
parentd0a86977da222df158778dd7be95873da44ed90a (diff)
Extract print name and type
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ShedBuiltins.java14
-rw-r--r--src/main/java/org/shedlang/compiler/ShedCompiler.java16
-rw-r--r--src/main/java/org/shedlang/compiler/stackir/StackCompiler.java4
3 files changed, 18 insertions, 16 deletions
diff --git a/src/main/java/org/shedlang/compiler/ShedBuiltins.java b/src/main/java/org/shedlang/compiler/ShedBuiltins.java
index fde2dae6..14a2e6ce 100644
--- a/src/main/java/org/shedlang/compiler/ShedBuiltins.java
+++ b/src/main/java/org/shedlang/compiler/ShedBuiltins.java
@@ -1,10 +1,24 @@
package org.shedlang.compiler;
+import org.shedlang.compiler.types.Effects;
+import org.shedlang.compiler.types.FunctionType;
import org.shedlang.compiler.types.NamespaceName;
+import org.shedlang.compiler.types.Types;
+
+import java.util.List;
public class ShedBuiltins {
private ShedBuiltins() {
}
public static final NamespaceName NAMESPACE_NAME = NamespaceName.of("Shed", "Builtins");
+
+ public static final String PRINT_NAME = "print";
+
+ public static final FunctionType PRINT_TYPE = new FunctionType(
+ List.of(Types.STRING),
+ List.of(),
+ Effects.IO,
+ Types.UNIT
+ );
}
diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java
index 39250e27..6f72328f 100644
--- a/src/main/java/org/shedlang/compiler/ShedCompiler.java
+++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java
@@ -9,7 +9,6 @@ import org.shedlang.compiler.stackir.instructions.Instruction;
import org.shedlang.compiler.typechecker.TypeChecker;
import org.shedlang.compiler.typechecker.TypeCheckerContext;
import org.shedlang.compiler.types.Effects;
-import org.shedlang.compiler.types.FunctionType;
import org.shedlang.compiler.types.NamespaceName;
import org.shedlang.compiler.types.Types;
import org.shedlang.compiler.util.P;
@@ -37,25 +36,14 @@ public class ShedCompiler {
var namespaces = new LinkedHashMap<NamespaceName, List<Instruction>>();
var typeCheckerContext = TypeCheckerContext.EMPTY
- // TODO: remove duplication of builtin namespace definition
.addNamespaceFields(ShedBuiltins.NAMESPACE_NAME, P.orderedMap(
- Map.entry("print", new FunctionType(
- List.of(Types.STRING),
- List.of(),
- Effects.IO,
- Types.UNIT
- ))
+ Map.entry(ShedBuiltins.PRINT_NAME, ShedBuiltins.PRINT_TYPE)
))
.enterBlock(P.map(
Map.entry("Io", Types.effectType(Effects.IO)),
Map.entry("Unit", Types.metaType(Types.UNIT)),
- Map.entry("print", new FunctionType(
- List.of(Types.STRING),
- List.of(),
- Effects.IO,
- Types.UNIT
- ))
+ Map.entry(ShedBuiltins.PRINT_NAME, ShedBuiltins.PRINT_TYPE)
));
for (var sourceFilePath : sourceFilePaths) {
diff --git a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
index 0cae1941..2301510d 100644
--- a/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
+++ b/src/main/java/org/shedlang/compiler/stackir/StackCompiler.java
@@ -109,8 +109,8 @@ public class StackCompiler {
instructions = instructions
.plus(new NamespaceImportInstruction(ShedBuiltins.NAMESPACE_NAME, node.source()))
- .plus(new FieldLoadInstruction(ShedBuiltins.NAMESPACE_NAME, "print", node.source()))
- .plus(new LocalStoreInstruction("print", node.source()));
+ .plus(new FieldLoadInstruction(ShedBuiltins.NAMESPACE_NAME, ShedBuiltins.PRINT_NAME, node.source()))
+ .plus(new LocalStoreInstruction(ShedBuiltins.PRINT_NAME, node.source()));
for (var statement : node.body()) {
instructions = instructions.plusAll(compileNamespaceStatement(statement));