aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-06-10 09:27:23 +0100
committerMichael Williamson <mike@zwobble.org>2023-06-10 09:27:23 +0100
commitce09d6a644277a7e762e02ea835f62f122c68b58 (patch)
tree050362c794632199d9dce8e1e0d6ca355ecfe7a2 /src/main/java
parentfa72b37cbffcd9dd35dbd70c98955bccb5f282f5 (diff)
Type check int literals
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedExpressionNode.java2
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedIntLiteralNode.java11
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java24
3 files changed, 29 insertions, 8 deletions
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedExpressionNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedExpressionNode.java
index a3b3b460..5ef9dc65 100644
--- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedExpressionNode.java
+++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedExpressionNode.java
@@ -1,5 +1,5 @@
package org.shedlang.compiler.ast.untyped;
public sealed interface UntypedExpressionNode extends UntypedNode
- permits UntypedCallNode, UntypedReferenceNode, UntypedStringLiteralNode {
+ permits UntypedCallNode, UntypedIntLiteralNode, UntypedReferenceNode, UntypedStringLiteralNode {
}
diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedIntLiteralNode.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedIntLiteralNode.java
new file mode 100644
index 00000000..2ecd9f11
--- /dev/null
+++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedIntLiteralNode.java
@@ -0,0 +1,11 @@
+package org.shedlang.compiler.ast.untyped;
+
+import org.shedlang.compiler.sources.Source;
+
+import java.math.BigInteger;
+
+public record UntypedIntLiteralNode(
+ BigInteger value,
+ Source source
+) implements UntypedExpressionNode {
+}
diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
index a030f117..a32f1e36 100644
--- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
+++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java
@@ -1,12 +1,10 @@
package org.shedlang.compiler.typechecker;
import org.shedlang.compiler.ast.typed.TypedExpressionNode;
+import org.shedlang.compiler.ast.typed.TypedIntLiteralNode;
import org.shedlang.compiler.ast.typed.TypedReferenceNode;
import org.shedlang.compiler.ast.typed.TypedStringLiteralNode;
-import org.shedlang.compiler.ast.untyped.UntypedCallNode;
-import org.shedlang.compiler.ast.untyped.UntypedExpressionNode;
-import org.shedlang.compiler.ast.untyped.UntypedReferenceNode;
-import org.shedlang.compiler.ast.untyped.UntypedStringLiteralNode;
+import org.shedlang.compiler.ast.untyped.*;
public class TypeChecker {
private TypeChecker() {
@@ -23,11 +21,23 @@ public class TypeChecker {
case UntypedCallNode untypedCall ->
throw new UnsupportedOperationException("TODO");
+ case UntypedIntLiteralNode untypedIntLiteral ->
+ typeCheckIntLiteral(untypedIntLiteral);
+
case UntypedReferenceNode untypedReference ->
typeCheckReference(untypedReference, context);
};
}
+ private static TypedExpressionNode typeCheckIntLiteral(
+ UntypedIntLiteralNode untyped
+ ) {
+ return new TypedIntLiteralNode(
+ untyped.value(),
+ untyped.source()
+ );
+ }
+
private static TypedReferenceNode typeCheckReference(
UntypedReferenceNode untyped,
TypeCheckerContext context
@@ -46,11 +56,11 @@ public class TypeChecker {
}
private static TypedStringLiteralNode typeCheckStringLiteral(
- UntypedStringLiteralNode untypedStringLiteral
+ UntypedStringLiteralNode untype
) {
return new TypedStringLiteralNode(
- untypedStringLiteral.value(),
- untypedStringLiteral.source()
+ untype.value(),
+ untype.source()
);
}
}