From ce09d6a644277a7e762e02ea835f62f122c68b58 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 10 Jun 2023 09:27:23 +0100 Subject: Type check int literals --- .../ast/untyped/UntypedExpressionNode.java | 2 +- .../ast/untyped/UntypedIntLiteralNode.java | 11 ++++++++++ .../shedlang/compiler/typechecker/TypeChecker.java | 24 +++++++++++++++------- 3 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 src/main/java/org/shedlang/compiler/ast/untyped/UntypedIntLiteralNode.java (limited to 'src/main/java') 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() ); } } -- cgit v1.2.3