diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-06-10 09:27:23 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-06-10 09:27:23 +0100 |
| commit | ce09d6a644277a7e762e02ea835f62f122c68b58 (patch) | |
| tree | 050362c794632199d9dce8e1e0d6ca355ecfe7a2 /src/main/java | |
| parent | fa72b37cbffcd9dd35dbd70c98955bccb5f282f5 (diff) | |
Type check int literals
Diffstat (limited to 'src/main/java')
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() ); } } |
