aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/shedlang/compiler/ShedCompiler.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 20:56:57 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 20:56:57 +0100
commitf623d56599a160d27c0f7e0b48e3b32cb2b3a471 (patch)
tree38c713fcbb3b79943d81babf9bf70af729b13c27 /src/main/java/org/shedlang/compiler/ShedCompiler.java
parent0cf3c519c2b834c1d5709e1e98be54cd98b90eb9 (diff)
Update CLI to print instructions
Diffstat (limited to 'src/main/java/org/shedlang/compiler/ShedCompiler.java')
-rw-r--r--src/main/java/org/shedlang/compiler/ShedCompiler.java34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/main/java/org/shedlang/compiler/ShedCompiler.java b/src/main/java/org/shedlang/compiler/ShedCompiler.java
index a7949d53..102d7c6f 100644
--- a/src/main/java/org/shedlang/compiler/ShedCompiler.java
+++ b/src/main/java/org/shedlang/compiler/ShedCompiler.java
@@ -2,6 +2,14 @@ package org.shedlang.compiler;
import org.shedlang.compiler.parser.Parser;
import org.shedlang.compiler.sources.Sources;
+import org.shedlang.compiler.stackir.InstructionSerializer;
+import org.shedlang.compiler.stackir.StackCompiler;
+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.Types;
+import org.shedlang.compiler.util.P;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
@@ -13,6 +21,7 @@ import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
+import java.util.Map;
import static org.shedlang.compiler.parser.Tokeniser.tokenise;
@@ -27,10 +36,31 @@ public class ShedCompiler {
var sourceContents = Files.readString(sourceFilePath, StandardCharsets.UTF_8);
var source = Sources.file(sourceFilePath.toString(), sourceContents);
+
var tokens = tokenise(source);
- var node = Parser.parseNamespace(tokens);
- System.out.println(node);
+ var untypedNode = Parser.parseNamespace(tokens);
+
+ var context = TypeCheckerContext.EMPTY
+ .enter(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(),
+ Types.UNIT
+ ))
+ ));
+ var typedNode = TypeChecker.typeCheckNamespace(untypedNode, context);
+
+ var instructions = StackCompiler.compileNamespace(typedNode);
+
+ var builder = new StringBuilder();
+ InstructionSerializer.serializeInstructions(instructions, builder);
+ var instructionsString = builder.toString();
+
+ System.out.println(instructionsString);
System.out.println();
}
}