Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Paul Berry <stereotype441@gmail.com>tags/mesa-8.0-rc1
@@ -207,6 +207,7 @@ public: | |||
subexpressions[1] = NULL; | |||
subexpressions[2] = NULL; | |||
primary_expression.identifier = (char *) identifier; | |||
this->non_lvalue_description = NULL; | |||
} | |||
static const char *operator_string(enum ast_operators op); | |||
@@ -234,6 +235,18 @@ public: | |||
* \c ast_function_call | |||
*/ | |||
exec_list expressions; | |||
/** | |||
* For things that can't be l-values, this describes what it is. | |||
* | |||
* This text is used by the code that generates IR for assignments to | |||
* detect and emit useful messages for assignments to some things that | |||
* can't be l-values. For example, pre- or post-incerement expressions. | |||
* | |||
* \note | |||
* This pointer may be \c NULL. | |||
*/ | |||
const char *non_lvalue_description; | |||
}; | |||
class ast_expression_bin : public ast_expression { |
@@ -1463,6 +1463,9 @@ ast_expression::hir(exec_list *instructions, | |||
case ast_pre_inc: | |||
case ast_pre_dec: { | |||
this->non_lvalue_description = (this->oper == ast_pre_inc) | |||
? "pre-increment operation" : "pre-decrement operation"; | |||
op[0] = this->subexpressions[0]->hir(instructions, state); | |||
op[1] = constant_one_for_inc_dec(ctx, op[0]->type); | |||
@@ -1481,6 +1484,8 @@ ast_expression::hir(exec_list *instructions, | |||
case ast_post_inc: | |||
case ast_post_dec: { | |||
this->non_lvalue_description = (this->oper == ast_post_inc) | |||
? "post-increment operation" : "post-decrement operation"; | |||
op[0] = this->subexpressions[0]->hir(instructions, state); | |||
op[1] = constant_one_for_inc_dec(ctx, op[0]->type); | |||
@@ -626,6 +626,7 @@ ast_expression::ast_expression(int oper, | |||
this->subexpressions[0] = ex0; | |||
this->subexpressions[1] = ex1; | |||
this->subexpressions[2] = ex2; | |||
this->non_lvalue_description = NULL; | |||
} | |||