glsl: add is_lhs bool on ast_expression
authorAlejandro Piñeiro <apinheiro@igalia.com>
Thu, 25 Feb 2016 10:11:54 +0000 (11:11 +0100)
committerAlejandro Piñeiro <apinheiro@igalia.com>
Tue, 29 Mar 2016 05:28:57 +0000 (07:28 +0200)
commit8568d02498d12ebde6a6245056eebfbfe18aaf8f
tree759937d780434c0309710b99354c6fa36786c1a0
parent35e2e96b307bcd6dd839a11e2bd98fa22bd4d50a
glsl: add is_lhs bool on ast_expression

Useful to know if a expression is the recipient of an assignment
or not, that would be used to (for example) raise warnings of
"use of uninitialized variable" without getting a false positive
when assigning first a variable.

By default the value is false, and it is assigned to true on
the following cases:
 * The lhs assignments subexpression
 * At ast_array_index, on the array itself.
 * While handling the method on an array, to avoid the warning
   calling array.length
 * When computed the cached test expression at test_to_hir, to
   avoid a duplicate warning on the test expression of a switch.

set_is_lhs setter is added, because in some cases (like ast_field_selection)
the value need to be propagated on the expression tree. To avoid doing the
propatagion if not needed, it skips if no primary_expression.identifier is
available.

v2: use a new bool on ast_expression, instead of a new parameter
    on ast_expression::hir (Timothy Arceri)

v3: fix style and some typos on comments, initialize is_lhs default value
    on constructor, to avoid a c++11 feature (Ian Romanick)

v4: some tweaks on comments (Timothy Arceri)

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94129

Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
src/compiler/glsl/ast.h
src/compiler/glsl/ast_function.cpp
src/compiler/glsl/ast_to_hir.cpp
src/compiler/glsl/glsl_parser_extras.cpp