Bläddra i källkod

glsl: Track descriptions of some expressions that can't be l-values

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
tags/mesa-8.0-rc1
Ian Romanick 13 år sedan
förälder
incheckning
fa0a9ac5cd
3 ändrade filer med 19 tillägg och 0 borttagningar
  1. 13
    0
      src/glsl/ast.h
  2. 5
    0
      src/glsl/ast_to_hir.cpp
  3. 1
    0
      src/glsl/glsl_parser_extras.cpp

+ 13
- 0
src/glsl/ast.h Visa fil

@@ -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 {

+ 5
- 0
src/glsl/ast_to_hir.cpp Visa fil

@@ -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);


+ 1
- 0
src/glsl/glsl_parser_extras.cpp Visa fil

@@ -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;
}



Laddar…
Avbryt
Spara