var cright = get_cvalue (expr.right);
CCodeExpression? left_chain = null;
- if (expr.chained) {
+ if (expr.is_chained) {
var lbe = (BinaryExpression) expr.left;
var temp_decl = get_temp_variable (lbe.right.target_type, true, null, false);
emit_temp_var (temp_decl);
var cvar = get_variable_cexpression (temp_decl.name);
var clbe = (CCodeBinaryExpression) get_cvalue (lbe);
- if (lbe.chained) {
+ if (lbe.is_chained) {
clbe = (CCodeBinaryExpression) clbe.right;
}
ccode.add_assignment (cvar, get_cvalue (lbe.right));
}
}
- public bool chained;
+ public bool is_chained { get; private set; }
private Expression _left;
private Expression _right;
operator = op;
left = _left;
right = _right;
+ is_chained = false;
+ source_reference = source;
+ }
+
+ public BinaryExpression.chained (BinaryOperator op, Expression _left, Expression _right, SourceReference? source = null) {
+ operator = op;
+ left = _left;
+ right = _right;
+ is_chained = true;
source_reference = source;
}
} else {
DataType resulting_type;
- if (chained) {
+ if (is_chained) {
var lbe = (BinaryExpression) left;
resulting_type = context.analyzer.get_arithmetic_result_type (lbe.right.target_type, right.target_type);
} else {
return false;
}
- if (!chained) {
+ if (!is_chained) {
left.target_type = resulting_type.copy ();
}
right.target_type = resulting_type.copy ();
case BinaryOperator.GREATER_THAN_OR_EQUAL:
next ();
var right = parse_shift_expression ();
- left = new BinaryExpression (operator, left, right, get_src (begin));
- if (!first) {
- var be = (BinaryExpression) left;
- be.chained = true;
+ if (first) {
+ left = new BinaryExpression (operator, left, right, get_src (begin));
+ } else {
+ left = new BinaryExpression.chained (operator, left, right, get_src (begin));
}
first = false;
break;
// ignore >> and >>= (two tokens due to generics)
if (current () != TokenType.OP_GT && current () != TokenType.OP_GE) {
var right = parse_shift_expression ();
- left = new BinaryExpression (operator, left, right, get_src (begin));
- if (!first) {
- var be = (BinaryExpression) left;
- be.chained = true;
+ if (first) {
+ left = new BinaryExpression (operator, left, right, get_src (begin));
+ } else {
+ left = new BinaryExpression.chained (operator, left, right, get_src (begin));
}
first = false;
} else {