[Mesa-dev] [PATCH 18.2/23] glsl: Implement remaining as_foo functions with macros
Francisco Jerez
currojerez at riseup.net
Wed Mar 25 05:18:30 PDT 2015
Ian Romanick <idr at freedesktop.org> writes:
> From: Ian Romanick <ian.d.romanick at intel.com>
>
> 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 <ian.d.romanick at intel.com>
> Cc: Francisco Jerez <currojerez at riseup.net>
Reviewed-by: Francisco Jerez <currojerez at riseup.net>
> ---
> 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
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20150325/2aa056c1/attachment.sig>
More information about the mesa-dev
mailing list