aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2023-07-07 18:47:55 +0100
committerMichael Williamson <mike@zwobble.org>2023-07-07 18:47:55 +0100
commit88831fb3f83810cd234b0e871b02c4b9f539c1b8 (patch)
treea16d3a71e00ec9eda1ce235e5756fe3b093a87d8 /src/main/java
parent98e60278cd3e2dfffc4f5202de45518714d9402c (diff)
Type check integer subtraction
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/shedlang/compiler/ast/untyped/UntypedBinaryOperator.java3
-rw-r--r--src/main/java/org/shedlang/compiler/typechecker/TypeChecker.java14
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