From 88831fb3f83810cd234b0e871b02c4b9f539c1b8 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Fri, 7 Jul 2023 18:47:55 +0100 Subject: Type check integer subtraction --- .../compiler/ast/untyped/UntypedBinaryOperator.java | 3 ++- .../org/shedlang/compiler/typechecker/TypeChecker.java | 14 +++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) (limited to 'src/main/java') diff --git a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java index 0a14b547..f08febfa 100644 --- a/src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java +++ b/src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java @@ -1,5 +1,6 @@ package org.shedlang.compiler.ast.untyped; public enum UntypedBinaryOperator { - ADD + ADD, + SUB } diff --git a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java index d3d0ef81..b4c3983e 100644 --- a/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java +++ b/src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java @@ -157,15 +157,27 @@ public class TypeChecker { var rightResult = typeCheckExpression(untyped.right(), context); var right = rightResult.value(); context = rightResult.context(); + + var operator = typeCheckBinaryOperator(untyped.operator(), left.type(), right.type()); return context.toResult(new TypedBinaryOperationNode( - TypedBinaryOperator.INT_ADD, + operator, left, right, untyped.source() )); } + private static TypedBinaryOperator typeCheckBinaryOperator(UntypedBinaryOperator operator, Type left, Type right) { + return switch (operator) { + case ADD -> + TypedBinaryOperator.INT_ADD; + + case SUB -> + TypedBinaryOperator.INT_SUB; + }; + } + public static TypeCheckerResult typeCheckBoolLiteral( UntypedBoolLiteralNode untyped, TypeCheckerContext context -- cgit v1.2.3