diff options
| author | Michael Williamson <mike@zwobble.org> | 2023-07-07 18:47:55 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2023-07-07 18:47:55 +0100 |
| commit | 88831fb3f83810cd234b0e871b02c4b9f539c1b8 (patch) | |
| tree | a16d3a71e00ec9eda1ce235e5756fe3b093a87d8 /src/main/java | |
| parent | 98e60278cd3e2dfffc4f5202de45518714d9402c (diff) | |
Type check integer subtraction
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java | 3 | ||||
| -rw-r--r-- | src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java | 14 |
2 files changed, 15 insertions, 2 deletions
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<TypedExpressionNode> typeCheckBoolLiteral( UntypedBoolLiteralNode untyped, TypeCheckerContext context |
