Ian Romanick <[email protected]> writes:

> From: Ian Romanick <[email protected]>
>
> 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.
>
> Signed-off-by: Ian Romanick <[email protected]>
> Cc: Francisco Jerez <[email protected]>

Reviewed-by: Francisco Jerez <[email protected]>

> ---
>  src/glsl/ir.h | 40 +++++++++-------------------------------
>  1 file changed, 9 insertions(+), 31 deletions(-)
>
> diff --git a/src/glsl/ir.h b/src/glsl/ir.h
> index b2b4822..ff30263 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() \
> -- 
> 2.1.0

Attachment: signature.asc
Description: PGP signature

_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to