Add assignment side-effect to the instruction stream

The actual assignment is a side-effect of the assignment expression.
Add it to the instruction stream and return the LHS of the assignment
as its rvalue.
This commit is contained in:
Ian Romanick
2010-03-09 16:38:02 -08:00
parent 78b51b0fdd
commit 6652af36fe
+6 -2
View File
@@ -398,7 +398,7 @@ ast_expression::hir(exec_list *instructions,
make_empty_list(& op_list);
switch (this->oper) {
case ast_assign:
case ast_assign: {
op[0] = this->subexpressions[0]->hir(instructions, state);
op[1] = this->subexpressions[1]->hir(instructions, state);
@@ -437,8 +437,12 @@ ast_expression::hir(exec_list *instructions,
/* FINISHME: Check that the LHS and RHS have matching types. */
/* FINISHME: For GLSL 1.10, check that the types are not arrays. */
result = new ir_assignment(op[0], op[1], NULL);
ir_instruction *tmp = new ir_assignment(op[0], op[1], NULL);
instructions->push_tail(tmp);
result = op[0];
break;
}
case ast_plus:
op[0] = this->subexpressions[0]->hir(instructions, state);