From f9d8ca281750baf07ba623f86121f5a875f9bd40 Mon Sep 17 00:00:00 2001 From: Ian Romanick Date: Fri, 15 Mar 2013 15:09:48 -0700 Subject: [PATCH] glsl: Minor code compaction in _mesa_ast_array_index_to_hir Also, document the reason for not checking for type->is_array in some of the bound-checking cases. Signed-off-by: Ian Romanick Reviewed-by: Kenneth Graunke --- src/glsl/ast_array_index.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/src/glsl/ast_array_index.cpp b/src/glsl/ast_array_index.cpp index 9331bef4bde..5f3ae8e6661 100644 --- a/src/glsl/ast_array_index.cpp +++ b/src/glsl/ast_array_index.cpp @@ -60,17 +60,9 @@ _mesa_ast_array_index_to_hir(void *mem_ctx, ir_constant *const const_index = idx->constant_expression_value(); if (const_index != NULL) { const int idx = const_index->value.i[0]; - const char *type_name; + const char *type_name = "error"; unsigned bound = 0; - if (array->type->is_matrix()) { - type_name = "matrix"; - } else if (array->type->is_vector()) { - type_name = "vector"; - } else { - type_name = "array"; - } - /* From page 24 (page 30 of the PDF) of the GLSL 1.50 spec: * * "It is illegal to declare an array with a size, and then @@ -81,15 +73,22 @@ _mesa_ast_array_index_to_hir(void *mem_ctx, */ if (array->type->is_matrix()) { if (array->type->row_type()->vector_elements <= idx) { + type_name = "matrix"; bound = array->type->row_type()->vector_elements; } } else if (array->type->is_vector()) { if (array->type->vector_elements <= idx) { + type_name = "vector"; bound = array->type->vector_elements; } } else { + /* glsl_type::array_size() returns 0 for non-array types. This means + * that we don't need to verify that the type is an array before + * doing the bounds checking. + */ if ((array->type->array_size() > 0) && (array->type->array_size() <= idx)) { + type_name = "array"; bound = array->type->array_size(); } } -- 2.30.2