diff --git a/examples/expression/shiftExpr.tile b/examples/expression/shiftExpr.tile new file mode 100644 index 0000000..3347020 --- /dev/null +++ b/examples/expression/shiftExpr.tile @@ -0,0 +1,6 @@ +func main(argc: int): void { + x: int = 4; + y: int = 4 << 2; + z: int = 4 >> 1 + 2; + t: int = 4 << 2 * 2; +} diff --git a/src/tile/AntlrToExpression.java b/src/tile/AntlrToExpression.java index c0a456e..8bf233b 100644 --- a/src/tile/AntlrToExpression.java +++ b/src/tile/AntlrToExpression.java @@ -417,7 +417,7 @@ public Expression visitShiftExpression(ShiftExpressionContext ctx) { Expression left = visit(exprs.get(0)); Expression right = visit(exprs.get(1)); String operator = ctx.getChild(1).getText(); - return new ShiftExpression(left, operator, right, new TypeInfoBinopInt()); + return new ShiftExpression(left, operator, right, TypeResolver.resolveBinopShiftType(left.getType(), right.getType())); } else if (exprs.size() == 1) { return visit(exprs.get(0)); } diff --git a/src/tile/ast/expr/ShiftExpression.java b/src/tile/ast/expr/ShiftExpression.java index bd88776..6de9e3d 100644 --- a/src/tile/ast/expr/ShiftExpression.java +++ b/src/tile/ast/expr/ShiftExpression.java @@ -26,9 +26,9 @@ public String generateTasm(String generatedCode) { generatedCode = right.generateTasm(generatedCode); if (operator.equals("<<")) { - generatedCode += " shl\n"; + generatedCode += " lshft\n"; } else if (operator.equals(">>")) { - generatedCode += " shr\n"; + generatedCode += " rshft\n"; } else { System.err.println("Unknown shift operator: " + operator); }