diff options
author | Ian Romanick <[email protected]> | 2015-03-24 09:02:24 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2015-03-25 10:39:09 -0700 |
commit | 0c4ee62045ed184a5b9662f940b8a9e9bd454734 (patch) | |
tree | 3075198a6ff26f3a8bd8a9f8e3ab0370b2b83cc5 /src/glsl/ir.h | |
parent | a284c6300665d4388dae14363807a57bb82e4cb5 (diff) |
glsl: Implement remaining as_foo functions with macros
The downcast functions for non-leaf classes were previously implemented
"by hand." Now they are implemented using macros based on the is_foo
functions added in the previous patch.
v2: Remove redundant parenthesis. Suggested by Curro (on the next
patch).
Signed-off-by: Ian Romanick <[email protected]>
Reviewed-by: Francisco Jerez <[email protected]>
Diffstat (limited to 'src/glsl/ir.h')
-rw-r--r-- | src/glsl/ir.h | 40 |
1 files changed, 9 insertions, 31 deletions
diff --git a/src/glsl/ir.h b/src/glsl/ir.h index b3a98b88a1e..0284b0278fc 100644 --- a/src/glsl/ir.h +++ b/src/glsl/ir.h @@ -142,39 +142,17 @@ public: * Additional downcast functions will be added as needed. */ /*@{*/ - class ir_rvalue *as_rvalue() - { - assume(this != NULL); - if (ir_type == ir_type_dereference_array || - ir_type == ir_type_dereference_record || - ir_type == ir_type_dereference_variable || - ir_type == ir_type_constant || - ir_type == ir_type_expression || - ir_type == ir_type_swizzle || - ir_type == ir_type_texture) - return (class ir_rvalue *) this; - return NULL; - } - - class ir_dereference *as_dereference() - { - assume(this != NULL); - if (ir_type == ir_type_dereference_array || - ir_type == ir_type_dereference_record || - ir_type == ir_type_dereference_variable) - return (class ir_dereference *) this; - return NULL; + #define AS_BASE(TYPE) \ + class ir_##TYPE *as_##TYPE() \ + { \ + assume(this != NULL); \ + return is_##TYPE() ? (ir_##TYPE *) this : NULL; \ } - class ir_jump *as_jump() - { - assume(this != NULL); - if (ir_type == ir_type_loop_jump || - ir_type == ir_type_return || - ir_type == ir_type_discard) - return (class ir_jump *) this; - return NULL; - } + AS_BASE(rvalue) + AS_BASE(dereference) + AS_BASE(jump) + #undef AS_BASE #define AS_CHILD(TYPE) \ class ir_##TYPE * as_##TYPE() \ |