+2006-07-04 Jürg Billeter <j@bitron.ch>
+
+ * vala/valacodegenerator.vala: generate assignment with appropriate
+ operator
+ * vala/valaassignment.vala: use implicit namespace specification
+ * ccode/valaccodeassignment.vala: support assignment operators , add
+ interface documentation, use implicit namespace specification
+ * tests/test-010.vala: test assignments
+
2006-07-03 Jürg Billeter <j@bitron.ch>
* vala/parser.y: support implicit namespace specification in struct,
using GLib;
-namespace Vala {
- public class CCodeAssignment : CCodeExpression {
- public CCodeExpression left { get; construct; }
- public CCodeExpression right { get; construct; }
+/**
+ * Represents an assignment expression in the C code.
+ */
+public class Vala.CCodeAssignment : CCodeExpression {
+ /**
+ * Left hand side of the assignment.
+ */
+ public CCodeExpression left { get; construct; }
+
+ /**
+ * Assignment operator.
+ */
+ public CCodeAssignmentOperator operator { get; set; }
+
+ /**
+ * Right hand side of the assignment.
+ */
+ public CCodeExpression right { get; construct; }
+
+ public override void write (CCodeWriter writer) {
+ if (left != null) {
+ left.write (writer);
+ }
+ writer.write_string (" ");
- public override void write (CCodeWriter writer) {
- if (left != null) {
- left.write (writer);
- }
- writer.write_string (" = ");
- if (right != null) {
- right.write (writer);
- }
+ if (operator == CCodeAssignmentOperator.BITWISE_OR) {
+ writer.write_string ("|");
+ } else if (operator == CCodeAssignmentOperator.BITWISE_AND) {
+ writer.write_string ("&");
+ } else if (operator == CCodeAssignmentOperator.BITWISE_XOR) {
+ writer.write_string ("^");
+ } else if (operator == CCodeAssignmentOperator.ADD) {
+ writer.write_string ("+");
+ } else if (operator == CCodeAssignmentOperator.SUB) {
+ writer.write_string ("-");
+ } else if (operator == CCodeAssignmentOperator.MUL) {
+ writer.write_string ("*");
+ } else if (operator == CCodeAssignmentOperator.DIV) {
+ writer.write_string ("/");
+ } else if (operator == CCodeAssignmentOperator.PERCENT) {
+ writer.write_string ("%");
+ } else if (operator == CCodeAssignmentOperator.SHIFT_LEFT) {
+ writer.write_string ("<<");
+ } else if (operator == CCodeAssignmentOperator.SHIFT_RIGHT) {
+ writer.write_string (">>");
+ }
+
+ writer.write_string ("= ");
+ if (right != null) {
+ right.write (writer);
}
}
}
+
+public enum Vala.CCodeAssignmentOperator {
+ SIMPLE,
+ BITWISE_OR,
+ BITWISE_AND,
+ BITWISE_XOR,
+ ADD,
+ SUB,
+ MUL,
+ DIV,
+ PERCENT,
+ SHIFT_LEFT,
+ SHIFT_RIGHT
+}
--- /dev/null
+using GLib;
+
+class Maman.Bar {
+ static int main (int argc, string[] argv) {
+ stdout.printf ("Assignment Test: 1");
+
+ int i;
+
+ i = 2;
+ stdout.printf (" %d", i);
+
+ i |= 1;
+ stdout.printf (" %d", i);
+
+ i = 5;
+ i &= 6;
+ stdout.printf (" %d", i);
+
+ i ^= 1;
+ stdout.printf (" %d", i);
+
+ i += 1;
+ stdout.printf (" %d", i);
+
+ i -= -1;
+ stdout.printf (" %d", i);
+
+ i = 2;
+ i *= 4;
+ stdout.printf (" %d", i);
+
+ i = 18;
+ i /= 2;
+ stdout.printf (" %d", i);
+
+ i = 21;
+ i %= 11;
+ stdout.printf (" %d", i);
+
+ i = 6;
+ i <<= 1;
+ stdout.printf (" %d", i - 1);
+
+ i = 25;
+ i >>= 1;
+ stdout.printf (" %d", i);
+
+ stdout.printf (" 13\n");
+
+ return 0;
+ }
+}
/**
* Assignment operator.
*/
- public AssignmentOperator operator { get; set construct; }
+ public AssignmentOperator operator { get; set; }
/**
* Right hand side of the assignment.
}
}
-namespace Vala {
- public enum AssignmentOperator {
- SIMPLE,
- BITWISE_OR,
- BITWISE_AND,
- BITWISE_XOR,
- ADD,
- SUB,
- MUL,
- DIV,
- PERCENT,
- SHIFT_LEFT,
- SHIFT_RIGHT
- }
+public enum Vala.AssignmentOperator {
+ SIMPLE,
+ BITWISE_OR,
+ BITWISE_AND,
+ BITWISE_XOR,
+ ADD,
+ SUB,
+ MUL,
+ DIV,
+ PERCENT,
+ SHIFT_LEFT,
+ SHIFT_RIGHT
}
rhs = ccomma;
}
- a.ccodenode = new CCodeAssignment (left = (CCodeExpression) a.left.ccodenode, right = rhs);
+ var cop = CCodeAssignmentOperator.SIMPLE;
+ if (a.operator == AssignmentOperator.BITWISE_OR) {
+ cop = CCodeAssignmentOperator.BITWISE_OR;
+ } else if (a.operator == AssignmentOperator.BITWISE_AND) {
+ cop = CCodeAssignmentOperator.BITWISE_AND;
+ } else if (a.operator == AssignmentOperator.BITWISE_XOR) {
+ cop = CCodeAssignmentOperator.BITWISE_XOR;
+ } else if (a.operator == AssignmentOperator.ADD) {
+ cop = CCodeAssignmentOperator.ADD;
+ } else if (a.operator == AssignmentOperator.SUB) {
+ cop = CCodeAssignmentOperator.SUB;
+ } else if (a.operator == AssignmentOperator.MUL) {
+ cop = CCodeAssignmentOperator.MUL;
+ } else if (a.operator == AssignmentOperator.DIV) {
+ cop = CCodeAssignmentOperator.DIV;
+ } else if (a.operator == AssignmentOperator.PERCENT) {
+ cop = CCodeAssignmentOperator.PERCENT;
+ } else if (a.operator == AssignmentOperator.SHIFT_LEFT) {
+ cop = CCodeAssignmentOperator.SHIFT_LEFT;
+ } else if (a.operator == AssignmentOperator.SHIFT_RIGHT) {
+ cop = CCodeAssignmentOperator.SHIFT_RIGHT;
+ }
+
+ a.ccodenode = new CCodeAssignment (left = (CCodeExpression) a.left.ccodenode, right = rhs, operator = cop);
}
}
}