1 using CodeGeneration.Operations;
5 namespace CodeGeneration.NewOperations
8 internal class CGRelationalOperation<T> : NewOperations.CGBinaryOperation<T> where T : ILCodeGenerator
11 public CGRelationalOperation(VisitorILCodeGeneration<T> visitor,
object obj,
int indent,
RelationalExpression node) : base(visitor, obj, indent, node) { }
14 protected override UnionType GenerateAllUnionTypes()
18 if (!(node.FirstOperand.ExpressionType is
NullType) && !(node.SecondOperand.ExpressionType is NullType))
20 unions.AddType(IntType.Instance);
21 unions.AddType(DoubleType.Instance);
22 unions.AddType(CharType.Instance);
35 switch (relationalOperator)
37 case RelationalOperator.NotEqual:
38 this.codeGenerator.ceq(this.indent);
39 this.codeGenerator.ldc(this.indent,
false);
40 this.codeGenerator.ceq(this.indent);
42 case RelationalOperator.Equal:
43 this.codeGenerator.ceq(this.indent);
45 case RelationalOperator.LessThan:
46 this.codeGenerator.clt(this.indent);
48 case RelationalOperator.GreaterThan:
49 this.codeGenerator.cgt(this.indent);
51 case RelationalOperator.LessThanOrEqual:
52 this.codeGenerator.cgt(this.indent);
53 this.codeGenerator.ldc(this.indent,
false);
54 this.codeGenerator.ceq(this.indent);
56 case RelationalOperator.GreaterThanOrEqual:
57 this.codeGenerator.clt(this.indent);
58 this.codeGenerator.ldc(this.indent,
false);
59 this.codeGenerator.ceq(this.indent);
62 this.codeGenerator.Comment(
"ERROR");
Encapsulates a binary expression of our programming language.
Abstract class that represents all different types.
RelationalOperator
Relational binary operators
Encapsulates a relational binary expression.