summaryrefslogtreecommitdiff
path: root/src/glsl
diff options
context:
space:
mode:
Diffstat (limited to 'src/glsl')
-rw-r--r--src/glsl/Makefile47
-rw-r--r--src/glsl/Makefile.am81
-rw-r--r--src/glsl/SConscript47
-rw-r--r--src/glsl/ast.h4
-rw-r--r--src/glsl/ast_function.cpp104
-rw-r--r--src/glsl/ast_to_hir.cpp194
-rw-r--r--src/glsl/builtin_function.cpp3318
-rw-r--r--src/glsl/builtin_types.h3
-rw-r--r--src/glsl/builtins/ir/acosh21
-rw-r--r--src/glsl/builtins/ir/asinh21
-rw-r--r--src/glsl/builtins/ir/atanh37
-rw-r--r--src/glsl/builtins/ir/cross8
-rw-r--r--src/glsl/builtins/ir/smoothstep121
-rw-r--r--src/glsl/builtins/profiles/130.frag2
-rw-r--r--src/glsl/builtins/profiles/130.vert2
-rwxr-xr-xsrc/glsl/builtins/tools/generate_builtins.py7
-rw-r--r--src/glsl/glcpp/glcpp-parse.c409
-rw-r--r--src/glsl/glcpp/glcpp-parse.h7
-rw-r--r--src/glsl/glcpp/glcpp-parse.y9
-rw-r--r--src/glsl/glsl_lexer.cpp1948
-rw-r--r--src/glsl/glsl_lexer.lpp283
-rw-r--r--src/glsl/glsl_parser.cpp2230
-rw-r--r--src/glsl/glsl_parser.h17
-rw-r--r--src/glsl/glsl_parser.ypp1
-rw-r--r--src/glsl/glsl_parser_extras.cpp3
-rw-r--r--src/glsl/glsl_symbol_table.cpp25
-rw-r--r--src/glsl/glsl_symbol_table.h9
-rw-r--r--src/glsl/glsl_types.cpp6
-rw-r--r--src/glsl/glsl_types.h33
-rw-r--r--src/glsl/ir.cpp402
-rw-r--r--src/glsl/ir.h97
-rw-r--r--src/glsl/ir_clone.cpp38
-rw-r--r--src/glsl/ir_constant_expression.cpp188
-rw-r--r--src/glsl/ir_div_to_mul_rcp.cpp115
-rw-r--r--src/glsl/ir_explog_to_explog2.cpp85
-rw-r--r--src/glsl/ir_function.cpp1
-rw-r--r--src/glsl/ir_function_can_inline.cpp2
-rw-r--r--src/glsl/ir_import_prototypes.cpp19
-rw-r--r--src/glsl/ir_mod_to_fract.cpp90
-rw-r--r--src/glsl/ir_optimization.h14
-rw-r--r--src/glsl/ir_print_visitor.cpp23
-rw-r--r--src/glsl/ir_reader.cpp4
-rw-r--r--src/glsl/ir_set_program_inouts.cpp35
-rw-r--r--src/glsl/ir_sub_to_add_neg.cpp76
-rw-r--r--src/glsl/ir_validate.cpp51
-rw-r--r--src/glsl/ir_variable.cpp2
-rw-r--r--src/glsl/link_functions.cpp2
-rw-r--r--src/glsl/linker.cpp109
-rw-r--r--src/glsl/loop_unroll.cpp125
-rw-r--r--src/glsl/lower_discard.cpp198
-rw-r--r--src/glsl/lower_if_to_cond_assign.cpp (renamed from src/glsl/ir_if_to_cond_assign.cpp)2
-rw-r--r--src/glsl/lower_instructions.cpp288
-rw-r--r--src/glsl/lower_jumps.cpp (renamed from src/glsl/ir_lower_jumps.cpp)52
-rw-r--r--src/glsl/lower_mat_op_to_vec.cpp (renamed from src/glsl/ir_mat_op_to_vec.cpp)4
-rw-r--r--src/glsl/lower_vec_index_to_cond_assign.cpp (renamed from src/glsl/ir_vec_index_to_cond_assign.cpp)2
-rw-r--r--src/glsl/lower_vec_index_to_swizzle.cpp (renamed from src/glsl/ir_vec_index_to_swizzle.cpp)2
-rw-r--r--src/glsl/lower_vector.cpp224
-rw-r--r--src/glsl/main.cpp49
-rw-r--r--src/glsl/opt_algebraic.cpp (renamed from src/glsl/ir_algebraic.cpp)81
-rw-r--r--src/glsl/opt_constant_folding.cpp (renamed from src/glsl/ir_constant_folding.cpp)2
-rw-r--r--src/glsl/opt_constant_propagation.cpp (renamed from src/glsl/ir_constant_propagation.cpp)2
-rw-r--r--src/glsl/opt_constant_variable.cpp (renamed from src/glsl/ir_constant_variable.cpp)2
-rw-r--r--src/glsl/opt_copy_propagation.cpp (renamed from src/glsl/ir_copy_propagation.cpp)2
-rw-r--r--src/glsl/opt_dead_code.cpp (renamed from src/glsl/ir_dead_code.cpp)2
-rw-r--r--src/glsl/opt_dead_code_local.cpp (renamed from src/glsl/ir_dead_code_local.cpp)2
-rw-r--r--src/glsl/opt_dead_functions.cpp (renamed from src/glsl/ir_dead_functions.cpp)2
-rw-r--r--src/glsl/opt_discard_simplification.cpp180
-rw-r--r--src/glsl/opt_function_inlining.cpp (renamed from src/glsl/ir_function_inlining.cpp)2
-rw-r--r--src/glsl/opt_if_simplification.cpp (renamed from src/glsl/ir_if_simplification.cpp)2
-rw-r--r--src/glsl/opt_noop_swizzle.cpp (renamed from src/glsl/ir_noop_swizzle.cpp)2
-rw-r--r--src/glsl/opt_structure_splitting.cpp (renamed from src/glsl/ir_structure_splitting.cpp)2
-rw-r--r--src/glsl/opt_swizzle_swizzle.cpp (renamed from src/glsl/ir_swizzle_swizzle.cpp)2
-rw-r--r--src/glsl/opt_tree_grafting.cpp (renamed from src/glsl/ir_tree_grafting.cpp)2
-rw-r--r--src/glsl/s_expression.cpp2
-rw-r--r--src/glsl/s_expression.h1
-rw-r--r--src/glsl/strtod.c56
-rw-r--r--src/glsl/strtod.h43
77 files changed, 5125 insertions, 6560 deletions
diff --git a/src/glsl/Makefile b/src/glsl/Makefile
index 4cfecb130f..86a577e0ae 100644
--- a/src/glsl/Makefile
+++ b/src/glsl/Makefile
@@ -16,6 +16,7 @@ GLCPP_SOURCES = \
glcpp/glcpp.c
C_SOURCES = \
+ strtod.c \
$(LIBGLCPP_SOURCES)
CXX_SOURCES = \
@@ -30,55 +31,55 @@ CXX_SOURCES = \
glsl_types.cpp \
glsl_symbol_table.cpp \
hir_field_selection.cpp \
- ir_algebraic.cpp \
ir_basic_block.cpp \
ir_clone.cpp \
ir_constant_expression.cpp \
- ir_constant_folding.cpp \
- ir_constant_propagation.cpp \
- ir_constant_variable.cpp \
- ir_copy_propagation.cpp \
ir.cpp \
- ir_dead_code.cpp \
- ir_dead_code_local.cpp \
- ir_dead_functions.cpp \
- ir_div_to_mul_rcp.cpp \
- ir_explog_to_explog2.cpp \
ir_expression_flattening.cpp \
ir_function_can_inline.cpp \
ir_function.cpp \
- ir_function_inlining.cpp \
ir_hierarchical_visitor.cpp \
ir_hv_accept.cpp \
- ir_if_simplification.cpp \
- ir_if_to_cond_assign.cpp \
ir_import_prototypes.cpp \
- ir_lower_jumps.cpp \
- ir_mat_op_to_vec.cpp \
- ir_mod_to_fract.cpp \
- ir_noop_swizzle.cpp \
ir_print_visitor.cpp \
ir_reader.cpp \
ir_rvalue_visitor.cpp \
ir_set_program_inouts.cpp \
- ir_structure_splitting.cpp \
- ir_sub_to_add_neg.cpp \
- ir_swizzle_swizzle.cpp \
- ir_tree_grafting.cpp \
ir_validate.cpp \
ir_variable.cpp \
ir_variable_refcount.cpp \
- ir_vec_index_to_cond_assign.cpp \
- ir_vec_index_to_swizzle.cpp \
linker.cpp \
link_functions.cpp \
loop_analysis.cpp \
loop_controls.cpp \
loop_unroll.cpp \
+ lower_discard.cpp \
+ lower_if_to_cond_assign.cpp \
+ lower_instructions.cpp \
+ lower_jumps.cpp \
+ lower_mat_op_to_vec.cpp \
lower_noise.cpp \
lower_texture_projection.cpp \
lower_variable_index_to_cond_assign.cpp \
+ lower_vec_index_to_cond_assign.cpp \
+ lower_vec_index_to_swizzle.cpp \
+ lower_vector.cpp \
+ opt_algebraic.cpp \
+ opt_constant_folding.cpp \
+ opt_constant_propagation.cpp \
+ opt_constant_variable.cpp \
+ opt_copy_propagation.cpp \
+ opt_dead_code.cpp \
+ opt_dead_code_local.cpp \
+ opt_dead_functions.cpp \
+ opt_discard_simplification.cpp \
+ opt_function_inlining.cpp \
+ opt_if_simplification.cpp \
+ opt_noop_swizzle.cpp \
opt_redundant_jumps.cpp \
+ opt_structure_splitting.cpp \
+ opt_swizzle_swizzle.cpp \
+ opt_tree_grafting.cpp \
s_expression.cpp
LIBS = \
diff --git a/src/glsl/Makefile.am b/src/glsl/Makefile.am
deleted file mode 100644
index 5f013c31e9..0000000000
--- a/src/glsl/Makefile.am
+++ /dev/null
@@ -1,81 +0,0 @@
-# Copyright © 2010 Intel Corporation
-# All Rights Reserved.
-#
-# Permission is hereby granted, free of charge, to any person obtaining a
-# copy of this software and associated documentation files (the "Software"),
-# to deal in the Software without restriction, including without limitation
-# on the rights to use, copy, modify, merge, publish, distribute, sub
-# license, and/or sell copies of the Software, and to permit persons to whom
-# the Software is furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice (including the next
-# paragraph) shall be included in all copies or substantial portions of the
-# Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
-# AUTHORS, COPYRIGHT HOLDERS, AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM,
-# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
-# USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-AUTOMAKE_OPTIONS = foreign
-AM_CPPFLAGS = -I mesa
-
-SUBDIRS = glcpp
-
-bin_PROGRAMS = glsl
-
-glsl_LDADD = ./glcpp/libglcpp.la
-glsl_LDFLAGS = @LDFLAGS@ $(talloc_LIBS)
-glsl_SOURCES = \
- main.cpp \
- builtin_types.h \
- glsl_types.cpp \
- glsl_parser.ypp glsl_lexer.lpp glsl_parser_extras.cpp \
- ast_expr.cpp ast_to_hir.cpp ast_function.cpp ast_type.cpp \
- ir.cpp hir_field_selection.cpp builtin_function.cpp \
- ir_print_visitor.cpp ir_variable.cpp ir_function.cpp \
- ir_basic_block.cpp \
- ir_basic_block.h \
- ir_clone.cpp \
- ir_constant_expression.cpp \
- ir_constant_folding.cpp \
- ir_constant_variable.cpp \
- ir_copy_propagation.cpp \
- ir_copy_propagation.h \
- ir_dead_code.cpp \
- ir_dead_code.h \
- ir_dead_code_local.cpp \
- ir_expression_flattening.cpp \
- ir_function_can_inline.cpp \
- ir_function_inlining.cpp \
- ir_if_simplification.cpp \
- ir_optimization.h \
- ir_reader.cpp s_expression.cpp \
- ir_hv_accept.cpp \
- ir_hierarchical_visitor.h \
- ir_hierarchical_visitor.cpp \
- ir_swizzle_swizzle.cpp \
- ir_to_mesa.cpp \
- ir_to_mesa.h \
- ir_validate.cpp \
- ir_vec_index_to_swizzle.cpp \
- linker.cpp \
- loop_analysis.cpp \
- loop_controls.cpp \
- loop_unroll.cpp \
- lower_noise.cpp \
- lower_variable_index_to_cond_assign.cpp \
- opt_redundant_jumps.cpp
-
-BUILT_SOURCES = glsl_parser.h glsl_parser.cpp glsl_lexer.cpp
-CLEANFILES = $(BUILT_SOURCES)
-
-builtin_function.cpp: builtins/*/*
- ./builtins/tools/generate_builtins.pl > builtin_function.cpp
-glsl_parser.h: glsl_parser.cpp
-
-.lpp.cpp:
- $(LEXCOMPILE) --outfile="$@" $<
diff --git a/src/glsl/SConscript b/src/glsl/SConscript
index c183e208d6..f179721d52 100644
--- a/src/glsl/SConscript
+++ b/src/glsl/SConscript
@@ -27,55 +27,56 @@ sources = [
'glsl_types.cpp',
'glsl_symbol_table.cpp',
'hir_field_selection.cpp',
- 'ir_algebraic.cpp',
'ir_basic_block.cpp',
'ir_clone.cpp',
'ir_constant_expression.cpp',
- 'ir_constant_folding.cpp',
- 'ir_constant_propagation.cpp',
- 'ir_constant_variable.cpp',
- 'ir_copy_propagation.cpp',
'ir.cpp',
- 'ir_dead_code.cpp',
- 'ir_dead_code_local.cpp',
- 'ir_dead_functions.cpp',
- 'ir_div_to_mul_rcp.cpp',
- 'ir_explog_to_explog2.cpp',
'ir_expression_flattening.cpp',
'ir_function_can_inline.cpp',
'ir_function.cpp',
- 'ir_function_inlining.cpp',
'ir_hierarchical_visitor.cpp',
'ir_hv_accept.cpp',
- 'ir_if_simplification.cpp',
- 'ir_if_to_cond_assign.cpp',
'ir_import_prototypes.cpp',
- 'ir_lower_jumps.cpp',
- 'ir_mat_op_to_vec.cpp',
- 'ir_mod_to_fract.cpp',
- 'ir_noop_swizzle.cpp',
'ir_print_visitor.cpp',
'ir_reader.cpp',
'ir_rvalue_visitor.cpp',
'ir_set_program_inouts.cpp',
- 'ir_structure_splitting.cpp',
- 'ir_sub_to_add_neg.cpp',
- 'ir_swizzle_swizzle.cpp',
- 'ir_tree_grafting.cpp',
'ir_validate.cpp',
'ir_variable.cpp',
'ir_variable_refcount.cpp',
- 'ir_vec_index_to_cond_assign.cpp',
- 'ir_vec_index_to_swizzle.cpp',
'linker.cpp',
'link_functions.cpp',
'loop_analysis.cpp',
'loop_controls.cpp',
'loop_unroll.cpp',
+ 'lower_discard.cpp',
+ 'lower_if_to_cond_assign.cpp',
+ 'lower_instructions.cpp',
+ 'lower_jumps.cpp',
+ 'lower_mat_op_to_vec.cpp',
'lower_noise.cpp',
'lower_variable_index_to_cond_assign.cpp',
+ 'lower_vec_index_to_cond_assign.cpp',
+ 'lower_vec_index_to_swizzle.cpp',
+ 'lower_vector.cpp',
+ 'opt_algebraic.cpp',
+ 'opt_constant_folding.cpp',
+ 'opt_constant_propagation.cpp',
+ 'opt_constant_variable.cpp',
+ 'opt_copy_propagation.cpp',
+ 'opt_dead_code.cpp',
+ 'opt_dead_code_local.cpp',
+ 'opt_dead_functions.cpp',
+ 'opt_discard_simplification.cpp',
+ 'opt_function_inlining.cpp',
+ 'opt_if_simplification.cpp',
+ 'opt_noop_swizzle.cpp',
'opt_redundant_jumps.cpp',
+ 'opt_structure_splitting.cpp',
+ 'opt_swizzle_swizzle.cpp',
+ 'opt_tree_grafting.cpp',
's_expression.cpp',
+ 'strtod.c',
]
glsl = env.ConvenienceLibrary(
diff --git a/src/glsl/ast.h b/src/glsl/ast.h
index e5aa5c1b3b..a77b522705 100644
--- a/src/glsl/ast.h
+++ b/src/glsl/ast.h
@@ -714,4 +714,8 @@ _mesa_ast_field_selection_to_hir(const ast_expression *expr,
exec_list *instructions,
struct _mesa_glsl_parse_state *state);
+void
+emit_function(_mesa_glsl_parse_state *state, exec_list *instructions,
+ ir_function *f);
+
#endif /* AST_H */
diff --git a/src/glsl/ast_function.cpp b/src/glsl/ast_function.cpp
index e9e8d25001..6ecf779c93 100644
--- a/src/glsl/ast_function.cpp
+++ b/src/glsl/ast_function.cpp
@@ -93,13 +93,40 @@ prototype_string(const glsl_type *return_type, const char *name,
static ir_rvalue *
-process_call(exec_list *instructions, ir_function *f,
- YYLTYPE *loc, exec_list *actual_parameters,
- struct _mesa_glsl_parse_state *state)
+match_function_by_name(exec_list *instructions, const char *name,
+ YYLTYPE *loc, exec_list *actual_parameters,
+ struct _mesa_glsl_parse_state *state)
{
void *ctx = state;
+ ir_function *f = state->symbols->get_function(name);
+ ir_function_signature *sig;
+
+ sig = f ? f->matching_signature(actual_parameters) : NULL;
+
+ /* FINISHME: This doesn't handle the case where shader X contains a
+ * FINISHME: matching signature but shader X + N contains an _exact_
+ * FINISHME: matching signature.
+ */
+ if (sig == NULL && (f == NULL || state->es_shader || !f->has_user_signature()) && state->symbols->get_type(name) == NULL && (state->language_version == 110 || state->symbols->get_variable(name) == NULL)) {
+ /* The current shader doesn't contain a matching function or signature.
+ * Before giving up, look for the prototype in the built-in functions.
+ */
+ for (unsigned i = 0; i < state->num_builtins_to_link; i++) {
+ ir_function *builtin;
+ builtin = state->builtins_to_link[i]->symbols->get_function(name);
+ sig = builtin ? builtin->matching_signature(actual_parameters) : NULL;
+ if (sig != NULL) {
+ if (f == NULL) {
+ f = new(ctx) ir_function(name);
+ state->symbols->add_global_function(f);
+ emit_function(state, instructions, f);
+ }
- ir_function_signature *sig = f->matching_signature(actual_parameters);
+ f->add_signature(sig->clone_prototype(f, NULL));
+ break;
+ }
+ }
+ }
if (sig != NULL) {
/* Verify that 'out' and 'inout' actual parameters are lvalues. This
@@ -164,45 +191,35 @@ process_call(exec_list *instructions, ir_function *f,
return NULL;
}
} else {
- char *str = prototype_string(NULL, f->name, actual_parameters);
+ char *str = prototype_string(NULL, name, actual_parameters);
_mesa_glsl_error(loc, state, "no matching function for call to `%s'",
str);
talloc_free(str);
const char *prefix = "candidates are: ";
- foreach_list (node, &f->signatures) {
- ir_function_signature *sig = (ir_function_signature *) node;
- str = prototype_string(sig->return_type, f->name, &sig->parameters);
- _mesa_glsl_error(loc, state, "%s%s\n", prefix, str);
- talloc_free(str);
+ for (int i = -1; i < state->num_builtins_to_link; i++) {
+ glsl_symbol_table *syms = i >= 0 ? state->builtins_to_link[i]->symbols
+ : state->symbols;
+ f = syms->get_function(name);
+ if (f == NULL)
+ continue;
- prefix = " ";
- }
+ foreach_list (node, &f->signatures) {
+ ir_function_signature *sig = (ir_function_signature *) node;
- return ir_call::get_error_instruction(ctx);
- }
-}
+ str = prototype_string(sig->return_type, f->name, &sig->parameters);
+ _mesa_glsl_error(loc, state, "%s%s\n", prefix, str);
+ talloc_free(str);
+ prefix = " ";
+ }
-static ir_rvalue *
-match_function_by_name(exec_list *instructions, const char *name,
- YYLTYPE *loc, exec_list *actual_parameters,
- struct _mesa_glsl_parse_state *state)
-{
- void *ctx = state;
- ir_function *f = state->symbols->get_function(name);
+ }
- if (f == NULL) {
- _mesa_glsl_error(loc, state, "function `%s' undeclared", name);
return ir_call::get_error_instruction(ctx);
}
-
- /* Once we've determined that the function being called might exist, try
- * to find an overload of the function that matches the parameters.
- */
- return process_call(instructions, f, loc, actual_parameters, state);
}
@@ -577,18 +594,17 @@ emit_inline_vector_constructor(const glsl_type *type,
const ir_constant *const c = param->as_constant();
if (c == NULL) {
- /* Generate a swizzle in case rhs_components != rhs->type->vector_elements. */
- unsigned swiz[4] = { 0, 0, 0, 0 };
- for (unsigned i = 0; i < rhs_components; i++)
- swiz[i] = i;
-
/* Mask of fields to be written in the assignment.
*/
const unsigned write_mask = ((1U << rhs_components) - 1)
<< base_component;
ir_dereference *lhs = new(ctx) ir_dereference_variable(var);
- ir_rvalue *rhs = new(ctx) ir_swizzle(param, swiz, rhs_components);
+
+ /* Generate a swizzle so that LHS and RHS sizes match.
+ */
+ ir_rvalue *rhs =
+ new(ctx) ir_swizzle(param, 0, 1, 2, 3, rhs_components);
ir_instruction *inst =
new(ctx) ir_assignment(lhs, rhs, NULL, write_mask);
@@ -628,21 +644,21 @@ assign_to_matrix_column(ir_variable *var, unsigned column, unsigned row_base,
assert(column_ref->type->components() >= (row_base + count));
assert(src->type->components() >= (src_base + count));
- /* Generate a swizzle that puts the first element of the source at the
- * location of the first element of the destination.
+ /* Generate a swizzle that extracts the number of components from the source
+ * that are to be assigned to the column of the matrix.
*/
- unsigned swiz[4] = { src_base, src_base, src_base, src_base };
- for (unsigned i = 0; i < count; i++)
- swiz[i + row_base] = i;
-
- ir_rvalue *const rhs =
- new(mem_ctx) ir_swizzle(src, swiz, count);
+ if (count < src->type->vector_elements) {
+ src = new(mem_ctx) ir_swizzle(src,
+ src_base + 0, src_base + 1,
+ src_base + 2, src_base + 3,
+ count);
+ }
/* Mask of fields to be written in the assignment.
*/
const unsigned write_mask = ((1U << count) - 1) << row_base;
- return new(mem_ctx) ir_assignment(column_ref, rhs, NULL, write_mask);
+ return new(mem_ctx) ir_assignment(column_ref, src, NULL, write_mask);
}
diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 4540e98e69..741cd19e9d 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -598,17 +598,15 @@ ir_rvalue *
validate_assignment(struct _mesa_glsl_parse_state *state,
const glsl_type *lhs_type, ir_rvalue *rhs)
{
- const glsl_type *rhs_type = rhs->type;
-
/* If there is already some error in the RHS, just return it. Anything
* else will lead to an avalanche of error message back to the user.
*/
- if (rhs_type->is_error())
+ if (rhs->type->is_error())
return rhs;
/* If the types are identical, the assignment can trivially proceed.
*/
- if (rhs_type == lhs_type)
+ if (rhs->type == lhs_type)
return rhs;
/* If the array element types are the same and the size of the LHS is zero,
@@ -625,8 +623,7 @@ validate_assignment(struct _mesa_glsl_parse_state *state,
/* Check for implicit conversion in GLSL 1.20 */
if (apply_implicit_conversion(lhs_type, rhs, state)) {
- rhs_type = rhs->type;
- if (rhs_type == lhs_type)
+ if (rhs->type == lhs_type)
return rhs;
}
@@ -745,6 +742,94 @@ ast_node::hir(exec_list *instructions,
return NULL;
}
+static void
+mark_whole_array_access(ir_rvalue *access)
+{
+ ir_dereference_variable *deref = access->as_dereference_variable();
+
+ if (deref) {
+ deref->var->max_array_access = deref->type->length - 1;
+ }
+}
+
+static ir_rvalue *
+do_comparison(void *mem_ctx, int operation, ir_rvalue *op0, ir_rvalue *op1)
+{
+ int join_op;
+ ir_rvalue *cmp = NULL;
+
+ if (operation == ir_binop_all_equal)
+ join_op = ir_binop_logic_and;
+ else
+ join_op = ir_binop_logic_or;
+
+ switch (op0->type->base_type) {
+ case GLSL_TYPE_FLOAT:
+ case GLSL_TYPE_UINT:
+ case GLSL_TYPE_INT:
+ case GLSL_TYPE_BOOL:
+ return new(mem_ctx) ir_expression(operation, op0, op1);
+
+ case GLSL_TYPE_ARRAY: {
+ for (unsigned int i = 0; i < op0->type->length; i++) {
+ ir_rvalue *e0, *e1, *result;
+
+ e0 = new(mem_ctx) ir_dereference_array(op0->clone(mem_ctx, NULL),
+ new(mem_ctx) ir_constant(i));
+ e1 = new(mem_ctx) ir_dereference_array(op1->clone(mem_ctx, NULL),
+ new(mem_ctx) ir_constant(i));
+ result = do_comparison(mem_ctx, operation, e0, e1);
+
+ if (cmp) {
+ cmp = new(mem_ctx) ir_expression(join_op, cmp, result);
+ } else {
+ cmp = result;
+ }
+ }
+
+ mark_whole_array_access(op0);
+ mark_whole_array_access(op1);
+ break;
+ }
+
+ case GLSL_TYPE_STRUCT: {
+ for (unsigned int i = 0; i < op0->type->length; i++) {
+ ir_rvalue *e0, *e1, *result;
+ const char *field_name = op0->type->fields.structure[i].name;
+
+ e0 = new(mem_ctx) ir_dereference_record(op0->clone(mem_ctx, NULL),
+ field_name);
+ e1 = new(mem_ctx) ir_dereference_record(op1->clone(mem_ctx, NULL),
+ field_name);
+ result = do_comparison(mem_ctx, operation, e0, e1);
+
+ if (cmp) {
+ cmp = new(mem_ctx) ir_expression(join_op, cmp, result);
+ } else {
+ cmp = result;
+ }
+ }
+ break;
+ }
+
+ case GLSL_TYPE_ERROR:
+ case GLSL_TYPE_VOID:
+ case GLSL_TYPE_SAMPLER:
+ /* I assume a comparison of a struct containing a sampler just
+ * ignores the sampler present in the type.
+ */
+ break;
+
+ default:
+ assert(!"Should not get here.");
+ break;
+ }
+
+ if (cmp == NULL)
+ cmp = new(mem_ctx) ir_constant(true);
+
+ return cmp;
+}
ir_rvalue *
ast_expression::hir(exec_list *instructions,
@@ -941,11 +1026,10 @@ ast_expression::hir(exec_list *instructions,
error_emitted = true;
}
- result = new(ctx) ir_expression(operations[this->oper], glsl_type::bool_type,
- op[0], op[1]);
+ result = do_comparison(ctx, operations[this->oper], op[0], op[1]);
type = glsl_type::bool_type;
- assert(result->type == glsl_type::bool_type);
+ assert(error_emitted || (result->type == glsl_type::bool_type));
break;
case ast_bit_and:
@@ -1480,6 +1564,20 @@ ast_expression::hir(exec_list *instructions,
}
}
+ /* From section 4.1.7 of the GLSL 1.30 spec:
+ * "Samplers aggregated into arrays within a shader (using square
+ * brackets [ ]) can only be indexed with integral constant
+ * expressions [...]."
+ */
+ if (array->type->is_array() &&
+ array->type->element_type()->is_sampler() &&
+ const_index == NULL) {
+
+ _mesa_glsl_error(&loc, state, "sampler arrays can only be indexed "
+ "with constant expressions");
+ error_emitted = true;
+ }
+
if (error_emitted)
result->type = glsl_type::error_type;
@@ -2143,10 +2241,37 @@ ast_declarator_list::hir(exec_list *instructions,
/* Never emit code to initialize a uniform.
*/
- if (!this->type->qualifier.flags.q.uniform)
+ const glsl_type *initializer_type;
+ if (!this->type->qualifier.flags.q.uniform) {
result = do_assignment(&initializer_instructions, state,
lhs, rhs,
this->get_location());
+ initializer_type = result->type;
+ } else
+ initializer_type = rhs->type;
+
+ /* If the declared variable is an unsized array, it must inherrit
+ * its full type from the initializer. A declaration such as
+ *
+ * uniform float a[] = float[](1.0, 2.0, 3.0, 3.0);
+ *
+ * becomes
+ *
+ * uniform float a[4] = float[](1.0, 2.0, 3.0, 3.0);
+ *
+ * The assignment generated in the if-statement (below) will also
+ * automatically handle this case for non-uniforms.
+ *
+ * If the declared variable is not an array, the types must
+ * already match exactly. As a result, the type assignment
+ * here can be done unconditionally. For non-uniforms the call
+ * to do_assignment can change the type of the initializer (via
+ * the implicit conversion rules). For uniforms the initializer
+ * must be a constant expression, and the type of that expression
+ * was validated above.
+ */
+ var->type = initializer_type;
+
var->read_only = temp;
}
}
@@ -2253,7 +2378,7 @@ ast_declarator_list::hir(exec_list *instructions,
* after the initializer if present or immediately after the name
* being declared if not."
*/
- if (!state->symbols->add_variable(var->name, var)) {
+ if (!state->symbols->add_variable(var)) {
YYLTYPE loc = this->get_location();
_mesa_glsl_error(&loc, state, "name `%s' already taken in the "
"current scope", decl->identifier);
@@ -2393,6 +2518,27 @@ ast_parameter_declarator::parameters_to_hir(exec_list *ast_parameters,
}
+void
+emit_function(_mesa_glsl_parse_state *state, exec_list *instructions,
+ ir_function *f)
+{
+ /* Emit the new function header */
+ if (state->current_function == NULL) {
+ instructions->push_tail(f);
+ } else {
+ /* IR invariants disallow function declarations or definitions nested
+ * within other function definitions. Insert the new ir_function
+ * block in the instruction sequence before the ir_function block
+ * containing the current ir_function_signature.
+ */
+ ir_function *const curr =
+ const_cast<ir_function *>(state->current_function->function());
+
+ curr->insert_before(f);
+ }
+}
+
+
ir_rvalue *
ast_function::hir(exec_list *instructions,
struct _mesa_glsl_parse_state *state)
@@ -2495,7 +2641,7 @@ ast_function::hir(exec_list *instructions,
}
} else {
f = new(ctx) ir_function(name);
- if (!state->symbols->add_function(f->name, f)) {
+ if (!state->symbols->add_function(f)) {
/* This function name shadows a non-function use of the same name. */
YYLTYPE loc = this->get_location();
@@ -2504,24 +2650,7 @@ ast_function::hir(exec_list *instructions,
return NULL;
}
- /* Emit the new function header */
- if (state->current_function == NULL)
- instructions->push_tail(f);
- else {
- /* IR invariants disallow function declarations or definitions nested
- * within other function definitions. Insert the new ir_function
- * block in the instruction sequence before the ir_function block
- * containing the current ir_function_signature.
- *
- * This can only happen in a GLSL 1.10 shader. In all other GLSL
- * versions this nesting is disallowed. There is a check for this at
- * the top of this function.
- */
- ir_function *const curr =
- const_cast<ir_function *>(state->current_function->function());
-
- curr->insert_before(f);
- }
+ emit_function(state, instructions, f);
}
/* Verify the return type of main() */
@@ -2587,7 +2716,7 @@ ast_function_definition::hir(exec_list *instructions,
_mesa_glsl_error(& loc, state, "parameter `%s' redeclared", var->name);
} else {
- state->symbols->add_variable(var->name, var);
+ state->symbols->add_variable(var);
}
}
@@ -2636,8 +2765,7 @@ ast_jump_statement::hir(exec_list *instructions,
state->current_function->function_name());
}
- ir_expression *const ret = (ir_expression *)
- opt_return_value->hir(instructions, state);
+ ir_rvalue *const ret = opt_return_value->hir(instructions, state);
assert(ret != NULL);
/* Implicit conversions are not allowed for return values. */
diff --git a/src/glsl/builtin_function.cpp b/src/glsl/builtin_function.cpp
index 942f2335eb..1c6d59d5a2 100644
--- a/src/glsl/builtin_function.cpp
+++ b/src/glsl/builtin_function.cpp
@@ -123,6 +123,30 @@ static const char builtin_acos[] =
"))\n"
""
;
+static const char builtin_acosh[] =
+ "((function acosh\n"
+ " (signature float\n"
+ " (parameters\n"
+ " (declare (in) float x))\n"
+ " ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float - (expression float * (var_ref x) (var_ref x)) (constant float (1)))))))))\n"
+ "\n"
+ " (signature vec2\n"
+ " (parameters\n"
+ " (declare (in) vec2 x))\n"
+ " ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 - (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))\n"
+ "\n"
+ " (signature vec3\n"
+ " (parameters\n"
+ " (declare (in) vec3 x))\n"
+ " ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 - (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))\n"
+ "\n"
+ " (signature vec4\n"
+ " (parameters\n"
+ " (declare (in) vec4 x))\n"
+ " ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 - (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))\n"
+ "))\n"
+ ""
+;
static const char builtin_all[] =
"((function all\n"
" (signature bool\n"
@@ -261,6 +285,30 @@ static const char builtin_asin[] =
"))\n"
""
;
+static const char builtin_asinh[] =
+ "((function asinh\n"
+ " (signature float\n"
+ " (parameters\n"
+ " (declare (in) float x))\n"
+ " ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float + (expression float * (var_ref x) (var_ref x)) (constant float (1)))))))))\n"
+ "\n"
+ " (signature vec2\n"
+ " (parameters\n"
+ " (declare (in) vec2 x))\n"
+ " ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 + (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))\n"
+ "\n"
+ " (signature vec3\n"
+ " (parameters\n"
+ " (declare (in) vec3 x))\n"
+ " ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 + (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))\n"
+ "\n"
+ " (signature vec4\n"
+ " (parameters\n"
+ " (declare (in) vec4 x))\n"
+ " ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 + (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))\n"
+ "))\n"
+ ""
+;
static const char builtin_atan[] =
"((function atan\n"
" (signature float\n"
@@ -390,6 +438,46 @@ static const char builtin_atan[] =
"))\n"
""
;
+static const char builtin_atanh[] =
+ "((function atanh\n"
+ " (signature float\n"
+ " (parameters\n"
+ " (declare (in) float x))\n"
+ " ((return (expression float * (constant float (0.5))\n"
+ " (expression float log\n"
+ " (expression float /\n"
+ " (expression float + (constant float (1)) (var_ref x))\n"
+ " (expression float - (constant float (1)) (var_ref x))))))))\n"
+ "\n"
+ " (signature vec2\n"
+ " (parameters\n"
+ " (declare (in) vec2 x))\n"
+ " ((return (expression vec2 * (constant vec2 (0.5))\n"
+ " (expression vec2 log\n"
+ " (expression vec2 /\n"
+ " (expression vec2 + (constant vec2 (1)) (var_ref x))\n"
+ " (expression vec2 - (constant vec2 (1)) (var_ref x))))))))\n"
+ "\n"
+ " (signature vec3\n"
+ " (parameters\n"
+ " (declare (in) vec3 x))\n"
+ " ((return (expression vec3 * (constant vec3 (0.5))\n"
+ " (expression vec3 log\n"
+ " (expression vec3 /\n"
+ " (expression vec3 + (constant vec3 (1)) (var_ref x))\n"
+ " (expression vec3 - (constant vec3 (1)) (var_ref x))))))))\n"
+ "\n"
+ " (signature vec4\n"
+ " (parameters\n"
+ " (declare (in) vec4 x))\n"
+ " ((return (expression vec4 * (constant vec4 (0.5))\n"
+ " (expression vec4 log\n"
+ " (expression vec4 /\n"
+ " (expression vec4 + (constant vec4 (1)) (var_ref x))\n"
+ " (expression vec4 - (constant vec4 (1)) (var_ref x))))))))\n"
+ "))\n"
+ ""
+;
static const char builtin_ceil[] =
"((function ceil\n"
" (signature float\n"
@@ -626,9 +714,11 @@ static const char builtin_cross[] =
"((function cross\n"
" (signature vec3\n"
" (parameters\n"
- " (declare (in) vec3 arg0)\n"
- " (declare (in) vec3 arg1))\n"
- " ((return (expression vec3 cross (var_ref arg0) (var_ref arg1)))))\n"
+ " (declare (in) vec3 a)\n"
+ " (declare (in) vec3 b))\n"
+ " ((return (expression vec3 -\n"
+ " (expression vec3 * (swiz yzx (var_ref a)) (swiz zxy (var_ref b)))\n"
+ " (expression vec3 * (swiz zxy (var_ref a)) (swiz yzx (var_ref b)))))))\n"
"))\n"
""
;
@@ -2920,40 +3010,26 @@ static const char builtin_smoothstep[] =
" (declare (in) float edge1)\n"
" (declare (in) float x))\n"
" ((declare () float t)\n"
- "\n"
" (assign (constant bool (1)) (x) (var_ref t)\n"
" (expression float max\n"
" (expression float min\n"
" (expression float / (expression float - (var_ref x) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
" (constant float (1.0)))\n"
" (constant float (0.0))))\n"
- " (return (expression float * (var_ref t) (expression float * (var_ref t) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (var_ref t))))))))\n"
- "\n"
+ " (return (expression float * (var_ref t) (expression float * (var_ref t) (expression float - (constant float (3.0)) (expression float * (constant float (2.0)) (var_ref t))))))))\n"
" (signature vec2\n"
" (parameters\n"
" (declare (in) float edge0)\n"
" (declare (in) float edge1)\n"
" (declare (in) vec2 x))\n"
" ((declare () vec2 t)\n"
- " (declare () vec2 retval)\n"
- "\n"
- " (assign (constant bool (1)) (x) (var_ref t)\n"
- " (expression float max\n"
- " (expression float min\n"
- " (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
- " (constant float (1.0)))\n"
- " (constant float (0.0))))\n"
- " (assign (constant bool (1)) (x) (var_ref retval) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))\n"
- "\n"
- " (assign (constant bool (1)) (y) (var_ref t)\n"
- " (expression float max\n"
- " (expression float min\n"
- " (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
+ " (assign (constant bool (1)) (xy) (var_ref t)\n"
+ " (expression vec2 max\n"
+ " (expression vec2 min\n"
+ " (expression vec2 / (expression vec2 - (var_ref x) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
" (constant float (1.0)))\n"
" (constant float (0.0))))\n"
- " (assign (constant bool (1)) (y) (var_ref retval) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))\n"
- " (return (var_ref retval))\n"
- " ))\n"
+ " (return (expression vec2 * (var_ref t) (expression vec2 * (var_ref t) (expression vec2 - (constant float (3.0)) (expression vec2 * (constant float (2.0)) (var_ref t))))))))\n"
"\n"
" (signature vec3\n"
" (parameters\n"
@@ -2961,33 +3037,13 @@ static const char builtin_smoothstep[] =
" (declare (in) float edge1)\n"
" (declare (in) vec3 x))\n"
" ((declare () vec3 t)\n"
- " (declare () vec3 retval)\n"
- "\n"
- " (assign (constant bool (1)) (x) (var_ref t)\n"
- " (expression float max\n"
- " (expression float min\n"
- " (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
- " (constant float (1.0)))\n"
- " (constant float (0.0))))\n"
- " (assign (constant bool (1)) (x) (var_ref retval) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))\n"
- "\n"
- " (assign (constant bool (1)) (y) (var_ref t)\n"
- " (expression float max\n"
- " (expression float min\n"
- " (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
- " (constant float (1.0)))\n"
- " (constant float (0.0))))\n"
- " (assign (constant bool (1)) (y) (var_ref retval) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))\n"
- "\n"
- " (assign (constant bool (1)) (z) (var_ref t)\n"
- " (expression float max\n"
- " (expression float min\n"
- " (expression float / (expression float - (swiz z (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
+ " (assign (constant bool (1)) (xyz) (var_ref t)\n"
+ " (expression vec3 max\n"
+ " (expression vec3 min\n"
+ " (expression vec3 / (expression vec3 - (var_ref x) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
" (constant float (1.0)))\n"
" (constant float (0.0))))\n"
- " (assign (constant bool (1)) (z) (var_ref retval) (expression float * (swiz z (var_ref t)) (expression float * (swiz z (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz z (var_ref t)))))))\n"
- " (return (var_ref retval))\n"
- " ))\n"
+ " (return (expression vec3 * (var_ref t) (expression vec3 * (var_ref t) (expression vec3 - (constant float (3.0)) (expression vec3 * (constant float (2.0)) (var_ref t))))))))\n"
"\n"
"\n"
" (signature vec4\n"
@@ -2996,74 +3052,55 @@ static const char builtin_smoothstep[] =
" (declare (in) float edge1)\n"
" (declare (in) vec4 x))\n"
" ((declare () vec4 t)\n"
- " (declare () vec4 retval)\n"
- "\n"
- " (assign (constant bool (1)) (x) (var_ref t)\n"
- " (expression float max\n"
- " (expression float min\n"
- " (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
- " (constant float (1.0)))\n"
- " (constant float (0.0))))\n"
- " (assign (constant bool (1)) (x) (var_ref retval) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))\n"
- "\n"
- " (assign (constant bool (1)) (y) (var_ref t)\n"
- " (expression float max\n"
- " (expression float min\n"
- " (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
- " (constant float (1.0)))\n"
- " (constant float (0.0))))\n"
- " (assign (constant bool (1)) (y) (var_ref retval) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))\n"
- "\n"
- " (assign (constant bool (1)) (z) (var_ref t)\n"
- " (expression float max\n"
- " (expression float min\n"
- " (expression float / (expression float - (swiz z (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
- " (constant float (1.0)))\n"
- " (constant float (0.0))))\n"
- " (assign (constant bool (1)) (z) (var_ref retval) (expression float * (swiz z (var_ref t)) (expression float * (swiz z (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz z (var_ref t)))))))\n"
- "\n"
- " (assign (constant bool (1)) (w) (var_ref t)\n"
- " (expression float max\n"
- " (expression float min\n"
- " (expression float / (expression float - (swiz w (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
+ " (assign (constant bool (1)) (xyzw) (var_ref t)\n"
+ " (expression vec4 max\n"
+ " (expression vec4 min\n"
+ " (expression vec4 / (expression vec4 - (var_ref x) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))\n"
" (constant float (1.0)))\n"
" (constant float (0.0))))\n"
- " (assign (constant bool (1)) (w) (var_ref retval) (expression float * (swiz w (var_ref t)) (expression float * (swiz w (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz w (var_ref t)))))))\n"
- " (return (var_ref retval))\n"
- " ))\n"
+ " (return (expression vec4 * (var_ref t) (expression vec4 * (var_ref t) (expression vec4 - (constant float (3.0)) (expression vec4 * (constant float (2.0)) (var_ref t))))))))\n"
"\n"
" (signature vec2\n"
" (parameters\n"
" (declare (in) vec2 edge0)\n"
" (declare (in) vec2 edge1)\n"
" (declare (in) vec2 x))\n"
- " ((return (expression vec2 max\n"
+ " ((declare () vec2 t)\n"
+ " (assign (constant bool (1)) (xy) (var_ref t)\n"
+ " (expression vec2 max\n"
" (expression vec2 min\n"
" (expression vec2 / (expression vec2 - (var_ref x) (var_ref edge0)) (expression vec2 - (var_ref edge1) (var_ref edge0)))\n"
- " (constant vec2 (1.0 1.0)))\n"
- " (constant vec2 (0.0 0.0))))))\n"
+ " (constant float (1.0)))\n"
+ " (constant float (0.0))))\n"
+ " (return (expression vec2 * (var_ref t) (expression vec2 * (var_ref t) (expression vec2 - (constant float (3.0)) (expression vec2 * (constant float (2.0)) (var_ref t))))))))\n"
"\n"
" (signature vec3\n"
" (parameters\n"
" (declare (in) vec3 edge0)\n"
" (declare (in) vec3 edge1)\n"
" (declare (in) vec3 x))\n"
- " ((return (expression vec3 max\n"
+ " ((declare () vec3 t)\n"
+ " (assign (constant bool (1)) (xyz) (var_ref t)\n"
+ " (expression vec3 max\n"
" (expression vec3 min\n"
" (expression vec3 / (expression vec3 - (var_ref x) (var_ref edge0)) (expression vec3 - (var_ref edge1) (var_ref edge0)))\n"
- " (constant vec3 (1.0 1.0 1.0)))\n"
- " (constant vec3 (0.0 0.0 0.0))))))\n"
+ " (constant float (1.0)))\n"
+ " (constant float (0.0))))\n"
+ " (return (expression vec3 * (var_ref t) (expression vec3 * (var_ref t) (expression vec3 - (constant float (3.0)) (expression vec3 * (constant float (2.0)) (var_ref t))))))))\n"
"\n"
" (signature vec4\n"
" (parameters\n"
" (declare (in) vec4 edge0)\n"
" (declare (in) vec4 edge1)\n"
" (declare (in) vec4 x))\n"
- " ((return (expression vec4 max\n"
+ " ((declare () vec4 t)\n"
+ " (assign (constant bool (1)) (xyzw) (var_ref t)\n"
+ " (expression vec4 max\n"
" (expression vec4 min\n"
" (expression vec4 / (expression vec4 - (var_ref x) (var_ref edge0)) (expression vec4 - (var_ref edge1) (var_ref edge0)))\n"
- " (constant vec4 (1.0 1.0 1.0 1.0)))\n"
- " (constant vec4 (0.0 0.0 0.0 0.0))))))\n"
+ " (constant float (1.0)))\n"
+ " (constant float (0.0))))\n"
+ " (return (expression vec4 * (var_ref t) (expression vec4 * (var_ref t) (expression vec4 - (constant float (3.0)) (expression vec4 * (constant float (2.0)) (var_ref t))))))))\n"
"))\n"
"\n"
""
@@ -12925,6 +12962,9 @@ static const char prototypes_for_130_frag[] =
'(','f','u','n','c','t','i','o','n',' ','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
'(','f','u','n','c','t','i','o','n',' ','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
'(','f','u','n','c','t','i','o','n',' ','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
'(','f','u','n','c','t','i','o','n',' ','p','o','w',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
'(','f','u','n','c','t','i','o','n',' ','e','x','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
'(','f','u','n','c','t','i','o','n',' ','l','o','g',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
@@ -13007,10 +13047,13 @@ static const char prototypes_for_130_frag[] =
static const char *functions_for_130_frag [] = {
builtin_abs,
builtin_acos,
+ builtin_acosh,
builtin_all,
builtin_any,
builtin_asin,
+ builtin_asinh,
builtin_atan,
+ builtin_atanh,
builtin_ceil,
builtin_clamp,
builtin_cos,
@@ -13097,3012 +13140,108 @@ static const char *functions_for_130_frag [] = {
builtin_trunc,
};
static const char prototypes_for_130_vert[] =
- "(\n"
- "(function radians\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float degrees))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 degrees))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 degrees))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 degrees))\n"
- " ()))\n"
- "(function degrees\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float radians))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 radians))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 radians))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 radians))\n"
- " ()))\n"
- "(function sin\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float angle))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 angle))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 angle))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 angle))\n"
- " ()))\n"
- "(function cos\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float angle))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 angle))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 angle))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 angle))\n"
- " ()))\n"
- "(function tan\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float angle))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 angle))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 angle))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 angle))\n"
- " ()))\n"
- "(function asin\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float angle))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 angle))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 angle))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 angle))\n"
- " ()))\n"
- "(function acos\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float angle))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 angle))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 angle))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 angle))\n"
- " ()))\n"
- "(function atan\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float y)\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 y)\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 y)\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 y)\n"
- " (declare (in) vec4 x))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float y_over_x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 y_over_x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 y_over_x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 y_over_x))\n"
- " ()))\n"
- "(function sinh\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function cosh\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function tanh\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function pow\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y))\n"
- " ()))\n"
- "(function exp\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function log\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function exp2\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function log2\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function sqrt\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function inversesqrt\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function abs\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ())\n"
- " (signature int\n"
- " (parameters\n"
- " (declare (in) int x))\n"
- " ())\n"
- " (signature ivec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x))\n"
- " ())\n"
- " (signature ivec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x))\n"
- " ()))\n"
- "(function sign\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ())\n"
- " (signature int\n"
- " (parameters\n"
- " (declare (in) int x))\n"
- " ())\n"
- " (signature ivec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x))\n"
- " ())\n"
- " (signature ivec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x))\n"
- " ()))\n"
- "(function floor\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function trunc\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function round\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function roundEven\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function ceil\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function fract\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function mod\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y))\n"
- " ()))\n"
- "(function modf\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x)\n"
- " (declare (out) float i))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (out) vec2 i))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (out) vec3 i))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (out) vec4 i))\n"
- " ()))\n"
- "(function min\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature int\n"
- " (parameters\n"
- " (declare (in) int x)\n"
- " (declare (in) int y))\n"
- " ())\n"
- " (signature ivec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) ivec2 y))\n"
- " ())\n"
- " (signature ivec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) ivec3 y))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) ivec4 y))\n"
- " ())\n"
- " (signature ivec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) int y))\n"
- " ())\n"
- " (signature ivec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) int y))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) int y))\n"
- " ())\n"
- " (signature uint\n"
- " (parameters\n"
- " (declare (in) uint x)\n"
- " (declare (in) uint y))\n"
- " ())\n"
- " (signature uvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uvec2 y))\n"
- " ())\n"
- " (signature uvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uvec3 y))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uvec4 y))\n"
- " ())\n"
- " (signature uvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uint y))\n"
- " ())\n"
- " (signature uvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uint y))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uint y))\n"
- " ()))\n"
- "(function max\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature int\n"
- " (parameters\n"
- " (declare (in) int x)\n"
- " (declare (in) int y))\n"
- " ())\n"
- " (signature ivec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) ivec2 y))\n"
- " ())\n"
- " (signature ivec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) ivec3 y))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) ivec4 y))\n"
- " ())\n"
- " (signature ivec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) int y))\n"
- " ())\n"
- " (signature ivec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) int y))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) int y))\n"
- " ())\n"
- " (signature uint\n"
- " (parameters\n"
- " (declare (in) uint x)\n"
- " (declare (in) uint y))\n"
- " ())\n"
- " (signature uvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uvec2 y))\n"
- " ())\n"
- " (signature uvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uvec3 y))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uvec4 y))\n"
- " ())\n"
- " (signature uvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uint y))\n"
- " ())\n"
- " (signature uvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uint y))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uint y))\n"
- " ()))\n"
- "(function clamp\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x)\n"
- " (declare (in) float minVal)\n"
- " (declare (in) float maxVal))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 minVal)\n"
- " (declare (in) vec2 maxVal))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 minVal)\n"
- " (declare (in) vec3 maxVal))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 minVal)\n"
- " (declare (in) vec4 maxVal))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) float minVal)\n"
- " (declare (in) float maxVal))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) float minVal)\n"
- " (declare (in) float maxVal))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) float minVal)\n"
- " (declare (in) float maxVal))\n"
- " ())\n"
- " (signature int\n"
- " (parameters\n"
- " (declare (in) int x)\n"
- " (declare (in) int minVal)\n"
- " (declare (in) int maxVal))\n"
- " ())\n"
- " (signature ivec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) ivec2 minVal)\n"
- " (declare (in) ivec2 maxVal))\n"
- " ())\n"
- " (signature ivec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) ivec3 minVal)\n"
- " (declare (in) ivec3 maxVal))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) ivec4 minVal)\n"
- " (declare (in) ivec4 maxVal))\n"
- " ())\n"
- " (signature ivec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) int minVal)\n"
- " (declare (in) int maxVal))\n"
- " ())\n"
- " (signature ivec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) int minVal)\n"
- " (declare (in) int maxVal))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) int minVal)\n"
- " (declare (in) int maxVal))\n"
- " ())\n"
- " (signature uint\n"
- " (parameters\n"
- " (declare (in) uint x)\n"
- " (declare (in) uint minVal)\n"
- " (declare (in) uint maxVal))\n"
- " ())\n"
- " (signature uvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uvec2 minVal)\n"
- " (declare (in) uvec2 maxVal))\n"
- " ())\n"
- " (signature uvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uvec3 minVal)\n"
- " (declare (in) uvec3 maxVal))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uvec4 minVal)\n"
- " (declare (in) uvec4 maxVal))\n"
- " ())\n"
- " (signature uvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uint minVal)\n"
- " (declare (in) uint maxVal))\n"
- " ())\n"
- " (signature uvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uint minVal)\n"
- " (declare (in) uint maxVal))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uint minVal)\n"
- " (declare (in) uint maxVal))\n"
- " ()))\n"
- "(function mix\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x)\n"
- " (declare (in) float y)\n"
- " (declare (in) float a))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y)\n"
- " (declare (in) vec2 a))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y)\n"
- " (declare (in) vec3 a))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y)\n"
- " (declare (in) vec4 a))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y)\n"
- " (declare (in) float a))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y)\n"
- " (declare (in) float a))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y)\n"
- " (declare (in) float a))\n"
- " ()))\n"
- "(function step\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float edge)\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 edge)\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 edge)\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 edge)\n"
- " (declare (in) vec4 x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) float edge)\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) float edge)\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) float edge)\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function smoothstep\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float edge0)\n"
- " (declare (in) float edge1)\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 edge0)\n"
- " (declare (in) vec2 edge1)\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 edge0)\n"
- " (declare (in) vec3 edge1)\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 edge0)\n"
- " (declare (in) vec4 edge1)\n"
- " (declare (in) vec4 x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) float edge0)\n"
- " (declare (in) float edge1)\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) float edge0)\n"
- " (declare (in) float edge1)\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) float edge0)\n"
- " (declare (in) float edge1)\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function length\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function distance\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float p0)\n"
- " (declare (in) float p1))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec2 p0)\n"
- " (declare (in) vec2 p1))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec3 p0)\n"
- " (declare (in) vec3 p1))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec4 p0)\n"
- " (declare (in) vec4 p1))\n"
- " ()))\n"
- "(function dot\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x)\n"
- " (declare (in) float y))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y))\n"
- " ()))\n"
- "(function cross\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ()))\n"
- "(function normalize\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function ftransform\n"
- " (signature vec4\n"
- " (parameters)\n"
- " ()))\n"
- "(function faceforward\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float N)\n"
- " (declare (in) float I)\n"
- " (declare (in) float Nref))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 N)\n"
- " (declare (in) vec2 I)\n"
- " (declare (in) vec2 Nref))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 N)\n"
- " (declare (in) vec3 I)\n"
- " (declare (in) vec3 Nref))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 N)\n"
- " (declare (in) vec4 I)\n"
- " (declare (in) vec4 Nref))\n"
- " ()))\n"
- "(function reflect\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float I)\n"
- " (declare (in) float N))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 I)\n"
- " (declare (in) vec2 N))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 I)\n"
- " (declare (in) vec3 N))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 I)\n"
- " (declare (in) vec4 N))\n"
- " ()))\n"
- "(function refract\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float I)\n"
- " (declare (in) float N)\n"
- " (declare (in) float eta))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 I)\n"
- " (declare (in) vec2 N)\n"
- " (declare (in) float eta))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 I)\n"
- " (declare (in) vec3 N)\n"
- " (declare (in) float eta))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 I)\n"
- " (declare (in) vec4 N)\n"
- " (declare (in) float eta))\n"
- " ()))\n"
- "(function matrixCompMult\n"
- " (signature mat2\n"
- " (parameters\n"
- " (declare (in) mat2 x)\n"
- " (declare (in) mat2 y))\n"
- " ())\n"
- " (signature mat3\n"
- " (parameters\n"
- " (declare (in) mat3 x)\n"
- " (declare (in) mat3 y))\n"
- " ())\n"
- " (signature mat4\n"
- " (parameters\n"
- " (declare (in) mat4 x)\n"
- " (declare (in) mat4 y))\n"
- " ())\n"
- " (signature mat2x3\n"
- " (parameters\n"
- " (declare (in) mat2x3 x)\n"
- " (declare (in) mat2x3 y))\n"
- " ())\n"
- " (signature mat2x4\n"
- " (parameters\n"
- " (declare (in) mat2x4 x)\n"
- " (declare (in) mat2x4 y))\n"
- " ())\n"
- " (signature mat3x2\n"
- " (parameters\n"
- " (declare (in) mat3x2 x)\n"
- " (declare (in) mat3x2 y))\n"
- " ())\n"
- " (signature mat3x4\n"
- " (parameters\n"
- " (declare (in) mat3x4 x)\n"
- " (declare (in) mat3x4 y))\n"
- " ())\n"
- " (signature mat4x2\n"
- " (parameters\n"
- " (declare (in) mat4x2 x)\n"
- " (declare (in) mat4x2 y))\n"
- " ())\n"
- " (signature mat4x3\n"
- " (parameters\n"
- " (declare (in) mat4x3 x)\n"
- " (declare (in) mat4x3 y))\n"
- " ()))\n"
- "(function outerProduct\n"
- " (signature mat2\n"
- " (parameters\n"
- " (declare (in) vec2 c)\n"
- " (declare (in) vec2 r))\n"
- " ())\n"
- " (signature mat3\n"
- " (parameters\n"
- " (declare (in) vec3 c)\n"
- " (declare (in) vec3 r))\n"
- " ())\n"
- " (signature mat4\n"
- " (parameters\n"
- " (declare (in) vec4 c)\n"
- " (declare (in) vec4 r))\n"
- " ())\n"
- " (signature mat2x3\n"
- " (parameters\n"
- " (declare (in) vec3 c)\n"
- " (declare (in) vec2 r))\n"
- " ())\n"
- " (signature mat3x2\n"
- " (parameters\n"
- " (declare (in) vec2 c)\n"
- " (declare (in) vec3 r))\n"
- " ())\n"
- " (signature mat2x4\n"
- " (parameters\n"
- " (declare (in) vec4 c)\n"
- " (declare (in) vec2 r))\n"
- " ())\n"
- " (signature mat4x2\n"
- " (parameters\n"
- " (declare (in) vec2 c)\n"
- " (declare (in) vec4 r))\n"
- " ())\n"
- " (signature mat3x4\n"
- " (parameters\n"
- " (declare (in) vec4 c)\n"
- " (declare (in) vec3 r))\n"
- " ())\n"
- " (signature mat4x3\n"
- " (parameters\n"
- " (declare (in) vec3 c)\n"
- " (declare (in) vec4 r))\n"
- " ()))\n"
- "(function transpose\n"
- " (signature mat2\n"
- " (parameters\n"
- " (declare (in) mat2 m))\n"
- " ())\n"
- " (signature mat3\n"
- " (parameters\n"
- " (declare (in) mat3 m))\n"
- " ())\n"
- " (signature mat4\n"
- " (parameters\n"
- " (declare (in) mat4 m))\n"
- " ())\n"
- " (signature mat2x3\n"
- " (parameters\n"
- " (declare (in) mat3x2 m))\n"
- " ())\n"
- " (signature mat3x2\n"
- " (parameters\n"
- " (declare (in) mat2x3 m))\n"
- " ())\n"
- " (signature mat2x4\n"
- " (parameters\n"
- " (declare (in) mat4x2 m))\n"
- " ())\n"
- " (signature mat4x2\n"
- " (parameters\n"
- " (declare (in) mat2x4 m))\n"
- " ())\n"
- " (signature mat3x4\n"
- " (parameters\n"
- " (declare (in) mat4x3 m))\n"
- " ())\n"
- " (signature mat4x3\n"
- " (parameters\n"
- " (declare (in) mat3x4 m))\n"
- " ()))\n"
- "(function lessThan\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) ivec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) ivec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) ivec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uvec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uvec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uvec4 y))\n"
- " ()))\n"
- "(function lessThanEqual\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) ivec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) ivec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) ivec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uvec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uvec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uvec4 y))\n"
- " ()))\n"
- "(function greaterThan\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) ivec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) ivec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) ivec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uvec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uvec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uvec4 y))\n"
- " ()))\n"
- "(function greaterThanEqual\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) ivec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) ivec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) ivec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uvec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uvec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uvec4 y))\n"
- " ()))\n"
- "(function equal\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) ivec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) ivec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) ivec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uvec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uvec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uvec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) bvec2 x)\n"
- " (declare (in) bvec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) bvec3 x)\n"
- " (declare (in) bvec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) bvec4 x)\n"
- " (declare (in) bvec4 y))\n"
- " ()))\n"
- "(function notEqual\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) vec2 x)\n"
- " (declare (in) vec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) vec3 x)\n"
- " (declare (in) vec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) vec4 x)\n"
- " (declare (in) vec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) ivec2 x)\n"
- " (declare (in) ivec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) ivec3 x)\n"
- " (declare (in) ivec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) ivec4 x)\n"
- " (declare (in) ivec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) uvec2 x)\n"
- " (declare (in) uvec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) uvec3 x)\n"
- " (declare (in) uvec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) uvec4 x)\n"
- " (declare (in) uvec4 y))\n"
- " ())\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) bvec2 x)\n"
- " (declare (in) bvec2 y))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) bvec3 x)\n"
- " (declare (in) bvec3 y))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) bvec4 x)\n"
- " (declare (in) bvec4 y))\n"
- " ()))\n"
- "(function any\n"
- " (signature bool\n"
- " (parameters\n"
- " (declare (in) bvec2 x))\n"
- " ())\n"
- " (signature bool\n"
- " (parameters\n"
- " (declare (in) bvec3 x))\n"
- " ())\n"
- " (signature bool\n"
- " (parameters\n"
- " (declare (in) bvec4 x))\n"
- " ()))\n"
- "(function all\n"
- " (signature bool\n"
- " (parameters\n"
- " (declare (in) bvec2 x))\n"
- " ())\n"
- " (signature bool\n"
- " (parameters\n"
- " (declare (in) bvec3 x))\n"
- " ())\n"
- " (signature bool\n"
- " (parameters\n"
- " (declare (in) bvec4 x))\n"
- " ()))\n"
- "(function not\n"
- " (signature bvec2\n"
- " (parameters\n"
- " (declare (in) bvec2 x))\n"
- " ())\n"
- " (signature bvec3\n"
- " (parameters\n"
- " (declare (in) bvec3 x))\n"
- " ())\n"
- " (signature bvec4\n"
- " (parameters\n"
- " (declare (in) bvec4 x))\n"
- " ()))\n"
- "(function texture\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) float P))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) float P))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) float P))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec2 P))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec2 P))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec2 P))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler3D sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler3D sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) samplerCube sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isamplerCube sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usamplerCube sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) samplerCubeShadow sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1DArray sampler)\n"
- " (declare (in) vec2 P))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1DArray sampler)\n"
- " (declare (in) vec2 P))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1DArray sampler)\n"
- " (declare (in) vec2 P))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2DArray sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2DArray sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2DArray sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DArrayShadow sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler2DArrayShadow sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) float P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) float P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) float P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler3D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler3D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) samplerCube sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isamplerCube sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usamplerCube sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) samplerCubeShadow sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1DArray sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1DArray sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1DArray sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2DArray sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2DArray sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2DArray sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DArrayShadow sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function textureProj\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec2 P))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) vec2 P))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) vec2 P))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec3 P))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler3D sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler3D sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec4 P))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler3D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler3D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function textureLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) float P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) float P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) float P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler3D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler3D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) samplerCube sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isamplerCube sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usamplerCube sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1DArray sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1DArray sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1DArray sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2DArray sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2DArray sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2DArray sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DArrayShadow sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function texelFetch\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) int P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) int P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) int P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) ivec2 P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) ivec2 P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) ivec2 P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) ivec3 P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler3D sampler)\n"
- " (declare (in) ivec3 P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler3D sampler)\n"
- " (declare (in) ivec3 P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1DArray sampler)\n"
- " (declare (in) ivec2 P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1DArray sampler)\n"
- " (declare (in) ivec2 P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1DArray sampler)\n"
- " (declare (in) ivec2 P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2DArray sampler)\n"
- " (declare (in) ivec3 P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2DArray sampler)\n"
- " (declare (in) ivec3 P)\n"
- " (declare (in) int lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2DArray sampler)\n"
- " (declare (in) ivec3 P)\n"
- " (declare (in) int lod))\n"
- " ()))\n"
- "(function textureProjLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler3D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler3D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function textureGrad\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) float P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) float P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) float P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec3 dPdx)\n"
- " (declare (in) vec3 dPdy))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler3D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec3 dPdx)\n"
- " (declare (in) vec3 dPdy))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler3D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec3 dPdx)\n"
- " (declare (in) vec3 dPdy))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) samplerCube sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec3 dPdx)\n"
- " (declare (in) vec3 dPdy))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isamplerCube sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec3 dPdx)\n"
- " (declare (in) vec3 dPdy))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usamplerCube sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec3 dPdx)\n"
- " (declare (in) vec3 dPdy))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) samplerCubeShadow sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) vec3 dPdx)\n"
- " (declare (in) vec3 dPdy))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1DArray sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1DArray sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1DArray sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2DArray sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2DArray sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2DArray sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DArrayShadow sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler2DArrayShadow sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ()))\n"
- "(function textureProjGrad\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) vec2 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler1D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler1D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec3 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler2D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler2D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) vec3 dPdx)\n"
- " (declare (in) vec3 dPdy))\n"
- " ())\n"
- " (signature ivec4\n"
- " (parameters\n"
- " (declare (in) isampler3D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) vec3 dPdx)\n"
- " (declare (in) vec3 dPdy))\n"
- " ())\n"
- " (signature uvec4\n"
- " (parameters\n"
- " (declare (in) usampler3D sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) vec3 dPdx)\n"
- " (declare (in) vec3 dPdy))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) float dPdx)\n"
- " (declare (in) float dPdy))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec4 P)\n"
- " (declare (in) vec2 dPdx)\n"
- " (declare (in) vec2 dPdy))\n"
- " ()))\n"
- "(function texture1D\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) float coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) float coord)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function texture1DProj\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec2 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec4 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec2 coord)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec4 coord)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function texture1DLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) float coord)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function texture1DProjLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec2 coord)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1D sampler)\n"
- " (declare (in) vec4 coord)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function texture2D\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec2 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec2 coord)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function texture2DProj\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec3 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec4 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec3 coord)\n"
- " (declare (in) float bias))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec4 coord)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function texture2DLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec2 coord)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function texture2DProjLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec3 coord)\n"
- " (declare (in) float lod))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2D sampler)\n"
- " (declare (in) vec4 coord)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function texture3D\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec3 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec3 coord)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function texture3DProj\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec4 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec4 coord)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function texture3DLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec3 coord)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function texture3DProjLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler3D sampler)\n"
- " (declare (in) vec4 coord)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function textureCube\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) samplerCube sampler)\n"
- " (declare (in) vec3 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) samplerCube sampler)\n"
- " (declare (in) vec3 coord)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function textureCubeLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) samplerCube sampler)\n"
- " (declare (in) vec3 coord)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function shadow1D\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec3 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec3 coord)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function shadow2D\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec3 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec3 coord)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function shadow1DProj\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec4 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec4 coord)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function shadow2DProj\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec4 coord))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec4 coord)\n"
- " (declare (in) float bias))\n"
- " ()))\n"
- "(function shadow1DLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec3 coord)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function shadow2DLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec3 coord)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function shadow1DProjLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler1DShadow sampler)\n"
- " (declare (in) vec4 coord)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function shadow2DProjLod\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) sampler2DShadow sampler)\n"
- " (declare (in) vec4 coord)\n"
- " (declare (in) float lod))\n"
- " ()))\n"
- "(function noise1\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature float\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function noise2\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec2\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function noise3\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec3\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ()))\n"
- "(function noise4\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) float x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec2 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec3 x))\n"
- " ())\n"
- " (signature vec4\n"
- " (parameters\n"
- " (declare (in) vec4 x))\n"
- " ())))"
-;
+{'(',
+'(','f','u','n','c','t','i','o','n',' ','r','a','d','i','a','n','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','d','e','g','r','e','e','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','d','e','g','r','e','e','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r','a','d','i','a','n','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','s','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','c','o','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a','n','g','l','e',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a','n','g','l','e',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','t','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y','_','o','v','e','r','_','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','s','i','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','c','o','s','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','t','a','n','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','p','o','w',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','e','x','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','l','o','g',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','e','x','p','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','l','o','g','2',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','i','n','v','e','r','s','e','s','q','r','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','b','s',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','i','g','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','f','l','o','o','r',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','r','u','n','c',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','r','o','u','n','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','r','o','u','n','d','E','v','e','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','c','e','i','l',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','o','d','f',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','f','l','o','a','t',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','2',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','3',' ','i',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','o','u','t',')',' ','v','e','c','4',' ','i',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','i','n',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','a','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','c','l','a','m','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','i','n','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','i','n','V','a','l',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','i','n','t',' ','m','a','x','V','a','l',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','i','x',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','a',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','m','o','o','t','h','s','t','e','p',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','d','g','e','1',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','l','e','n','g','t','h',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','d','i','s','t','a','n','c','e',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','p','1',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','0',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','p','1',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','d','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','c','r','o','s','s',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','r','m','a','l','i','z','e',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','f','t','r','a','n','s','f','o','r','m',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','f','a','c','e','f','o','r','w','a','r','d',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N','r','e','f',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N','r','e','f',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','r','e','f','l','e','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','r','e','f','r','a','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','I',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','N',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','e','t','a',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','m','a','t','r','i','x','C','o','m','p','M','u','l','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','o','u','t','e','r','P','r','o','d','u','c','t',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','r',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','r',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','r','a','n','s','p','o','s','e',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','2','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','2',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','2','x','4',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','3','x','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','4','x','3',' ','m',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','m','a','t','4','x','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','m','a','t','3','x','4',' ','m',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','l','e','s','s','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','g','r','e','a','t','e','r','T','h','a','n','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','e','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','t','E','q','u','a','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','v','e','c','4',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','n','y',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','a','l','l',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','o','o','l',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','t',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','b','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','b','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','e','l','F','e','t','c','h',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','n','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D','A','r','r','a','y',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','A','r','r','a','y','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','P','r','o','j','G','r','a','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','i','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','i','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','u','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','u','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','d','P','d','y',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','P',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','x',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','d','P','d','y',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','3','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','3','D',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','t','e','x','t','u','r','e','C','u','b','e','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','C','u','b','e',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','P','r','o','j',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','b','i','a','s',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','1','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','1','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','s','h','a','d','o','w','2','D','P','r','o','j','L','o','d',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','s','a','m','p','l','e','r','2','D','S','h','a','d','o','w',' ','s','a','m','p','l','e','r',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','c','o','o','r','d',')',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','l','o','d',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','1',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','f','l','o','a','t',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','2',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','2',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','3',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','3',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',
+'(','f','u','n','c','t','i','o','n',' ','n','o','i','s','e','4',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','f','l','o','a','t',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','2',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','3',' ','x',')',')',' ','(',')',')',' ','(','s','i','g','n','a','t','u','r','e',' ','v','e','c','4',' ','(','p','a','r','a','m','e','t','e','r','s',' ','(','d','e','c','l','a','r','e',' ','(','i','n',')',' ','v','e','c','4',' ','x',')',')',' ','(',')',')',')',')'} ;
static const char *functions_for_130_vert [] = {
builtin_abs,
builtin_acos,
+ builtin_acosh,
builtin_all,
builtin_any,
builtin_asin,
+ builtin_asinh,
builtin_atan,
+ builtin_atanh,
builtin_ceil,
builtin_clamp,
builtin_cos,
@@ -16398,7 +13537,6 @@ _mesa_read_profile(struct _mesa_glsl_parse_state *state,
builtin_profiles[profile_index] = sh;
}
- import_prototypes(sh->ir, instructions, state->symbols, state);
state->builtins_to_link[state->num_builtins_to_link] = sh;
state->num_builtins_to_link++;
}
diff --git a/src/glsl/builtin_types.h b/src/glsl/builtin_types.h
index 443ae1606e..8ccbf6e312 100644
--- a/src/glsl/builtin_types.h
+++ b/src/glsl/builtin_types.h
@@ -24,10 +24,11 @@
const glsl_type glsl_type::_error_type =
glsl_type(GL_INVALID_ENUM, GLSL_TYPE_ERROR, 0, 0, "");
-const glsl_type glsl_type::void_type =
+const glsl_type glsl_type::_void_type =
glsl_type(GL_INVALID_ENUM, GLSL_TYPE_VOID, 0, 0, "void");
const glsl_type *const glsl_type::error_type = & glsl_type::_error_type;
+const glsl_type *const glsl_type::void_type = & glsl_type::_void_type;
/** \name Core built-in types
*
diff --git a/src/glsl/builtins/ir/acosh b/src/glsl/builtins/ir/acosh
new file mode 100644
index 0000000000..5518e75753
--- /dev/null
+++ b/src/glsl/builtins/ir/acosh
@@ -0,0 +1,21 @@
+((function acosh
+ (signature float
+ (parameters
+ (declare (in) float x))
+ ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float - (expression float * (var_ref x) (var_ref x)) (constant float (1)))))))))
+
+ (signature vec2
+ (parameters
+ (declare (in) vec2 x))
+ ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 - (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))
+
+ (signature vec3
+ (parameters
+ (declare (in) vec3 x))
+ ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 - (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))
+
+ (signature vec4
+ (parameters
+ (declare (in) vec4 x))
+ ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 - (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))
+))
diff --git a/src/glsl/builtins/ir/asinh b/src/glsl/builtins/ir/asinh
new file mode 100644
index 0000000000..cdc2c20e76
--- /dev/null
+++ b/src/glsl/builtins/ir/asinh
@@ -0,0 +1,21 @@
+((function asinh
+ (signature float
+ (parameters
+ (declare (in) float x))
+ ((return (expression float log (expression float + (var_ref x) (expression float sqrt (expression float + (expression float * (var_ref x) (var_ref x)) (constant float (1)))))))))
+
+ (signature vec2
+ (parameters
+ (declare (in) vec2 x))
+ ((return (expression vec2 log (expression vec2 + (var_ref x) (expression vec2 sqrt (expression vec2 + (expression vec2 * (var_ref x) (var_ref x)) (constant vec2 (1)))))))))
+
+ (signature vec3
+ (parameters
+ (declare (in) vec3 x))
+ ((return (expression vec3 log (expression vec3 + (var_ref x) (expression vec3 sqrt (expression vec3 + (expression vec3 * (var_ref x) (var_ref x)) (constant vec3 (1)))))))))
+
+ (signature vec4
+ (parameters
+ (declare (in) vec4 x))
+ ((return (expression vec4 log (expression vec4 + (var_ref x) (expression vec4 sqrt (expression vec4 + (expression vec4 * (var_ref x) (var_ref x)) (constant vec4 (1)))))))))
+))
diff --git a/src/glsl/builtins/ir/atanh b/src/glsl/builtins/ir/atanh
new file mode 100644
index 0000000000..5559e97406
--- /dev/null
+++ b/src/glsl/builtins/ir/atanh
@@ -0,0 +1,37 @@
+((function atanh
+ (signature float
+ (parameters
+ (declare (in) float x))
+ ((return (expression float * (constant float (0.5))
+ (expression float log
+ (expression float /
+ (expression float + (constant float (1)) (var_ref x))
+ (expression float - (constant float (1)) (var_ref x))))))))
+
+ (signature vec2
+ (parameters
+ (declare (in) vec2 x))
+ ((return (expression vec2 * (constant vec2 (0.5))
+ (expression vec2 log
+ (expression vec2 /
+ (expression vec2 + (constant vec2 (1)) (var_ref x))
+ (expression vec2 - (constant vec2 (1)) (var_ref x))))))))
+
+ (signature vec3
+ (parameters
+ (declare (in) vec3 x))
+ ((return (expression vec3 * (constant vec3 (0.5))
+ (expression vec3 log
+ (expression vec3 /
+ (expression vec3 + (constant vec3 (1)) (var_ref x))
+ (expression vec3 - (constant vec3 (1)) (var_ref x))))))))
+
+ (signature vec4
+ (parameters
+ (declare (in) vec4 x))
+ ((return (expression vec4 * (constant vec4 (0.5))
+ (expression vec4 log
+ (expression vec4 /
+ (expression vec4 + (constant vec4 (1)) (var_ref x))
+ (expression vec4 - (constant vec4 (1)) (var_ref x))))))))
+))
diff --git a/src/glsl/builtins/ir/cross b/src/glsl/builtins/ir/cross
index 24717a2183..02991fe422 100644
--- a/src/glsl/builtins/ir/cross
+++ b/src/glsl/builtins/ir/cross
@@ -1,7 +1,9 @@
((function cross
(signature vec3
(parameters
- (declare (in) vec3 arg0)
- (declare (in) vec3 arg1))
- ((return (expression vec3 cross (var_ref arg0) (var_ref arg1)))))
+ (declare (in) vec3 a)
+ (declare (in) vec3 b))
+ ((return (expression vec3 -
+ (expression vec3 * (swiz yzx (var_ref a)) (swiz zxy (var_ref b)))
+ (expression vec3 * (swiz zxy (var_ref a)) (swiz yzx (var_ref b)))))))
))
diff --git a/src/glsl/builtins/ir/smoothstep b/src/glsl/builtins/ir/smoothstep
index 0164219a05..b283f73d8d 100644
--- a/src/glsl/builtins/ir/smoothstep
+++ b/src/glsl/builtins/ir/smoothstep
@@ -5,40 +5,26 @@
(declare (in) float edge1)
(declare (in) float x))
((declare () float t)
-
(assign (constant bool (1)) (x) (var_ref t)
(expression float max
(expression float min
(expression float / (expression float - (var_ref x) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
(constant float (1.0)))
(constant float (0.0))))
- (return (expression float * (var_ref t) (expression float * (var_ref t) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (var_ref t))))))))
-
+ (return (expression float * (var_ref t) (expression float * (var_ref t) (expression float - (constant float (3.0)) (expression float * (constant float (2.0)) (var_ref t))))))))
(signature vec2
(parameters
(declare (in) float edge0)
(declare (in) float edge1)
(declare (in) vec2 x))
((declare () vec2 t)
- (declare () vec2 retval)
-
- (assign (constant bool (1)) (x) (var_ref t)
- (expression float max
- (expression float min
- (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
+ (assign (constant bool (1)) (xy) (var_ref t)
+ (expression vec2 max
+ (expression vec2 min
+ (expression vec2 / (expression vec2 - (var_ref x) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
(constant float (1.0)))
(constant float (0.0))))
- (assign (constant bool (1)) (x) (var_ref retval) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))
-
- (assign (constant bool (1)) (y) (var_ref t)
- (expression float max
- (expression float min
- (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
- (constant float (1.0)))
- (constant float (0.0))))
- (assign (constant bool (1)) (y) (var_ref retval) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))
- (return (var_ref retval))
- ))
+ (return (expression vec2 * (var_ref t) (expression vec2 * (var_ref t) (expression vec2 - (constant float (3.0)) (expression vec2 * (constant float (2.0)) (var_ref t))))))))
(signature vec3
(parameters
@@ -46,33 +32,13 @@
(declare (in) float edge1)
(declare (in) vec3 x))
((declare () vec3 t)
- (declare () vec3 retval)
-
- (assign (constant bool (1)) (x) (var_ref t)
- (expression float max
- (expression float min
- (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
- (constant float (1.0)))
- (constant float (0.0))))
- (assign (constant bool (1)) (x) (var_ref retval) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))
-
- (assign (constant bool (1)) (y) (var_ref t)
- (expression float max
- (expression float min
- (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
+ (assign (constant bool (1)) (xyz) (var_ref t)
+ (expression vec3 max
+ (expression vec3 min
+ (expression vec3 / (expression vec3 - (var_ref x) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
(constant float (1.0)))
(constant float (0.0))))
- (assign (constant bool (1)) (y) (var_ref retval) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))
-
- (assign (constant bool (1)) (z) (var_ref t)
- (expression float max
- (expression float min
- (expression float / (expression float - (swiz z (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
- (constant float (1.0)))
- (constant float (0.0))))
- (assign (constant bool (1)) (z) (var_ref retval) (expression float * (swiz z (var_ref t)) (expression float * (swiz z (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz z (var_ref t)))))))
- (return (var_ref retval))
- ))
+ (return (expression vec3 * (var_ref t) (expression vec3 * (var_ref t) (expression vec3 - (constant float (3.0)) (expression vec3 * (constant float (2.0)) (var_ref t))))))))
(signature vec4
@@ -81,73 +47,54 @@
(declare (in) float edge1)
(declare (in) vec4 x))
((declare () vec4 t)
- (declare () vec4 retval)
-
- (assign (constant bool (1)) (x) (var_ref t)
- (expression float max
- (expression float min
- (expression float / (expression float - (swiz x (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
- (constant float (1.0)))
- (constant float (0.0))))
- (assign (constant bool (1)) (x) (var_ref retval) (expression float * (swiz x (var_ref t)) (expression float * (swiz x (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz x (var_ref t)))))))
-
- (assign (constant bool (1)) (y) (var_ref t)
- (expression float max
- (expression float min
- (expression float / (expression float - (swiz y (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
+ (assign (constant bool (1)) (xyzw) (var_ref t)
+ (expression vec4 max
+ (expression vec4 min
+ (expression vec4 / (expression vec4 - (var_ref x) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
(constant float (1.0)))
(constant float (0.0))))
- (assign (constant bool (1)) (y) (var_ref retval) (expression float * (swiz y (var_ref t)) (expression float * (swiz y (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz y (var_ref t)))))))
-
- (assign (constant bool (1)) (z) (var_ref t)
- (expression float max
- (expression float min
- (expression float / (expression float - (swiz z (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
- (constant float (1.0)))
- (constant float (0.0))))
- (assign (constant bool (1)) (z) (var_ref retval) (expression float * (swiz z (var_ref t)) (expression float * (swiz z (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz z (var_ref t)))))))
-
- (assign (constant bool (1)) (w) (var_ref t)
- (expression float max
- (expression float min
- (expression float / (expression float - (swiz w (var_ref x)) (var_ref edge0)) (expression float - (var_ref edge1) (var_ref edge0)))
- (constant float (1.0)))
- (constant float (0.0))))
- (assign (constant bool (1)) (w) (var_ref retval) (expression float * (swiz w (var_ref t)) (expression float * (swiz w (var_ref t)) (expression float - (constant float (3.000000)) (expression float * (constant float (2.000000)) (swiz w (var_ref t)))))))
- (return (var_ref retval))
- ))
+ (return (expression vec4 * (var_ref t) (expression vec4 * (var_ref t) (expression vec4 - (constant float (3.0)) (expression vec4 * (constant float (2.0)) (var_ref t))))))))
(signature vec2
(parameters
(declare (in) vec2 edge0)
(declare (in) vec2 edge1)
(declare (in) vec2 x))
- ((return (expression vec2 max
+ ((declare () vec2 t)
+ (assign (constant bool (1)) (xy) (var_ref t)
+ (expression vec2 max
(expression vec2 min
(expression vec2 / (expression vec2 - (var_ref x) (var_ref edge0)) (expression vec2 - (var_ref edge1) (var_ref edge0)))
- (constant vec2 (1.0 1.0)))
- (constant vec2 (0.0 0.0))))))
+ (constant float (1.0)))
+ (constant float (0.0))))
+ (return (expression vec2 * (var_ref t) (expression vec2 * (var_ref t) (expression vec2 - (constant float (3.0)) (expression vec2 * (constant float (2.0)) (var_ref t))))))))
(signature vec3
(parameters
(declare (in) vec3 edge0)
(declare (in) vec3 edge1)
(declare (in) vec3 x))
- ((return (expression vec3 max
+ ((declare () vec3 t)
+ (assign (constant bool (1)) (xyz) (var_ref t)
+ (expression vec3 max
(expression vec3 min
(expression vec3 / (expression vec3 - (var_ref x) (var_ref edge0)) (expression vec3 - (var_ref edge1) (var_ref edge0)))
- (constant vec3 (1.0 1.0 1.0)))
- (constant vec3 (0.0 0.0 0.0))))))
+ (constant float (1.0)))
+ (constant float (0.0))))
+ (return (expression vec3 * (var_ref t) (expression vec3 * (var_ref t) (expression vec3 - (constant float (3.0)) (expression vec3 * (constant float (2.0)) (var_ref t))))))))
(signature vec4
(parameters
(declare (in) vec4 edge0)
(declare (in) vec4 edge1)
(declare (in) vec4 x))
- ((return (expression vec4 max
+ ((declare () vec4 t)
+ (assign (constant bool (1)) (xyzw) (var_ref t)
+ (expression vec4 max
(expression vec4 min
(expression vec4 / (expression vec4 - (var_ref x) (var_ref edge0)) (expression vec4 - (var_ref edge1) (var_ref edge0)))
- (constant vec4 (1.0 1.0 1.0 1.0)))
- (constant vec4 (0.0 0.0 0.0 0.0))))))
+ (constant float (1.0)))
+ (constant float (0.0))))
+ (return (expression vec4 * (var_ref t) (expression vec4 * (var_ref t) (expression vec4 - (constant float (3.0)) (expression vec4 * (constant float (2.0)) (var_ref t))))))))
))
diff --git a/src/glsl/builtins/profiles/130.frag b/src/glsl/builtins/profiles/130.frag
index 0d860eb9ed..329116f2a2 100644
--- a/src/glsl/builtins/profiles/130.frag
+++ b/src/glsl/builtins/profiles/130.frag
@@ -62,7 +62,6 @@ vec2 tanh(vec2 x);
vec3 tanh(vec3 x);
vec4 tanh(vec4 x);
-#if 0
float asinh(float x);
vec2 asinh(vec2 x);
vec3 asinh(vec3 x);
@@ -77,7 +76,6 @@ float atanh(float x);
vec2 atanh(vec2 x);
vec3 atanh(vec3 x);
vec4 atanh(vec4 x);
-#endif
/*
* 8.2 - Exponential Functions
diff --git a/src/glsl/builtins/profiles/130.vert b/src/glsl/builtins/profiles/130.vert
index 2fd44dce8c..1c212ebb3c 100644
--- a/src/glsl/builtins/profiles/130.vert
+++ b/src/glsl/builtins/profiles/130.vert
@@ -62,7 +62,6 @@ vec2 tanh(vec2 x);
vec3 tanh(vec3 x);
vec4 tanh(vec4 x);
-#if 0
float asinh(float x);
vec2 asinh(vec2 x);
vec3 asinh(vec3 x);
@@ -77,7 +76,6 @@ float atanh(float x);
vec2 atanh(vec2 x);
vec3 atanh(vec3 x);
vec4 atanh(vec4 x);
-#endif
/*
* 8.2 - Exponential Functions
diff --git a/src/glsl/builtins/tools/generate_builtins.py b/src/glsl/builtins/tools/generate_builtins.py
index 9bde17157a..5ea4b5c48f 100755
--- a/src/glsl/builtins/tools/generate_builtins.py
+++ b/src/glsl/builtins/tools/generate_builtins.py
@@ -29,12 +29,12 @@ def stringify(s):
# rather than actual string literals.
if len(s) >= 65535:
#t = "/* Warning: length " + repr(len(s)) + " too large */\n"
- t = ""
+ t = ""
for c in re.sub('\s\s+', ' ', s):
if c == '\n':
- t += '\n'
+ t += '\n'
else:
- t += "'" + c + "',"
+ t += "'" + c + "',"
return '{' + t[:-1] + '}'
t = s.replace('\\', '\\\\').replace('"', '\\"').replace('\n', '\\n"\n "')
@@ -214,7 +214,6 @@ _mesa_read_profile(struct _mesa_glsl_parse_state *state,
builtin_profiles[profile_index] = sh;
}
- import_prototypes(sh->ir, instructions, state->symbols, state);
state->builtins_to_link[state->num_builtins_to_link] = sh;
state->num_builtins_to_link++;
}
diff --git a/src/glsl/glcpp/glcpp-parse.c b/src/glsl/glcpp/glcpp-parse.c
index 30b6fd6ef9..ab7c30ed78 100644
--- a/src/glsl/glcpp/glcpp-parse.c
+++ b/src/glsl/glcpp/glcpp-parse.c
@@ -1,10 +1,9 @@
-
-/* A Bison parser, made by GNU Bison 2.4.1. */
+/* A Bison parser, made by GNU Bison 2.4.3. */
/* Skeleton implementation for Bison's Yacc-like parsers in C
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2009, 2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -46,7 +45,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "2.4.3"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -220,7 +219,7 @@ add_builtin_define(glcpp_parser_t *parser, const char *name, int value);
/* Line 189 of yacc.c */
-#line 224 "glcpp/glcpp-parse.c"
+#line 223 "glcpp/glcpp-parse.c"
/* Enabling traces. */
#ifndef YYDEBUG
@@ -308,7 +307,7 @@ typedef struct YYLTYPE
/* Line 264 of yacc.c */
-#line 312 "glcpp/glcpp-parse.c"
+#line 311 "glcpp/glcpp-parse.c"
#ifdef short
# undef short
@@ -358,7 +357,7 @@ typedef short int yytype_int16;
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
#ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
# define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -635,15 +634,15 @@ static const yytype_uint16 yyrline[] =
{
0, 188, 188, 190, 194, 197, 202, 203, 207, 210,
216, 219, 222, 225, 233, 252, 262, 267, 272, 291,
- 306, 309, 312, 325, 329, 338, 343, 344, 347, 350,
- 353, 356, 359, 362, 365, 368, 371, 374, 377, 380,
- 383, 386, 389, 392, 395, 398, 401, 404, 407, 410,
- 416, 421, 429, 430, 434, 440, 441, 444, 446, 453,
- 457, 461, 466, 472, 480, 486, 494, 498, 502, 506,
- 510, 517, 518, 519, 520, 521, 522, 523, 524, 525,
- 526, 527, 528, 529, 530, 531, 532, 533, 534, 535,
- 536, 537, 538, 539, 540, 541, 542, 543, 544, 545,
- 546, 547
+ 306, 309, 312, 333, 337, 346, 351, 352, 355, 358,
+ 361, 364, 367, 370, 373, 376, 379, 382, 385, 388,
+ 391, 394, 397, 400, 403, 406, 409, 412, 415, 418,
+ 424, 429, 437, 438, 442, 448, 449, 452, 454, 461,
+ 465, 469, 474, 479, 487, 493, 501, 505, 509, 513,
+ 517, 524, 525, 526, 527, 528, 529, 530, 531, 532,
+ 533, 534, 535, 536, 537, 538, 539, 540, 541, 542,
+ 543, 544, 545, 546, 547, 548, 549, 550, 551, 552,
+ 553, 554
};
#endif
@@ -946,9 +945,18 @@ static const yytype_uint8 yystos[] =
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
#define YYRECOVERING() (!!yyerrstatus)
@@ -1005,7 +1013,7 @@ while (YYID (0))
we won't break user code: when these are the locations we know. */
#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
# define YY_LOCATION_PRINT(File, Loc) \
fprintf (File, "%d.%d-%d.%d", \
(Loc).first_line, (Loc).first_column, \
@@ -1547,7 +1555,7 @@ YYLTYPE yylloc;
YYLTYPE *yylsp;
/* The locations where the error started and ended. */
- YYLTYPE yyerror_range[2];
+ YYLTYPE yyerror_range[3];
YYSIZE_T yystacksize;
@@ -1594,7 +1602,7 @@ YYLTYPE yylloc;
yyvsp = yyvs;
yylsp = yyls;
-#if YYLTYPE_IS_TRIVIAL
+#if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
/* Initialize the default location before parsing starts. */
yylloc.first_line = yylloc.last_line = 1;
yylloc.first_column = yylloc.last_column = 1;
@@ -1602,7 +1610,7 @@ YYLTYPE yylloc;
/* User initialization code. */
-/* Line 1242 of yacc.c */
+/* Line 1251 of yacc.c */
#line 155 "glcpp/glcpp-parse.y"
{
yylloc.first_line = 1;
@@ -1612,8 +1620,8 @@ YYLTYPE yylloc;
yylloc.source = 0;
}
-/* Line 1242 of yacc.c */
-#line 1617 "glcpp/glcpp-parse.c"
+/* Line 1251 of yacc.c */
+#line 1625 "glcpp/glcpp-parse.c"
yylsp[0] = yylloc;
goto yysetstate;
@@ -1800,7 +1808,7 @@ yyreduce:
{
case 4:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 194 "glcpp/glcpp-parse.y"
{
glcpp_print(parser->output, "\n");
@@ -1809,7 +1817,7 @@ yyreduce:
case 5:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 197 "glcpp/glcpp-parse.y"
{
_glcpp_parser_print_expanded_token_list (parser, (yyvsp[(1) - (1)].token_list));
@@ -1820,7 +1828,7 @@ yyreduce:
case 8:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 207 "glcpp/glcpp-parse.y"
{
_glcpp_parser_skip_stack_push_if (parser, & (yylsp[(1) - (3)]), (yyvsp[(2) - (3)].ival));
@@ -1829,7 +1837,7 @@ yyreduce:
case 9:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 210 "glcpp/glcpp-parse.y"
{
_glcpp_parser_skip_stack_change_if (parser, & (yylsp[(1) - (3)]), "elif", (yyvsp[(2) - (3)].ival));
@@ -1838,7 +1846,7 @@ yyreduce:
case 10:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 216 "glcpp/glcpp-parse.y"
{
_define_object_macro (parser, & (yylsp[(2) - (4)]), (yyvsp[(2) - (4)].str), (yyvsp[(3) - (4)].token_list));
@@ -1847,7 +1855,7 @@ yyreduce:
case 11:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 219 "glcpp/glcpp-parse.y"
{
_define_function_macro (parser, & (yylsp[(2) - (6)]), (yyvsp[(2) - (6)].str), NULL, (yyvsp[(5) - (6)].token_list));
@@ -1856,7 +1864,7 @@ yyreduce:
case 12:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 222 "glcpp/glcpp-parse.y"
{
_define_function_macro (parser, & (yylsp[(2) - (7)]), (yyvsp[(2) - (7)].str), (yyvsp[(4) - (7)].string_list), (yyvsp[(6) - (7)].token_list));
@@ -1865,7 +1873,7 @@ yyreduce:
case 13:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 225 "glcpp/glcpp-parse.y"
{
macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (3)].str));
@@ -1879,7 +1887,7 @@ yyreduce:
case 14:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 233 "glcpp/glcpp-parse.y"
{
/* Be careful to only evaluate the 'if' expression if
@@ -1904,7 +1912,7 @@ yyreduce:
case 15:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 252 "glcpp/glcpp-parse.y"
{
/* #if without an expression is only an error if we
@@ -1920,7 +1928,7 @@ yyreduce:
case 16:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 262 "glcpp/glcpp-parse.y"
{
macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (4)].str));
@@ -1931,7 +1939,7 @@ yyreduce:
case 17:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 267 "glcpp/glcpp-parse.y"
{
macro_t *macro = hash_table_find (parser->defines, (yyvsp[(2) - (4)].str));
@@ -1942,7 +1950,7 @@ yyreduce:
case 18:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 272 "glcpp/glcpp-parse.y"
{
/* Be careful to only evaluate the 'elif' expression
@@ -1967,7 +1975,7 @@ yyreduce:
case 19:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 291 "glcpp/glcpp-parse.y"
{
/* #elif without an expression is an error unless we
@@ -1988,7 +1996,7 @@ yyreduce:
case 20:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 306 "glcpp/glcpp-parse.y"
{
_glcpp_parser_skip_stack_change_if (parser, & (yylsp[(1) - (2)]), "else", 1);
@@ -1997,7 +2005,7 @@ yyreduce:
case 21:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 309 "glcpp/glcpp-parse.y"
{
_glcpp_parser_skip_stack_pop (parser, & (yylsp[(1) - (2)]));
@@ -2006,7 +2014,7 @@ yyreduce:
case 22:
-/* Line 1455 of yacc.c */
+/* Line 1464 of yacc.c */
#line 312 "glcpp/glcpp-parse.y"
{
macro_t *macro = hash_table_find (parser->defines, "__VERSION__");
@@ -2019,14 +2027,22 @@ yyreduce:
if ((yyvsp[(2) - (3)].ival) == 100)
add_builtin_define (parser, "GL_ES", 1);
+ /* Currently, all ES2 implementations support highp in the
+ * fragment shader, so we always define this macro in ES2.
+ * If we ever get a driver that doesn't support highp, we'll
+ * need to add a flag to the gl_context and check that here.
+ */
+ if ((yyvsp[(2) - (3)].ival) >= 130 || (yyvsp[(2) - (3)].ival) == 100)
+ add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1);
+
glcpp_printf(parser->output, "#version %" PRIiMAX, (yyvsp[(2) - (3)].ival));
;}
break;
case 24:
-/* Line 1455 of yacc.c */
-#line 329 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 337 "glcpp/glcpp-parse.y"
{
if (strlen ((yyvsp[(1) - (1)].str)) >= 3 && strncmp ((yyvsp[(1) - (1)].str), "0x", 2) == 0) {
(yyval.ival) = strtoll ((yyvsp[(1) - (1)].str) + 2, NULL, 16);
@@ -2040,8 +2056,8 @@ yyreduce:
case 25:
-/* Line 1455 of yacc.c */
-#line 338 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 346 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (1)].ival);
;}
@@ -2049,8 +2065,8 @@ yyreduce:
case 27:
-/* Line 1455 of yacc.c */
-#line 344 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 352 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) || (yyvsp[(3) - (3)].ival);
;}
@@ -2058,8 +2074,8 @@ yyreduce:
case 28:
-/* Line 1455 of yacc.c */
-#line 347 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 355 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) && (yyvsp[(3) - (3)].ival);
;}
@@ -2067,8 +2083,8 @@ yyreduce:
case 29:
-/* Line 1455 of yacc.c */
-#line 350 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 358 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) | (yyvsp[(3) - (3)].ival);
;}
@@ -2076,8 +2092,8 @@ yyreduce:
case 30:
-/* Line 1455 of yacc.c */
-#line 353 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 361 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) ^ (yyvsp[(3) - (3)].ival);
;}
@@ -2085,8 +2101,8 @@ yyreduce:
case 31:
-/* Line 1455 of yacc.c */
-#line 356 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 364 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) & (yyvsp[(3) - (3)].ival);
;}
@@ -2094,8 +2110,8 @@ yyreduce:
case 32:
-/* Line 1455 of yacc.c */
-#line 359 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 367 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) != (yyvsp[(3) - (3)].ival);
;}
@@ -2103,8 +2119,8 @@ yyreduce:
case 33:
-/* Line 1455 of yacc.c */
-#line 362 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 370 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) == (yyvsp[(3) - (3)].ival);
;}
@@ -2112,8 +2128,8 @@ yyreduce:
case 34:
-/* Line 1455 of yacc.c */
-#line 365 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 373 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) >= (yyvsp[(3) - (3)].ival);
;}
@@ -2121,8 +2137,8 @@ yyreduce:
case 35:
-/* Line 1455 of yacc.c */
-#line 368 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 376 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) <= (yyvsp[(3) - (3)].ival);
;}
@@ -2130,8 +2146,8 @@ yyreduce:
case 36:
-/* Line 1455 of yacc.c */
-#line 371 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 379 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) > (yyvsp[(3) - (3)].ival);
;}
@@ -2139,8 +2155,8 @@ yyreduce:
case 37:
-/* Line 1455 of yacc.c */
-#line 374 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 382 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) < (yyvsp[(3) - (3)].ival);
;}
@@ -2148,8 +2164,8 @@ yyreduce:
case 38:
-/* Line 1455 of yacc.c */
-#line 377 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 385 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) >> (yyvsp[(3) - (3)].ival);
;}
@@ -2157,8 +2173,8 @@ yyreduce:
case 39:
-/* Line 1455 of yacc.c */
-#line 380 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 388 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) << (yyvsp[(3) - (3)].ival);
;}
@@ -2166,8 +2182,8 @@ yyreduce:
case 40:
-/* Line 1455 of yacc.c */
-#line 383 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 391 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) - (yyvsp[(3) - (3)].ival);
;}
@@ -2175,8 +2191,8 @@ yyreduce:
case 41:
-/* Line 1455 of yacc.c */
-#line 386 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 394 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) + (yyvsp[(3) - (3)].ival);
;}
@@ -2184,8 +2200,8 @@ yyreduce:
case 42:
-/* Line 1455 of yacc.c */
-#line 389 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 397 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) % (yyvsp[(3) - (3)].ival);
;}
@@ -2193,8 +2209,8 @@ yyreduce:
case 43:
-/* Line 1455 of yacc.c */
-#line 392 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 400 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) / (yyvsp[(3) - (3)].ival);
;}
@@ -2202,8 +2218,8 @@ yyreduce:
case 44:
-/* Line 1455 of yacc.c */
-#line 395 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 403 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(1) - (3)].ival) * (yyvsp[(3) - (3)].ival);
;}
@@ -2211,8 +2227,8 @@ yyreduce:
case 45:
-/* Line 1455 of yacc.c */
-#line 398 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 406 "glcpp/glcpp-parse.y"
{
(yyval.ival) = ! (yyvsp[(2) - (2)].ival);
;}
@@ -2220,8 +2236,8 @@ yyreduce:
case 46:
-/* Line 1455 of yacc.c */
-#line 401 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 409 "glcpp/glcpp-parse.y"
{
(yyval.ival) = ~ (yyvsp[(2) - (2)].ival);
;}
@@ -2229,8 +2245,8 @@ yyreduce:
case 47:
-/* Line 1455 of yacc.c */
-#line 404 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 412 "glcpp/glcpp-parse.y"
{
(yyval.ival) = - (yyvsp[(2) - (2)].ival);
;}
@@ -2238,8 +2254,8 @@ yyreduce:
case 48:
-/* Line 1455 of yacc.c */
-#line 407 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 415 "glcpp/glcpp-parse.y"
{
(yyval.ival) = + (yyvsp[(2) - (2)].ival);
;}
@@ -2247,8 +2263,8 @@ yyreduce:
case 49:
-/* Line 1455 of yacc.c */
-#line 410 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 418 "glcpp/glcpp-parse.y"
{
(yyval.ival) = (yyvsp[(2) - (3)].ival);
;}
@@ -2256,8 +2272,8 @@ yyreduce:
case 50:
-/* Line 1455 of yacc.c */
-#line 416 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 424 "glcpp/glcpp-parse.y"
{
(yyval.string_list) = _string_list_create (parser);
_string_list_append_item ((yyval.string_list), (yyvsp[(1) - (1)].str));
@@ -2267,8 +2283,8 @@ yyreduce:
case 51:
-/* Line 1455 of yacc.c */
-#line 421 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 429 "glcpp/glcpp-parse.y"
{
(yyval.string_list) = (yyvsp[(1) - (3)].string_list);
_string_list_append_item ((yyval.string_list), (yyvsp[(3) - (3)].str));
@@ -2278,15 +2294,15 @@ yyreduce:
case 52:
-/* Line 1455 of yacc.c */
-#line 429 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 437 "glcpp/glcpp-parse.y"
{ (yyval.token_list) = NULL; ;}
break;
case 54:
-/* Line 1455 of yacc.c */
-#line 434 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 442 "glcpp/glcpp-parse.y"
{
yyerror (& (yylsp[(1) - (2)]), parser, "Invalid tokens after #");
;}
@@ -2294,15 +2310,15 @@ yyreduce:
case 55:
-/* Line 1455 of yacc.c */
-#line 440 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 448 "glcpp/glcpp-parse.y"
{ (yyval.token_list) = NULL; ;}
break;
case 58:
-/* Line 1455 of yacc.c */
-#line 446 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 454 "glcpp/glcpp-parse.y"
{
glcpp_warning(&(yylsp[(1) - (1)]), parser, "extra tokens at end of directive");
;}
@@ -2310,8 +2326,8 @@ yyreduce:
case 59:
-/* Line 1455 of yacc.c */
-#line 453 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 461 "glcpp/glcpp-parse.y"
{
int v = hash_table_find (parser->defines, (yyvsp[(2) - (2)].str)) ? 1 : 0;
(yyval.token) = _token_create_ival (parser, INTEGER, v);
@@ -2320,8 +2336,8 @@ yyreduce:
case 60:
-/* Line 1455 of yacc.c */
-#line 457 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 465 "glcpp/glcpp-parse.y"
{
int v = hash_table_find (parser->defines, (yyvsp[(3) - (4)].str)) ? 1 : 0;
(yyval.token) = _token_create_ival (parser, INTEGER, v);
@@ -2330,10 +2346,9 @@ yyreduce:
case 62:
-/* Line 1455 of yacc.c */
-#line 466 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 474 "glcpp/glcpp-parse.y"
{
- parser->space_tokens = 1;
(yyval.token_list) = _token_list_create (parser);
_token_list_append ((yyval.token_list), (yyvsp[(1) - (1)].token));
talloc_unlink (parser, (yyvsp[(1) - (1)].token));
@@ -2342,8 +2357,8 @@ yyreduce:
case 63:
-/* Line 1455 of yacc.c */
-#line 472 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 479 "glcpp/glcpp-parse.y"
{
(yyval.token_list) = (yyvsp[(1) - (2)].token_list);
_token_list_append ((yyval.token_list), (yyvsp[(2) - (2)].token));
@@ -2353,8 +2368,8 @@ yyreduce:
case 64:
-/* Line 1455 of yacc.c */
-#line 480 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 487 "glcpp/glcpp-parse.y"
{
parser->space_tokens = 1;
(yyval.token_list) = _token_list_create (parser);
@@ -2365,8 +2380,8 @@ yyreduce:
case 65:
-/* Line 1455 of yacc.c */
-#line 486 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 493 "glcpp/glcpp-parse.y"
{
(yyval.token_list) = (yyvsp[(1) - (2)].token_list);
_token_list_append ((yyval.token_list), (yyvsp[(2) - (2)].token));
@@ -2376,8 +2391,8 @@ yyreduce:
case 66:
-/* Line 1455 of yacc.c */
-#line 494 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 501 "glcpp/glcpp-parse.y"
{
(yyval.token) = _token_create_str (parser, IDENTIFIER, (yyvsp[(1) - (1)].str));
(yyval.token)->location = yylloc;
@@ -2386,8 +2401,8 @@ yyreduce:
case 67:
-/* Line 1455 of yacc.c */
-#line 498 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 505 "glcpp/glcpp-parse.y"
{
(yyval.token) = _token_create_str (parser, INTEGER_STRING, (yyvsp[(1) - (1)].str));
(yyval.token)->location = yylloc;
@@ -2396,8 +2411,8 @@ yyreduce:
case 68:
-/* Line 1455 of yacc.c */
-#line 502 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 509 "glcpp/glcpp-parse.y"
{
(yyval.token) = _token_create_ival (parser, (yyvsp[(1) - (1)].ival), (yyvsp[(1) - (1)].ival));
(yyval.token)->location = yylloc;
@@ -2406,8 +2421,8 @@ yyreduce:
case 69:
-/* Line 1455 of yacc.c */
-#line 506 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 513 "glcpp/glcpp-parse.y"
{
(yyval.token) = _token_create_str (parser, OTHER, (yyvsp[(1) - (1)].str));
(yyval.token)->location = yylloc;
@@ -2416,8 +2431,8 @@ yyreduce:
case 70:
-/* Line 1455 of yacc.c */
-#line 510 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 517 "glcpp/glcpp-parse.y"
{
(yyval.token) = _token_create_ival (parser, SPACE, SPACE);
(yyval.token)->location = yylloc;
@@ -2426,225 +2441,225 @@ yyreduce:
case 71:
-/* Line 1455 of yacc.c */
-#line 517 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 524 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '['; ;}
break;
case 72:
-/* Line 1455 of yacc.c */
-#line 518 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 525 "glcpp/glcpp-parse.y"
{ (yyval.ival) = ']'; ;}
break;
case 73:
-/* Line 1455 of yacc.c */
-#line 519 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 526 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '('; ;}
break;
case 74:
-/* Line 1455 of yacc.c */
-#line 520 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 527 "glcpp/glcpp-parse.y"
{ (yyval.ival) = ')'; ;}
break;
case 75:
-/* Line 1455 of yacc.c */
-#line 521 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 528 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '{'; ;}
break;
case 76:
-/* Line 1455 of yacc.c */
-#line 522 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 529 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '}'; ;}
break;
case 77:
-/* Line 1455 of yacc.c */
-#line 523 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 530 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '.'; ;}
break;
case 78:
-/* Line 1455 of yacc.c */
-#line 524 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 531 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '&'; ;}
break;
case 79:
-/* Line 1455 of yacc.c */
-#line 525 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 532 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '*'; ;}
break;
case 80:
-/* Line 1455 of yacc.c */
-#line 526 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 533 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '+'; ;}
break;
case 81:
-/* Line 1455 of yacc.c */
-#line 527 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 534 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '-'; ;}
break;
case 82:
-/* Line 1455 of yacc.c */
-#line 528 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 535 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '~'; ;}
break;
case 83:
-/* Line 1455 of yacc.c */
-#line 529 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 536 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '!'; ;}
break;
case 84:
-/* Line 1455 of yacc.c */
-#line 530 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 537 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '/'; ;}
break;
case 85:
-/* Line 1455 of yacc.c */
-#line 531 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 538 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '%'; ;}
break;
case 86:
-/* Line 1455 of yacc.c */
-#line 532 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 539 "glcpp/glcpp-parse.y"
{ (yyval.ival) = LEFT_SHIFT; ;}
break;
case 87:
-/* Line 1455 of yacc.c */
-#line 533 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 540 "glcpp/glcpp-parse.y"
{ (yyval.ival) = RIGHT_SHIFT; ;}
break;
case 88:
-/* Line 1455 of yacc.c */
-#line 534 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 541 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '<'; ;}
break;
case 89:
-/* Line 1455 of yacc.c */
-#line 535 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 542 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '>'; ;}
break;
case 90:
-/* Line 1455 of yacc.c */
-#line 536 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 543 "glcpp/glcpp-parse.y"
{ (yyval.ival) = LESS_OR_EQUAL; ;}
break;
case 91:
-/* Line 1455 of yacc.c */
-#line 537 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 544 "glcpp/glcpp-parse.y"
{ (yyval.ival) = GREATER_OR_EQUAL; ;}
break;
case 92:
-/* Line 1455 of yacc.c */
-#line 538 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 545 "glcpp/glcpp-parse.y"
{ (yyval.ival) = EQUAL; ;}
break;
case 93:
-/* Line 1455 of yacc.c */
-#line 539 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 546 "glcpp/glcpp-parse.y"
{ (yyval.ival) = NOT_EQUAL; ;}
break;
case 94:
-/* Line 1455 of yacc.c */
-#line 540 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 547 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '^'; ;}
break;
case 95:
-/* Line 1455 of yacc.c */
-#line 541 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 548 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '|'; ;}
break;
case 96:
-/* Line 1455 of yacc.c */
-#line 542 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 549 "glcpp/glcpp-parse.y"
{ (yyval.ival) = AND; ;}
break;
case 97:
-/* Line 1455 of yacc.c */
-#line 543 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 550 "glcpp/glcpp-parse.y"
{ (yyval.ival) = OR; ;}
break;
case 98:
-/* Line 1455 of yacc.c */
-#line 544 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 551 "glcpp/glcpp-parse.y"
{ (yyval.ival) = ';'; ;}
break;
case 99:
-/* Line 1455 of yacc.c */
-#line 545 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 552 "glcpp/glcpp-parse.y"
{ (yyval.ival) = ','; ;}
break;
case 100:
-/* Line 1455 of yacc.c */
-#line 546 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 553 "glcpp/glcpp-parse.y"
{ (yyval.ival) = '='; ;}
break;
case 101:
-/* Line 1455 of yacc.c */
-#line 547 "glcpp/glcpp-parse.y"
+/* Line 1464 of yacc.c */
+#line 554 "glcpp/glcpp-parse.y"
{ (yyval.ival) = PASTE; ;}
break;
-/* Line 1455 of yacc.c */
-#line 2648 "glcpp/glcpp-parse.c"
+/* Line 1464 of yacc.c */
+#line 2663 "glcpp/glcpp-parse.c"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -2716,7 +2731,7 @@ yyerrlab:
#endif
}
- yyerror_range[0] = yylloc;
+ yyerror_range[1] = yylloc;
if (yyerrstatus == 3)
{
@@ -2753,7 +2768,7 @@ yyerrorlab:
if (/*CONSTCOND*/ 0)
goto yyerrorlab;
- yyerror_range[0] = yylsp[1-yylen];
+ yyerror_range[1] = yylsp[1-yylen];
/* Do not reclaim the symbols of the rule which action triggered
this YYERROR. */
YYPOPSTACK (yylen);
@@ -2787,7 +2802,7 @@ yyerrlab1:
if (yyssp == yyss)
YYABORT;
- yyerror_range[0] = *yylsp;
+ yyerror_range[1] = *yylsp;
yydestruct ("Error: popping",
yystos[yystate], yyvsp, yylsp, parser);
YYPOPSTACK (1);
@@ -2797,10 +2812,10 @@ yyerrlab1:
*++yyvsp = yylval;
- yyerror_range[1] = yylloc;
+ yyerror_range[2] = yylloc;
/* Using YYLLOC is tempting, but would change the location of
the lookahead. YYLOC is available though. */
- YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
+ YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
*++yylsp = yyloc;
/* Shift the error token. */
@@ -2862,8 +2877,8 @@ yyreturn:
-/* Line 1675 of yacc.c */
-#line 550 "glcpp/glcpp-parse.y"
+/* Line 1684 of yacc.c */
+#line 557 "glcpp/glcpp-parse.y"
string_list_t *
diff --git a/src/glsl/glcpp/glcpp-parse.h b/src/glsl/glcpp/glcpp-parse.h
index 50758930e9..40556854f3 100644
--- a/src/glsl/glcpp/glcpp-parse.h
+++ b/src/glsl/glcpp/glcpp-parse.h
@@ -1,10 +1,9 @@
-
-/* A Bison parser, made by GNU Bison 2.4.1. */
+/* A Bison parser, made by GNU Bison 2.4.3. */
/* Skeleton interface for Bison's Yacc-like parsers in C
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2009, 2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
diff --git a/src/glsl/glcpp/glcpp-parse.y b/src/glsl/glcpp/glcpp-parse.y
index b31a18f87d..558ad0acac 100644
--- a/src/glsl/glcpp/glcpp-parse.y
+++ b/src/glsl/glcpp/glcpp-parse.y
@@ -320,6 +320,14 @@ control_line:
if ($2 == 100)
add_builtin_define (parser, "GL_ES", 1);
+ /* Currently, all ES2 implementations support highp in the
+ * fragment shader, so we always define this macro in ES2.
+ * If we ever get a driver that doesn't support highp, we'll
+ * need to add a flag to the gl_context and check that here.
+ */
+ if ($2 >= 130 || $2 == 100)
+ add_builtin_define (parser, "GL_FRAGMENT_PRECISION_HIGH", 1);
+
glcpp_printf(parser->output, "#version %" PRIiMAX, $2);
}
| HASH NEWLINE
@@ -464,7 +472,6 @@ conditional_token:
conditional_tokens:
/* Exactly the same as pp_tokens, but using conditional_token */
conditional_token {
- parser->space_tokens = 1;
$$ = _token_list_create (parser);
_token_list_append ($$, $1);
talloc_unlink (parser, $1);
diff --git a/src/glsl/glsl_lexer.cpp b/src/glsl/glsl_lexer.cpp
index d3bc3aa9f1..39c119001f 100644
--- a/src/glsl/glsl_lexer.cpp
+++ b/src/glsl/glsl_lexer.cpp
@@ -54,6 +54,7 @@ typedef int flex_int32_t;
typedef unsigned char flex_uint8_t;
typedef unsigned short int flex_uint16_t;
typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
/* Limits of integral types. */
#ifndef INT8_MIN
@@ -84,8 +85,6 @@ typedef unsigned int flex_uint32_t;
#define UINT32_MAX (4294967295U)
#endif
-#endif /* ! C99 */
-
#endif /* ! FLEXINT_H */
#ifdef __cplusplus
@@ -159,15 +158,7 @@ typedef void* yyscan_t;
/* Size of default input buffer. */
#ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
#define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
#endif
/* The state buf must be large enough to hold one state per character in the main buffer.
@@ -358,8 +349,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
*yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp;
-#define YY_NUM_RULES 189
-#define YY_END_OF_BUFFER 190
+#define YY_NUM_RULES 209
+#define YY_END_OF_BUFFER 210
/* This struct is not used in this scanner,
but its presence is necessary. */
struct yy_trans_info
@@ -367,87 +358,98 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
-static yyconst flex_int16_t yy_accept[716] =
+static yyconst flex_int16_t yy_accept[813] =
{ 0,
- 0, 0, 15, 15, 0, 0, 190, 188, 1, 20,
- 188, 188, 188, 188, 188, 188, 188, 188, 102, 100,
- 188, 188, 188, 187, 188, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 188, 1, 188, 189, 15,
- 19, 189, 18, 16, 17, 13, 12, 1, 84, 93,
- 85, 96, 90, 79, 92, 80, 99, 104, 91, 105,
- 102, 0, 0, 107, 0, 100, 88, 81, 83, 82,
- 89, 187, 97, 87, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 29, 187, 187, 187,
-
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
- 33, 187, 187, 60, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 98, 86, 1, 0,
- 0, 2, 0, 0, 0, 0, 15, 14, 18, 17,
- 0, 104, 103, 0, 105, 0, 106, 101, 94, 95,
- 187, 110, 187, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 32, 187, 187, 187, 187, 187, 187,
-
- 187, 187, 187, 187, 25, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 61, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 0, 0, 0, 0, 14,
- 0, 104, 0, 103, 0, 105, 106, 187, 187, 23,
- 187, 187, 150, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 31, 113, 187, 187, 187, 187, 67, 187,
- 187, 118, 132, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 129, 153, 48, 49, 50, 187,
-
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 116,
- 108, 187, 187, 26, 187, 187, 187, 187, 187, 187,
- 45, 46, 47, 77, 187, 187, 0, 0, 0, 0,
- 0, 103, 187, 187, 27, 36, 37, 38, 187, 111,
- 187, 22, 187, 187, 187, 187, 140, 141, 142, 187,
- 109, 187, 133, 24, 143, 144, 145, 155, 137, 138,
- 139, 187, 187, 187, 62, 135, 187, 187, 39, 40,
- 41, 187, 187, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 187, 130, 187, 187,
-
- 187, 187, 187, 187, 187, 187, 187, 187, 112, 187,
- 152, 42, 43, 44, 187, 187, 30, 0, 0, 0,
- 0, 159, 187, 187, 157, 187, 187, 187, 131, 126,
- 162, 187, 187, 187, 187, 187, 187, 121, 187, 187,
- 78, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 187, 187, 187, 187, 136, 117, 187, 187, 124, 35,
- 187, 187, 149, 68, 125, 76, 160, 119, 187, 187,
- 187, 187, 187, 187, 187, 0, 0, 0, 0, 187,
- 187, 187, 120, 34, 187, 187, 187, 187, 187, 187,
- 163, 164, 165, 187, 187, 187, 187, 154, 187, 187,
-
- 187, 187, 187, 187, 187, 187, 114, 187, 187, 187,
- 187, 187, 63, 187, 64, 187, 0, 0, 0, 0,
- 0, 187, 65, 28, 127, 167, 168, 169, 187, 187,
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 122,
- 187, 187, 187, 187, 187, 187, 187, 187, 187, 115,
- 171, 172, 173, 187, 187, 134, 123, 0, 0, 6,
- 0, 0, 0, 11, 3, 21, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 166, 128, 66, 151, 187,
- 158, 156, 186, 70, 71, 72, 187, 187, 187, 187,
- 187, 187, 0, 0, 0, 0, 0, 0, 187, 187,
-
- 187, 170, 187, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 187, 187, 187, 187, 187, 174, 4, 0,
- 5, 0, 0, 0, 0, 0, 187, 187, 187, 187,
- 187, 187, 187, 183, 187, 187, 187, 187, 187, 187,
- 73, 187, 187, 187, 0, 0, 0, 187, 187, 184,
- 175, 187, 176, 187, 187, 187, 187, 187, 187, 187,
- 187, 187, 185, 0, 0, 177, 178, 181, 182, 69,
- 187, 146, 187, 147, 161, 179, 180, 0, 0, 187,
- 187, 187, 0, 0, 0, 74, 187, 75, 0, 0,
- 0, 187, 0, 0, 0, 187, 0, 0, 7, 0,
-
- 0, 187, 0, 8, 0, 0, 148, 0, 0, 0,
- 0, 9, 0, 10, 0
+ 0, 0, 15, 15, 0, 0, 210, 208, 1, 20,
+ 208, 208, 208, 208, 208, 208, 208, 208, 119, 117,
+ 208, 208, 208, 207, 208, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 208, 1, 208, 209, 15,
+ 19, 209, 18, 16, 17, 13, 12, 1, 101, 110,
+ 102, 113, 107, 96, 109, 97, 116, 121, 108, 122,
+ 119, 0, 0, 124, 119, 0, 117, 117, 105, 98,
+ 100, 99, 106, 207, 114, 104, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 29, 207,
+
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 33, 207, 207, 60, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 115,
+ 103, 1, 0, 0, 2, 0, 0, 0, 0, 15,
+ 14, 18, 17, 0, 121, 120, 0, 122, 0, 123,
+ 118, 111, 112, 207, 127, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 32, 207, 207, 207,
+
+ 207, 207, 207, 207, 207, 207, 207, 25, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 61,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 0, 0, 0, 0, 14, 0, 121, 0, 120, 0,
+ 122, 123, 118, 207, 207, 23, 207, 207, 174, 167,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 31,
+ 130, 207, 207, 207, 207, 67, 207, 207, 135, 149,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+
+ 207, 207, 146, 170, 48, 49, 50, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 133, 125, 207,
+ 207, 26, 207, 207, 207, 207, 207, 207, 207, 45,
+ 46, 47, 94, 207, 207, 0, 0, 0, 0, 0,
+ 120, 207, 207, 27, 36, 37, 38, 207, 128, 207,
+ 22, 207, 207, 207, 207, 157, 158, 159, 207, 126,
+ 207, 150, 24, 160, 161, 162, 172, 154, 155, 156,
+ 207, 207, 207, 62, 152, 207, 207, 207, 39, 40,
+ 41, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+
+ 207, 207, 207, 207, 207, 207, 207, 147, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 129, 207,
+ 207, 169, 42, 43, 44, 207, 207, 30, 0, 0,
+ 0, 0, 177, 207, 207, 175, 207, 207, 207, 148,
+ 143, 180, 207, 207, 207, 207, 207, 207, 138, 207,
+ 207, 207, 95, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 207, 207, 207, 207, 153, 134, 207, 207,
+ 141, 35, 207, 207, 166, 68, 142, 93, 178, 136,
+ 207, 207, 207, 207, 207, 207, 207, 207, 0, 0,
+ 0, 0, 207, 207, 207, 137, 34, 207, 207, 207,
+
+ 207, 207, 207, 181, 182, 183, 207, 207, 207, 207,
+ 207, 171, 207, 207, 207, 207, 207, 207, 207, 207,
+ 131, 207, 207, 207, 207, 207, 63, 207, 207, 64,
+ 207, 0, 0, 0, 0, 0, 207, 65, 28, 144,
+ 185, 186, 187, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 139, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 132, 189, 190, 191, 207,
+ 207, 151, 207, 140, 0, 0, 6, 0, 0, 0,
+ 11, 3, 21, 207, 207, 207, 207, 207, 207, 207,
+ 207, 207, 184, 145, 66, 207, 207, 207, 207, 168,
+
+ 207, 176, 173, 206, 70, 71, 72, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 0, 0, 0,
+ 0, 0, 0, 207, 207, 207, 188, 207, 207, 207,
+ 207, 207, 81, 82, 83, 207, 207, 207, 207, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 192, 87,
+ 88, 89, 207, 4, 0, 5, 0, 0, 0, 0,
+ 0, 207, 207, 207, 207, 207, 207, 207, 203, 207,
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 73, 207, 207, 207, 207, 207, 207, 0, 0, 0,
+ 207, 207, 204, 193, 207, 194, 207, 207, 207, 84,
+
+ 207, 207, 207, 207, 207, 207, 207, 207, 207, 207,
+ 207, 205, 207, 207, 90, 0, 0, 195, 196, 207,
+ 199, 207, 200, 207, 207, 69, 207, 207, 207, 163,
+ 207, 164, 179, 207, 197, 198, 207, 207, 0, 0,
+ 207, 207, 207, 207, 74, 207, 75, 207, 207, 207,
+ 207, 207, 0, 0, 0, 207, 207, 85, 86, 207,
+ 76, 207, 207, 77, 207, 91, 92, 0, 0, 0,
+ 207, 207, 207, 207, 207, 207, 0, 0, 0, 207,
+ 207, 207, 207, 207, 78, 0, 0, 7, 0, 0,
+ 201, 202, 207, 207, 207, 0, 8, 0, 0, 207,
+
+ 207, 165, 0, 0, 79, 80, 0, 0, 9, 0,
+ 10, 0
} ;
static yyconst flex_int32_t yy_ec[256] =
@@ -460,12 +462,12 @@ static yyconst flex_int32_t yy_ec[256] =
19, 20, 21, 21, 21, 22, 22, 23, 1, 24,
25, 26, 1, 1, 27, 28, 29, 30, 31, 32,
33, 33, 33, 33, 33, 33, 33, 33, 33, 33,
- 33, 34, 35, 33, 33, 33, 33, 36, 33, 33,
- 1, 1, 1, 37, 38, 1, 39, 40, 41, 42,
+ 33, 34, 35, 33, 36, 33, 33, 37, 33, 33,
+ 1, 1, 1, 38, 39, 1, 40, 41, 42, 43,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 33, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 1, 64, 1, 1, 1, 1, 1, 1,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 33, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 1, 65, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -482,317 +484,350 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static yyconst flex_int32_t yy_meta[65] =
+static yyconst flex_int32_t yy_meta[66] =
{ 0,
1, 2, 3, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 4, 4, 4, 4, 4,
4, 5, 1, 1, 1, 1, 6, 6, 6, 6,
- 5, 5, 7, 7, 7, 8, 1, 7, 6, 6,
- 6, 6, 5, 5, 7, 7, 7, 7, 7, 7,
+ 5, 5, 7, 7, 7, 7, 8, 1, 7, 6,
+ 6, 6, 6, 5, 5, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 8, 7, 7, 1
+ 7, 8, 7, 7, 1
} ;
-static yyconst flex_int16_t yy_base[727] =
+static yyconst flex_int16_t yy_base[824] =
{ 0,
- 0, 63, 69, 0, 1083, 1082, 1084, 1087, 64, 1087,
- 1058, 1057, 126, 1056, 123, 124, 122, 1055, 138, 186,
- 121, 1054, 136, 0, 128, 122, 113, 134, 133, 133,
- 162, 1025, 151, 172, 97, 128, 136, 1019, 156, 179,
- 187, 193, 190, 211, 1030, 163, 254, 238, 1087, 189,
- 1087, 1060, 249, 1087, 0, 1087, 1087, 249, 1087, 1087,
- 1087, 1087, 1087, 1087, 1087, 1087, 1087, 230, 1087, 246,
- 221, 284, 301, 1087, 0, 0, 1049, 1087, 1087, 1087,
- 1048, 0, 1087, 1087, 1015, 1020, 1013, 1016, 1025, 1024,
- 1010, 1013, 1025, 145, 1019, 1006, 1003, 1017, 1003, 1000,
-
- 1000, 1006, 202, 233, 1000, 1011, 996, 1002, 1006, 1007,
- 0, 998, 1009, 226, 1004, 984, 168, 988, 1002, 992,
- 237, 985, 252, 998, 1000, 982, 978, 986, 983, 972,
- 981, 204, 979, 985, 980, 983, 971, 974, 243, 240,
- 980, 983, 970, 983, 261, 976, 1087, 1087, 327, 307,
- 322, 1087, 961, 974, 965, 976, 328, 0, 318, 0,
- 366, 1087, 310, 377, 1087, 327, 384, 0, 1087, 1087,
- 971, 0, 962, 966, 976, 973, 956, 955, 955, 959,
- 295, 970, 967, 967, 965, 962, 953, 960, 946, 944,
- 957, 942, 959, 0, 956, 943, 951, 948, 952, 953,
-
- 946, 943, 931, 930, 944, 947, 944, 931, 938, 928,
- 340, 934, 937, 927, 935, 923, 927, 918, 933, 923,
- 914, 933, 916, 914, 925, 914, 909, 907, 921, 906,
- 908, 905, 917, 916, 919, 900, 311, 909, 903, 913,
- 891, 349, 910, 912, 900, 892, 896, 908, 891, 0,
- 391, 401, 418, 1087, 430, 437, 1087, 886, 897, 0,
- 894, 355, 0, 887, 885, 887, 882, 891, 879, 897,
- 885, 406, 0, 0, 879, 890, 889, 889, 0, 873,
- 423, 0, 0, 875, 442, 883, 884, 874, 868, 867,
- 868, 867, 445, 863, 0, 0, 859, 858, 857, 859,
-
- 860, 865, 859, 855, 869, 864, 863, 862, 853, 856,
- 856, 848, 851, 846, 855, 860, 845, 858, 848, 0,
- 0, 855, 851, 0, 842, 842, 848, 847, 448, 844,
- 0, 0, 0, 0, 833, 846, 845, 844, 841, 829,
- 454, 466, 841, 843, 0, 0, 0, 0, 829, 0,
- 829, 0, 828, 829, 823, 834, 0, 0, 0, 824,
- 0, 820, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 831, 461, 830, 0, 0, 828, 824, 0, 0,
- 0, 813, 473, 476, 481, 818, 814, 820, 810, 808,
- 822, 806, 806, 820, 808, 820, 815, 0, 813, 810,
-
- 814, 797, 799, 806, 812, 807, 806, 793, 0, 795,
- 0, 0, 0, 0, 794, 798, 0, 792, 841, 791,
- 794, 0, 782, 792, 0, 780, 780, 794, 0, 796,
- 0, 485, 804, 803, 802, 773, 772, 0, 790, 789,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 773, 787, 773, 770, 0, 0, 776, 775, 0, 0,
- 773, 765, 0, 0, 0, 0, 0, 0, 762, 774,
- 488, 766, 773, 770, 764, 757, 506, 773, 758, 753,
- 767, 765, 0, 0, 757, 776, 775, 774, 745, 744,
- 335, 336, 0, 757, 760, 758, 746, 0, 756, 753,
-
- 752, 741, 740, 739, 501, 748, 0, 760, 759, 758,
- 729, 728, 0, 743, 0, 741, 736, 509, 530, 780,
- 729, 737, 0, 0, 0, 752, 751, 0, 733, 736,
- 720, 728, 718, 726, 727, 727, 726, 711, 724, 0,
- 725, 713, 712, 708, 732, 731, 730, 701, 700, 0,
- 730, 729, 0, 711, 714, 0, 0, 700, 537, 1087,
- 558, 0, 564, 560, 1087, 0, 697, 696, 706, 706,
- 693, 708, 691, 706, 701, 0, 0, 0, 0, 686,
- 0, 0, 0, 707, 357, 707, 696, 699, 683, 682,
- 692, 692, 682, 532, 587, 412, 690, 678, 676, 675,
-
- 686, 0, 689, 685, 687, 683, 669, 676, 676, 678,
- 674, 676, 674, 674, 661, 660, 671, 0, 1087, 534,
- 1087, 598, 0, 608, 673, 655, 672, 671, 654, 646,
- 654, 644, 652, 0, 645, 664, 661, 658, 655, 652,
- 0, 648, 647, 630, 539, 618, 600, 584, 583, 0,
- 0, 579, 0, 578, 594, 580, 564, 527, 506, 489,
- 453, 447, 0, 452, 426, 0, 0, 0, 0, 0,
- 391, 397, 376, 0, 0, 0, 0, 529, 380, 320,
- 331, 296, 562, 273, 249, 0, 260, 0, 519, 521,
- 192, 183, 169, 585, 589, 111, 586, 610, 1087, 590,
-
- 541, 87, 621, 1087, 595, 588, 0, 23, 631, 632,
- 633, 1087, 634, 1087, 1087, 648, 653, 658, 663, 665,
- 667, 673, 680, 685, 690, 695
+ 0, 64, 70, 0, 1185, 1184, 1186, 1189, 65, 1189,
+ 1160, 1159, 128, 1158, 125, 126, 124, 1157, 140, 189,
+ 123, 1156, 138, 0, 127, 124, 113, 135, 144, 161,
+ 176, 1126, 130, 187, 140, 143, 161, 1120, 182, 174,
+ 202, 199, 211, 212, 1131, 130, 263, 255, 1189, 189,
+ 1189, 1162, 256, 1189, 0, 1189, 1189, 215, 1189, 1189,
+ 1189, 1189, 1189, 1189, 1189, 1189, 1189, 248, 1189, 250,
+ 112, 302, 319, 1189, 1189, 0, 0, 1189, 1151, 1189,
+ 1189, 1189, 1150, 0, 1189, 1189, 1116, 1121, 1114, 1117,
+ 1126, 1125, 1111, 1114, 1126, 144, 1120, 1107, 1104, 1118,
+
+ 1104, 1101, 1101, 1107, 175, 191, 1101, 1112, 1097, 1103,
+ 1107, 1108, 0, 1099, 1110, 247, 1109, 1104, 1084, 230,
+ 1088, 1102, 1092, 241, 1085, 228, 1098, 1100, 1082, 1078,
+ 1086, 1083, 1072, 1081, 173, 1079, 1085, 1080, 1083, 1071,
+ 1074, 233, 240, 260, 1084, 1071, 1084, 239, 1077, 1189,
+ 1189, 307, 301, 323, 1189, 1062, 1075, 1066, 1077, 249,
+ 0, 368, 0, 379, 1189, 298, 390, 1189, 397, 404,
+ 291, 1189, 1189, 1072, 0, 1063, 1067, 1077, 1074, 270,
+ 1057, 1057, 1061, 291, 1072, 1069, 1069, 1067, 1064, 1055,
+ 1062, 1048, 1046, 1059, 1044, 1061, 0, 1058, 1045, 1053,
+
+ 1050, 1054, 1055, 1048, 1045, 1033, 1032, 1046, 1049, 1036,
+ 1045, 1032, 1039, 1029, 335, 1035, 1038, 1028, 1036, 1024,
+ 1028, 1019, 1034, 1024, 1015, 1034, 1017, 1015, 1026, 1015,
+ 1010, 1008, 1022, 1007, 1009, 1006, 1018, 1017, 1020, 1001,
+ 306, 1010, 1005, 1003, 1013, 991, 339, 1010, 1012, 1000,
+ 992, 996, 1008, 991, 0, 411, 421, 438, 1189, 451,
+ 458, 1189, 1189, 986, 997, 0, 994, 344, 0, 0,
+ 987, 985, 987, 982, 991, 979, 997, 985, 350, 0,
+ 0, 979, 990, 989, 989, 0, 973, 353, 0, 0,
+ 975, 357, 983, 984, 974, 968, 967, 968, 967, 967,
+
+ 361, 962, 0, 0, 958, 957, 956, 958, 959, 964,
+ 958, 954, 968, 963, 962, 961, 952, 955, 955, 947,
+ 950, 945, 954, 959, 944, 957, 947, 0, 0, 954,
+ 950, 0, 941, 941, 947, 937, 945, 426, 942, 0,
+ 0, 0, 0, 931, 944, 943, 942, 939, 927, 465,
+ 475, 939, 941, 0, 0, 0, 0, 927, 0, 927,
+ 0, 926, 927, 921, 932, 0, 0, 0, 922, 0,
+ 918, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 929, 481, 928, 0, 0, 926, 922, 918, 0, 0,
+ 0, 910, 443, 486, 493, 915, 911, 917, 907, 905,
+
+ 919, 903, 903, 917, 905, 917, 912, 0, 910, 907,
+ 911, 894, 896, 903, 909, 904, 903, 890, 0, 892,
+ 893, 0, 0, 0, 0, 890, 894, 0, 888, 938,
+ 887, 890, 0, 878, 888, 0, 876, 876, 890, 0,
+ 892, 0, 497, 901, 900, 899, 869, 868, 0, 886,
+ 885, 880, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 868, 882, 868, 865, 0, 0, 871, 870,
+ 0, 0, 868, 860, 0, 0, 0, 0, 0, 0,
+ 857, 869, 500, 861, 868, 867, 864, 858, 851, 519,
+ 867, 852, 847, 861, 859, 0, 0, 851, 871, 870,
+
+ 869, 839, 838, 495, 496, 0, 851, 854, 852, 840,
+ 836, 0, 849, 846, 845, 834, 833, 832, 515, 841,
+ 0, 854, 853, 852, 822, 821, 0, 836, 822, 0,
+ 833, 828, 543, 545, 873, 821, 829, 0, 0, 0,
+ 845, 844, 0, 825, 828, 812, 820, 810, 818, 819,
+ 819, 818, 803, 539, 816, 0, 817, 805, 804, 800,
+ 825, 824, 823, 793, 792, 0, 823, 822, 0, 803,
+ 806, 0, 552, 0, 792, 557, 1189, 580, 0, 590,
+ 499, 1189, 0, 789, 788, 798, 798, 785, 800, 783,
+ 798, 793, 0, 0, 0, 806, 805, 804, 774, 0,
+
+ 774, 0, 0, 0, 559, 568, 797, 785, 788, 772,
+ 771, 781, 781, 794, 793, 792, 762, 767, 552, 613,
+ 363, 775, 763, 761, 760, 771, 0, 774, 770, 772,
+ 768, 754, 782, 781, 0, 766, 758, 749, 757, 747,
+ 758, 754, 756, 754, 754, 741, 740, 751, 0, 767,
+ 766, 0, 751, 1189, 391, 1189, 620, 0, 640, 750,
+ 732, 749, 748, 731, 723, 731, 721, 729, 0, 726,
+ 725, 736, 719, 722, 737, 720, 733, 734, 731, 728,
+ 736, 730, 729, 712, 711, 710, 721, 402, 705, 715,
+ 699, 698, 0, 725, 698, 723, 696, 700, 699, 0,
+
+ 710, 713, 709, 711, 688, 702, 686, 680, 688, 671,
+ 662, 0, 640, 639, 0, 648, 641, 0, 0, 645,
+ 0, 644, 0, 650, 649, 0, 625, 633, 623, 650,
+ 630, 0, 0, 643, 0, 0, 642, 641, 582, 632,
+ 639, 638, 614, 613, 635, 608, 633, 607, 590, 607,
+ 586, 585, 611, 380, 526, 545, 544, 0, 0, 538,
+ 0, 504, 510, 0, 495, 0, 0, 550, 572, 483,
+ 470, 454, 462, 449, 445, 404, 419, 616, 619, 391,
+ 387, 404, 392, 290, 0, 617, 642, 1189, 644, 570,
+ 0, 0, 263, 258, 139, 645, 1189, 643, 618, 107,
+
+ 77, 0, 23, 662, 0, 0, 663, 664, 1189, 665,
+ 1189, 1189, 697, 702, 707, 712, 714, 716, 722, 729,
+ 734, 739, 744
} ;
-static yyconst flex_int16_t yy_def[727] =
+static yyconst flex_int16_t yy_def[824] =
{ 0,
- 715, 1, 715, 3, 716, 716, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
- 715, 715, 715, 717, 715, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 715, 715, 715, 715, 715,
- 715, 715, 715, 715, 718, 715, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 719, 715, 720,
- 19, 715, 715, 715, 721, 20, 715, 715, 715, 715,
- 715, 717, 715, 715, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
-
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 722, 715, 718,
- 715, 715, 720, 715, 715, 715, 715, 721, 715, 715,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
-
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 715, 715, 715, 715, 722,
- 715, 715, 715, 715, 715, 715, 715, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
-
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 715, 715, 715, 715,
- 715, 715, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
-
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 715, 715, 715,
- 715, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 715, 715, 715, 715, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
-
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 715, 723, 715, 715,
- 715, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 715, 715, 715,
- 715, 724, 715, 715, 715, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 715, 725, 715, 724, 715, 715, 717, 717,
-
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 715, 715,
- 715, 715, 726, 715, 715, 715, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 726, 715, 715, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 717, 717, 717,
- 717, 717, 717, 715, 715, 717, 717, 717, 717, 717,
- 717, 717, 717, 717, 717, 717, 717, 715, 715, 717,
- 717, 717, 715, 715, 715, 717, 717, 717, 715, 715,
- 715, 717, 715, 715, 715, 717, 715, 715, 715, 715,
-
- 715, 717, 715, 715, 715, 715, 717, 715, 715, 715,
- 715, 715, 715, 715, 0, 715, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715
+ 812, 1, 812, 3, 813, 813, 812, 812, 812, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812, 814, 812, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812, 815, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812, 812, 812, 812, 816, 812, 817,
+ 19, 812, 812, 812, 812, 818, 20, 812, 812, 812,
+ 812, 812, 812, 814, 812, 812, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 819, 812, 815, 812, 812, 817, 812, 812, 812, 812,
+ 818, 812, 812, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 812, 812, 812, 812, 819, 812, 812, 812, 812, 812,
+ 812, 812, 812, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 812, 812, 812, 812, 812,
+ 812, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 812, 812,
+ 812, 812, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 812, 812,
+ 812, 812, 814, 814, 814, 814, 814, 814, 814, 814,
+
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 812, 820, 812, 812, 812, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 812, 812, 812, 812, 821, 812,
+ 812, 812, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 812, 822, 812,
+ 821, 812, 812, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 812, 812, 812, 812, 823, 812, 812,
+ 812, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 823, 812, 812,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 812, 812, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 814, 812, 812,
+ 814, 814, 814, 814, 814, 814, 814, 814, 814, 814,
+ 814, 814, 812, 812, 812, 814, 814, 814, 814, 814,
+ 814, 814, 814, 814, 814, 814, 814, 812, 812, 812,
+ 814, 814, 814, 814, 814, 814, 812, 812, 812, 814,
+ 814, 814, 814, 814, 814, 812, 812, 812, 812, 812,
+ 814, 814, 814, 814, 814, 812, 812, 812, 812, 814,
+
+ 814, 814, 812, 812, 814, 814, 812, 812, 812, 812,
+ 812, 0, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812
} ;
-static yyconst flex_int16_t yy_nxt[1152] =
+static yyconst flex_int16_t yy_nxt[1255] =
{ 0,
8, 9, 10, 9, 11, 8, 12, 13, 8, 8,
14, 15, 16, 17, 18, 19, 20, 20, 20, 20,
20, 20, 8, 21, 22, 23, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 25, 24, 26, 27,
- 28, 29, 30, 31, 32, 33, 34, 24, 24, 35,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 24, 24, 24, 46, 47, 58, 710, 58, 48, 49,
- 50, 51, 50, 49, 49, 49, 49, 49, 49, 49,
- 49, 49, 49, 52, 49, 53, 53, 53, 53, 53,
- 53, 54, 49, 49, 49, 55, 55, 55, 55, 55,
-
- 55, 55, 55, 55, 55, 49, 55, 55, 55, 55,
+ 24, 24, 24, 24, 24, 24, 24, 25, 24, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, 24, 24,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 24, 24, 24, 46, 47, 58, 807, 58, 48,
+ 49, 50, 51, 50, 49, 49, 49, 49, 49, 49,
+ 49, 49, 49, 49, 52, 49, 53, 53, 53, 53,
+ 53, 53, 54, 49, 49, 49, 55, 55, 55, 55,
+
+ 55, 55, 55, 55, 55, 55, 55, 49, 55, 55,
55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
55, 55, 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 49, 61, 64, 116, 66, 68, 68, 68,
- 68, 68, 68, 68, 77, 78, 707, 65, 67, 117,
- 62, 70, 83, 71, 71, 71, 71, 71, 71, 72,
- 80, 81, 85, 702, 84, 88, 118, 89, 73, 74,
- 119, 90, 91, 75, 120, 95, 92, 86, 87, 96,
- 73, 74, 99, 93, 100, 97, 94, 147, 121, 108,
- 157, 98, 157, 101, 123, 180, 181, 109, 75, 70,
-
- 102, 76, 76, 76, 76, 76, 76, 76, 103, 110,
- 124, 104, 697, 125, 105, 111, 73, 74, 112, 209,
- 106, 126, 113, 114, 696, 128, 148, 210, 73, 74,
- 115, 127, 129, 130, 695, 135, 139, 131, 136, 151,
- 152, 140, 227, 132, 133, 141, 134, 137, 142, 143,
- 58, 190, 58, 144, 138, 149, 715, 58, 228, 150,
- 161, 162, 191, 145, 159, 159, 159, 159, 159, 159,
- 159, 192, 161, 162, 689, 202, 164, 165, 203, 204,
- 153, 715, 205, 214, 206, 193, 237, 154, 164, 165,
- 215, 155, 217, 235, 236, 238, 156, 70, 692, 72,
-
- 72, 72, 72, 72, 72, 72, 218, 243, 151, 152,
- 244, 691, 166, 166, 73, 74, 167, 167, 167, 167,
- 167, 167, 167, 151, 152, 690, 73, 74, 149, 157,
- 58, 157, 150, 159, 159, 159, 159, 159, 159, 159,
- 253, 254, 167, 167, 167, 167, 167, 167, 167, 153,
- 267, 268, 253, 254, 325, 688, 154, 297, 298, 299,
- 155, 531, 533, 326, 153, 156, 331, 332, 333, 532,
- 534, 154, 346, 347, 348, 155, 687, 251, 251, 686,
- 156, 252, 252, 252, 252, 252, 252, 252, 255, 255,
- 610, 611, 256, 256, 256, 256, 256, 256, 256, 167,
-
- 167, 167, 167, 167, 167, 167, 252, 252, 252, 252,
- 252, 252, 252, 559, 560, 257, 252, 252, 252, 252,
- 252, 252, 252, 357, 358, 359, 685, 257, 682, 341,
- 341, 681, 162, 342, 342, 342, 342, 342, 342, 342,
- 365, 366, 367, 680, 162, 256, 256, 256, 256, 256,
- 256, 256, 256, 256, 256, 256, 256, 256, 256, 369,
- 370, 371, 379, 380, 381, 412, 413, 414, 165, 342,
- 342, 342, 342, 342, 342, 342, 679, 433, 434, 435,
- 165, 342, 342, 342, 342, 342, 342, 342, 436, 437,
- 442, 443, 444, 445, 446, 447, 678, 254, 448, 449,
-
- 450, 486, 487, 488, 508, 509, 510, 477, 677, 254,
- 559, 560, 489, 490, 676, 511, 512, 545, 546, 547,
- 689, 518, 519, 519, 519, 519, 519, 519, 548, 549,
- 683, 559, 560, 620, 621, 620, 621, 684, 559, 560,
- 620, 621, 705, 675, 562, 563, 563, 563, 563, 563,
- 563, 563, 594, 595, 595, 595, 595, 595, 595, 559,
- 560, 564, 674, 683, 693, 559, 560, 623, 673, 562,
- 684, 690, 694, 561, 561, 561, 561, 561, 561, 563,
- 563, 563, 563, 563, 563, 563, 698, 703, 620, 621,
- 700, 700, 623, 706, 699, 704, 705, 701, 701, 620,
-
- 621, 597, 624, 624, 624, 624, 624, 624, 624, 620,
- 621, 698, 598, 622, 622, 622, 622, 622, 622, 699,
- 672, 671, 703, 624, 624, 624, 624, 624, 624, 624,
- 704, 708, 711, 713, 711, 713, 670, 669, 668, 709,
- 712, 714, 712, 714, 667, 666, 665, 706, 56, 56,
- 56, 56, 56, 56, 56, 56, 82, 82, 82, 82,
- 82, 160, 160, 160, 160, 160, 68, 68, 163, 163,
- 168, 168, 168, 250, 250, 664, 250, 250, 250, 250,
- 250, 561, 561, 561, 663, 662, 661, 561, 596, 596,
- 596, 622, 622, 622, 660, 659, 658, 622, 645, 645,
-
- 645, 657, 656, 655, 654, 653, 652, 651, 650, 649,
- 648, 647, 646, 644, 643, 642, 641, 640, 639, 638,
- 637, 636, 635, 634, 633, 632, 631, 630, 629, 628,
- 627, 626, 625, 619, 618, 617, 616, 615, 614, 613,
- 612, 609, 608, 607, 606, 605, 604, 603, 602, 601,
- 600, 599, 593, 592, 591, 590, 589, 588, 587, 586,
- 585, 584, 583, 582, 581, 580, 579, 578, 577, 576,
- 575, 574, 573, 572, 571, 570, 569, 568, 567, 566,
- 565, 564, 558, 557, 556, 555, 554, 553, 552, 551,
- 550, 544, 543, 542, 541, 540, 539, 538, 537, 536,
-
- 535, 530, 529, 528, 527, 526, 525, 524, 523, 522,
- 521, 520, 517, 516, 515, 514, 513, 507, 506, 505,
- 504, 503, 502, 501, 500, 499, 498, 497, 496, 495,
- 494, 493, 492, 491, 485, 484, 483, 482, 481, 480,
+ 55, 55, 55, 55, 49, 61, 64, 806, 66, 68,
+ 68, 68, 68, 68, 68, 68, 79, 80, 812, 65,
+ 67, 85, 62, 70, 150, 71, 71, 71, 71, 71,
+ 71, 72, 82, 83, 86, 87, 90, 805, 91, 110,
+ 73, 74, 92, 812, 93, 75, 76, 111, 94, 119,
+ 88, 89, 121, 73, 74, 95, 122, 97, 96, 112,
+ 160, 98, 160, 120, 151, 183, 184, 99, 75, 802,
+
+ 123, 76, 70, 100, 77, 77, 77, 77, 77, 77,
+ 77, 101, 231, 102, 124, 104, 58, 129, 58, 73,
+ 74, 126, 103, 105, 78, 193, 106, 130, 232, 107,
+ 195, 113, 73, 74, 114, 108, 194, 127, 115, 116,
+ 128, 131, 138, 117, 196, 139, 118, 78, 132, 133,
+ 160, 146, 160, 134, 140, 147, 154, 155, 142, 135,
+ 136, 141, 137, 143, 152, 148, 58, 144, 153, 221,
+ 145, 162, 162, 162, 162, 162, 162, 162, 164, 165,
+ 167, 168, 213, 222, 239, 240, 248, 241, 218, 249,
+ 214, 164, 165, 167, 168, 219, 242, 205, 156, 243,
+
+ 206, 207, 154, 155, 208, 157, 209, 244, 152, 158,
+ 58, 801, 153, 269, 159, 70, 800, 72, 72, 72,
+ 72, 72, 72, 72, 154, 155, 263, 270, 258, 259,
+ 169, 169, 73, 74, 170, 170, 170, 170, 170, 170,
+ 170, 258, 259, 795, 156, 73, 74, 274, 275, 263,
+ 333, 157, 305, 306, 307, 158, 340, 341, 342, 334,
+ 159, 355, 356, 357, 576, 577, 156, 366, 367, 368,
+ 374, 375, 376, 157, 378, 379, 380, 158, 389, 390,
+ 391, 768, 159, 162, 162, 162, 162, 162, 162, 162,
+ 256, 256, 655, 656, 257, 257, 257, 257, 257, 257,
+
+ 257, 260, 260, 655, 656, 261, 261, 261, 261, 261,
+ 261, 261, 170, 170, 170, 170, 170, 170, 170, 170,
+ 170, 170, 170, 170, 170, 170, 257, 257, 257, 257,
+ 257, 257, 257, 769, 794, 262, 257, 257, 257, 257,
+ 257, 257, 257, 423, 424, 425, 793, 792, 262, 350,
+ 350, 791, 165, 351, 351, 351, 351, 351, 351, 351,
+ 454, 455, 456, 786, 785, 165, 261, 261, 261, 261,
+ 261, 261, 261, 261, 261, 261, 261, 261, 261, 261,
+ 351, 351, 351, 351, 351, 351, 351, 784, 783, 168,
+ 351, 351, 351, 351, 351, 351, 351, 444, 445, 446,
+
+ 581, 782, 168, 457, 458, 459, 259, 781, 447, 448,
+ 460, 461, 462, 499, 500, 501, 522, 523, 524, 259,
+ 490, 546, 548, 780, 502, 503, 779, 525, 526, 547,
+ 549, 561, 562, 563, 533, 534, 534, 534, 534, 534,
+ 534, 622, 564, 565, 576, 577, 576, 577, 776, 775,
+ 774, 768, 623, 655, 656, 596, 597, 598, 576, 577,
+ 580, 580, 580, 580, 580, 580, 580, 599, 614, 615,
+ 616, 798, 619, 620, 620, 620, 620, 620, 620, 579,
+ 617, 576, 577, 753, 773, 638, 772, 771, 658, 770,
+ 754, 576, 577, 639, 640, 578, 578, 578, 578, 578,
+
+ 578, 641, 642, 769, 579, 580, 580, 580, 580, 580,
+ 580, 580, 753, 658, 655, 656, 777, 787, 796, 754,
+ 789, 655, 656, 799, 778, 788, 797, 790, 659, 659,
+ 659, 659, 659, 659, 659, 657, 657, 657, 657, 657,
+ 657, 655, 656, 787, 798, 789, 796, 767, 766, 765,
+ 764, 788, 790, 763, 797, 659, 659, 659, 659, 659,
+ 659, 659, 803, 808, 810, 808, 810, 762, 761, 760,
+ 804, 809, 811, 809, 811, 759, 758, 757, 756, 755,
+ 752, 751, 750, 749, 748, 747, 746, 745, 744, 743,
+ 742, 741, 740, 739, 738, 737, 799, 56, 56, 56,
+
+ 56, 56, 56, 56, 56, 84, 84, 84, 84, 84,
+ 163, 163, 163, 163, 163, 68, 68, 166, 166, 171,
+ 171, 171, 255, 255, 736, 255, 255, 255, 255, 255,
+ 578, 578, 578, 735, 734, 733, 578, 621, 621, 621,
+ 657, 657, 657, 732, 731, 730, 657, 688, 688, 688,
+ 729, 728, 727, 726, 725, 724, 723, 722, 721, 720,
+ 719, 718, 717, 716, 715, 714, 713, 712, 711, 710,
+ 709, 708, 707, 706, 705, 704, 703, 702, 701, 700,
+ 699, 698, 697, 696, 695, 694, 693, 692, 691, 690,
+ 689, 687, 686, 685, 684, 683, 682, 681, 680, 679,
+
+ 678, 677, 676, 675, 674, 673, 672, 671, 670, 669,
+ 668, 667, 666, 665, 664, 663, 662, 661, 660, 654,
+ 653, 652, 651, 650, 649, 648, 647, 646, 645, 644,
+ 643, 637, 636, 635, 634, 633, 632, 631, 630, 629,
+ 628, 627, 626, 625, 624, 618, 613, 612, 611, 610,
+ 609, 608, 607, 606, 605, 604, 603, 602, 601, 600,
+ 595, 594, 593, 592, 591, 590, 589, 588, 587, 586,
+ 585, 584, 583, 582, 581, 575, 574, 573, 572, 571,
+ 570, 569, 568, 567, 566, 560, 559, 558, 557, 556,
+ 555, 554, 553, 552, 551, 550, 545, 544, 543, 542,
+
+ 541, 540, 539, 538, 537, 536, 535, 532, 531, 530,
+ 529, 528, 527, 521, 520, 519, 518, 517, 516, 515,
+ 514, 513, 512, 511, 510, 509, 508, 507, 506, 505,
+ 504, 498, 497, 496, 495, 494, 493, 492, 491, 490,
+ 489, 488, 487, 486, 485, 484, 483, 482, 481, 480,
479, 478, 477, 476, 475, 474, 473, 472, 471, 470,
- 469, 468, 467, 466, 465, 464, 463, 462, 461, 460,
- 459, 458, 457, 456, 455, 454, 453, 452, 451, 441,
- 440, 439, 438, 432, 431, 430, 429, 428, 427, 426,
- 425, 424, 423, 422, 421, 420, 419, 418, 417, 416,
- 415, 411, 410, 409, 408, 407, 406, 405, 404, 403,
+ 469, 468, 467, 466, 465, 464, 463, 453, 452, 451,
+ 450, 449, 443, 442, 441, 440, 439, 438, 437, 436,
+ 435, 434, 433, 432, 431, 430, 429, 428, 427, 426,
+ 422, 421, 420, 419, 418, 417, 416, 415, 414, 413,
+ 412, 411, 410, 409, 408, 407, 406, 405, 404, 403,
402, 401, 400, 399, 398, 397, 396, 395, 394, 393,
- 392, 391, 390, 389, 388, 387, 386, 385, 384, 383,
- 382, 378, 377, 376, 375, 374, 373, 372, 368, 364,
- 363, 362, 361, 360, 356, 355, 354, 353, 352, 351,
- 350, 349, 345, 344, 343, 340, 339, 338, 337, 336,
- 335, 334, 330, 329, 328, 327, 324, 323, 322, 321,
+ 392, 388, 387, 386, 385, 384, 383, 382, 381, 377,
+ 373, 372, 371, 370, 369, 365, 364, 363, 362, 361,
+ 360, 359, 358, 354, 353, 352, 349, 348, 347, 346,
+ 345, 344, 343, 339, 338, 337, 336, 335, 332, 331,
+ 330, 329, 328, 327, 326, 325, 324, 323, 322, 321,
320, 319, 318, 317, 316, 315, 314, 313, 312, 311,
- 310, 309, 308, 307, 306, 305, 304, 303, 302, 301,
- 300, 296, 295, 294, 293, 292, 291, 290, 289, 288,
- 287, 286, 285, 284, 283, 282, 281, 280, 279, 278,
+ 310, 309, 308, 304, 303, 302, 301, 300, 299, 298,
+ 297, 296, 295, 294, 293, 292, 291, 290, 289, 288,
- 277, 276, 275, 274, 273, 272, 271, 270, 269, 266,
- 265, 264, 263, 262, 261, 260, 259, 258, 249, 248,
- 247, 246, 245, 242, 241, 240, 239, 234, 233, 232,
- 231, 230, 229, 226, 225, 224, 223, 222, 221, 220,
- 219, 216, 213, 212, 211, 208, 207, 201, 200, 199,
- 198, 197, 196, 195, 194, 189, 188, 187, 186, 185,
- 184, 183, 182, 179, 178, 177, 176, 175, 174, 173,
- 172, 171, 170, 169, 158, 146, 122, 107, 79, 69,
- 63, 60, 59, 715, 57, 57, 7, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
-
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
- 715
+ 287, 286, 285, 284, 283, 282, 281, 280, 279, 278,
+ 277, 276, 273, 272, 271, 268, 267, 266, 265, 264,
+ 254, 253, 252, 251, 250, 247, 246, 245, 238, 237,
+ 236, 235, 234, 233, 230, 229, 228, 227, 226, 225,
+ 224, 223, 220, 217, 216, 215, 212, 211, 210, 204,
+ 203, 202, 201, 200, 199, 198, 197, 192, 191, 190,
+ 189, 188, 187, 186, 185, 182, 181, 180, 179, 178,
+ 177, 176, 175, 174, 173, 172, 161, 149, 125, 109,
+ 81, 69, 63, 60, 59, 812, 57, 57, 7, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812
} ;
-static yyconst flex_int16_t yy_chk[1152] =
+static yyconst flex_int16_t yy_chk[1255] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -800,7 +835,7 @@ static yyconst flex_int16_t yy_chk[1152] =
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 2, 9, 708, 9, 2, 3,
+ 1, 1, 1, 1, 1, 2, 9, 803, 9, 2,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
@@ -808,119 +843,130 @@ static yyconst flex_int16_t yy_chk[1152] =
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 13, 15, 35, 16, 17, 17, 17,
- 17, 17, 17, 17, 21, 21, 702, 15, 16, 35,
- 13, 19, 25, 19, 19, 19, 19, 19, 19, 19,
- 23, 23, 26, 696, 25, 27, 36, 27, 19, 19,
- 36, 27, 28, 19, 37, 29, 28, 26, 26, 29,
- 19, 19, 30, 28, 30, 29, 28, 46, 37, 33,
- 50, 29, 50, 30, 39, 94, 94, 33, 19, 20,
-
- 31, 20, 20, 20, 20, 20, 20, 20, 31, 33,
- 39, 31, 693, 39, 31, 34, 20, 20, 34, 117,
- 31, 40, 34, 34, 692, 41, 46, 117, 20, 20,
- 34, 40, 41, 41, 691, 42, 43, 41, 42, 48,
- 48, 43, 132, 41, 41, 43, 41, 42, 43, 44,
- 58, 103, 58, 44, 42, 47, 71, 47, 132, 47,
- 68, 68, 103, 44, 53, 53, 53, 53, 53, 53,
- 53, 104, 68, 68, 684, 114, 70, 70, 114, 114,
- 48, 71, 114, 121, 114, 104, 140, 48, 70, 70,
- 121, 48, 123, 139, 139, 140, 48, 72, 687, 72,
-
- 72, 72, 72, 72, 72, 72, 123, 145, 150, 150,
- 145, 685, 73, 73, 72, 72, 73, 73, 73, 73,
- 73, 73, 73, 151, 151, 684, 72, 72, 149, 157,
- 149, 157, 149, 159, 159, 159, 159, 159, 159, 159,
- 163, 163, 166, 166, 166, 166, 166, 166, 166, 150,
- 181, 181, 163, 163, 237, 682, 150, 211, 211, 211,
- 150, 491, 492, 237, 151, 150, 242, 242, 242, 491,
- 492, 151, 262, 262, 262, 151, 681, 161, 161, 680,
- 151, 161, 161, 161, 161, 161, 161, 161, 164, 164,
- 585, 585, 164, 164, 164, 164, 164, 164, 164, 167,
-
- 167, 167, 167, 167, 167, 167, 251, 251, 251, 251,
- 251, 251, 251, 596, 596, 167, 252, 252, 252, 252,
- 252, 252, 252, 272, 272, 272, 679, 167, 673, 253,
- 253, 672, 252, 253, 253, 253, 253, 253, 253, 253,
- 281, 281, 281, 671, 252, 255, 255, 255, 255, 255,
- 255, 255, 256, 256, 256, 256, 256, 256, 256, 285,
- 285, 285, 293, 293, 293, 329, 329, 329, 256, 341,
- 341, 341, 341, 341, 341, 341, 665, 373, 373, 373,
- 256, 342, 342, 342, 342, 342, 342, 342, 373, 373,
- 383, 383, 383, 384, 384, 384, 664, 342, 385, 385,
-
- 385, 432, 432, 432, 471, 471, 471, 477, 662, 342,
- 518, 518, 432, 432, 661, 471, 471, 505, 505, 505,
- 689, 477, 477, 477, 477, 477, 477, 477, 505, 505,
- 678, 519, 519, 594, 594, 620, 620, 678, 559, 559,
- 645, 645, 701, 660, 518, 519, 519, 519, 519, 519,
- 519, 519, 559, 559, 559, 559, 559, 559, 559, 561,
- 561, 564, 659, 683, 690, 563, 563, 594, 658, 518,
- 683, 689, 690, 561, 561, 561, 561, 561, 561, 563,
- 563, 563, 563, 563, 563, 563, 694, 697, 595, 595,
- 695, 700, 594, 701, 694, 697, 705, 695, 700, 622,
-
- 622, 564, 595, 595, 595, 595, 595, 595, 595, 624,
- 624, 698, 564, 622, 622, 622, 622, 622, 622, 698,
- 657, 656, 703, 624, 624, 624, 624, 624, 624, 624,
- 703, 706, 709, 710, 711, 713, 655, 654, 652, 706,
- 709, 710, 711, 713, 649, 648, 647, 705, 716, 716,
- 716, 716, 716, 716, 716, 716, 717, 717, 717, 717,
- 717, 718, 718, 718, 718, 718, 719, 719, 720, 720,
- 721, 721, 721, 722, 722, 646, 722, 722, 722, 722,
- 722, 723, 723, 723, 644, 643, 642, 723, 724, 724,
- 724, 725, 725, 725, 640, 639, 638, 725, 726, 726,
-
- 726, 637, 636, 635, 633, 632, 631, 630, 629, 628,
- 627, 626, 625, 617, 616, 615, 614, 613, 612, 611,
- 610, 609, 608, 607, 606, 605, 604, 603, 601, 600,
- 599, 598, 597, 593, 592, 591, 590, 589, 588, 587,
- 586, 584, 580, 575, 574, 573, 572, 571, 570, 569,
- 568, 567, 558, 555, 554, 552, 551, 549, 548, 547,
- 546, 545, 544, 543, 542, 541, 539, 538, 537, 536,
- 535, 534, 533, 532, 531, 530, 529, 527, 526, 522,
- 521, 520, 517, 516, 514, 512, 511, 510, 509, 508,
- 506, 504, 503, 502, 501, 500, 499, 497, 496, 495,
-
- 494, 490, 489, 488, 487, 486, 485, 482, 481, 480,
- 479, 478, 476, 475, 474, 473, 472, 470, 469, 462,
- 461, 458, 457, 454, 453, 452, 451, 440, 439, 437,
- 436, 435, 434, 433, 430, 428, 427, 426, 424, 423,
- 421, 420, 419, 418, 416, 415, 410, 408, 407, 406,
- 405, 404, 403, 402, 401, 400, 399, 397, 396, 395,
- 394, 393, 392, 391, 390, 389, 388, 387, 386, 382,
- 378, 377, 374, 372, 362, 360, 356, 355, 354, 353,
- 351, 349, 344, 343, 340, 339, 338, 337, 336, 335,
- 330, 328, 327, 326, 325, 323, 322, 319, 318, 317,
-
- 316, 315, 314, 313, 312, 311, 310, 309, 308, 307,
- 306, 305, 304, 303, 302, 301, 300, 299, 298, 297,
- 294, 292, 291, 290, 289, 288, 287, 286, 284, 280,
- 278, 277, 276, 275, 271, 270, 269, 268, 267, 266,
- 265, 264, 261, 259, 258, 249, 248, 247, 246, 245,
- 244, 243, 241, 240, 239, 238, 236, 235, 234, 233,
- 232, 231, 230, 229, 228, 227, 226, 225, 224, 223,
- 222, 221, 220, 219, 218, 217, 216, 215, 214, 213,
- 212, 210, 209, 208, 207, 206, 205, 204, 203, 202,
- 201, 200, 199, 198, 197, 196, 195, 193, 192, 191,
-
- 190, 189, 188, 187, 186, 185, 184, 183, 182, 180,
- 179, 178, 177, 176, 175, 174, 173, 171, 156, 155,
- 154, 153, 146, 144, 143, 142, 141, 138, 137, 136,
- 135, 134, 133, 131, 130, 129, 128, 127, 126, 125,
- 124, 122, 120, 119, 118, 116, 115, 113, 112, 110,
- 109, 108, 107, 106, 105, 102, 101, 100, 99, 98,
- 97, 96, 95, 93, 92, 91, 90, 89, 88, 87,
- 86, 85, 81, 77, 52, 45, 38, 32, 22, 18,
- 14, 12, 11, 7, 6, 5, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
-
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
- 715, 715, 715, 715, 715, 715, 715, 715, 715, 715,
- 715
+ 3, 3, 3, 3, 3, 13, 15, 801, 16, 17,
+ 17, 17, 17, 17, 17, 17, 21, 21, 71, 15,
+ 16, 25, 13, 19, 46, 19, 19, 19, 19, 19,
+ 19, 19, 23, 23, 25, 26, 27, 800, 27, 33,
+ 19, 19, 27, 71, 28, 19, 19, 33, 28, 35,
+ 26, 26, 36, 19, 19, 28, 36, 29, 28, 33,
+ 50, 29, 50, 35, 46, 96, 96, 29, 19, 795,
+
+ 37, 19, 20, 29, 20, 20, 20, 20, 20, 20,
+ 20, 30, 135, 30, 37, 31, 58, 40, 58, 20,
+ 20, 39, 30, 31, 20, 105, 31, 40, 135, 31,
+ 106, 34, 20, 20, 34, 31, 105, 39, 34, 34,
+ 39, 41, 42, 34, 106, 42, 34, 20, 41, 41,
+ 160, 44, 160, 41, 42, 44, 48, 48, 43, 41,
+ 41, 42, 41, 43, 47, 44, 47, 43, 47, 126,
+ 43, 53, 53, 53, 53, 53, 53, 53, 68, 68,
+ 70, 70, 120, 126, 142, 142, 148, 143, 124, 148,
+ 120, 68, 68, 70, 70, 124, 143, 116, 48, 144,
+
+ 116, 116, 153, 153, 116, 48, 116, 144, 152, 48,
+ 152, 794, 152, 180, 48, 72, 793, 72, 72, 72,
+ 72, 72, 72, 72, 154, 154, 171, 180, 166, 166,
+ 73, 73, 72, 72, 73, 73, 73, 73, 73, 73,
+ 73, 166, 166, 784, 153, 72, 72, 184, 184, 171,
+ 241, 153, 215, 215, 215, 153, 247, 247, 247, 241,
+ 153, 268, 268, 268, 621, 621, 154, 279, 279, 279,
+ 288, 288, 288, 154, 292, 292, 292, 154, 301, 301,
+ 301, 754, 154, 162, 162, 162, 162, 162, 162, 162,
+ 164, 164, 655, 655, 164, 164, 164, 164, 164, 164,
+
+ 164, 167, 167, 688, 688, 167, 167, 167, 167, 167,
+ 167, 167, 169, 169, 169, 169, 169, 169, 169, 170,
+ 170, 170, 170, 170, 170, 170, 256, 256, 256, 256,
+ 256, 256, 256, 754, 783, 170, 257, 257, 257, 257,
+ 257, 257, 257, 338, 338, 338, 782, 781, 170, 258,
+ 258, 780, 257, 258, 258, 258, 258, 258, 258, 258,
+ 393, 393, 393, 777, 776, 257, 260, 260, 260, 260,
+ 260, 260, 260, 261, 261, 261, 261, 261, 261, 261,
+ 350, 350, 350, 350, 350, 350, 350, 775, 774, 261,
+ 351, 351, 351, 351, 351, 351, 351, 382, 382, 382,
+
+ 581, 773, 261, 394, 394, 394, 351, 772, 382, 382,
+ 395, 395, 395, 443, 443, 443, 483, 483, 483, 351,
+ 490, 504, 505, 771, 443, 443, 770, 483, 483, 504,
+ 505, 519, 519, 519, 490, 490, 490, 490, 490, 490,
+ 490, 581, 519, 519, 533, 533, 534, 534, 765, 763,
+ 762, 768, 581, 619, 619, 554, 554, 554, 576, 576,
+ 534, 534, 534, 534, 534, 534, 534, 554, 573, 573,
+ 573, 790, 576, 576, 576, 576, 576, 576, 576, 533,
+ 573, 578, 578, 739, 760, 605, 757, 756, 619, 755,
+ 739, 580, 580, 605, 606, 578, 578, 578, 578, 578,
+
+ 578, 606, 606, 768, 533, 580, 580, 580, 580, 580,
+ 580, 580, 753, 619, 620, 620, 769, 778, 786, 753,
+ 779, 657, 657, 790, 769, 778, 786, 779, 620, 620,
+ 620, 620, 620, 620, 620, 657, 657, 657, 657, 657,
+ 657, 659, 659, 787, 798, 789, 796, 752, 751, 750,
+ 749, 787, 789, 748, 796, 659, 659, 659, 659, 659,
+ 659, 659, 799, 804, 807, 808, 810, 747, 746, 745,
+ 799, 804, 807, 808, 810, 744, 743, 742, 741, 740,
+ 738, 737, 734, 731, 730, 729, 728, 727, 725, 724,
+ 722, 720, 717, 716, 714, 713, 798, 813, 813, 813,
+
+ 813, 813, 813, 813, 813, 814, 814, 814, 814, 814,
+ 815, 815, 815, 815, 815, 816, 816, 817, 817, 818,
+ 818, 818, 819, 819, 711, 819, 819, 819, 819, 819,
+ 820, 820, 820, 710, 709, 708, 820, 821, 821, 821,
+ 822, 822, 822, 707, 706, 705, 822, 823, 823, 823,
+ 704, 703, 702, 701, 699, 698, 697, 696, 695, 694,
+ 692, 691, 690, 689, 687, 686, 685, 684, 683, 682,
+ 681, 680, 679, 678, 677, 676, 675, 674, 673, 672,
+ 671, 670, 668, 667, 666, 665, 664, 663, 662, 661,
+ 660, 653, 651, 650, 648, 647, 646, 645, 644, 643,
+
+ 642, 641, 640, 639, 638, 637, 636, 634, 633, 632,
+ 631, 630, 629, 628, 626, 625, 624, 623, 622, 618,
+ 617, 616, 615, 614, 613, 612, 611, 610, 609, 608,
+ 607, 601, 599, 598, 597, 596, 592, 591, 590, 589,
+ 588, 587, 586, 585, 584, 575, 571, 570, 568, 567,
+ 565, 564, 563, 562, 561, 560, 559, 558, 557, 555,
+ 553, 552, 551, 550, 549, 548, 547, 546, 545, 544,
+ 542, 541, 537, 536, 535, 532, 531, 529, 528, 526,
+ 525, 524, 523, 522, 520, 518, 517, 516, 515, 514,
+ 513, 511, 510, 509, 508, 507, 503, 502, 501, 500,
+
+ 499, 498, 495, 494, 493, 492, 491, 489, 488, 487,
+ 486, 485, 484, 482, 481, 474, 473, 470, 469, 466,
+ 465, 464, 463, 452, 451, 450, 448, 447, 446, 445,
+ 444, 441, 439, 438, 437, 435, 434, 432, 431, 430,
+ 429, 427, 426, 421, 420, 418, 417, 416, 415, 414,
+ 413, 412, 411, 410, 409, 407, 406, 405, 404, 403,
+ 402, 401, 400, 399, 398, 397, 396, 392, 388, 387,
+ 386, 383, 381, 371, 369, 365, 364, 363, 362, 360,
+ 358, 353, 352, 349, 348, 347, 346, 345, 344, 339,
+ 337, 336, 335, 334, 333, 331, 330, 327, 326, 325,
+
+ 324, 323, 322, 321, 320, 319, 318, 317, 316, 315,
+ 314, 313, 312, 311, 310, 309, 308, 307, 306, 305,
+ 302, 300, 299, 298, 297, 296, 295, 294, 293, 291,
+ 287, 285, 284, 283, 282, 278, 277, 276, 275, 274,
+ 273, 272, 271, 267, 265, 264, 254, 253, 252, 251,
+ 250, 249, 248, 246, 245, 244, 243, 242, 240, 239,
+ 238, 237, 236, 235, 234, 233, 232, 231, 230, 229,
+ 228, 227, 226, 225, 224, 223, 222, 221, 220, 219,
+ 218, 217, 216, 214, 213, 212, 211, 210, 209, 208,
+ 207, 206, 205, 204, 203, 202, 201, 200, 199, 198,
+
+ 196, 195, 194, 193, 192, 191, 190, 189, 188, 187,
+ 186, 185, 183, 182, 181, 179, 178, 177, 176, 174,
+ 159, 158, 157, 156, 149, 147, 146, 145, 141, 140,
+ 139, 138, 137, 136, 134, 133, 132, 131, 130, 129,
+ 128, 127, 125, 123, 122, 121, 119, 118, 117, 115,
+ 114, 112, 111, 110, 109, 108, 107, 104, 103, 102,
+ 101, 100, 99, 98, 97, 95, 94, 93, 92, 91,
+ 90, 89, 88, 87, 83, 79, 52, 45, 38, 32,
+ 22, 18, 14, 12, 11, 7, 6, 5, 812, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812, 812, 812, 812, 812, 812, 812,
+ 812, 812, 812, 812
} ;
/* The intent behind this definition is that it'll catch
@@ -955,6 +1001,7 @@ static yyconst flex_int16_t yy_chk[1152] =
* DEALINGS IN THE SOFTWARE.
*/
#include <ctype.h>
+#include "strtod.h"
#include "ast.h"
#include "glsl_parser_extras.h"
#include "glsl_parser.h"
@@ -969,38 +1016,46 @@ static yyconst flex_int16_t yy_chk[1152] =
#define YY_USER_INIT yylineno = 0; yycolumn = 0;
-#define TOKEN_OR_IDENTIFIER(version, token) \
- do { \
- if (yyextra->language_version >= version) { \
- return token; \
- } else { \
- yylval->identifier = strdup(yytext); \
- return IDENTIFIER; \
- } \
- } while (0)
+#define IS_UINT (yytext[yyleng - 1] == 'u' || yytext[yyleng - 1] == 'U')
-/* Handle reserved words in GLSL ES (version 100) */
-#define TOKEN_OR_IDENTIFIER_ES(version, token) \
- do { \
- if (yyextra->es_shader) { \
- return token; \
- } else { \
- TOKEN_OR_IDENTIFIER(version, token); \
- } \
- } while (0)
-
-#define RESERVED_WORD(version, token) \
+/* A macro for handling reserved words and keywords across language versions.
+ *
+ * Certain words start out as identifiers, become reserved words in
+ * later language revisions, and finally become language keywords.
+ *
+ * For example, consider the following lexer rule:
+ * samplerBuffer KEYWORD(130, 140, SAMPLERBUFFER)
+ *
+ * This means that "samplerBuffer" will be treated as:
+ * - a keyword (SAMPLERBUFFER token) ...in GLSL >= 1.40
+ * - a reserved word - error ...in GLSL >= 1.30
+ * - an identifier ...in GLSL < 1.30
+ */
+#define KEYWORD(reserved_version, allowed_version, token) \
do { \
- if (yyextra->language_version >= version) { \
+ if (yyextra->language_version >= allowed_version) { \
return token; \
- } else { \
+ } else if (yyextra->language_version >= reserved_version) { \
_mesa_glsl_error(yylloc, yyextra, \
"Illegal use of reserved word `%s'", yytext); \
return ERROR_TOK; \
+ } else { \
+ yylval->identifier = strdup(yytext); \
+ return IDENTIFIER; \
} \
} while (0)
-#line 1004 "glsl_lexer.cpp"
+/* The ES macro can be used in KEYWORD checks:
+ *
+ * word KEYWORD(110 || ES, 400, TOKEN)
+ * ...means the word is reserved in GLSL ES 1.00, while
+ *
+ * word KEYWORD(110, 130 || ES, TOKEN)
+ * ...means the word is a legal keyword in GLSL ES 1.00.
+ */
+#define ES yyextra->es_shader
+
+#line 1059 "glsl_lexer.cpp"
#define INITIAL 0
#define PP 1
@@ -1127,12 +1182,7 @@ static int input (yyscan_t yyscanner );
/* Amount of stuff to slurp up with each read. */
#ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
#define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
#endif
/* Copy whatever the last rule matched to the standard output. */
@@ -1151,7 +1201,7 @@ static int input (yyscan_t yyscanner );
if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \
int c = '*'; \
- size_t n; \
+ unsigned n; \
for ( n = 0; n < max_size && \
(c = getc( yyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
@@ -1239,10 +1289,10 @@ YY_DECL
register int yy_act;
struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
-#line 86 "glsl_lexer.lpp"
+#line 95 "glsl_lexer.lpp"
-#line 1246 "glsl_lexer.cpp"
+#line 1296 "glsl_lexer.cpp"
yylval = yylval_param;
@@ -1300,13 +1350,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 716 )
+ if ( yy_current_state >= 813 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp;
}
- while ( yy_current_state != 715 );
+ while ( yy_current_state != 812 );
yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state;
@@ -1328,7 +1378,7 @@ do_action: /* This label is used only to access EOF actions. */
case 1:
YY_RULE_SETUP
-#line 88 "glsl_lexer.lpp"
+#line 97 "glsl_lexer.lpp"
;
YY_BREAK
/* Preprocessor tokens. */
@@ -1337,17 +1387,17 @@ case 2:
yyg->yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 91 "glsl_lexer.lpp"
+#line 100 "glsl_lexer.lpp"
;
YY_BREAK
case 3:
YY_RULE_SETUP
-#line 92 "glsl_lexer.lpp"
+#line 101 "glsl_lexer.lpp"
{ BEGIN PP; return VERSION; }
YY_BREAK
case 4:
YY_RULE_SETUP
-#line 93 "glsl_lexer.lpp"
+#line 102 "glsl_lexer.lpp"
{ BEGIN PP; return EXTENSION; }
YY_BREAK
case 5:
@@ -1355,7 +1405,7 @@ case 5:
yyg->yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 94 "glsl_lexer.lpp"
+#line 103 "glsl_lexer.lpp"
{
/* Eat characters until the first digit is
* encountered
@@ -1377,7 +1427,7 @@ case 6:
yyg->yy_c_buf_p = yy_cp -= 1;
YY_DO_BEFORE_ACTION; /* set up yytext again */
YY_RULE_SETUP
-#line 109 "glsl_lexer.lpp"
+#line 118 "glsl_lexer.lpp"
{
/* Eat characters until the first digit is
* encountered
@@ -1395,7 +1445,7 @@ YY_RULE_SETUP
YY_BREAK
case 7:
YY_RULE_SETUP
-#line 123 "glsl_lexer.lpp"
+#line 132 "glsl_lexer.lpp"
{
BEGIN PP;
return PRAGMA_DEBUG_ON;
@@ -1403,7 +1453,7 @@ YY_RULE_SETUP
YY_BREAK
case 8:
YY_RULE_SETUP
-#line 127 "glsl_lexer.lpp"
+#line 136 "glsl_lexer.lpp"
{
BEGIN PP;
return PRAGMA_DEBUG_OFF;
@@ -1411,7 +1461,7 @@ YY_RULE_SETUP
YY_BREAK
case 9:
YY_RULE_SETUP
-#line 131 "glsl_lexer.lpp"
+#line 140 "glsl_lexer.lpp"
{
BEGIN PP;
return PRAGMA_OPTIMIZE_ON;
@@ -1419,7 +1469,7 @@ YY_RULE_SETUP
YY_BREAK
case 10:
YY_RULE_SETUP
-#line 135 "glsl_lexer.lpp"
+#line 144 "glsl_lexer.lpp"
{
BEGIN PP;
return PRAGMA_OPTIMIZE_OFF;
@@ -1427,38 +1477,38 @@ YY_RULE_SETUP
YY_BREAK
case 11:
YY_RULE_SETUP
-#line 139 "glsl_lexer.lpp"
+#line 148 "glsl_lexer.lpp"
{ BEGIN PRAGMA; }
YY_BREAK
case 12:
/* rule 12 can match eol */
YY_RULE_SETUP
-#line 141 "glsl_lexer.lpp"
+#line 150 "glsl_lexer.lpp"
{ BEGIN 0; yylineno++; yycolumn = 0; }
YY_BREAK
case 13:
YY_RULE_SETUP
-#line 142 "glsl_lexer.lpp"
+#line 151 "glsl_lexer.lpp"
{ }
YY_BREAK
case 14:
YY_RULE_SETUP
-#line 144 "glsl_lexer.lpp"
+#line 153 "glsl_lexer.lpp"
{ }
YY_BREAK
case 15:
YY_RULE_SETUP
-#line 145 "glsl_lexer.lpp"
+#line 154 "glsl_lexer.lpp"
{ }
YY_BREAK
case 16:
YY_RULE_SETUP
-#line 146 "glsl_lexer.lpp"
+#line 155 "glsl_lexer.lpp"
return COLON;
YY_BREAK
case 17:
YY_RULE_SETUP
-#line 147 "glsl_lexer.lpp"
+#line 156 "glsl_lexer.lpp"
{
yylval->identifier = strdup(yytext);
return IDENTIFIER;
@@ -1466,7 +1516,7 @@ YY_RULE_SETUP
YY_BREAK
case 18:
YY_RULE_SETUP
-#line 151 "glsl_lexer.lpp"
+#line 160 "glsl_lexer.lpp"
{
yylval->n = strtol(yytext, NULL, 10);
return INTCONSTANT;
@@ -1475,890 +1525,990 @@ YY_RULE_SETUP
case 19:
/* rule 19 can match eol */
YY_RULE_SETUP
-#line 155 "glsl_lexer.lpp"
+#line 164 "glsl_lexer.lpp"
{ BEGIN 0; yylineno++; yycolumn = 0; return EOL; }
YY_BREAK
case 20:
/* rule 20 can match eol */
YY_RULE_SETUP
-#line 157 "glsl_lexer.lpp"
+#line 166 "glsl_lexer.lpp"
{ yylineno++; yycolumn = 0; }
YY_BREAK
case 21:
YY_RULE_SETUP
-#line 159 "glsl_lexer.lpp"
+#line 168 "glsl_lexer.lpp"
return ATTRIBUTE;
YY_BREAK
case 22:
YY_RULE_SETUP
-#line 160 "glsl_lexer.lpp"
+#line 169 "glsl_lexer.lpp"
return CONST_TOK;
YY_BREAK
case 23:
YY_RULE_SETUP
-#line 161 "glsl_lexer.lpp"
+#line 170 "glsl_lexer.lpp"
return BOOL_TOK;
YY_BREAK
case 24:
YY_RULE_SETUP
-#line 162 "glsl_lexer.lpp"
+#line 171 "glsl_lexer.lpp"
return FLOAT_TOK;
YY_BREAK
case 25:
YY_RULE_SETUP
-#line 163 "glsl_lexer.lpp"
+#line 172 "glsl_lexer.lpp"
return INT_TOK;
YY_BREAK
case 26:
YY_RULE_SETUP
-#line 164 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UINT_TOK);
+#line 173 "glsl_lexer.lpp"
+KEYWORD(130, 130, UINT_TOK);
YY_BREAK
case 27:
YY_RULE_SETUP
-#line 166 "glsl_lexer.lpp"
+#line 175 "glsl_lexer.lpp"
return BREAK;
YY_BREAK
case 28:
YY_RULE_SETUP
-#line 167 "glsl_lexer.lpp"
+#line 176 "glsl_lexer.lpp"
return CONTINUE;
YY_BREAK
case 29:
YY_RULE_SETUP
-#line 168 "glsl_lexer.lpp"
+#line 177 "glsl_lexer.lpp"
return DO;
YY_BREAK
case 30:
YY_RULE_SETUP
-#line 169 "glsl_lexer.lpp"
+#line 178 "glsl_lexer.lpp"
return WHILE;
YY_BREAK
case 31:
YY_RULE_SETUP
-#line 170 "glsl_lexer.lpp"
+#line 179 "glsl_lexer.lpp"
return ELSE;
YY_BREAK
case 32:
YY_RULE_SETUP
-#line 171 "glsl_lexer.lpp"
+#line 180 "glsl_lexer.lpp"
return FOR;
YY_BREAK
case 33:
YY_RULE_SETUP
-#line 172 "glsl_lexer.lpp"
+#line 181 "glsl_lexer.lpp"
return IF;
YY_BREAK
case 34:
YY_RULE_SETUP
-#line 173 "glsl_lexer.lpp"
+#line 182 "glsl_lexer.lpp"
return DISCARD;
YY_BREAK
case 35:
YY_RULE_SETUP
-#line 174 "glsl_lexer.lpp"
+#line 183 "glsl_lexer.lpp"
return RETURN;
YY_BREAK
case 36:
YY_RULE_SETUP
-#line 176 "glsl_lexer.lpp"
+#line 185 "glsl_lexer.lpp"
return BVEC2;
YY_BREAK
case 37:
YY_RULE_SETUP
-#line 177 "glsl_lexer.lpp"
+#line 186 "glsl_lexer.lpp"
return BVEC3;
YY_BREAK
case 38:
YY_RULE_SETUP
-#line 178 "glsl_lexer.lpp"
+#line 187 "glsl_lexer.lpp"
return BVEC4;
YY_BREAK
case 39:
YY_RULE_SETUP
-#line 179 "glsl_lexer.lpp"
+#line 188 "glsl_lexer.lpp"
return IVEC2;
YY_BREAK
case 40:
YY_RULE_SETUP
-#line 180 "glsl_lexer.lpp"
+#line 189 "glsl_lexer.lpp"
return IVEC3;
YY_BREAK
case 41:
YY_RULE_SETUP
-#line 181 "glsl_lexer.lpp"
+#line 190 "glsl_lexer.lpp"
return IVEC4;
YY_BREAK
case 42:
YY_RULE_SETUP
-#line 182 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UVEC2);
+#line 191 "glsl_lexer.lpp"
+KEYWORD(130, 130, UVEC2);
YY_BREAK
case 43:
YY_RULE_SETUP
-#line 183 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UVEC3);
+#line 192 "glsl_lexer.lpp"
+KEYWORD(130, 130, UVEC3);
YY_BREAK
case 44:
YY_RULE_SETUP
-#line 184 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UVEC4);
+#line 193 "glsl_lexer.lpp"
+KEYWORD(130, 130, UVEC4);
YY_BREAK
case 45:
YY_RULE_SETUP
-#line 185 "glsl_lexer.lpp"
+#line 194 "glsl_lexer.lpp"
return VEC2;
YY_BREAK
case 46:
YY_RULE_SETUP
-#line 186 "glsl_lexer.lpp"
+#line 195 "glsl_lexer.lpp"
return VEC3;
YY_BREAK
case 47:
YY_RULE_SETUP
-#line 187 "glsl_lexer.lpp"
+#line 196 "glsl_lexer.lpp"
return VEC4;
YY_BREAK
case 48:
YY_RULE_SETUP
-#line 188 "glsl_lexer.lpp"
+#line 197 "glsl_lexer.lpp"
return MAT2X2;
YY_BREAK
case 49:
YY_RULE_SETUP
-#line 189 "glsl_lexer.lpp"
+#line 198 "glsl_lexer.lpp"
return MAT3X3;
YY_BREAK
case 50:
YY_RULE_SETUP
-#line 190 "glsl_lexer.lpp"
+#line 199 "glsl_lexer.lpp"
return MAT4X4;
YY_BREAK
case 51:
YY_RULE_SETUP
-#line 191 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT2X2);
+#line 200 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT2X2);
YY_BREAK
case 52:
YY_RULE_SETUP
-#line 192 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT2X3);
+#line 201 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT2X3);
YY_BREAK
case 53:
YY_RULE_SETUP
-#line 193 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT2X4);
+#line 202 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT2X4);
YY_BREAK
case 54:
YY_RULE_SETUP
-#line 194 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT3X2);
+#line 203 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT3X2);
YY_BREAK
case 55:
YY_RULE_SETUP
-#line 195 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT3X3);
+#line 204 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT3X3);
YY_BREAK
case 56:
YY_RULE_SETUP
-#line 196 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT3X4);
+#line 205 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT3X4);
YY_BREAK
case 57:
YY_RULE_SETUP
-#line 197 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT4X2);
+#line 206 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT4X2);
YY_BREAK
case 58:
YY_RULE_SETUP
-#line 198 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT4X3);
+#line 207 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT4X3);
YY_BREAK
case 59:
YY_RULE_SETUP
-#line 199 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, MAT4X4);
+#line 208 "glsl_lexer.lpp"
+KEYWORD(120, 120, MAT4X4);
YY_BREAK
case 60:
YY_RULE_SETUP
-#line 201 "glsl_lexer.lpp"
+#line 210 "glsl_lexer.lpp"
return IN_TOK;
YY_BREAK
case 61:
YY_RULE_SETUP
-#line 202 "glsl_lexer.lpp"
+#line 211 "glsl_lexer.lpp"
return OUT_TOK;
YY_BREAK
case 62:
YY_RULE_SETUP
-#line 203 "glsl_lexer.lpp"
+#line 212 "glsl_lexer.lpp"
return INOUT_TOK;
YY_BREAK
case 63:
YY_RULE_SETUP
-#line 204 "glsl_lexer.lpp"
+#line 213 "glsl_lexer.lpp"
return UNIFORM;
YY_BREAK
case 64:
YY_RULE_SETUP
-#line 205 "glsl_lexer.lpp"
+#line 214 "glsl_lexer.lpp"
return VARYING;
YY_BREAK
case 65:
YY_RULE_SETUP
-#line 206 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(120, CENTROID);
+#line 215 "glsl_lexer.lpp"
+KEYWORD(120, 120, CENTROID);
YY_BREAK
case 66:
YY_RULE_SETUP
-#line 207 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(120, INVARIANT);
+#line 216 "glsl_lexer.lpp"
+KEYWORD(120 || ES, 120 || ES, INVARIANT);
YY_BREAK
case 67:
YY_RULE_SETUP
-#line 209 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(130, FLAT);
+#line 217 "glsl_lexer.lpp"
+KEYWORD(130 || ES, 130, FLAT);
YY_BREAK
case 68:
YY_RULE_SETUP
-#line 210 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, SMOOTH);
+#line 218 "glsl_lexer.lpp"
+KEYWORD(130, 130, SMOOTH);
YY_BREAK
case 69:
YY_RULE_SETUP
-#line 211 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, NOPERSPECTIVE);
+#line 219 "glsl_lexer.lpp"
+KEYWORD(130, 130, NOPERSPECTIVE);
YY_BREAK
case 70:
YY_RULE_SETUP
-#line 213 "glsl_lexer.lpp"
+#line 221 "glsl_lexer.lpp"
return SAMPLER1D;
YY_BREAK
case 71:
YY_RULE_SETUP
-#line 214 "glsl_lexer.lpp"
+#line 222 "glsl_lexer.lpp"
return SAMPLER2D;
YY_BREAK
case 72:
YY_RULE_SETUP
-#line 215 "glsl_lexer.lpp"
+#line 223 "glsl_lexer.lpp"
return SAMPLER3D;
YY_BREAK
case 73:
YY_RULE_SETUP
-#line 216 "glsl_lexer.lpp"
+#line 224 "glsl_lexer.lpp"
return SAMPLERCUBE;
YY_BREAK
case 74:
YY_RULE_SETUP
-#line 217 "glsl_lexer.lpp"
-return SAMPLER1DSHADOW;
+#line 225 "glsl_lexer.lpp"
+KEYWORD(130, 130, SAMPLER1DARRAY);
YY_BREAK
case 75:
YY_RULE_SETUP
-#line 218 "glsl_lexer.lpp"
-return SAMPLER2DSHADOW;
+#line 226 "glsl_lexer.lpp"
+KEYWORD(130, 130, SAMPLER2DARRAY);
YY_BREAK
case 76:
YY_RULE_SETUP
-#line 220 "glsl_lexer.lpp"
-return STRUCT;
+#line 227 "glsl_lexer.lpp"
+return SAMPLER1DSHADOW;
YY_BREAK
case 77:
YY_RULE_SETUP
-#line 221 "glsl_lexer.lpp"
-return VOID_TOK;
+#line 228 "glsl_lexer.lpp"
+return SAMPLER2DSHADOW;
YY_BREAK
case 78:
YY_RULE_SETUP
-#line 223 "glsl_lexer.lpp"
-{
- if ((yyextra->language_version >= 140)
- || yyextra->ARB_explicit_attrib_location_enable
- || (yyextra->ARB_fragment_coord_conventions_enable)){
- return LAYOUT_TOK;
- } else {
- yylval->identifier = strdup(yytext);
- return IDENTIFIER;
- }
- }
+#line 229 "glsl_lexer.lpp"
+KEYWORD(130, 130, SAMPLERCUBESHADOW);
YY_BREAK
case 79:
YY_RULE_SETUP
-#line 234 "glsl_lexer.lpp"
-return INC_OP;
+#line 230 "glsl_lexer.lpp"
+KEYWORD(130, 130, SAMPLER1DARRAYSHADOW);
YY_BREAK
case 80:
YY_RULE_SETUP
-#line 235 "glsl_lexer.lpp"
-return DEC_OP;
+#line 231 "glsl_lexer.lpp"
+KEYWORD(130, 130, SAMPLER2DARRAYSHADOW);
YY_BREAK
case 81:
YY_RULE_SETUP
-#line 236 "glsl_lexer.lpp"
-return LE_OP;
+#line 232 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLER1D);
YY_BREAK
case 82:
YY_RULE_SETUP
-#line 237 "glsl_lexer.lpp"
-return GE_OP;
+#line 233 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLER2D);
YY_BREAK
case 83:
YY_RULE_SETUP
-#line 238 "glsl_lexer.lpp"
-return EQ_OP;
+#line 234 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLER3D);
YY_BREAK
case 84:
YY_RULE_SETUP
-#line 239 "glsl_lexer.lpp"
-return NE_OP;
+#line 235 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLERCUBE);
YY_BREAK
case 85:
YY_RULE_SETUP
-#line 240 "glsl_lexer.lpp"
-return AND_OP;
+#line 236 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLER1DARRAY);
YY_BREAK
case 86:
YY_RULE_SETUP
-#line 241 "glsl_lexer.lpp"
-return OR_OP;
+#line 237 "glsl_lexer.lpp"
+KEYWORD(130, 130, ISAMPLER2DARRAY);
YY_BREAK
case 87:
YY_RULE_SETUP
-#line 242 "glsl_lexer.lpp"
-return XOR_OP;
+#line 238 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLER1D);
YY_BREAK
case 88:
YY_RULE_SETUP
-#line 243 "glsl_lexer.lpp"
-return LEFT_OP;
+#line 239 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLER2D);
YY_BREAK
case 89:
YY_RULE_SETUP
-#line 244 "glsl_lexer.lpp"
-return RIGHT_OP;
+#line 240 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLER3D);
YY_BREAK
case 90:
YY_RULE_SETUP
-#line 246 "glsl_lexer.lpp"
-return MUL_ASSIGN;
+#line 241 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLERCUBE);
YY_BREAK
case 91:
YY_RULE_SETUP
-#line 247 "glsl_lexer.lpp"
-return DIV_ASSIGN;
+#line 242 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLER1DARRAY);
YY_BREAK
case 92:
YY_RULE_SETUP
-#line 248 "glsl_lexer.lpp"
-return ADD_ASSIGN;
+#line 243 "glsl_lexer.lpp"
+KEYWORD(130, 130, USAMPLER2DARRAY);
YY_BREAK
case 93:
YY_RULE_SETUP
-#line 249 "glsl_lexer.lpp"
-return MOD_ASSIGN;
+#line 246 "glsl_lexer.lpp"
+return STRUCT;
YY_BREAK
case 94:
YY_RULE_SETUP
-#line 250 "glsl_lexer.lpp"
-return LEFT_ASSIGN;
+#line 247 "glsl_lexer.lpp"
+return VOID_TOK;
YY_BREAK
case 95:
YY_RULE_SETUP
-#line 251 "glsl_lexer.lpp"
-return RIGHT_ASSIGN;
+#line 249 "glsl_lexer.lpp"
+{
+ if ((yyextra->language_version >= 140)
+ || yyextra->ARB_explicit_attrib_location_enable
+ || (yyextra->ARB_fragment_coord_conventions_enable)){
+ return LAYOUT_TOK;
+ } else {
+ yylval->identifier = strdup(yytext);
+ return IDENTIFIER;
+ }
+ }
YY_BREAK
case 96:
YY_RULE_SETUP
-#line 252 "glsl_lexer.lpp"
-return AND_ASSIGN;
+#line 260 "glsl_lexer.lpp"
+return INC_OP;
YY_BREAK
case 97:
YY_RULE_SETUP
-#line 253 "glsl_lexer.lpp"
-return XOR_ASSIGN;
+#line 261 "glsl_lexer.lpp"
+return DEC_OP;
YY_BREAK
case 98:
YY_RULE_SETUP
-#line 254 "glsl_lexer.lpp"
-return OR_ASSIGN;
+#line 262 "glsl_lexer.lpp"
+return LE_OP;
YY_BREAK
case 99:
YY_RULE_SETUP
-#line 255 "glsl_lexer.lpp"
-return SUB_ASSIGN;
+#line 263 "glsl_lexer.lpp"
+return GE_OP;
YY_BREAK
case 100:
YY_RULE_SETUP
-#line 257 "glsl_lexer.lpp"
-{
- yylval->n = strtol(yytext, NULL, 10);
- return INTCONSTANT;
- }
+#line 264 "glsl_lexer.lpp"
+return EQ_OP;
YY_BREAK
case 101:
YY_RULE_SETUP
-#line 261 "glsl_lexer.lpp"
-{
- yylval->n = strtol(yytext + 2, NULL, 16);
- return INTCONSTANT;
- }
+#line 265 "glsl_lexer.lpp"
+return NE_OP;
YY_BREAK
case 102:
YY_RULE_SETUP
-#line 265 "glsl_lexer.lpp"
-{
- yylval->n = strtol(yytext, NULL, 8);
- return INTCONSTANT;
- }
+#line 266 "glsl_lexer.lpp"
+return AND_OP;
YY_BREAK
case 103:
YY_RULE_SETUP
-#line 270 "glsl_lexer.lpp"
-{
- yylval->real = strtod(yytext, NULL);
- return FLOATCONSTANT;
- }
+#line 267 "glsl_lexer.lpp"
+return OR_OP;
YY_BREAK
case 104:
YY_RULE_SETUP
-#line 274 "glsl_lexer.lpp"
-{
- yylval->real = strtod(yytext, NULL);
- return FLOATCONSTANT;
- }
+#line 268 "glsl_lexer.lpp"
+return XOR_OP;
YY_BREAK
case 105:
YY_RULE_SETUP
-#line 278 "glsl_lexer.lpp"
-{
- yylval->real = strtod(yytext, NULL);
- return FLOATCONSTANT;
- }
+#line 269 "glsl_lexer.lpp"
+return LEFT_OP;
YY_BREAK
case 106:
YY_RULE_SETUP
-#line 282 "glsl_lexer.lpp"
-{
- yylval->real = strtod(yytext, NULL);
- return FLOATCONSTANT;
- }
+#line 270 "glsl_lexer.lpp"
+return RIGHT_OP;
YY_BREAK
case 107:
YY_RULE_SETUP
-#line 286 "glsl_lexer.lpp"
-{
- yylval->real = strtod(yytext, NULL);
- return FLOATCONSTANT;
- }
+#line 272 "glsl_lexer.lpp"
+return MUL_ASSIGN;
YY_BREAK
case 108:
YY_RULE_SETUP
-#line 291 "glsl_lexer.lpp"
-{
- yylval->n = 1;
- return BOOLCONSTANT;
- }
+#line 273 "glsl_lexer.lpp"
+return DIV_ASSIGN;
YY_BREAK
case 109:
YY_RULE_SETUP
-#line 295 "glsl_lexer.lpp"
-{
- yylval->n = 0;
- return BOOLCONSTANT;
- }
+#line 274 "glsl_lexer.lpp"
+return ADD_ASSIGN;
YY_BREAK
-/* Reserved words in GLSL 1.10. */
case 110:
YY_RULE_SETUP
-#line 302 "glsl_lexer.lpp"
-RESERVED_WORD(999, ASM);
+#line 275 "glsl_lexer.lpp"
+return MOD_ASSIGN;
YY_BREAK
case 111:
YY_RULE_SETUP
-#line 303 "glsl_lexer.lpp"
-RESERVED_WORD(999, CLASS);
+#line 276 "glsl_lexer.lpp"
+return LEFT_ASSIGN;
YY_BREAK
case 112:
YY_RULE_SETUP
-#line 304 "glsl_lexer.lpp"
-RESERVED_WORD(999, UNION);
+#line 277 "glsl_lexer.lpp"
+return RIGHT_ASSIGN;
YY_BREAK
case 113:
YY_RULE_SETUP
-#line 305 "glsl_lexer.lpp"
-RESERVED_WORD(999, ENUM);
+#line 278 "glsl_lexer.lpp"
+return AND_ASSIGN;
YY_BREAK
case 114:
YY_RULE_SETUP
-#line 306 "glsl_lexer.lpp"
-RESERVED_WORD(999, TYPEDEF);
+#line 279 "glsl_lexer.lpp"
+return XOR_ASSIGN;
YY_BREAK
case 115:
YY_RULE_SETUP
-#line 307 "glsl_lexer.lpp"
-RESERVED_WORD(999, TEMPLATE);
+#line 280 "glsl_lexer.lpp"
+return OR_ASSIGN;
YY_BREAK
case 116:
YY_RULE_SETUP
-#line 308 "glsl_lexer.lpp"
-RESERVED_WORD(999, THIS);
+#line 281 "glsl_lexer.lpp"
+return SUB_ASSIGN;
YY_BREAK
case 117:
YY_RULE_SETUP
-#line 309 "glsl_lexer.lpp"
-RESERVED_WORD(999, PACKED_TOK);
+#line 283 "glsl_lexer.lpp"
+{
+ yylval->n = strtol(yytext, NULL, 10);
+ return IS_UINT ? UINTCONSTANT : INTCONSTANT;
+ }
YY_BREAK
case 118:
YY_RULE_SETUP
-#line 310 "glsl_lexer.lpp"
-RESERVED_WORD(999, GOTO);
+#line 287 "glsl_lexer.lpp"
+{
+ yylval->n = strtol(yytext + 2, NULL, 16);
+ return IS_UINT ? UINTCONSTANT : INTCONSTANT;
+ }
YY_BREAK
case 119:
YY_RULE_SETUP
-#line 311 "glsl_lexer.lpp"
-RESERVED_WORD(130, SWITCH);
+#line 291 "glsl_lexer.lpp"
+{
+ yylval->n = strtol(yytext, NULL, 8);
+ return IS_UINT ? UINTCONSTANT : INTCONSTANT;
+ }
YY_BREAK
case 120:
YY_RULE_SETUP
-#line 312 "glsl_lexer.lpp"
-RESERVED_WORD(130, DEFAULT);
+#line 296 "glsl_lexer.lpp"
+{
+ yylval->real = glsl_strtod(yytext, NULL);
+ return FLOATCONSTANT;
+ }
YY_BREAK
case 121:
YY_RULE_SETUP
-#line 313 "glsl_lexer.lpp"
-RESERVED_WORD(999, INLINE_TOK);
+#line 300 "glsl_lexer.lpp"
+{
+ yylval->real = glsl_strtod(yytext, NULL);
+ return FLOATCONSTANT;
+ }
YY_BREAK
case 122:
YY_RULE_SETUP
-#line 314 "glsl_lexer.lpp"
-RESERVED_WORD(999, NOINLINE);
+#line 304 "glsl_lexer.lpp"
+{
+ yylval->real = glsl_strtod(yytext, NULL);
+ return FLOATCONSTANT;
+ }
YY_BREAK
case 123:
YY_RULE_SETUP
-#line 315 "glsl_lexer.lpp"
-RESERVED_WORD(999, VOLATILE);
+#line 308 "glsl_lexer.lpp"
+{
+ yylval->real = glsl_strtod(yytext, NULL);
+ return FLOATCONSTANT;
+ }
YY_BREAK
case 124:
YY_RULE_SETUP
-#line 316 "glsl_lexer.lpp"
-RESERVED_WORD(999, PUBLIC_TOK);
+#line 312 "glsl_lexer.lpp"
+{
+ yylval->real = glsl_strtod(yytext, NULL);
+ return FLOATCONSTANT;
+ }
YY_BREAK
case 125:
YY_RULE_SETUP
#line 317 "glsl_lexer.lpp"
-RESERVED_WORD(999, STATIC);
+{
+ yylval->n = 1;
+ return BOOLCONSTANT;
+ }
YY_BREAK
case 126:
YY_RULE_SETUP
-#line 318 "glsl_lexer.lpp"
-RESERVED_WORD(999, EXTERN);
+#line 321 "glsl_lexer.lpp"
+{
+ yylval->n = 0;
+ return BOOLCONSTANT;
+ }
YY_BREAK
+/* Reserved words in GLSL 1.10. */
case 127:
YY_RULE_SETUP
-#line 319 "glsl_lexer.lpp"
-RESERVED_WORD(999, EXTERNAL);
+#line 328 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, ASM);
YY_BREAK
case 128:
YY_RULE_SETUP
-#line 320 "glsl_lexer.lpp"
-RESERVED_WORD(999, INTERFACE);
+#line 329 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, CLASS);
YY_BREAK
case 129:
YY_RULE_SETUP
-#line 321 "glsl_lexer.lpp"
-RESERVED_WORD(999, LONG_TOK);
+#line 330 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, UNION);
YY_BREAK
case 130:
YY_RULE_SETUP
-#line 322 "glsl_lexer.lpp"
-RESERVED_WORD(999, SHORT_TOK);
+#line 331 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, ENUM);
YY_BREAK
case 131:
YY_RULE_SETUP
-#line 323 "glsl_lexer.lpp"
-RESERVED_WORD(999, DOUBLE_TOK);
+#line 332 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, TYPEDEF);
YY_BREAK
case 132:
YY_RULE_SETUP
-#line 324 "glsl_lexer.lpp"
-RESERVED_WORD(999, HALF);
+#line 333 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, TEMPLATE);
YY_BREAK
case 133:
YY_RULE_SETUP
-#line 325 "glsl_lexer.lpp"
-RESERVED_WORD(999, FIXED_TOK);
+#line 334 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, THIS);
YY_BREAK
case 134:
YY_RULE_SETUP
-#line 326 "glsl_lexer.lpp"
-RESERVED_WORD(999, UNSIGNED);
+#line 335 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, PACKED_TOK);
YY_BREAK
case 135:
YY_RULE_SETUP
-#line 327 "glsl_lexer.lpp"
-RESERVED_WORD(999, INPUT_TOK);
+#line 336 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, GOTO);
YY_BREAK
case 136:
YY_RULE_SETUP
-#line 328 "glsl_lexer.lpp"
-RESERVED_WORD(999, OUTPUT);
+#line 337 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 130, SWITCH);
YY_BREAK
case 137:
YY_RULE_SETUP
-#line 329 "glsl_lexer.lpp"
-RESERVED_WORD(999, HVEC2);
+#line 338 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 130, DEFAULT);
YY_BREAK
case 138:
YY_RULE_SETUP
-#line 330 "glsl_lexer.lpp"
-RESERVED_WORD(999, HVEC3);
+#line 339 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, INLINE_TOK);
YY_BREAK
case 139:
YY_RULE_SETUP
-#line 331 "glsl_lexer.lpp"
-RESERVED_WORD(999, HVEC4);
+#line 340 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, NOINLINE);
YY_BREAK
case 140:
YY_RULE_SETUP
-#line 332 "glsl_lexer.lpp"
-RESERVED_WORD(999, DVEC2);
+#line 341 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, VOLATILE);
YY_BREAK
case 141:
YY_RULE_SETUP
-#line 333 "glsl_lexer.lpp"
-RESERVED_WORD(999, DVEC3);
+#line 342 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, PUBLIC_TOK);
YY_BREAK
case 142:
YY_RULE_SETUP
-#line 334 "glsl_lexer.lpp"
-RESERVED_WORD(999, DVEC4);
+#line 343 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, STATIC);
YY_BREAK
case 143:
YY_RULE_SETUP
-#line 335 "glsl_lexer.lpp"
-RESERVED_WORD(999, FVEC2);
+#line 344 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, EXTERN);
YY_BREAK
case 144:
YY_RULE_SETUP
-#line 336 "glsl_lexer.lpp"
-RESERVED_WORD(999, FVEC3);
+#line 345 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, EXTERNAL);
YY_BREAK
case 145:
YY_RULE_SETUP
-#line 337 "glsl_lexer.lpp"
-RESERVED_WORD(999, FVEC4);
+#line 346 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, INTERFACE);
YY_BREAK
case 146:
YY_RULE_SETUP
-#line 338 "glsl_lexer.lpp"
-return SAMPLER2DRECT;
+#line 347 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, LONG_TOK);
YY_BREAK
case 147:
YY_RULE_SETUP
-#line 339 "glsl_lexer.lpp"
-RESERVED_WORD(999, SAMPLER3DRECT);
+#line 348 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, SHORT_TOK);
YY_BREAK
case 148:
YY_RULE_SETUP
-#line 340 "glsl_lexer.lpp"
-return SAMPLER2DRECTSHADOW;
+#line 349 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 400, DOUBLE_TOK);
YY_BREAK
case 149:
YY_RULE_SETUP
-#line 341 "glsl_lexer.lpp"
-RESERVED_WORD(999, SIZEOF);
+#line 350 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, HALF);
YY_BREAK
case 150:
YY_RULE_SETUP
-#line 342 "glsl_lexer.lpp"
-RESERVED_WORD(999, CAST);
+#line 351 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, FIXED_TOK);
YY_BREAK
case 151:
YY_RULE_SETUP
-#line 343 "glsl_lexer.lpp"
-RESERVED_WORD(999, NAMESPACE);
+#line 352 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, UNSIGNED);
YY_BREAK
case 152:
YY_RULE_SETUP
-#line 344 "glsl_lexer.lpp"
-RESERVED_WORD(999, USING);
+#line 353 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, INPUT_TOK);
YY_BREAK
-/* Additional reserved words in GLSL 1.20. */
case 153:
YY_RULE_SETUP
-#line 347 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(120, LOWP);
+#line 354 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, OUTPUT);
YY_BREAK
case 154:
YY_RULE_SETUP
-#line 348 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(120, MEDIUMP);
+#line 355 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, HVEC2);
YY_BREAK
case 155:
YY_RULE_SETUP
-#line 349 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(120, HIGHP);
+#line 356 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, HVEC3);
YY_BREAK
case 156:
YY_RULE_SETUP
-#line 350 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(120, PRECISION);
+#line 357 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, HVEC4);
YY_BREAK
-/* Additional reserved words in GLSL 1.30. */
case 157:
YY_RULE_SETUP
-#line 353 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, COMMON);
+#line 358 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 400, DVEC2);
YY_BREAK
case 158:
YY_RULE_SETUP
-#line 354 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, PARTITION);
+#line 359 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 400, DVEC3);
YY_BREAK
case 159:
YY_RULE_SETUP
-#line 355 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, ACTIVE);
+#line 360 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 400, DVEC4);
YY_BREAK
case 160:
YY_RULE_SETUP
-#line 356 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER_ES(130, SUPERP);
+#line 361 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, FVEC2);
YY_BREAK
case 161:
YY_RULE_SETUP
-#line 357 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, SAMPLERBUFFER);
+#line 362 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, FVEC3);
YY_BREAK
case 162:
YY_RULE_SETUP
-#line 358 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, FILTER);
+#line 363 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, FVEC4);
YY_BREAK
case 163:
YY_RULE_SETUP
-#line 359 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE1D);
+#line 364 "glsl_lexer.lpp"
+return SAMPLER2DRECT;
YY_BREAK
case 164:
YY_RULE_SETUP
-#line 360 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE2D);
+#line 365 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, SAMPLER3DRECT);
YY_BREAK
case 165:
YY_RULE_SETUP
-#line 361 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE3D);
+#line 366 "glsl_lexer.lpp"
+return SAMPLER2DRECTSHADOW;
YY_BREAK
case 166:
YY_RULE_SETUP
-#line 362 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGECUBE);
+#line 367 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, SIZEOF);
YY_BREAK
case 167:
YY_RULE_SETUP
-#line 363 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGE1D);
+#line 368 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, CAST);
YY_BREAK
case 168:
YY_RULE_SETUP
-#line 364 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGE2D);
+#line 369 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, NAMESPACE);
YY_BREAK
case 169:
YY_RULE_SETUP
-#line 365 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGE3D);
+#line 370 "glsl_lexer.lpp"
+KEYWORD(110 || ES, 999, USING);
YY_BREAK
+/* Additional reserved words in GLSL 1.20. */
case 170:
YY_RULE_SETUP
-#line 366 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGECUBE);
+#line 373 "glsl_lexer.lpp"
+KEYWORD(120, 130 || ES, LOWP);
YY_BREAK
case 171:
YY_RULE_SETUP
-#line 367 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGE1D);
+#line 374 "glsl_lexer.lpp"
+KEYWORD(120, 130 || ES, MEDIUMP);
YY_BREAK
case 172:
YY_RULE_SETUP
-#line 368 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGE2D);
+#line 375 "glsl_lexer.lpp"
+KEYWORD(120, 130 || ES, HIGHP);
YY_BREAK
case 173:
YY_RULE_SETUP
-#line 369 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGE3D);
+#line 376 "glsl_lexer.lpp"
+KEYWORD(120, 130 || ES, PRECISION);
YY_BREAK
+/* Additional reserved words in GLSL 1.30. */
case 174:
YY_RULE_SETUP
-#line 370 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGECUBE);
+#line 379 "glsl_lexer.lpp"
+KEYWORD(130, 130, CASE);
YY_BREAK
case 175:
YY_RULE_SETUP
-#line 371 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE1DARRAY);
+#line 380 "glsl_lexer.lpp"
+KEYWORD(130, 999, COMMON);
YY_BREAK
case 176:
YY_RULE_SETUP
-#line 372 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE2DARRAY);
+#line 381 "glsl_lexer.lpp"
+KEYWORD(130, 999, PARTITION);
YY_BREAK
case 177:
YY_RULE_SETUP
-#line 373 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGE1DARRAY);
+#line 382 "glsl_lexer.lpp"
+KEYWORD(130, 999, ACTIVE);
YY_BREAK
case 178:
YY_RULE_SETUP
-#line 374 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGE2DARRAY);
+#line 383 "glsl_lexer.lpp"
+KEYWORD(130 || ES, 999, SUPERP);
YY_BREAK
case 179:
YY_RULE_SETUP
-#line 375 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGE1DARRAY);
+#line 384 "glsl_lexer.lpp"
+KEYWORD(130, 140, SAMPLERBUFFER);
YY_BREAK
case 180:
YY_RULE_SETUP
-#line 376 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGE2DARRAY);
+#line 385 "glsl_lexer.lpp"
+KEYWORD(130, 999, FILTER);
YY_BREAK
case 181:
YY_RULE_SETUP
-#line 377 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE1DSHADOW);
+#line 386 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE1D);
YY_BREAK
case 182:
YY_RULE_SETUP
-#line 378 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGE2DSHADOW);
+#line 387 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE2D);
YY_BREAK
case 183:
YY_RULE_SETUP
-#line 379 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IMAGEBUFFER);
+#line 388 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE3D);
YY_BREAK
case 184:
YY_RULE_SETUP
-#line 380 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, IIMAGEBUFFER);
+#line 389 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGECUBE);
YY_BREAK
case 185:
YY_RULE_SETUP
-#line 381 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, UIMAGEBUFFER);
+#line 390 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGE1D);
YY_BREAK
case 186:
YY_RULE_SETUP
-#line 382 "glsl_lexer.lpp"
-TOKEN_OR_IDENTIFIER(130, ROW_MAJOR);
+#line 391 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGE2D);
YY_BREAK
case 187:
YY_RULE_SETUP
-#line 384 "glsl_lexer.lpp"
+#line 392 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGE3D);
+ YY_BREAK
+case 188:
+YY_RULE_SETUP
+#line 393 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGECUBE);
+ YY_BREAK
+case 189:
+YY_RULE_SETUP
+#line 394 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGE1D);
+ YY_BREAK
+case 190:
+YY_RULE_SETUP
+#line 395 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGE2D);
+ YY_BREAK
+case 191:
+YY_RULE_SETUP
+#line 396 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGE3D);
+ YY_BREAK
+case 192:
+YY_RULE_SETUP
+#line 397 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGECUBE);
+ YY_BREAK
+case 193:
+YY_RULE_SETUP
+#line 398 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE1DARRAY);
+ YY_BREAK
+case 194:
+YY_RULE_SETUP
+#line 399 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE2DARRAY);
+ YY_BREAK
+case 195:
+YY_RULE_SETUP
+#line 400 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGE1DARRAY);
+ YY_BREAK
+case 196:
+YY_RULE_SETUP
+#line 401 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGE2DARRAY);
+ YY_BREAK
+case 197:
+YY_RULE_SETUP
+#line 402 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGE1DARRAY);
+ YY_BREAK
+case 198:
+YY_RULE_SETUP
+#line 403 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGE2DARRAY);
+ YY_BREAK
+case 199:
+YY_RULE_SETUP
+#line 404 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE1DSHADOW);
+ YY_BREAK
+case 200:
+YY_RULE_SETUP
+#line 405 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE2DSHADOW);
+ YY_BREAK
+case 201:
+YY_RULE_SETUP
+#line 406 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE1DARRAYSHADOW);
+ YY_BREAK
+case 202:
+YY_RULE_SETUP
+#line 407 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGE2DARRAYSHADOW);
+ YY_BREAK
+case 203:
+YY_RULE_SETUP
+#line 408 "glsl_lexer.lpp"
+KEYWORD(130, 999, IMAGEBUFFER);
+ YY_BREAK
+case 204:
+YY_RULE_SETUP
+#line 409 "glsl_lexer.lpp"
+KEYWORD(130, 999, IIMAGEBUFFER);
+ YY_BREAK
+case 205:
+YY_RULE_SETUP
+#line 410 "glsl_lexer.lpp"
+KEYWORD(130, 999, UIMAGEBUFFER);
+ YY_BREAK
+case 206:
+YY_RULE_SETUP
+#line 411 "glsl_lexer.lpp"
+KEYWORD(130, 999, ROW_MAJOR);
+ YY_BREAK
+case 207:
+YY_RULE_SETUP
+#line 413 "glsl_lexer.lpp"
{
struct _mesa_glsl_parse_state *state = yyextra;
void *ctx = state;
@@ -2366,17 +2516,17 @@ YY_RULE_SETUP
return IDENTIFIER;
}
YY_BREAK
-case 188:
+case 208:
YY_RULE_SETUP
-#line 391 "glsl_lexer.lpp"
+#line 420 "glsl_lexer.lpp"
{ return yytext[0]; }
YY_BREAK
-case 189:
+case 209:
YY_RULE_SETUP
-#line 393 "glsl_lexer.lpp"
+#line 422 "glsl_lexer.lpp"
ECHO;
YY_BREAK
-#line 2380 "glsl_lexer.cpp"
+#line 2530 "glsl_lexer.cpp"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(PP):
case YY_STATE_EOF(PRAGMA):
@@ -2674,7 +2824,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 716 )
+ if ( yy_current_state >= 813 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -2703,11 +2853,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
- if ( yy_current_state >= 716 )
+ if ( yy_current_state >= 813 )
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- yy_is_jam = (yy_current_state == 715);
+ yy_is_jam = (yy_current_state == 812);
return yy_is_jam ? 0 : yy_current_state;
}
@@ -3112,8 +3262,8 @@ YY_BUFFER_STATE _mesa_glsl__scan_string (yyconst char * yystr , yyscan_t yyscann
/** Setup the input buffer state to scan the given bytes. The next call to _mesa_glsl_lex() will
* scan from a @e copy of @a bytes.
- * @param yybytes the byte buffer to scan
- * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
* @param yyscanner The scanner object.
* @return the newly allocated buffer state object.
*/
@@ -3519,7 +3669,7 @@ void _mesa_glsl_free (void * ptr , yyscan_t yyscanner)
#define YYTABLES_NAME "yytables"
-#line 393 "glsl_lexer.lpp"
+#line 422 "glsl_lexer.lpp"
diff --git a/src/glsl/glsl_lexer.lpp b/src/glsl/glsl_lexer.lpp
index f690c4728b..15742ac363 100644
--- a/src/glsl/glsl_lexer.lpp
+++ b/src/glsl/glsl_lexer.lpp
@@ -22,6 +22,7 @@
* DEALINGS IN THE SOFTWARE.
*/
#include <ctype.h>
+#include "strtod.h"
#include "ast.h"
#include "glsl_parser_extras.h"
#include "glsl_parser.h"
@@ -36,36 +37,44 @@
#define YY_USER_INIT yylineno = 0; yycolumn = 0;
-#define TOKEN_OR_IDENTIFIER(version, token) \
- do { \
- if (yyextra->language_version >= version) { \
- return token; \
- } else { \
- yylval->identifier = strdup(yytext); \
- return IDENTIFIER; \
- } \
- } while (0)
-
-/* Handle reserved words in GLSL ES (version 100) */
-#define TOKEN_OR_IDENTIFIER_ES(version, token) \
- do { \
- if (yyextra->es_shader) { \
- return token; \
- } else { \
- TOKEN_OR_IDENTIFIER(version, token); \
- } \
- } while (0)
+#define IS_UINT (yytext[yyleng - 1] == 'u' || yytext[yyleng - 1] == 'U')
-#define RESERVED_WORD(version, token) \
+/* A macro for handling reserved words and keywords across language versions.
+ *
+ * Certain words start out as identifiers, become reserved words in
+ * later language revisions, and finally become language keywords.
+ *
+ * For example, consider the following lexer rule:
+ * samplerBuffer KEYWORD(130, 140, SAMPLERBUFFER)
+ *
+ * This means that "samplerBuffer" will be treated as:
+ * - a keyword (SAMPLERBUFFER token) ...in GLSL >= 1.40
+ * - a reserved word - error ...in GLSL >= 1.30
+ * - an identifier ...in GLSL < 1.30
+ */
+#define KEYWORD(reserved_version, allowed_version, token) \
do { \
- if (yyextra->language_version >= version) { \
+ if (yyextra->language_version >= allowed_version) { \
return token; \
- } else { \
+ } else if (yyextra->language_version >= reserved_version) { \
_mesa_glsl_error(yylloc, yyextra, \
"Illegal use of reserved word `%s'", yytext); \
return ERROR_TOK; \
+ } else { \
+ yylval->identifier = strdup(yytext); \
+ return IDENTIFIER; \
} \
} while (0)
+
+/* The ES macro can be used in KEYWORD checks:
+ *
+ * word KEYWORD(110 || ES, 400, TOKEN)
+ * ...means the word is reserved in GLSL ES 1.00, while
+ *
+ * word KEYWORD(110, 130 || ES, TOKEN)
+ * ...means the word is a legal keyword in GLSL ES 1.00.
+ */
+#define ES yyextra->es_shader
%}
%option bison-bridge bison-locations reentrant noyywrap
@@ -161,7 +170,7 @@ const return CONST_TOK;
bool return BOOL_TOK;
float return FLOAT_TOK;
int return INT_TOK;
-uint TOKEN_OR_IDENTIFIER(130, UINT_TOK);
+uint KEYWORD(130, 130, UINT_TOK);
break return BREAK;
continue return CONTINUE;
@@ -179,43 +188,60 @@ bvec4 return BVEC4;
ivec2 return IVEC2;
ivec3 return IVEC3;
ivec4 return IVEC4;
-uvec2 TOKEN_OR_IDENTIFIER(130, UVEC2);
-uvec3 TOKEN_OR_IDENTIFIER(130, UVEC3);
-uvec4 TOKEN_OR_IDENTIFIER(130, UVEC4);
+uvec2 KEYWORD(130, 130, UVEC2);
+uvec3 KEYWORD(130, 130, UVEC3);
+uvec4 KEYWORD(130, 130, UVEC4);
vec2 return VEC2;
vec3 return VEC3;
vec4 return VEC4;
mat2 return MAT2X2;
mat3 return MAT3X3;
mat4 return MAT4X4;
-mat2x2 TOKEN_OR_IDENTIFIER(120, MAT2X2);
-mat2x3 TOKEN_OR_IDENTIFIER(120, MAT2X3);
-mat2x4 TOKEN_OR_IDENTIFIER(120, MAT2X4);
-mat3x2 TOKEN_OR_IDENTIFIER(120, MAT3X2);
-mat3x3 TOKEN_OR_IDENTIFIER(120, MAT3X3);
-mat3x4 TOKEN_OR_IDENTIFIER(120, MAT3X4);
-mat4x2 TOKEN_OR_IDENTIFIER(120, MAT4X2);
-mat4x3 TOKEN_OR_IDENTIFIER(120, MAT4X3);
-mat4x4 TOKEN_OR_IDENTIFIER(120, MAT4X4);
+mat2x2 KEYWORD(120, 120, MAT2X2);
+mat2x3 KEYWORD(120, 120, MAT2X3);
+mat2x4 KEYWORD(120, 120, MAT2X4);
+mat3x2 KEYWORD(120, 120, MAT3X2);
+mat3x3 KEYWORD(120, 120, MAT3X3);
+mat3x4 KEYWORD(120, 120, MAT3X4);
+mat4x2 KEYWORD(120, 120, MAT4X2);
+mat4x3 KEYWORD(120, 120, MAT4X3);
+mat4x4 KEYWORD(120, 120, MAT4X4);
in return IN_TOK;
out return OUT_TOK;
inout return INOUT_TOK;
uniform return UNIFORM;
varying return VARYING;
-centroid TOKEN_OR_IDENTIFIER(120, CENTROID);
-invariant TOKEN_OR_IDENTIFIER_ES(120, INVARIANT);
-
-flat TOKEN_OR_IDENTIFIER_ES(130, FLAT);
-smooth TOKEN_OR_IDENTIFIER(130, SMOOTH);
-noperspective TOKEN_OR_IDENTIFIER(130, NOPERSPECTIVE);
+centroid KEYWORD(120, 120, CENTROID);
+invariant KEYWORD(120 || ES, 120 || ES, INVARIANT);
+flat KEYWORD(130 || ES, 130, FLAT);
+smooth KEYWORD(130, 130, SMOOTH);
+noperspective KEYWORD(130, 130, NOPERSPECTIVE);
sampler1D return SAMPLER1D;
sampler2D return SAMPLER2D;
sampler3D return SAMPLER3D;
samplerCube return SAMPLERCUBE;
+sampler1DArray KEYWORD(130, 130, SAMPLER1DARRAY);
+sampler2DArray KEYWORD(130, 130, SAMPLER2DARRAY);
sampler1DShadow return SAMPLER1DSHADOW;
sampler2DShadow return SAMPLER2DSHADOW;
+samplerCubeShadow KEYWORD(130, 130, SAMPLERCUBESHADOW);
+sampler1DArrayShadow KEYWORD(130, 130, SAMPLER1DARRAYSHADOW);
+sampler2DArrayShadow KEYWORD(130, 130, SAMPLER2DARRAYSHADOW);
+isampler1D KEYWORD(130, 130, ISAMPLER1D);
+isampler2D KEYWORD(130, 130, ISAMPLER2D);
+isampler3D KEYWORD(130, 130, ISAMPLER3D);
+isamplerCube KEYWORD(130, 130, ISAMPLERCUBE);
+isampler1DArray KEYWORD(130, 130, ISAMPLER1DARRAY);
+isampler2DArray KEYWORD(130, 130, ISAMPLER2DARRAY);
+usampler1D KEYWORD(130, 130, USAMPLER1D);
+usampler2D KEYWORD(130, 130, USAMPLER2D);
+usampler3D KEYWORD(130, 130, USAMPLER3D);
+usamplerCube KEYWORD(130, 130, USAMPLERCUBE);
+usampler1DArray KEYWORD(130, 130, USAMPLER1DARRAY);
+usampler2DArray KEYWORD(130, 130, USAMPLER2DARRAY);
+
struct return STRUCT;
void return VOID_TOK;
@@ -254,37 +280,37 @@ layout {
\|= return OR_ASSIGN;
-= return SUB_ASSIGN;
-[1-9][0-9]* {
+[1-9][0-9]*[uU]? {
yylval->n = strtol(yytext, NULL, 10);
- return INTCONSTANT;
+ return IS_UINT ? UINTCONSTANT : INTCONSTANT;
}
-0[xX][0-9a-fA-F]+ {
+0[xX][0-9a-fA-F]+[uU]? {
yylval->n = strtol(yytext + 2, NULL, 16);
- return INTCONSTANT;
+ return IS_UINT ? UINTCONSTANT : INTCONSTANT;
}
-0[0-7]* {
+0[0-7]*[uU]? {
yylval->n = strtol(yytext, NULL, 8);
- return INTCONSTANT;
+ return IS_UINT ? UINTCONSTANT : INTCONSTANT;
}
[0-9]+\.[0-9]+([eE][+-]?[0-9]+)?[fF]? {
- yylval->real = strtod(yytext, NULL);
+ yylval->real = glsl_strtod(yytext, NULL);
return FLOATCONSTANT;
}
\.[0-9]+([eE][+-]?[0-9]+)?[fF]? {
- yylval->real = strtod(yytext, NULL);
+ yylval->real = glsl_strtod(yytext, NULL);
return FLOATCONSTANT;
}
[0-9]+\.([eE][+-]?[0-9]+)?[fF]? {
- yylval->real = strtod(yytext, NULL);
+ yylval->real = glsl_strtod(yytext, NULL);
return FLOATCONSTANT;
}
[0-9]+[eE][+-]?[0-9]+[fF]? {
- yylval->real = strtod(yytext, NULL);
+ yylval->real = glsl_strtod(yytext, NULL);
return FLOATCONSTANT;
}
[0-9]+[fF] {
- yylval->real = strtod(yytext, NULL);
+ yylval->real = glsl_strtod(yytext, NULL);
return FLOATCONSTANT;
}
@@ -299,87 +325,90 @@ false {
/* Reserved words in GLSL 1.10. */
-asm RESERVED_WORD(999, ASM);
-class RESERVED_WORD(999, CLASS);
-union RESERVED_WORD(999, UNION);
-enum RESERVED_WORD(999, ENUM);
-typedef RESERVED_WORD(999, TYPEDEF);
-template RESERVED_WORD(999, TEMPLATE);
-this RESERVED_WORD(999, THIS);
-packed RESERVED_WORD(999, PACKED_TOK);
-goto RESERVED_WORD(999, GOTO);
-switch RESERVED_WORD(130, SWITCH);
-default RESERVED_WORD(130, DEFAULT);
-inline RESERVED_WORD(999, INLINE_TOK);
-noinline RESERVED_WORD(999, NOINLINE);
-volatile RESERVED_WORD(999, VOLATILE);
-public RESERVED_WORD(999, PUBLIC_TOK);
-static RESERVED_WORD(999, STATIC);
-extern RESERVED_WORD(999, EXTERN);
-external RESERVED_WORD(999, EXTERNAL);
-interface RESERVED_WORD(999, INTERFACE);
-long RESERVED_WORD(999, LONG_TOK);
-short RESERVED_WORD(999, SHORT_TOK);
-double RESERVED_WORD(999, DOUBLE_TOK);
-half RESERVED_WORD(999, HALF);
-fixed RESERVED_WORD(999, FIXED_TOK);
-unsigned RESERVED_WORD(999, UNSIGNED);
-input RESERVED_WORD(999, INPUT_TOK);
-output RESERVED_WORD(999, OUTPUT);
-hvec2 RESERVED_WORD(999, HVEC2);
-hvec3 RESERVED_WORD(999, HVEC3);
-hvec4 RESERVED_WORD(999, HVEC4);
-dvec2 RESERVED_WORD(999, DVEC2);
-dvec3 RESERVED_WORD(999, DVEC3);
-dvec4 RESERVED_WORD(999, DVEC4);
-fvec2 RESERVED_WORD(999, FVEC2);
-fvec3 RESERVED_WORD(999, FVEC3);
-fvec4 RESERVED_WORD(999, FVEC4);
+asm KEYWORD(110 || ES, 999, ASM);
+class KEYWORD(110 || ES, 999, CLASS);
+union KEYWORD(110 || ES, 999, UNION);
+enum KEYWORD(110 || ES, 999, ENUM);
+typedef KEYWORD(110 || ES, 999, TYPEDEF);
+template KEYWORD(110 || ES, 999, TEMPLATE);
+this KEYWORD(110 || ES, 999, THIS);
+packed KEYWORD(110 || ES, 999, PACKED_TOK);
+goto KEYWORD(110 || ES, 999, GOTO);
+switch KEYWORD(110 || ES, 130, SWITCH);
+default KEYWORD(110 || ES, 130, DEFAULT);
+inline KEYWORD(110 || ES, 999, INLINE_TOK);
+noinline KEYWORD(110 || ES, 999, NOINLINE);
+volatile KEYWORD(110 || ES, 999, VOLATILE);
+public KEYWORD(110 || ES, 999, PUBLIC_TOK);
+static KEYWORD(110 || ES, 999, STATIC);
+extern KEYWORD(110 || ES, 999, EXTERN);
+external KEYWORD(110 || ES, 999, EXTERNAL);
+interface KEYWORD(110 || ES, 999, INTERFACE);
+long KEYWORD(110 || ES, 999, LONG_TOK);
+short KEYWORD(110 || ES, 999, SHORT_TOK);
+double KEYWORD(110 || ES, 400, DOUBLE_TOK);
+half KEYWORD(110 || ES, 999, HALF);
+fixed KEYWORD(110 || ES, 999, FIXED_TOK);
+unsigned KEYWORD(110 || ES, 999, UNSIGNED);
+input KEYWORD(110 || ES, 999, INPUT_TOK);
+output KEYWORD(110 || ES, 999, OUTPUT);
+hvec2 KEYWORD(110 || ES, 999, HVEC2);
+hvec3 KEYWORD(110 || ES, 999, HVEC3);
+hvec4 KEYWORD(110 || ES, 999, HVEC4);
+dvec2 KEYWORD(110 || ES, 400, DVEC2);
+dvec3 KEYWORD(110 || ES, 400, DVEC3);
+dvec4 KEYWORD(110 || ES, 400, DVEC4);
+fvec2 KEYWORD(110 || ES, 999, FVEC2);
+fvec3 KEYWORD(110 || ES, 999, FVEC3);
+fvec4 KEYWORD(110 || ES, 999, FVEC4);
sampler2DRect return SAMPLER2DRECT;
-sampler3DRect RESERVED_WORD(999, SAMPLER3DRECT);
+sampler3DRect KEYWORD(110 || ES, 999, SAMPLER3DRECT);
sampler2DRectShadow return SAMPLER2DRECTSHADOW;
-sizeof RESERVED_WORD(999, SIZEOF);
-cast RESERVED_WORD(999, CAST);
-namespace RESERVED_WORD(999, NAMESPACE);
-using RESERVED_WORD(999, USING);
+sizeof KEYWORD(110 || ES, 999, SIZEOF);
+cast KEYWORD(110 || ES, 999, CAST);
+namespace KEYWORD(110 || ES, 999, NAMESPACE);
+using KEYWORD(110 || ES, 999, USING);
/* Additional reserved words in GLSL 1.20. */
-lowp TOKEN_OR_IDENTIFIER_ES(120, LOWP);
-mediump TOKEN_OR_IDENTIFIER_ES(120, MEDIUMP);
-highp TOKEN_OR_IDENTIFIER_ES(120, HIGHP);
-precision TOKEN_OR_IDENTIFIER_ES(120, PRECISION);
+lowp KEYWORD(120, 130 || ES, LOWP);
+mediump KEYWORD(120, 130 || ES, MEDIUMP);
+highp KEYWORD(120, 130 || ES, HIGHP);
+precision KEYWORD(120, 130 || ES, PRECISION);
/* Additional reserved words in GLSL 1.30. */
-common TOKEN_OR_IDENTIFIER(130, COMMON);
-partition TOKEN_OR_IDENTIFIER(130, PARTITION);
-active TOKEN_OR_IDENTIFIER(130, ACTIVE);
-superp TOKEN_OR_IDENTIFIER_ES(130, SUPERP);
-samplerBuffer TOKEN_OR_IDENTIFIER(130, SAMPLERBUFFER);
-filter TOKEN_OR_IDENTIFIER(130, FILTER);
-image1D TOKEN_OR_IDENTIFIER(130, IMAGE1D);
-image2D TOKEN_OR_IDENTIFIER(130, IMAGE2D);
-image3D TOKEN_OR_IDENTIFIER(130, IMAGE3D);
-imageCube TOKEN_OR_IDENTIFIER(130, IMAGECUBE);
-iimage1D TOKEN_OR_IDENTIFIER(130, IIMAGE1D);
-iimage2D TOKEN_OR_IDENTIFIER(130, IIMAGE2D);
-iimage3D TOKEN_OR_IDENTIFIER(130, IIMAGE3D);
-iimageCube TOKEN_OR_IDENTIFIER(130, IIMAGECUBE);
-uimage1D TOKEN_OR_IDENTIFIER(130, UIMAGE1D);
-uimage2D TOKEN_OR_IDENTIFIER(130, UIMAGE2D);
-uimage3D TOKEN_OR_IDENTIFIER(130, UIMAGE3D);
-uimageCube TOKEN_OR_IDENTIFIER(130, UIMAGECUBE);
-image1DArray TOKEN_OR_IDENTIFIER(130, IMAGE1DARRAY);
-image2DArray TOKEN_OR_IDENTIFIER(130, IMAGE2DARRAY);
-iimage1DArray TOKEN_OR_IDENTIFIER(130, IIMAGE1DARRAY);
-iimage2DArray TOKEN_OR_IDENTIFIER(130, IIMAGE2DARRAY);
-uimage1DArray TOKEN_OR_IDENTIFIER(130, UIMAGE1DARRAY);
-uimage2DArray TOKEN_OR_IDENTIFIER(130, UIMAGE2DARRAY);
-image1DShadow TOKEN_OR_IDENTIFIER(130, IMAGE1DSHADOW);
-image2DShadow TOKEN_OR_IDENTIFIER(130, IMAGE2DSHADOW);
-imageBuffer TOKEN_OR_IDENTIFIER(130, IMAGEBUFFER);
-iimageBuffer TOKEN_OR_IDENTIFIER(130, IIMAGEBUFFER);
-uimageBuffer TOKEN_OR_IDENTIFIER(130, UIMAGEBUFFER);
-row_major TOKEN_OR_IDENTIFIER(130, ROW_MAJOR);
+case KEYWORD(130, 130, CASE);
+common KEYWORD(130, 999, COMMON);
+partition KEYWORD(130, 999, PARTITION);
+active KEYWORD(130, 999, ACTIVE);
+superp KEYWORD(130 || ES, 999, SUPERP);
+samplerBuffer KEYWORD(130, 140, SAMPLERBUFFER);
+filter KEYWORD(130, 999, FILTER);
+image1D KEYWORD(130, 999, IMAGE1D);
+image2D KEYWORD(130, 999, IMAGE2D);
+image3D KEYWORD(130, 999, IMAGE3D);
+imageCube KEYWORD(130, 999, IMAGECUBE);
+iimage1D KEYWORD(130, 999, IIMAGE1D);
+iimage2D KEYWORD(130, 999, IIMAGE2D);
+iimage3D KEYWORD(130, 999, IIMAGE3D);
+iimageCube KEYWORD(130, 999, IIMAGECUBE);
+uimage1D KEYWORD(130, 999, UIMAGE1D);
+uimage2D KEYWORD(130, 999, UIMAGE2D);
+uimage3D KEYWORD(130, 999, UIMAGE3D);
+uimageCube KEYWORD(130, 999, UIMAGECUBE);
+image1DArray KEYWORD(130, 999, IMAGE1DARRAY);
+image2DArray KEYWORD(130, 999, IMAGE2DARRAY);
+iimage1DArray KEYWORD(130, 999, IIMAGE1DARRAY);
+iimage2DArray KEYWORD(130, 999, IIMAGE2DARRAY);
+uimage1DArray KEYWORD(130, 999, UIMAGE1DARRAY);
+uimage2DArray KEYWORD(130, 999, UIMAGE2DARRAY);
+image1DShadow KEYWORD(130, 999, IMAGE1DSHADOW);
+image2DShadow KEYWORD(130, 999, IMAGE2DSHADOW);
+image1DArrayShadow KEYWORD(130, 999, IMAGE1DARRAYSHADOW);
+image2DArrayShadow KEYWORD(130, 999, IMAGE2DARRAYSHADOW);
+imageBuffer KEYWORD(130, 999, IMAGEBUFFER);
+iimageBuffer KEYWORD(130, 999, IIMAGEBUFFER);
+uimageBuffer KEYWORD(130, 999, UIMAGEBUFFER);
+row_major KEYWORD(130, 999, ROW_MAJOR);
[_a-zA-Z][_a-zA-Z0-9]* {
struct _mesa_glsl_parse_state *state = yyextra;
diff --git a/src/glsl/glsl_parser.cpp b/src/glsl/glsl_parser.cpp
index cfbb2b83d6..23e439c7c5 100644
--- a/src/glsl/glsl_parser.cpp
+++ b/src/glsl/glsl_parser.cpp
@@ -1,10 +1,9 @@
-
-/* A Bison parser, made by GNU Bison 2.4.1. */
+/* A Bison parser, made by GNU Bison 2.4.3. */
/* Skeleton implementation for Bison's Yacc-like parsers in C
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2009, 2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -46,7 +45,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "2.4.1"
+#define YYBISON_VERSION "2.4.3"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -114,7 +113,7 @@
/* Line 189 of yacc.c */
-#line 118 "glsl_parser.cpp"
+#line 117 "glsl_parser.cpp"
/* Enabling traces. */
#ifndef YYDEBUG
@@ -328,7 +327,9 @@
IMAGEBUFFER = 442,
IIMAGEBUFFER = 443,
UIMAGEBUFFER = 444,
- ROW_MAJOR = 445
+ IMAGE1DARRAYSHADOW = 445,
+ IMAGE2DARRAYSHADOW = 446,
+ ROW_MAJOR = 447
};
#endif
@@ -372,7 +373,7 @@ typedef union YYSTYPE
/* Line 214 of yacc.c */
-#line 376 "glsl_parser.cpp"
+#line 377 "glsl_parser.cpp"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
@@ -397,7 +398,7 @@ typedef struct YYLTYPE
/* Line 264 of yacc.c */
-#line 401 "glsl_parser.cpp"
+#line 402 "glsl_parser.cpp"
#ifdef short
# undef short
@@ -447,7 +448,7 @@ typedef short int yytype_int16;
#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
#ifndef YY_
-# if YYENABLE_NLS
+# if defined YYENABLE_NLS && YYENABLE_NLS
# if ENABLE_NLS
# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
# define YY_(msgid) dgettext ("bison-runtime", msgid)
@@ -614,10 +615,10 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 5
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 3692
+#define YYLAST 3718
/* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS 215
+#define YYNTOKENS 217
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 87
/* YYNRULES -- Number of rules. */
@@ -627,7 +628,7 @@ union yyalloc
/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
#define YYUNDEFTOK 2
-#define YYMAXUTOK 445
+#define YYMAXUTOK 447
#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
@@ -638,16 +639,16 @@ static const yytype_uint8 yytranslate[] =
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 199, 2, 2, 2, 203, 206, 2,
- 191, 192, 201, 197, 196, 198, 195, 202, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 210, 212,
- 204, 211, 205, 209, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 201, 2, 2, 2, 205, 208, 2,
+ 193, 194, 203, 199, 198, 200, 197, 204, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 212, 214,
+ 206, 213, 207, 211, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 193, 2, 194, 207, 2, 2, 2, 2, 2,
+ 2, 195, 2, 196, 209, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 213, 208, 214, 200, 2, 2, 2,
+ 2, 2, 2, 215, 210, 216, 202, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -679,7 +680,7 @@ static const yytype_uint8 yytranslate[] =
155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190
+ 185, 186, 187, 188, 189, 190, 191, 192
};
#if YYDEBUG
@@ -720,57 +721,57 @@ static const yytype_uint16 yyprhs[] =
/* YYRHS -- A `-1'-separated list of the rules' RHS. */
static const yytype_int16 yyrhs[] =
{
- 216, 0, -1, -1, 218, 220, 217, 222, -1, -1,
+ 218, 0, -1, -1, 220, 222, 219, 224, -1, -1,
109, 78, 113, -1, 116, 113, -1, 117, 113, -1,
- 118, 113, -1, 119, 113, -1, -1, 220, 221, -1,
- 110, 76, 112, 76, 113, -1, 300, -1, 222, 300,
- -1, 76, -1, 223, -1, 78, -1, 79, -1, 77,
- -1, 80, -1, 191, 250, 192, -1, 224, -1, 225,
- 193, 226, 194, -1, 227, -1, 225, 195, 76, -1,
- 225, 84, -1, 225, 85, -1, 250, -1, 228, -1,
- 229, -1, 225, 195, 229, -1, 231, 192, -1, 230,
- 192, -1, 232, 74, -1, 232, -1, 232, 248, -1,
- 231, 196, 248, -1, 233, 191, -1, 271, -1, 76,
- -1, 81, -1, 225, -1, 84, 234, -1, 85, 234,
- -1, 235, 234, -1, 197, -1, 198, -1, 199, -1,
- 200, -1, 234, -1, 236, 201, 234, -1, 236, 202,
- 234, -1, 236, 203, 234, -1, 236, -1, 237, 197,
- 236, -1, 237, 198, 236, -1, 237, -1, 238, 82,
- 237, -1, 238, 83, 237, -1, 238, -1, 239, 204,
- 238, -1, 239, 205, 238, -1, 239, 86, 238, -1,
- 239, 87, 238, -1, 239, -1, 240, 88, 239, -1,
- 240, 89, 239, -1, 240, -1, 241, 206, 240, -1,
- 241, -1, 242, 207, 241, -1, 242, -1, 243, 208,
- 242, -1, 243, -1, 244, 90, 243, -1, 244, -1,
- 245, 92, 244, -1, 245, -1, 246, 91, 245, -1,
- 246, -1, 246, 209, 250, 210, 248, -1, 247, -1,
- 234, 249, 248, -1, 211, -1, 93, -1, 94, -1,
+ 118, 113, -1, 119, 113, -1, -1, 222, 223, -1,
+ 110, 76, 112, 76, 113, -1, 302, -1, 224, 302,
+ -1, 76, -1, 225, -1, 78, -1, 79, -1, 77,
+ -1, 80, -1, 193, 252, 194, -1, 226, -1, 227,
+ 195, 228, 196, -1, 229, -1, 227, 197, 76, -1,
+ 227, 84, -1, 227, 85, -1, 252, -1, 230, -1,
+ 231, -1, 227, 197, 231, -1, 233, 194, -1, 232,
+ 194, -1, 234, 74, -1, 234, -1, 234, 250, -1,
+ 233, 198, 250, -1, 235, 193, -1, 273, -1, 76,
+ -1, 81, -1, 227, -1, 84, 236, -1, 85, 236,
+ -1, 237, 236, -1, 199, -1, 200, -1, 201, -1,
+ 202, -1, 236, -1, 238, 203, 236, -1, 238, 204,
+ 236, -1, 238, 205, 236, -1, 238, -1, 239, 199,
+ 238, -1, 239, 200, 238, -1, 239, -1, 240, 82,
+ 239, -1, 240, 83, 239, -1, 240, -1, 241, 206,
+ 240, -1, 241, 207, 240, -1, 241, 86, 240, -1,
+ 241, 87, 240, -1, 241, -1, 242, 88, 241, -1,
+ 242, 89, 241, -1, 242, -1, 243, 208, 242, -1,
+ 243, -1, 244, 209, 243, -1, 244, -1, 245, 210,
+ 244, -1, 245, -1, 246, 90, 245, -1, 246, -1,
+ 247, 92, 246, -1, 247, -1, 248, 91, 247, -1,
+ 248, -1, 248, 211, 252, 212, 250, -1, 249, -1,
+ 236, 251, 250, -1, 213, -1, 93, -1, 94, -1,
96, -1, 95, -1, 102, -1, 97, -1, 98, -1,
- 99, -1, 100, -1, 101, -1, 248, -1, 250, 196,
- 248, -1, 247, -1, 253, 212, -1, 261, 212, -1,
- 108, 275, 272, 212, -1, 254, 192, -1, 256, -1,
- 255, -1, 256, 258, -1, 255, 196, 258, -1, 263,
- 76, 191, -1, 271, 76, -1, 271, 76, 193, 251,
- 194, -1, 268, 259, 257, -1, 259, 257, -1, 268,
- 259, 260, -1, 259, 260, -1, -1, 33, -1, 34,
- -1, 35, -1, 271, -1, 262, -1, 261, 196, 76,
- -1, 261, 196, 76, 193, 194, -1, 261, 196, 76,
- 193, 251, 194, -1, 261, 196, 76, 193, 194, 211,
- 281, -1, 261, 196, 76, 193, 251, 194, 211, 281,
- -1, 261, 196, 76, 211, 281, -1, 263, -1, 263,
- 76, -1, 263, 76, 193, 194, -1, 263, 76, 193,
- 251, 194, -1, 263, 76, 193, 194, 211, 281, -1,
- 263, 76, 193, 251, 194, 211, 281, -1, 263, 76,
- 211, 281, -1, 103, 76, -1, 271, -1, 269, 271,
- -1, 120, 191, 265, 192, -1, 266, -1, 265, 196,
- 266, -1, 76, -1, 76, 211, 78, -1, 40, -1,
- 39, -1, 38, -1, 4, -1, 270, -1, 264, -1,
- 264, 270, -1, 267, -1, 267, 270, -1, 103, 270,
- -1, 103, 267, 270, -1, 103, -1, 4, -1, 3,
+ 99, -1, 100, -1, 101, -1, 250, -1, 252, 198,
+ 250, -1, 249, -1, 255, 214, -1, 263, 214, -1,
+ 108, 277, 274, 214, -1, 256, 194, -1, 258, -1,
+ 257, -1, 258, 260, -1, 257, 198, 260, -1, 265,
+ 76, 193, -1, 273, 76, -1, 273, 76, 195, 253,
+ 196, -1, 270, 261, 259, -1, 261, 259, -1, 270,
+ 261, 262, -1, 261, 262, -1, -1, 33, -1, 34,
+ -1, 35, -1, 273, -1, 264, -1, 263, 198, 76,
+ -1, 263, 198, 76, 195, 196, -1, 263, 198, 76,
+ 195, 253, 196, -1, 263, 198, 76, 195, 196, 213,
+ 283, -1, 263, 198, 76, 195, 253, 196, 213, 283,
+ -1, 263, 198, 76, 213, 283, -1, 265, -1, 265,
+ 76, -1, 265, 76, 195, 196, -1, 265, 76, 195,
+ 253, 196, -1, 265, 76, 195, 196, 213, 283, -1,
+ 265, 76, 195, 253, 196, 213, 283, -1, 265, 76,
+ 213, 283, -1, 103, 76, -1, 273, -1, 271, 273,
+ -1, 120, 193, 267, 194, -1, 268, -1, 267, 198,
+ 268, -1, 76, -1, 76, 213, 78, -1, 40, -1,
+ 39, -1, 38, -1, 4, -1, 272, -1, 266, -1,
+ 266, 272, -1, 269, -1, 269, 272, -1, 103, 272,
+ -1, 103, 269, 272, -1, 103, -1, 4, -1, 3,
-1, 37, -1, 32, 37, -1, 33, -1, 34, -1,
- 32, 33, -1, 32, 34, -1, 36, -1, 272, -1,
- 275, 272, -1, 273, -1, 273, 193, 194, -1, 273,
- 193, 251, 194, -1, 274, -1, 276, -1, 76, -1,
+ 32, 33, -1, 32, 34, -1, 36, -1, 274, -1,
+ 277, 274, -1, 275, -1, 275, 195, 196, -1, 275,
+ 195, 253, 196, -1, 276, -1, 278, -1, 76, -1,
74, -1, 6, -1, 7, -1, 8, -1, 5, -1,
29, -1, 30, -1, 31, -1, 20, -1, 21, -1,
22, -1, 23, -1, 24, -1, 25, -1, 26, -1,
@@ -782,57 +783,57 @@ static const yytype_int16 yyrhs[] =
62, -1, 63, -1, 64, -1, 65, -1, 66, -1,
67, -1, 68, -1, 69, -1, 70, -1, 71, -1,
72, -1, 106, -1, 105, -1, 104, -1, 73, 76,
- 213, 277, 214, -1, 73, 213, 277, 214, -1, 278,
- -1, 277, 278, -1, 271, 279, 212, -1, 280, -1,
- 279, 196, 280, -1, 76, -1, 76, 193, 251, 194,
- -1, 248, -1, 252, -1, 285, -1, 284, -1, 282,
- -1, 289, -1, 290, -1, 293, -1, 294, -1, 295,
- -1, 299, -1, 213, 214, -1, 213, 288, 214, -1,
- 287, -1, 284, -1, 213, 214, -1, 213, 288, 214,
- -1, 283, -1, 288, 283, -1, 212, -1, 250, 212,
- -1, 14, 191, 250, 192, 291, -1, 283, 12, 283,
- -1, 283, -1, 250, -1, 263, 76, 211, 281, -1,
- 17, 191, 250, 192, 285, -1, 18, 250, 210, -1,
- 19, 210, -1, 75, 191, 292, 192, 286, -1, 11,
- 283, 75, 191, 250, 192, 212, -1, 13, 191, 296,
- 298, 192, 286, -1, 289, -1, 282, -1, 292, -1,
- -1, 297, 212, -1, 297, 212, 250, -1, 10, 212,
- -1, 9, 212, -1, 16, 212, -1, 16, 250, 212,
- -1, 15, 212, -1, 301, -1, 252, -1, 219, -1,
- 253, 287, -1
+ 215, 279, 216, -1, 73, 215, 279, 216, -1, 280,
+ -1, 279, 280, -1, 273, 281, 214, -1, 282, -1,
+ 281, 198, 282, -1, 76, -1, 76, 195, 253, 196,
+ -1, 250, -1, 254, -1, 287, -1, 286, -1, 284,
+ -1, 291, -1, 292, -1, 295, -1, 296, -1, 297,
+ -1, 301, -1, 215, 216, -1, 215, 290, 216, -1,
+ 289, -1, 286, -1, 215, 216, -1, 215, 290, 216,
+ -1, 285, -1, 290, 285, -1, 214, -1, 252, 214,
+ -1, 14, 193, 252, 194, 293, -1, 285, 12, 285,
+ -1, 285, -1, 252, -1, 265, 76, 213, 283, -1,
+ 17, 193, 252, 194, 287, -1, 18, 252, 212, -1,
+ 19, 212, -1, 75, 193, 294, 194, 288, -1, 11,
+ 285, 75, 193, 252, 194, 214, -1, 13, 193, 298,
+ 300, 194, 288, -1, 291, -1, 284, -1, 294, -1,
+ -1, 299, 214, -1, 299, 214, 252, -1, 10, 214,
+ -1, 9, 214, -1, 16, 214, -1, 16, 252, 214,
+ -1, 15, 214, -1, 303, -1, 254, -1, 221, -1,
+ 255, 289, -1
};
/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
- 0, 211, 211, 210, 217, 219, 239, 240, 241, 242,
- 245, 247, 251, 260, 268, 279, 283, 290, 297, 304,
- 311, 318, 325, 326, 332, 336, 343, 349, 358, 362,
- 366, 367, 376, 377, 381, 382, 386, 392, 404, 408,
- 414, 421, 432, 433, 439, 445, 455, 456, 457, 458,
- 462, 463, 469, 475, 484, 485, 491, 500, 501, 507,
- 516, 517, 523, 529, 535, 544, 545, 551, 560, 561,
- 570, 571, 580, 581, 590, 591, 600, 601, 610, 611,
- 620, 621, 630, 631, 640, 641, 642, 643, 644, 645,
- 646, 647, 648, 649, 650, 654, 658, 674, 678, 682,
- 686, 700, 704, 705, 709, 714, 722, 733, 743, 758,
- 765, 770, 781, 794, 797, 802, 807, 816, 820, 821,
- 830, 839, 848, 857, 866, 879, 890, 899, 908, 917,
- 926, 935, 944, 958, 965, 976, 983, 984, 1003, 1032,
- 1073, 1078, 1083, 1091, 1099, 1100, 1101, 1106, 1107, 1112,
- 1117, 1123, 1131, 1136, 1141, 1146, 1152, 1157, 1162, 1167,
- 1172, 1180, 1181, 1189, 1190, 1196, 1205, 1211, 1217, 1226,
- 1227, 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236,
- 1237, 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246,
- 1247, 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256,
- 1257, 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266,
- 1267, 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276,
- 1280, 1291, 1302, 1316, 1322, 1331, 1336, 1344, 1359, 1364,
- 1372, 1378, 1387, 1391, 1397, 1398, 1402, 1403, 1404, 1405,
- 1406, 1407, 1408, 1412, 1418, 1427, 1428, 1432, 1438, 1447,
- 1457, 1469, 1475, 1484, 1493, 1498, 1506, 1510, 1524, 1528,
- 1529, 1533, 1540, 1547, 1557, 1558, 1562, 1564, 1570, 1575,
- 1584, 1590, 1596, 1602, 1608, 1617, 1618, 1619, 1623
+ 0, 212, 212, 211, 218, 220, 240, 241, 242, 243,
+ 246, 248, 252, 261, 269, 280, 284, 291, 298, 305,
+ 312, 319, 326, 327, 333, 337, 344, 350, 359, 363,
+ 367, 368, 377, 378, 382, 383, 387, 393, 405, 409,
+ 415, 422, 433, 434, 440, 446, 456, 457, 458, 459,
+ 463, 464, 470, 476, 485, 486, 492, 501, 502, 508,
+ 517, 518, 524, 530, 536, 545, 546, 552, 561, 562,
+ 571, 572, 581, 582, 591, 592, 601, 602, 611, 612,
+ 621, 622, 631, 632, 641, 642, 643, 644, 645, 646,
+ 647, 648, 649, 650, 651, 655, 659, 675, 679, 683,
+ 687, 701, 705, 706, 710, 715, 723, 734, 744, 759,
+ 766, 771, 782, 795, 798, 803, 808, 817, 821, 822,
+ 831, 840, 849, 858, 867, 880, 891, 900, 909, 918,
+ 927, 936, 945, 959, 966, 977, 984, 985, 1004, 1033,
+ 1074, 1079, 1084, 1092, 1100, 1101, 1102, 1107, 1108, 1113,
+ 1118, 1124, 1132, 1137, 1142, 1147, 1153, 1158, 1163, 1168,
+ 1173, 1181, 1182, 1190, 1191, 1197, 1206, 1212, 1218, 1227,
+ 1228, 1229, 1230, 1231, 1232, 1233, 1234, 1235, 1236, 1237,
+ 1238, 1239, 1240, 1241, 1242, 1243, 1244, 1245, 1246, 1247,
+ 1248, 1249, 1250, 1251, 1252, 1253, 1254, 1255, 1256, 1257,
+ 1258, 1259, 1260, 1261, 1262, 1263, 1264, 1265, 1266, 1267,
+ 1268, 1269, 1270, 1271, 1272, 1273, 1274, 1275, 1276, 1277,
+ 1281, 1292, 1303, 1317, 1323, 1332, 1337, 1345, 1360, 1365,
+ 1373, 1379, 1388, 1392, 1398, 1399, 1403, 1404, 1405, 1406,
+ 1407, 1408, 1409, 1413, 1419, 1428, 1429, 1433, 1439, 1448,
+ 1458, 1470, 1476, 1485, 1494, 1499, 1507, 1511, 1525, 1529,
+ 1530, 1534, 1541, 1548, 1558, 1559, 1563, 1565, 1571, 1576,
+ 1585, 1591, 1597, 1603, 1609, 1618, 1619, 1620, 1624
};
#endif
@@ -876,11 +877,11 @@ static const char *const yytname[] =
"IIMAGE1DARRAY", "IIMAGE2DARRAY", "UIMAGE1D", "UIMAGE2D", "UIMAGE3D",
"UIMAGECUBE", "UIMAGE1DARRAY", "UIMAGE2DARRAY", "IMAGE1DSHADOW",
"IMAGE2DSHADOW", "IMAGEBUFFER", "IIMAGEBUFFER", "UIMAGEBUFFER",
- "ROW_MAJOR", "'('", "')'", "'['", "']'", "'.'", "','", "'+'", "'-'",
- "'!'", "'~'", "'*'", "'/'", "'%'", "'<'", "'>'", "'&'", "'^'", "'|'",
- "'?'", "':'", "'='", "';'", "'{'", "'}'", "$accept", "translation_unit",
- "$@1", "version_statement", "pragma_statement",
- "extension_statement_list", "extension_statement",
+ "IMAGE1DARRAYSHADOW", "IMAGE2DARRAYSHADOW", "ROW_MAJOR", "'('", "')'",
+ "'['", "']'", "'.'", "','", "'+'", "'-'", "'!'", "'~'", "'*'", "'/'",
+ "'%'", "'<'", "'>'", "'&'", "'^'", "'|'", "'?'", "':'", "'='", "';'",
+ "'{'", "'}'", "$accept", "translation_unit", "$@1", "version_statement",
+ "pragma_statement", "extension_statement_list", "extension_statement",
"external_declaration_list", "variable_identifier", "primary_expression",
"postfix_expression", "integer_expression", "function_call",
"function_call_or_method", "function_call_generic",
@@ -939,43 +940,43 @@ static const yytype_uint16 yytoknum[] =
415, 416, 417, 418, 419, 420, 421, 422, 423, 424,
425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
435, 436, 437, 438, 439, 440, 441, 442, 443, 444,
- 445, 40, 41, 91, 93, 46, 44, 43, 45, 33,
- 126, 42, 47, 37, 60, 62, 38, 94, 124, 63,
- 58, 61, 59, 123, 125
+ 445, 446, 447, 40, 41, 91, 93, 46, 44, 43,
+ 45, 33, 126, 42, 47, 37, 60, 62, 38, 94,
+ 124, 63, 58, 61, 59, 123, 125
};
# endif
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
static const yytype_uint16 yyr1[] =
{
- 0, 215, 217, 216, 218, 218, 219, 219, 219, 219,
- 220, 220, 221, 222, 222, 223, 224, 224, 224, 224,
- 224, 224, 225, 225, 225, 225, 225, 225, 226, 227,
- 228, 228, 229, 229, 230, 230, 231, 231, 232, 233,
- 233, 233, 234, 234, 234, 234, 235, 235, 235, 235,
- 236, 236, 236, 236, 237, 237, 237, 238, 238, 238,
- 239, 239, 239, 239, 239, 240, 240, 240, 241, 241,
- 242, 242, 243, 243, 244, 244, 245, 245, 246, 246,
- 247, 247, 248, 248, 249, 249, 249, 249, 249, 249,
- 249, 249, 249, 249, 249, 250, 250, 251, 252, 252,
- 252, 253, 254, 254, 255, 255, 256, 257, 257, 258,
- 258, 258, 258, 259, 259, 259, 259, 260, 261, 261,
- 261, 261, 261, 261, 261, 262, 262, 262, 262, 262,
- 262, 262, 262, 263, 263, 264, 265, 265, 266, 266,
- 267, 267, 267, 268, 269, 269, 269, 269, 269, 269,
- 269, 269, 270, 270, 270, 270, 270, 270, 270, 270,
- 270, 271, 271, 272, 272, 272, 273, 273, 273, 274,
- 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
- 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
- 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
- 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
- 274, 274, 274, 274, 274, 274, 274, 274, 274, 274,
- 275, 275, 275, 276, 276, 277, 277, 278, 279, 279,
- 280, 280, 281, 282, 283, 283, 284, 284, 284, 284,
- 284, 284, 284, 285, 285, 286, 286, 287, 287, 288,
- 288, 289, 289, 290, 291, 291, 292, 292, 293, 294,
- 294, 295, 295, 295, 296, 296, 297, 297, 298, 298,
- 299, 299, 299, 299, 299, 300, 300, 300, 301
+ 0, 217, 219, 218, 220, 220, 221, 221, 221, 221,
+ 222, 222, 223, 224, 224, 225, 226, 226, 226, 226,
+ 226, 226, 227, 227, 227, 227, 227, 227, 228, 229,
+ 230, 230, 231, 231, 232, 232, 233, 233, 234, 235,
+ 235, 235, 236, 236, 236, 236, 237, 237, 237, 237,
+ 238, 238, 238, 238, 239, 239, 239, 240, 240, 240,
+ 241, 241, 241, 241, 241, 242, 242, 242, 243, 243,
+ 244, 244, 245, 245, 246, 246, 247, 247, 248, 248,
+ 249, 249, 250, 250, 251, 251, 251, 251, 251, 251,
+ 251, 251, 251, 251, 251, 252, 252, 253, 254, 254,
+ 254, 255, 256, 256, 257, 257, 258, 259, 259, 260,
+ 260, 260, 260, 261, 261, 261, 261, 262, 263, 263,
+ 263, 263, 263, 263, 263, 264, 264, 264, 264, 264,
+ 264, 264, 264, 265, 265, 266, 267, 267, 268, 268,
+ 269, 269, 269, 270, 271, 271, 271, 271, 271, 271,
+ 271, 271, 272, 272, 272, 272, 272, 272, 272, 272,
+ 272, 273, 273, 274, 274, 274, 275, 275, 275, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 276, 276, 276, 276, 276, 276, 276, 276, 276, 276,
+ 277, 277, 277, 278, 278, 279, 279, 280, 281, 281,
+ 282, 282, 283, 284, 285, 285, 286, 286, 286, 286,
+ 286, 286, 286, 287, 287, 288, 288, 289, 289, 290,
+ 290, 291, 291, 292, 293, 293, 294, 294, 295, 296,
+ 296, 297, 297, 297, 298, 298, 299, 299, 300, 300,
+ 301, 301, 301, 301, 301, 302, 302, 302, 303
};
/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
@@ -1076,65 +1077,65 @@ static const yytype_int16 yydefgoto[] =
/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
STATE-NUM. */
-#define YYPACT_NINF -360
+#define YYPACT_NINF -350
static const yytype_int16 yypact[] =
{
- -54, -53, 37, -360, -26, -360, -5, -360, 73, 3276,
- -360, 63, -360, -360, -360, -360, -360, -360, -360, -360,
- -360, -360, -360, -360, -360, -360, -360, -360, -360, -360,
- 105, -360, -360, -360, -360, -360, -360, -360, -360, -360,
- -360, -360, -360, -360, -360, -360, -360, -360, -360, -360,
- -360, -360, -360, -360, -360, -360, -360, -360, -360, -360,
- -360, -360, -360, -360, -360, -360, -360, -360, -360, -360,
- -69, -360, -360, 42, -360, -360, -360, -74, 65, 79,
- 83, 85, 16, -360, -360, -360, 3276, -360, -99, 9,
- 13, 5, -152, -360, 134, 17, 17, 3464, -360, -360,
- -360, 18, -360, 3536, -360, -360, -360, 136, -360, -360,
- -360, 0, 3464, -360, 17, -360, 3536, -360, -360, -360,
- -360, 138, -360, -360, 387, -360, -360, 24, -360, -360,
- -360, -360, -360, 3464, 149, 141, -360, -150, -360, -360,
- -360, 2371, -360, 106, 3464, 144, 1760, -360, -360, 11,
- 14, -144, -360, 12, 20, 1235, 30, 31, 22, 1992,
- 38, 2914, 26, 46, -59, -360, -360, -360, -360, -360,
- 2914, 2914, 2914, -360, -360, -360, -360, -360, 599, -360,
- -360, -360, -70, -360, -360, -360, 36, -56, 3095, 47,
- -30, 2914, -8, -113, 39, -76, 45, 34, 23, 35,
- 154, 153, -79, -360, -360, -123, -360, 41, 55, -360,
- -360, -360, -360, 811, -360, -360, -360, -360, -360, -360,
- -360, -360, -360, 172, 3464, -164, -360, 2552, 2914, -360,
- -360, -360, 56, -360, -360, 1876, 58, -110, -360, -360,
- -360, -360, 171, -360, 138, -360, -360, 179, 1644, 2914,
- -360, -360, -101, 2914, -90, -360, 2190, -360, -360, -51,
- -360, 1023, -360, -360, 2914, 3392, -360, -360, 2914, 64,
- -360, -360, -360, -360, -360, -360, -360, -360, -360, -360,
- -360, -360, -360, 2914, -360, 2914, 2914, 2914, 2914, 2914,
- 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914, 2914,
- 2914, 2914, 2914, 2914, 2914, 2914, -360, -360, -360, 62,
- -360, -360, 2733, 2914, 48, 66, -360, -360, -360, -360,
- 2914, 144, -360, -360, -360, 67, -360, -360, 2190, -49,
- -360, -22, -360, 238, 68, 187, 74, -360, -360, 71,
- 68, 76, -360, -360, -360, -360, -360, -360, -8, -8,
- -113, -113, 39, 39, 39, 39, -76, -76, 45, 34,
- 23, 35, 154, 153, -84, -360, 2914, 57, 75, -360,
- 2914, 69, 87, -360, 2914, -360, 70, 91, 1235, 72,
- 78, 1446, -360, 2914, 90, 2914, 81, -360, 2914, -360,
- -16, 2914, 1446, 267, -360, -360, 2914, -360, -360, -360,
- -360, -360, -360, 2914, -360, 82, 68, -360, 1235, -360,
- -360, -360, -360
+ -78, -56, 54, -350, -52, -350, -37, -350, 8, 3302,
+ -350, -26, -350, -350, -350, -350, -350, -350, -350, -350,
+ -350, -350, -350, -350, -350, -350, -350, -350, -350, -350,
+ 88, -350, -350, -350, -350, -350, -350, -350, -350, -350,
+ -350, -350, -350, -350, -350, -350, -350, -350, -350, -350,
+ -350, -350, -350, -350, -350, -350, -350, -350, -350, -350,
+ -350, -350, -350, -350, -350, -350, -350, -350, -350, -350,
+ -66, -350, -350, 42, -350, -350, -350, 70, -4, 10,
+ 29, 34, -79, -350, -350, -350, 3302, -350, -19, -24,
+ -69, 5, -154, -350, 102, 16, 16, 3490, -350, -350,
+ -350, 18, -350, 3562, -350, -350, -350, 108, -350, -350,
+ -350, -8, 3490, -350, 16, -350, 3562, -350, -350, -350,
+ -350, 138, -350, -350, 387, -350, -350, 24, -350, -350,
+ -350, -350, -350, 3490, 147, 141, -350, -166, -350, -350,
+ -350, 2387, -350, 106, 3490, 144, 1772, -350, -350, 7,
+ 11, -87, -350, 14, 15, 1243, 30, 32, 20, 2004,
+ 37, 2936, 25, 39, -65, -350, -350, -350, -350, -350,
+ 2936, 2936, 2936, -350, -350, -350, -350, -350, 601, -350,
+ -350, -350, -59, -350, -350, -350, 28, -82, 3119, 43,
+ -30, 2936, -11, -2, 118, -74, 114, 35, 31, 36,
+ 148, 152, -77, -350, -350, -115, -350, 40, 52, -350,
+ -350, -350, -350, 815, -350, -350, -350, -350, -350, -350,
+ -350, -350, -350, 172, 3490, -180, -350, 2570, 2936, -350,
+ -350, -350, 53, -350, -350, 1888, 55, -113, -350, -350,
+ -350, -350, 173, -350, 138, -350, -350, 178, 1656, 2936,
+ -350, -350, -108, 2936, -161, -350, 2204, -350, -350, -68,
+ -350, 1029, -350, -350, 2936, 3418, -350, -350, 2936, 61,
+ -350, -350, -350, -350, -350, -350, -350, -350, -350, -350,
+ -350, -350, -350, 2936, -350, 2936, 2936, 2936, 2936, 2936,
+ 2936, 2936, 2936, 2936, 2936, 2936, 2936, 2936, 2936, 2936,
+ 2936, 2936, 2936, 2936, 2936, 2936, -350, -350, -350, 63,
+ -350, -350, 2753, 2936, 46, 60, -350, -350, -350, -350,
+ 2936, 144, -350, -350, -350, 67, -350, -350, 2204, -55,
+ -350, -54, -350, 238, 65, 188, 71, -350, -350, 72,
+ 65, 73, -350, -350, -350, -350, -350, -350, -11, -11,
+ -2, -2, 118, 118, 118, 118, -74, -74, 114, 35,
+ 31, 36, 148, 152, -157, -350, 2936, 56, 83, -350,
+ 2936, 68, 84, -350, 2936, -350, 69, 90, 1243, 74,
+ 77, 1456, -350, 2936, 86, 2936, 79, -350, 2936, -350,
+ -53, 2936, 1456, 255, -350, -350, 2936, -350, -350, -350,
+ -350, -350, -350, 2936, -350, 80, 65, -350, 1243, -350,
+ -350, -350, -350
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -360, -360, -360, -360, -360, -360, -360, -360, -360, -360,
- -360, -360, -360, -360, 25, -360, -360, -360, -360, -135,
- -360, -89, -88, -104, -91, -11, -6, -4, -3, -7,
- -2, -360, -133, -97, -360, -156, -193, 4, 10, -360,
- -360, -360, 80, 170, 166, 84, -360, -360, -229, -360,
- -360, 59, -71, -360, -360, -72, -9, 1, -360, -360,
- 225, -360, 161, -128, -360, -14, -287, 61, -151, -359,
- -68, -82, 224, 135, 77, -360, -360, -13, -360, -360,
- -360, -360, -360, -360, -360, 228, -360
+ -350, -350, -350, -350, -350, -350, -350, -350, -350, -350,
+ -350, -350, -350, -350, 22, -350, -350, -350, -350, -135,
+ -350, -83, -81, -104, -85, -13, -6, -5, -3, -1,
+ -7, -350, -133, -97, -350, -156, -193, 9, 12, -350,
+ -350, -350, 76, 170, 168, 81, -350, -350, -239, -350,
+ -350, 59, -71, -350, -350, -72, -9, 1, -350, -350,
+ 227, -350, 163, -139, -350, -12, -283, 62, -151, -349,
+ -67, -84, 223, 135, 66, -350, -350, -10, -350, -350,
+ -350, -350, -350, -350, -350, 229, -350
};
/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
@@ -1144,39 +1145,39 @@ static const yytype_int16 yypgoto[] =
#define YYTABLE_NINF -169
static const yytype_int16 yytable[] =
{
- 99, 115, 114, 252, 247, 254, 230, 111, 231, 128,
- 292, 293, 303, 87, 262, 263, 259, -168, 240, 88,
- 12, 13, 397, 138, 139, 4, 369, 335, 128, 312,
- 74, 75, 76, 397, 315, 257, 258, 5, 129, 130,
- 131, 226, 148, 227, 135, 12, 13, 313, 243, 30,
- 31, 32, 244, 33, 34, 1, 284, 129, 130, 131,
- 136, 228, 308, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 305, 30, 31, 32, 99, 33, 34,
- 35, 36, 37, 387, 288, 289, 321, 7, 140, 306,
- 87, 270, 230, 329, 231, 305, 88, 331, 402, 335,
- 334, 404, 322, 145, 142, 8, 305, 240, 340, 409,
- 308, 330, 305, 123, 124, 208, 410, 149, 113, 368,
- 332, 290, 291, 264, 223, 265, 383, 372, 294, 295,
- 304, 316, -40, 296, 297, 145, 267, 145, 108, 109,
- 268, 337, 110, 378, 112, 305, 208, 305, 364, 11,
+ 99, 115, 114, 252, 247, 254, 230, 240, 231, 128,
+ 111, -168, 292, 293, 303, 312, 259, 335, 87, 12,
+ 13, 88, 4, 138, 139, 262, 263, 226, 128, 227,
+ 369, 1, 397, 313, 315, 257, 258, 305, 129, 130,
+ 131, 305, 148, 397, 135, 12, 13, 228, 30, 31,
+ 32, 332, 33, 34, 5, 383, 284, 129, 130, 131,
+ 136, 7, 308, 272, 273, 274, 275, 276, 277, 278,
+ 279, 280, 281, 8, 30, 31, 32, 99, 33, 34,
+ 35, 36, 37, 305, 11, 321, 107, 387, 140, 335,
+ 305, 270, 230, 329, 231, 87, 240, 331, 88, 306,
+ 334, 322, 402, 145, 142, 404, 330, 243, 340, 117,
+ 308, 244, 267, 409, 121, 208, 268, 149, 113, 368,
+ 410, 108, 109, 118, 223, 110, 337, 372, -40, 127,
+ 305, 316, 294, 295, 304, 145, 264, 145, 265, 378,
+ 379, 405, 119, 305, 305, 305, 208, 120, 364, 112,
345, 346, 347, 230, 230, 230, 230, 230, 230, 230,
230, 230, 230, 230, 230, 230, 230, 230, 230, 208,
- 379, 343, 334, 384, 305, 107, 405, 230, 117, 231,
- 305, 282, 129, 130, 131, 230, 344, 231, 352, 353,
- 354, 355, 118, 285, 286, 287, 119, -102, 120, 348,
- 349, 126, 350, 351, 208, 356, 357, 121, 365, 127,
- 137, 141, 143, 144, 150, 223, 316, 225, 390, 234,
- 236, 248, 249, 241, 245, 242, 145, 393, 266, 253,
- 299, 230, 246, 231, 250, 406, 255, 256, 271, 208,
- 298, 12, 13, 300, 301, 302, -39, 208, 309, 323,
- 318, 320, 208, 123, 325, 366, -34, 412, 374, 370,
- 371, 115, 114, 380, 305, 382, 381, -40, 385, 386,
- 30, 31, 32, 316, 33, 34, 35, 36, 37, 408,
- 388, 389, 391, 392, 401, 178, 400, 358, 316, 396,
- 342, 316, 403, 359, 411, 362, 360, 220, 361, 316,
- 224, 363, 116, 324, 310, 235, 316, 373, 311, 326,
- 407, 395, 125, 261, 122, 375, 0, 0, 0, 208,
- 0, 0, 0, 0, 0, 327, 0, 0, 0, 0,
+ 126, 343, 334, 384, 74, 75, 76, 230, 137, 231,
+ 129, 130, 131, 282, 143, 230, 344, 231, 352, 353,
+ 354, 355, 285, 286, 287, 123, 124, 288, 289, -102,
+ 290, 291, 296, 297, 208, 348, 349, 144, 365, 350,
+ 351, 356, 357, 141, 150, 223, 316, 225, 390, 234,
+ 236, 241, 266, 248, 242, 249, 145, 393, 245, 246,
+ 253, 230, 256, 231, 250, 406, 271, 255, 301, 208,
+ 299, 12, 13, 298, 302, -39, 300, 208, 309, 318,
+ 320, 323, 208, 325, 123, -34, 371, 412, 366, 370,
+ 374, 115, 114, 305, 380, 381, -40, 408, 382, 385,
+ 30, 31, 32, 316, 33, 34, 35, 36, 37, 386,
+ 389, 388, 401, 391, 392, 358, 400, 342, 316, 178,
+ 396, 316, 403, 359, 411, 360, 363, 220, 361, 316,
+ 310, 362, 224, 324, 116, 311, 316, 235, 407, 373,
+ 326, 125, 395, 261, 327, 122, 0, 0, 375, 208,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -1201,31 +1202,10 @@ static const yytype_int16 yytable[] =
0, 83, 0, 84, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 172, 0,
- 0, 0, 0, 0, 173, 174, 175, 176, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 177,
- 178, 179, 12, 13, 14, 15, 16, 17, 153, 154,
- 155, 0, 156, 157, 158, 159, 160, 161, 162, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 0, 33, 34, 35, 36, 37,
- 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 163, 164, 165, 166, 167, 168,
- 169, 0, 0, 170, 171, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 73, 74, 75, 76, 0, 77, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 83, 0, 84, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
172, 0, 0, 0, 0, 0, 173, 174, 175, 176,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 177, 178, 260, 12, 13, 14, 15, 16, 17,
+ 0, 177, 178, 179, 12, 13, 14, 15, 16, 17,
153, 154, 155, 0, 156, 157, 158, 159, 160, 161,
162, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 0, 33, 34, 35,
@@ -1244,30 +1224,9 @@ static const yytype_int16 yytable[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 172, 0, 0, 0, 0, 0, 173, 174,
- 175, 176, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 177, 178, 307, 12, 13, 14, 15,
- 16, 17, 153, 154, 155, 0, 156, 157, 158, 159,
- 160, 161, 162, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 0, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 163, 164,
- 165, 166, 167, 168, 169, 0, 0, 170, 171, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 73, 74, 75, 76,
- 0, 77, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 82, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 83, 0, 84,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 172, 0, 0, 0, 0, 0,
173, 174, 175, 176, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 177, 178, 338, 12, 13,
+ 0, 0, 0, 0, 0, 177, 178, 260, 12, 13,
14, 15, 16, 17, 153, 154, 155, 0, 156, 157,
158, 159, 160, 161, 162, 18, 19, 20, 21, 22,
23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
@@ -1286,6 +1245,49 @@ static const yytype_int16 yytable[] =
0, 84, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 172, 0,
+ 0, 0, 0, 0, 173, 174, 175, 176, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 177,
+ 178, 307, 12, 13, 14, 15, 16, 17, 153, 154,
+ 155, 0, 156, 157, 158, 159, 160, 161, 162, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 30, 31, 32, 0, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 163, 164, 165, 166, 167, 168,
+ 169, 0, 0, 170, 171, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 73, 74, 75, 76, 0, 77, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 82,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 83, 0, 84, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 172, 0, 0, 0, 0, 0, 173, 174,
+ 175, 176, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 177, 178, 338, 12, 13, 14, 15,
+ 16, 17, 153, 154, 155, 0, 156, 157, 158, 159,
+ 160, 161, 162, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 0, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 163, 164,
+ 165, 166, 167, 168, 169, 0, 0, 170, 171, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 73, 74, 75, 76,
+ 0, 77, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 82, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 83, 0, 84,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 172, 0, 0, 0,
0, 0, 173, 174, 175, 176, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 177, 178, 12,
@@ -1307,114 +1309,115 @@ static const yytype_int16 yytable[] =
83, 0, 84, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 172, 0, 0,
- 0, 0, 0, 173, 174, 175, 176, 12, 13, 14,
- 15, 16, 17, 0, 0, 0, 0, 0, 177, 124,
- 0, 0, 0, 0, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, 32, 0,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 0,
- 164, 165, 166, 167, 168, 169, 0, 0, 170, 171,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 73, 74, 75,
- 76, 0, 77, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 82, 14, 15, 16, 17, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
- 28, 29, 0, 0, 0, 0, 0, 0, 83, 0,
- 84, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 172, 72, 0, 0, 0,
- 0, 173, 174, 175, 176, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 177, 0, 0, 0,
- 0, 0, 0, 0, 74, 75, 76, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 14, 15, 16, 17, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 0, 0,
- 0, 0, 0, 0, 83, 0, 84, 38, 39, 40,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 172,
+ 0, 0, 0, 0, 0, 173, 174, 175, 176, 12,
+ 13, 14, 15, 16, 17, 0, 0, 0, 0, 0,
+ 177, 124, 0, 0, 0, 0, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 0, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 0, 72, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 239, 0, 0, 0, 0, 0,
- 74, 75, 76, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 14, 15, 16,
+ 71, 0, 164, 165, 166, 167, 168, 169, 0, 0,
+ 170, 171, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,
+ 74, 75, 76, 0, 77, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 82, 14, 15, 16,
17, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 0, 0, 0, 0, 0, 0,
83, 0, 84, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 0, 164, 165,
- 166, 167, 168, 169, 0, 0, 170, 171, 0, 0,
+ 65, 66, 67, 68, 69, 70, 71, 0, 72, 172,
+ 0, 0, 0, 0, 0, 173, 174, 175, 176, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 319, 0, 0, 0, 0, 0, 74, 75, 76, 0,
+ 177, 0, 0, 0, 0, 0, 74, 75, 76, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 14, 15, 16, 17, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 0, 0, 0, 0, 0, 0, 83, 0, 84, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 0, 72, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 239, 0,
+ 0, 0, 74, 75, 76, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
+ 15, 16, 17, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 0, 0, 0, 0,
+ 0, 0, 83, 0, 84, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 0,
+ 164, 165, 166, 167, 168, 169, 0, 0, 170, 171,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 319, 0, 0, 0, 74, 75,
+ 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 83, 0, 84, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 0,
+ 84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 172, 0, 0, 0, 0, 0, 173,
- 174, 175, 176, 12, 13, 14, 15, 16, 17, 0,
- 0, 0, 0, 0, 251, 0, 0, 0, 0, 0,
- 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
- 28, 29, 30, 31, 32, 0, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 0, 164, 165, 166, 167,
- 168, 169, 0, 0, 170, 171, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 333, 74, 75, 76, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 172, 0, 0,
+ 0, 0, 0, 173, 174, 175, 176, 12, 13, 14,
+ 15, 16, 17, 0, 0, 0, 0, 0, 251, 0,
+ 0, 0, 0, 0, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 0,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 0,
+ 164, 165, 166, 167, 168, 169, 0, 0, 170, 171,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 82, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 333, 74, 75,
+ 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 82, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 83, 0, 84, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 83, 0,
+ 84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 14, 15, 16, 17,
- 0, 172, 0, 0, 0, 0, 0, 173, 174, 175,
- 176, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 0, 164, 165, 166,
- 167, 168, 169, 0, 0, 170, 171, 0, 0, 0,
+ 0, 0, 14, 15, 16, 17, 0, 172, 0, 0,
+ 0, 0, 0, 173, 174, 175, 176, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 0, 164, 165, 166, 167, 168, 169, 0,
+ 0, 170, 171, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 74, 75, 76, 0, 0,
+ 0, 74, 75, 76, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 83, 0, 84, 0, 0,
+ 0, 83, 0, 84, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 14, 15, 16,
- 17, 0, 172, 0, 0, 229, 0, 0, 173, 174,
- 175, 176, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 0, 164, 165,
- 166, 167, 168, 169, 0, 0, 170, 171, 0, 0,
+ 0, 0, 0, 0, 0, 14, 15, 16, 17, 0,
+ 172, 0, 0, 229, 0, 0, 173, 174, 175, 176,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 0, 164, 165, 166, 167,
+ 168, 169, 0, 0, 170, 171, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 74, 75, 76, 0,
+ 0, 0, 0, 0, 74, 75, 76, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 83, 0, 84, 0,
+ 0, 0, 0, 0, 83, 0, 84, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 14, 15,
@@ -1435,122 +1438,122 @@ static const yytype_int16 yytable[] =
0, 0, 0, 0, 0, 0, 0, 83, 0, 84,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 14,
- 15, 16, 17, 0, 172, 0, 0, 367, 0, 0,
- 173, 174, 175, 176, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 0,
- 164, 165, 166, 167, 168, 169, 0, 0, 170, 171,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 74, 75,
- 76, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 14, 15, 16, 17, 0, 172, 0, 0, 367,
+ 0, 0, 173, 174, 175, 176, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ 71, 0, 164, 165, 166, 167, 168, 169, 0, 0,
+ 170, 171, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 74, 75, 76, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 83, 0,
- 84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 14, 15, 16, 17, 0, 172, 0, 0, 0, 0,
- 0, 173, 174, 175, 176, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 38, 39, 40, 41,
- 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 269,
- 0, 164, 165, 166, 167, 168, 169, 0, 0, 170,
- 171, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 74,
- 75, 76, 0, 0, 0, 0, 0, 0, 0, 0,
+ 83, 0, 84, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 14, 15, 16, 17, 0, 172,
+ 0, 0, 0, 0, 0, 173, 174, 175, 176, 18,
+ 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
+ 29, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 269, 0, 164, 165, 166, 167, 168,
+ 169, 0, 0, 170, 171, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 83,
- 0, 84, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 74, 75, 76, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 12,
- 13, 14, 15, 16, 17, 0, 172, 0, 0, 0,
- 0, 0, 173, 174, 175, 176, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 0, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 0, 72, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 73,
- 74, 75, 76, 0, 77, 0, 0, 0, 0, 0,
- 0, 0, 78, 79, 80, 81, 82, 14, 15, 16,
- 17, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 83, 0, 84, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 12, 13, 14, 15, 16,
+ 17, 0, 172, 0, 0, 0, 0, 0, 173, 174,
+ 175, 176, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 0, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
+ 65, 66, 67, 68, 69, 70, 71, 0, 72, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 73, 74, 75, 76, 0,
+ 77, 0, 0, 0, 0, 0, 0, 0, 78, 79,
+ 80, 81, 82, 14, 15, 16, 17, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 0, 0, 0, 0, 0, 0, 83, 0, 84, 38,
+ 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
+ 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
+ 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
+ 69, 70, 71, 0, 341, 14, 15, 16, 17, 169,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 74, 75, 76, 0, 0, 0, 0, 0,
+ 0, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 0, 72, 14, 15, 16,
+ 17, 0, 83, 0, 84, 0, 0, 0, 0, 0,
0, 0, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 0, 0, 0, 0, 0, 0,
- 83, 0, 84, 38, 39, 40, 41, 42, 43, 44,
+ 26, 27, 28, 29, 74, 75, 76, 0, 0, 0,
+ 0, 0, 0, 38, 39, 40, 41, 42, 43, 44,
45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 0, 341, 14,
- 15, 16, 17, 169, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 18, 19, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 74, 75, 76, 0,
- 0, 0, 0, 0, 0, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 0,
- 72, 14, 15, 16, 17, 0, 83, 0, 84, 0,
- 0, 0, 0, 0, 0, 0, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 74, 75,
- 76, 0, 0, 0, 0, 0, 0, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 0, 72, 0, 0, 0, 0, 0, 83, 0,
- 84, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 65, 66, 67, 68, 69, 70, 71, 0, 72, 0,
+ 0, 0, 0, 0, 83, 0, 84, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 83, 0, 84
+ 0, 0, 0, 0, 0, 0, 83, 0, 84
};
static const yytype_int16 yycheck[] =
{
- 9, 73, 73, 159, 155, 161, 141, 76, 141, 4,
- 86, 87, 91, 9, 84, 85, 172, 76, 146, 9,
- 3, 4, 381, 95, 96, 78, 313, 256, 4, 193,
- 104, 105, 106, 392, 227, 170, 171, 0, 33, 34,
- 35, 191, 114, 193, 196, 3, 4, 211, 192, 32,
- 33, 34, 196, 36, 37, 109, 191, 33, 34, 35,
- 212, 211, 213, 93, 94, 95, 96, 97, 98, 99,
- 100, 101, 102, 196, 32, 33, 34, 86, 36, 37,
- 38, 39, 40, 370, 197, 198, 196, 113, 97, 212,
- 86, 188, 227, 249, 227, 196, 86, 253, 385, 328,
- 256, 388, 212, 112, 103, 110, 196, 235, 264, 396,
- 261, 212, 196, 212, 213, 124, 403, 116, 76, 312,
- 210, 82, 83, 193, 133, 195, 210, 320, 204, 205,
- 209, 228, 191, 88, 89, 144, 192, 146, 33, 34,
- 196, 192, 37, 192, 213, 196, 155, 196, 304, 76,
+ 9, 73, 73, 159, 155, 161, 141, 146, 141, 4,
+ 76, 76, 86, 87, 91, 195, 172, 256, 9, 3,
+ 4, 9, 78, 95, 96, 84, 85, 193, 4, 195,
+ 313, 109, 381, 213, 227, 170, 171, 198, 33, 34,
+ 35, 198, 114, 392, 198, 3, 4, 213, 32, 33,
+ 34, 212, 36, 37, 0, 212, 191, 33, 34, 35,
+ 214, 113, 213, 93, 94, 95, 96, 97, 98, 99,
+ 100, 101, 102, 110, 32, 33, 34, 86, 36, 37,
+ 38, 39, 40, 198, 76, 198, 112, 370, 97, 328,
+ 198, 188, 227, 249, 227, 86, 235, 253, 86, 214,
+ 256, 214, 385, 112, 103, 388, 214, 194, 264, 113,
+ 261, 198, 194, 396, 193, 124, 198, 116, 76, 312,
+ 403, 33, 34, 113, 133, 37, 194, 320, 193, 198,
+ 198, 228, 206, 207, 211, 144, 195, 146, 197, 194,
+ 194, 194, 113, 198, 198, 198, 155, 113, 304, 215,
285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
295, 296, 297, 298, 299, 300, 301, 302, 303, 178,
- 192, 268, 328, 366, 196, 112, 192, 312, 113, 312,
- 196, 211, 33, 34, 35, 320, 283, 320, 292, 293,
- 294, 295, 113, 201, 202, 203, 113, 192, 113, 288,
- 289, 192, 290, 291, 213, 296, 297, 191, 305, 196,
- 76, 193, 76, 213, 76, 224, 313, 76, 374, 113,
- 76, 191, 191, 212, 212, 211, 235, 378, 192, 191,
- 207, 366, 212, 366, 212, 391, 210, 191, 191, 248,
- 206, 3, 4, 208, 90, 92, 191, 256, 76, 78,
- 194, 193, 261, 212, 75, 193, 192, 408, 191, 211,
- 194, 333, 333, 76, 196, 194, 192, 191, 211, 194,
- 32, 33, 34, 370, 36, 37, 38, 39, 40, 12,
- 211, 194, 212, 192, 194, 213, 383, 298, 385, 211,
- 265, 388, 211, 299, 212, 302, 300, 127, 301, 396,
- 134, 303, 77, 244, 224, 144, 403, 321, 224, 248,
- 392, 379, 88, 178, 86, 328, -1, -1, -1, 328,
- -1, -1, -1, -1, -1, 248, -1, -1, -1, -1,
+ 194, 268, 328, 366, 104, 105, 106, 312, 76, 312,
+ 33, 34, 35, 213, 76, 320, 283, 320, 292, 293,
+ 294, 295, 203, 204, 205, 214, 215, 199, 200, 194,
+ 82, 83, 88, 89, 213, 288, 289, 215, 305, 290,
+ 291, 296, 297, 195, 76, 224, 313, 76, 374, 113,
+ 76, 214, 194, 193, 213, 193, 235, 378, 214, 214,
+ 193, 366, 193, 366, 214, 391, 193, 212, 90, 248,
+ 209, 3, 4, 208, 92, 193, 210, 256, 76, 196,
+ 195, 78, 261, 75, 214, 194, 196, 408, 195, 213,
+ 193, 333, 333, 198, 76, 194, 193, 12, 196, 213,
+ 32, 33, 34, 370, 36, 37, 38, 39, 40, 196,
+ 196, 213, 196, 214, 194, 298, 383, 265, 385, 215,
+ 213, 388, 213, 299, 214, 300, 303, 127, 301, 396,
+ 224, 302, 134, 244, 77, 224, 403, 144, 392, 321,
+ 248, 88, 379, 178, 248, 86, -1, -1, 328, 328,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
@@ -1575,31 +1578,10 @@ static const yytype_int16 yycheck[] =
-1, 154, -1, 156, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 191, -1,
- -1, -1, -1, -1, 197, 198, 199, 200, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 212,
- 213, 214, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, -1, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, -1, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, -1, -1, 84, 85, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 103, 104, 105, 106, -1, 108, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 120,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 154, -1, 156, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 191, -1, -1, -1, -1, -1, 197, 198, 199, 200,
+ 193, -1, -1, -1, -1, -1, 199, 200, 201, 202,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 212, 213, 214, 3, 4, 5, 6, 7, 8,
+ -1, 214, 215, 216, 3, 4, 5, 6, 7, 8,
9, 10, 11, -1, 13, 14, 15, 16, 17, 18,
19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, -1, 36, 37, 38,
@@ -1618,30 +1600,9 @@ static const yytype_int16 yycheck[] =
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 191, -1, -1, -1, -1, -1, 197, 198,
- 199, 200, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 212, 213, 214, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, -1, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, -1, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, -1, -1, 84, 85, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 103, 104, 105, 106,
- -1, 108, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 120, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 154, -1, 156,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 191, -1, -1, -1, -1, -1,
- 197, 198, 199, 200, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 212, 213, 214, 3, 4,
+ -1, -1, -1, -1, 193, -1, -1, -1, -1, -1,
+ 199, 200, 201, 202, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 214, 215, 216, 3, 4,
5, 6, 7, 8, 9, 10, 11, -1, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
@@ -1660,9 +1621,52 @@ static const yytype_int16 yycheck[] =
-1, 156, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 191, -1, -1, -1,
- -1, -1, 197, 198, 199, 200, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 212, 213, 3,
+ -1, -1, -1, -1, -1, -1, -1, -1, 193, -1,
+ -1, -1, -1, -1, 199, 200, 201, 202, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 214,
+ 215, 216, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, -1, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, -1, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
+ 81, -1, -1, 84, 85, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 103, 104, 105, 106, -1, 108, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 120,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 154, -1, 156, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 193, -1, -1, -1, -1, -1, 199, 200,
+ 201, 202, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 214, 215, 216, 3, 4, 5, 6,
+ 7, 8, 9, 10, 11, -1, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
+ 27, 28, 29, 30, 31, 32, 33, 34, -1, 36,
+ 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
+ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
+ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, -1, -1, 84, 85, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 103, 104, 105, 106,
+ -1, 108, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 120, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 154, -1, 156,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 193, -1, -1, -1,
+ -1, -1, 199, 200, 201, 202, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 214, 215, 3,
4, 5, 6, 7, 8, 9, 10, 11, -1, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
@@ -1681,119 +1685,120 @@ static const yytype_int16 yycheck[] =
154, -1, 156, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 191, -1, -1,
- -1, -1, -1, 197, 198, 199, 200, 3, 4, 5,
- 6, 7, 8, -1, -1, -1, -1, -1, 212, 213,
- -1, -1, -1, -1, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, -1,
- 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
- 76, 77, 78, 79, 80, 81, -1, -1, 84, 85,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 103, 104, 105,
- 106, -1, 108, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 120, 5, 6, 7, 8, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, -1, -1, -1, -1, -1, -1, 154, -1,
- 156, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, 191, 76, -1, -1, -1,
- -1, 197, 198, 199, 200, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 212, -1, -1, -1,
- -1, -1, -1, -1, 104, 105, 106, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 5, 6, 7, 8, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, -1, -1,
- -1, -1, -1, -1, 154, -1, 156, 41, 42, 43,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 193,
+ -1, -1, -1, -1, -1, 199, 200, 201, 202, 3,
+ 4, 5, 6, 7, 8, -1, -1, -1, -1, -1,
+ 214, 215, -1, -1, -1, -1, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, -1, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, -1, 76, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 214, -1, -1, -1, -1, -1,
- 104, 105, 106, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 5, 6, 7,
+ 74, -1, 76, 77, 78, 79, 80, 81, -1, -1,
+ 84, 85, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 103,
+ 104, 105, 106, -1, 108, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 120, 5, 6, 7,
8, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, -1, -1, -1, -1, -1, -1,
154, -1, 156, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, -1, 76, 77,
- 78, 79, 80, 81, -1, -1, 84, 85, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, -1, 76, 193,
+ -1, -1, -1, -1, -1, 199, 200, 201, 202, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
214, -1, -1, -1, -1, -1, 104, 105, 106, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 5, 6, 7, 8, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ -1, -1, -1, -1, -1, -1, 154, -1, 156, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, -1, 76, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 216, -1,
+ -1, -1, 104, 105, 106, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 5,
+ 6, 7, 8, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, -1, -1, -1, -1,
+ -1, -1, 154, -1, 156, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
+ 76, 77, 78, 79, 80, 81, -1, -1, 84, 85,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 216, -1, -1, -1, 104, 105,
+ 106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 154, -1, 156, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 154, -1,
+ 156, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 191, -1, -1, -1, -1, -1, 197,
- 198, 199, 200, 3, 4, 5, 6, 7, 8, -1,
- -1, -1, -1, -1, 212, -1, -1, -1, -1, -1,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, -1, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
- 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
- 70, 71, 72, 73, 74, -1, 76, 77, 78, 79,
- 80, 81, -1, -1, 84, 85, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 103, 104, 105, 106, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 193, -1, -1,
+ -1, -1, -1, 199, 200, 201, 202, 3, 4, 5,
+ 6, 7, 8, -1, -1, -1, -1, -1, 214, -1,
+ -1, -1, -1, -1, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, -1,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
+ 76, 77, 78, 79, 80, 81, -1, -1, 84, 85,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 120, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 103, 104, 105,
+ 106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 120, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 154, -1, 156, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 154, -1,
+ 156, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 5, 6, 7, 8,
- -1, 191, -1, -1, -1, -1, -1, 197, 198, 199,
- 200, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, -1, 76, 77, 78,
- 79, 80, 81, -1, -1, 84, 85, -1, -1, -1,
+ -1, -1, 5, 6, 7, 8, -1, 193, -1, -1,
+ -1, -1, -1, 199, 200, 201, 202, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, -1, 76, 77, 78, 79, 80, 81, -1,
+ -1, 84, 85, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 104, 105, 106, -1, -1,
+ -1, 104, 105, 106, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 154, -1, 156, -1, -1,
+ -1, 154, -1, 156, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 5, 6, 7,
- 8, -1, 191, -1, -1, 194, -1, -1, 197, 198,
- 199, 200, 20, 21, 22, 23, 24, 25, 26, 27,
- 28, 29, 30, 31, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, -1, 76, 77,
- 78, 79, 80, 81, -1, -1, 84, 85, -1, -1,
+ -1, -1, -1, -1, -1, 5, 6, 7, 8, -1,
+ 193, -1, -1, 196, -1, -1, 199, 200, 201, 202,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, -1, 76, 77, 78, 79,
+ 80, 81, -1, -1, 84, 85, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 104, 105, 106, -1,
+ -1, -1, -1, -1, 104, 105, 106, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 154, -1, 156, -1,
+ -1, -1, -1, -1, 154, -1, 156, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, 5, 6,
- 7, 8, -1, 191, -1, -1, 194, -1, -1, 197,
- 198, 199, 200, 20, 21, 22, 23, 24, 25, 26,
+ 7, 8, -1, 193, -1, -1, 196, -1, -1, 199,
+ 200, 201, 202, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
@@ -1809,133 +1814,133 @@ static const yytype_int16 yycheck[] =
-1, -1, -1, -1, -1, -1, -1, 154, -1, 156,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 5,
- 6, 7, 8, -1, 191, -1, -1, 194, -1, -1,
- 197, 198, 199, 200, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 41, 42, 43, 44, 45,
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
- 76, 77, 78, 79, 80, 81, -1, -1, 84, 85,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 104, 105,
- 106, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 5, 6, 7, 8, -1, 193, -1, -1, 196,
+ -1, -1, 199, 200, 201, 202, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, -1, 76, 77, 78, 79, 80, 81, -1, -1,
+ 84, 85, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 104, 105, 106, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 154, -1,
- 156, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 5, 6, 7, 8, -1, 191, -1, -1, -1, -1,
- -1, 197, 198, 199, 200, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- -1, 76, 77, 78, 79, 80, 81, -1, -1, 84,
- 85, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 104,
- 105, 106, -1, -1, -1, -1, -1, -1, -1, -1,
+ 154, -1, 156, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 5, 6, 7, 8, -1, 193,
+ -1, -1, -1, -1, -1, 199, 200, 201, 202, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
+ 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
+ 71, 72, 73, 74, -1, 76, 77, 78, 79, 80,
+ 81, -1, -1, 84, 85, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 104, 105, 106, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 154,
- -1, 156, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 3,
- 4, 5, 6, 7, 8, -1, 191, -1, -1, -1,
- -1, -1, 197, 198, 199, 200, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, -1, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, -1, 76, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 103,
- 104, 105, 106, -1, 108, -1, -1, -1, -1, -1,
- -1, -1, 116, 117, 118, 119, 120, 5, 6, 7,
- 8, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 154, -1, 156, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 3, 4, 5, 6, 7,
+ 8, -1, 193, -1, -1, -1, -1, -1, 199, 200,
+ 201, 202, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, -1, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, -1, 76, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 103, 104, 105, 106, -1,
+ 108, -1, -1, -1, -1, -1, -1, -1, 116, 117,
+ 118, 119, 120, 5, 6, 7, 8, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ -1, -1, -1, -1, -1, -1, 154, -1, 156, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, -1, 76, 5, 6, 7, 8, 81,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 104, 105, 106, -1, -1, -1, -1, -1,
+ -1, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, -1, 76, 5, 6, 7,
+ 8, -1, 154, -1, 156, -1, -1, -1, -1, -1,
-1, -1, 20, 21, 22, 23, 24, 25, 26, 27,
- 28, 29, 30, 31, -1, -1, -1, -1, -1, -1,
- 154, -1, 156, 41, 42, 43, 44, 45, 46, 47,
+ 28, 29, 30, 31, 104, 105, 106, -1, -1, -1,
+ -1, -1, -1, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, -1, 76, 5,
- 6, 7, 8, 81, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 104, 105, 106, -1,
- -1, -1, -1, -1, -1, 41, 42, 43, 44, 45,
- 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, -1,
- 76, 5, 6, 7, 8, -1, 154, -1, 156, -1,
- -1, -1, -1, -1, -1, -1, 20, 21, 22, 23,
- 24, 25, 26, 27, 28, 29, 30, 31, 104, 105,
- 106, -1, -1, -1, -1, -1, -1, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
- 74, -1, 76, -1, -1, -1, -1, -1, 154, -1,
- 156, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 68, 69, 70, 71, 72, 73, 74, -1, 76, -1,
+ -1, -1, -1, -1, 154, -1, 156, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 154, -1, 156
+ -1, -1, -1, -1, -1, -1, 154, -1, 156
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
symbol of state STATE-NUM. */
static const yytype_uint16 yystos[] =
{
- 0, 109, 216, 218, 78, 0, 220, 113, 110, 217,
- 221, 76, 3, 4, 5, 6, 7, 8, 20, 21,
+ 0, 109, 218, 220, 78, 0, 222, 113, 110, 219,
+ 223, 76, 3, 4, 5, 6, 7, 8, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
32, 33, 34, 36, 37, 38, 39, 40, 41, 42,
43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
73, 74, 76, 103, 104, 105, 106, 108, 116, 117,
- 118, 119, 120, 154, 156, 219, 222, 252, 253, 254,
- 255, 256, 261, 262, 263, 264, 267, 269, 270, 271,
- 272, 273, 274, 275, 276, 300, 301, 112, 33, 34,
- 37, 76, 213, 76, 267, 270, 275, 113, 113, 113,
- 113, 191, 300, 212, 213, 287, 192, 196, 4, 33,
- 34, 35, 258, 259, 268, 196, 212, 76, 270, 270,
- 271, 193, 272, 76, 213, 271, 277, 278, 270, 272,
- 76, 265, 266, 9, 10, 11, 13, 14, 15, 16,
+ 118, 119, 120, 154, 156, 221, 224, 254, 255, 256,
+ 257, 258, 263, 264, 265, 266, 269, 271, 272, 273,
+ 274, 275, 276, 277, 278, 302, 303, 112, 33, 34,
+ 37, 76, 215, 76, 269, 272, 277, 113, 113, 113,
+ 113, 193, 302, 214, 215, 289, 194, 198, 4, 33,
+ 34, 35, 260, 261, 270, 198, 214, 76, 272, 272,
+ 273, 195, 274, 76, 215, 273, 279, 280, 272, 274,
+ 76, 267, 268, 9, 10, 11, 13, 14, 15, 16,
17, 18, 19, 75, 76, 77, 78, 79, 80, 81,
- 84, 85, 191, 197, 198, 199, 200, 212, 213, 214,
- 223, 224, 225, 227, 228, 229, 230, 231, 232, 233,
- 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
- 244, 245, 246, 247, 248, 250, 252, 253, 271, 282,
- 283, 284, 285, 288, 289, 290, 293, 294, 295, 299,
- 258, 257, 260, 271, 259, 76, 191, 193, 211, 194,
- 234, 247, 251, 271, 113, 277, 76, 279, 280, 214,
- 278, 212, 211, 192, 196, 212, 212, 283, 191, 191,
- 212, 212, 250, 191, 250, 210, 191, 234, 234, 250,
- 214, 288, 84, 85, 193, 195, 192, 192, 196, 74,
- 248, 191, 93, 94, 95, 96, 97, 98, 99, 100,
- 101, 102, 211, 249, 234, 201, 202, 203, 197, 198,
- 82, 83, 86, 87, 204, 205, 88, 89, 206, 207,
- 208, 90, 92, 91, 209, 196, 212, 214, 283, 76,
- 257, 260, 193, 211, 194, 251, 248, 281, 194, 214,
- 193, 196, 212, 78, 266, 75, 282, 289, 296, 250,
- 212, 250, 210, 103, 250, 263, 292, 192, 214, 226,
- 250, 76, 229, 248, 248, 234, 234, 234, 236, 236,
- 237, 237, 238, 238, 238, 238, 239, 239, 240, 241,
- 242, 243, 244, 245, 250, 248, 193, 194, 251, 281,
- 211, 194, 251, 280, 191, 292, 297, 298, 192, 192,
- 76, 192, 194, 210, 251, 211, 194, 281, 211, 194,
- 250, 212, 192, 283, 291, 285, 211, 284, 286, 287,
- 248, 194, 281, 211, 281, 192, 250, 286, 12, 281,
- 281, 212, 283
+ 84, 85, 193, 199, 200, 201, 202, 214, 215, 216,
+ 225, 226, 227, 229, 230, 231, 232, 233, 234, 235,
+ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 252, 254, 255, 273, 284,
+ 285, 286, 287, 290, 291, 292, 295, 296, 297, 301,
+ 260, 259, 262, 273, 261, 76, 193, 195, 213, 196,
+ 236, 249, 253, 273, 113, 279, 76, 281, 282, 216,
+ 280, 214, 213, 194, 198, 214, 214, 285, 193, 193,
+ 214, 214, 252, 193, 252, 212, 193, 236, 236, 252,
+ 216, 290, 84, 85, 195, 197, 194, 194, 198, 74,
+ 250, 193, 93, 94, 95, 96, 97, 98, 99, 100,
+ 101, 102, 213, 251, 236, 203, 204, 205, 199, 200,
+ 82, 83, 86, 87, 206, 207, 88, 89, 208, 209,
+ 210, 90, 92, 91, 211, 198, 214, 216, 285, 76,
+ 259, 262, 195, 213, 196, 253, 250, 283, 196, 216,
+ 195, 198, 214, 78, 268, 75, 284, 291, 298, 252,
+ 214, 252, 212, 103, 252, 265, 294, 194, 216, 228,
+ 252, 76, 231, 250, 250, 236, 236, 236, 238, 238,
+ 239, 239, 240, 240, 240, 240, 241, 241, 242, 243,
+ 244, 245, 246, 247, 252, 250, 195, 196, 253, 283,
+ 213, 196, 253, 282, 193, 294, 299, 300, 194, 194,
+ 76, 194, 196, 212, 253, 213, 196, 283, 213, 196,
+ 252, 214, 194, 285, 293, 287, 213, 286, 288, 289,
+ 250, 196, 283, 213, 283, 194, 252, 288, 12, 283,
+ 283, 214, 285
};
#define yyerrok (yyerrstatus = 0)
@@ -1950,9 +1955,18 @@ static const yytype_uint16 yystos[] =
/* Like YYERROR except do call yyerror. This remains here temporarily
to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. */
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
#define YYRECOVERING() (!!yyerrstatus)
@@ -2009,7 +2023,7 @@ while (YYID (0))
we won't break user code: when these are the locations we know. */
#ifndef YY_LOCATION_PRINT
-# if YYLTYPE_IS_TRIVIAL
+# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
# define YY_LOCATION_PRINT(File, Loc) \
fprintf (File, "%d.%d-%d.%d", \
(Loc).first_line, (Loc).first_column, \
@@ -2551,7 +2565,7 @@ YYLTYPE yylloc;
YYLTYPE *yylsp;
/* The locations where the error started and ended. */
- YYLTYPE yyerror_range[2];
+ YYLTYPE yyerror_range[3];
YYSIZE_T yystacksize;
@@ -2598,7 +2612,7 @@ YYLTYPE yylloc;
yyvsp = yyvs;
yylsp = yyls;
-#if YYLTYPE_IS_TRIVIAL
+#if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
/* Initialize the default location before parsing starts. */
yylloc.first_line = yylloc.last_line = 1;
yylloc.first_column = yylloc.last_column = 1;
@@ -2606,7 +2620,7 @@ YYLTYPE yylloc;
/* User initialization code. */
-/* Line 1242 of yacc.c */
+/* Line 1251 of yacc.c */
#line 41 "glsl_parser.ypp"
{
yylloc.first_line = 1;
@@ -2616,8 +2630,8 @@ YYLTYPE yylloc;
yylloc.source = 0;
}
-/* Line 1242 of yacc.c */
-#line 2621 "glsl_parser.cpp"
+/* Line 1251 of yacc.c */
+#line 2635 "glsl_parser.cpp"
yylsp[0] = yylloc;
goto yysetstate;
@@ -2804,8 +2818,8 @@ yyreduce:
{
case 2:
-/* Line 1455 of yacc.c */
-#line 211 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 212 "glsl_parser.ypp"
{
_mesa_glsl_initialize_types(state);
;}
@@ -2813,8 +2827,8 @@ yyreduce:
case 5:
-/* Line 1455 of yacc.c */
-#line 220 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 221 "glsl_parser.ypp"
{
switch ((yyvsp[(2) - (3)].n)) {
case 100:
@@ -2835,8 +2849,8 @@ yyreduce:
case 12:
-/* Line 1455 of yacc.c */
-#line 252 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 253 "glsl_parser.ypp"
{
if (!_mesa_glsl_process_extension((yyvsp[(2) - (5)].identifier), & (yylsp[(2) - (5)]), (yyvsp[(4) - (5)].identifier), & (yylsp[(4) - (5)]), state)) {
YYERROR;
@@ -2846,8 +2860,8 @@ yyreduce:
case 13:
-/* Line 1455 of yacc.c */
-#line 261 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 262 "glsl_parser.ypp"
{
/* FINISHME: The NULL test is only required because 'precision'
* FINISHME: statements are not yet supported.
@@ -2859,8 +2873,8 @@ yyreduce:
case 14:
-/* Line 1455 of yacc.c */
-#line 269 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 270 "glsl_parser.ypp"
{
/* FINISHME: The NULL test is only required because 'precision'
* FINISHME: statements are not yet supported.
@@ -2872,8 +2886,8 @@ yyreduce:
case 16:
-/* Line 1455 of yacc.c */
-#line 284 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 285 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_identifier, NULL, NULL, NULL);
@@ -2884,8 +2898,8 @@ yyreduce:
case 17:
-/* Line 1455 of yacc.c */
-#line 291 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 292 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_int_constant, NULL, NULL, NULL);
@@ -2896,8 +2910,8 @@ yyreduce:
case 18:
-/* Line 1455 of yacc.c */
-#line 298 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 299 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_uint_constant, NULL, NULL, NULL);
@@ -2908,8 +2922,8 @@ yyreduce:
case 19:
-/* Line 1455 of yacc.c */
-#line 305 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 306 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_float_constant, NULL, NULL, NULL);
@@ -2920,8 +2934,8 @@ yyreduce:
case 20:
-/* Line 1455 of yacc.c */
-#line 312 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 313 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_bool_constant, NULL, NULL, NULL);
@@ -2932,8 +2946,8 @@ yyreduce:
case 21:
-/* Line 1455 of yacc.c */
-#line 319 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 320 "glsl_parser.ypp"
{
(yyval.expression) = (yyvsp[(2) - (3)].expression);
;}
@@ -2941,8 +2955,8 @@ yyreduce:
case 23:
-/* Line 1455 of yacc.c */
-#line 327 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 328 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_array_index, (yyvsp[(1) - (4)].expression), (yyvsp[(3) - (4)].expression), NULL);
@@ -2952,8 +2966,8 @@ yyreduce:
case 24:
-/* Line 1455 of yacc.c */
-#line 333 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 334 "glsl_parser.ypp"
{
(yyval.expression) = (yyvsp[(1) - (1)].expression);
;}
@@ -2961,8 +2975,8 @@ yyreduce:
case 25:
-/* Line 1455 of yacc.c */
-#line 337 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 338 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[(1) - (3)].expression), NULL, NULL);
@@ -2973,8 +2987,8 @@ yyreduce:
case 26:
-/* Line 1455 of yacc.c */
-#line 344 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 345 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_post_inc, (yyvsp[(1) - (2)].expression), NULL, NULL);
@@ -2984,8 +2998,8 @@ yyreduce:
case 27:
-/* Line 1455 of yacc.c */
-#line 350 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 351 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_post_dec, (yyvsp[(1) - (2)].expression), NULL, NULL);
@@ -2995,8 +3009,8 @@ yyreduce:
case 31:
-/* Line 1455 of yacc.c */
-#line 368 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 369 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_field_selection, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression), NULL);
@@ -3006,8 +3020,8 @@ yyreduce:
case 36:
-/* Line 1455 of yacc.c */
-#line 387 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 388 "glsl_parser.ypp"
{
(yyval.expression) = (yyvsp[(1) - (2)].expression);
(yyval.expression)->set_location(yylloc);
@@ -3017,8 +3031,8 @@ yyreduce:
case 37:
-/* Line 1455 of yacc.c */
-#line 393 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 394 "glsl_parser.ypp"
{
(yyval.expression) = (yyvsp[(1) - (3)].expression);
(yyval.expression)->set_location(yylloc);
@@ -3028,8 +3042,8 @@ yyreduce:
case 39:
-/* Line 1455 of yacc.c */
-#line 409 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 410 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_function_expression((yyvsp[(1) - (1)].type_specifier));
@@ -3039,8 +3053,8 @@ yyreduce:
case 40:
-/* Line 1455 of yacc.c */
-#line 415 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 416 "glsl_parser.ypp"
{
void *ctx = state;
ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (1)].identifier));
@@ -3051,8 +3065,8 @@ yyreduce:
case 41:
-/* Line 1455 of yacc.c */
-#line 422 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 423 "glsl_parser.ypp"
{
void *ctx = state;
ast_expression *callee = new(ctx) ast_expression((yyvsp[(1) - (1)].identifier));
@@ -3063,8 +3077,8 @@ yyreduce:
case 43:
-/* Line 1455 of yacc.c */
-#line 434 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 435 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_pre_inc, (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3074,8 +3088,8 @@ yyreduce:
case 44:
-/* Line 1455 of yacc.c */
-#line 440 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 441 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_pre_dec, (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3085,8 +3099,8 @@ yyreduce:
case 45:
-/* Line 1455 of yacc.c */
-#line 446 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 447 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression((yyvsp[(1) - (2)].n), (yyvsp[(2) - (2)].expression), NULL, NULL);
@@ -3096,36 +3110,36 @@ yyreduce:
case 46:
-/* Line 1455 of yacc.c */
-#line 455 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 456 "glsl_parser.ypp"
{ (yyval.n) = ast_plus; ;}
break;
case 47:
-/* Line 1455 of yacc.c */
-#line 456 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 457 "glsl_parser.ypp"
{ (yyval.n) = ast_neg; ;}
break;
case 48:
-/* Line 1455 of yacc.c */
-#line 457 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 458 "glsl_parser.ypp"
{ (yyval.n) = ast_logic_not; ;}
break;
case 49:
-/* Line 1455 of yacc.c */
-#line 458 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 459 "glsl_parser.ypp"
{ (yyval.n) = ast_bit_not; ;}
break;
case 51:
-/* Line 1455 of yacc.c */
-#line 464 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 465 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_mul, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3135,8 +3149,8 @@ yyreduce:
case 52:
-/* Line 1455 of yacc.c */
-#line 470 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 471 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_div, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3146,8 +3160,8 @@ yyreduce:
case 53:
-/* Line 1455 of yacc.c */
-#line 476 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 477 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_mod, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3157,8 +3171,8 @@ yyreduce:
case 55:
-/* Line 1455 of yacc.c */
-#line 486 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 487 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_add, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3168,8 +3182,8 @@ yyreduce:
case 56:
-/* Line 1455 of yacc.c */
-#line 492 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 493 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_sub, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3179,8 +3193,8 @@ yyreduce:
case 58:
-/* Line 1455 of yacc.c */
-#line 502 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 503 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_lshift, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3190,8 +3204,8 @@ yyreduce:
case 59:
-/* Line 1455 of yacc.c */
-#line 508 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 509 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_rshift, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3201,8 +3215,8 @@ yyreduce:
case 61:
-/* Line 1455 of yacc.c */
-#line 518 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 519 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_less, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3212,8 +3226,8 @@ yyreduce:
case 62:
-/* Line 1455 of yacc.c */
-#line 524 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 525 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_greater, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3223,8 +3237,8 @@ yyreduce:
case 63:
-/* Line 1455 of yacc.c */
-#line 530 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 531 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_lequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3234,8 +3248,8 @@ yyreduce:
case 64:
-/* Line 1455 of yacc.c */
-#line 536 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 537 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_gequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3245,8 +3259,8 @@ yyreduce:
case 66:
-/* Line 1455 of yacc.c */
-#line 546 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 547 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_equal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3256,8 +3270,8 @@ yyreduce:
case 67:
-/* Line 1455 of yacc.c */
-#line 552 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 553 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_nequal, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3267,8 +3281,8 @@ yyreduce:
case 69:
-/* Line 1455 of yacc.c */
-#line 562 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 563 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_bit_and, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3278,8 +3292,8 @@ yyreduce:
case 71:
-/* Line 1455 of yacc.c */
-#line 572 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 573 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_bit_xor, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3289,8 +3303,8 @@ yyreduce:
case 73:
-/* Line 1455 of yacc.c */
-#line 582 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 583 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_bit_or, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3300,8 +3314,8 @@ yyreduce:
case 75:
-/* Line 1455 of yacc.c */
-#line 592 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 593 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_logic_and, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3311,8 +3325,8 @@ yyreduce:
case 77:
-/* Line 1455 of yacc.c */
-#line 602 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 603 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_logic_xor, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3322,8 +3336,8 @@ yyreduce:
case 79:
-/* Line 1455 of yacc.c */
-#line 612 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 613 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression_bin(ast_logic_or, (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression));
@@ -3333,8 +3347,8 @@ yyreduce:
case 81:
-/* Line 1455 of yacc.c */
-#line 622 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 623 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression(ast_conditional, (yyvsp[(1) - (5)].expression), (yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].expression));
@@ -3344,8 +3358,8 @@ yyreduce:
case 83:
-/* Line 1455 of yacc.c */
-#line 632 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 633 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.expression) = new(ctx) ast_expression((yyvsp[(2) - (3)].n), (yyvsp[(1) - (3)].expression), (yyvsp[(3) - (3)].expression), NULL);
@@ -3355,85 +3369,85 @@ yyreduce:
case 84:
-/* Line 1455 of yacc.c */
-#line 640 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 641 "glsl_parser.ypp"
{ (yyval.n) = ast_assign; ;}
break;
case 85:
-/* Line 1455 of yacc.c */
-#line 641 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 642 "glsl_parser.ypp"
{ (yyval.n) = ast_mul_assign; ;}
break;
case 86:
-/* Line 1455 of yacc.c */
-#line 642 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 643 "glsl_parser.ypp"
{ (yyval.n) = ast_div_assign; ;}
break;
case 87:
-/* Line 1455 of yacc.c */
-#line 643 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 644 "glsl_parser.ypp"
{ (yyval.n) = ast_mod_assign; ;}
break;
case 88:
-/* Line 1455 of yacc.c */
-#line 644 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 645 "glsl_parser.ypp"
{ (yyval.n) = ast_add_assign; ;}
break;
case 89:
-/* Line 1455 of yacc.c */
-#line 645 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 646 "glsl_parser.ypp"
{ (yyval.n) = ast_sub_assign; ;}
break;
case 90:
-/* Line 1455 of yacc.c */
-#line 646 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 647 "glsl_parser.ypp"
{ (yyval.n) = ast_ls_assign; ;}
break;
case 91:
-/* Line 1455 of yacc.c */
-#line 647 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 648 "glsl_parser.ypp"
{ (yyval.n) = ast_rs_assign; ;}
break;
case 92:
-/* Line 1455 of yacc.c */
-#line 648 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 649 "glsl_parser.ypp"
{ (yyval.n) = ast_and_assign; ;}
break;
case 93:
-/* Line 1455 of yacc.c */
-#line 649 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 650 "glsl_parser.ypp"
{ (yyval.n) = ast_xor_assign; ;}
break;
case 94:
-/* Line 1455 of yacc.c */
-#line 650 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 651 "glsl_parser.ypp"
{ (yyval.n) = ast_or_assign; ;}
break;
case 95:
-/* Line 1455 of yacc.c */
-#line 655 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 656 "glsl_parser.ypp"
{
(yyval.expression) = (yyvsp[(1) - (1)].expression);
;}
@@ -3441,8 +3455,8 @@ yyreduce:
case 96:
-/* Line 1455 of yacc.c */
-#line 659 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 660 "glsl_parser.ypp"
{
void *ctx = state;
if ((yyvsp[(1) - (3)].expression)->oper != ast_sequence) {
@@ -3459,8 +3473,8 @@ yyreduce:
case 98:
-/* Line 1455 of yacc.c */
-#line 679 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 680 "glsl_parser.ypp"
{
(yyval.node) = (yyvsp[(1) - (2)].function);
;}
@@ -3468,8 +3482,8 @@ yyreduce:
case 99:
-/* Line 1455 of yacc.c */
-#line 683 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 684 "glsl_parser.ypp"
{
(yyval.node) = (yyvsp[(1) - (2)].declarator_list);
;}
@@ -3477,8 +3491,8 @@ yyreduce:
case 100:
-/* Line 1455 of yacc.c */
-#line 687 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 688 "glsl_parser.ypp"
{
if (((yyvsp[(3) - (4)].type_specifier)->type_specifier != ast_float)
&& ((yyvsp[(3) - (4)].type_specifier)->type_specifier != ast_int)) {
@@ -3493,8 +3507,8 @@ yyreduce:
case 104:
-/* Line 1455 of yacc.c */
-#line 710 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 711 "glsl_parser.ypp"
{
(yyval.function) = (yyvsp[(1) - (2)].function);
(yyval.function)->parameters.push_tail(& (yyvsp[(2) - (2)].parameter_declarator)->link);
@@ -3503,8 +3517,8 @@ yyreduce:
case 105:
-/* Line 1455 of yacc.c */
-#line 715 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 716 "glsl_parser.ypp"
{
(yyval.function) = (yyvsp[(1) - (3)].function);
(yyval.function)->parameters.push_tail(& (yyvsp[(3) - (3)].parameter_declarator)->link);
@@ -3513,8 +3527,8 @@ yyreduce:
case 106:
-/* Line 1455 of yacc.c */
-#line 723 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 724 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.function) = new(ctx) ast_function();
@@ -3526,8 +3540,8 @@ yyreduce:
case 107:
-/* Line 1455 of yacc.c */
-#line 734 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 735 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
@@ -3541,8 +3555,8 @@ yyreduce:
case 108:
-/* Line 1455 of yacc.c */
-#line 744 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 745 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
@@ -3558,8 +3572,8 @@ yyreduce:
case 109:
-/* Line 1455 of yacc.c */
-#line 759 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 760 "glsl_parser.ypp"
{
(yyvsp[(1) - (3)].type_qualifier).flags.i |= (yyvsp[(2) - (3)].type_qualifier).flags.i;
@@ -3570,8 +3584,8 @@ yyreduce:
case 110:
-/* Line 1455 of yacc.c */
-#line 766 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 767 "glsl_parser.ypp"
{
(yyval.parameter_declarator) = (yyvsp[(2) - (2)].parameter_declarator);
(yyval.parameter_declarator)->type->qualifier = (yyvsp[(1) - (2)].type_qualifier);
@@ -3580,8 +3594,8 @@ yyreduce:
case 111:
-/* Line 1455 of yacc.c */
-#line 771 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 772 "glsl_parser.ypp"
{
void *ctx = state;
(yyvsp[(1) - (3)].type_qualifier).flags.i |= (yyvsp[(2) - (3)].type_qualifier).flags.i;
@@ -3596,8 +3610,8 @@ yyreduce:
case 112:
-/* Line 1455 of yacc.c */
-#line 782 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 783 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.parameter_declarator) = new(ctx) ast_parameter_declarator();
@@ -3610,8 +3624,8 @@ yyreduce:
case 113:
-/* Line 1455 of yacc.c */
-#line 794 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 795 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
;}
@@ -3619,8 +3633,8 @@ yyreduce:
case 114:
-/* Line 1455 of yacc.c */
-#line 798 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 799 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.in = 1;
@@ -3629,8 +3643,8 @@ yyreduce:
case 115:
-/* Line 1455 of yacc.c */
-#line 803 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 804 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.out = 1;
@@ -3639,8 +3653,8 @@ yyreduce:
case 116:
-/* Line 1455 of yacc.c */
-#line 808 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 809 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.in = 1;
@@ -3650,8 +3664,8 @@ yyreduce:
case 119:
-/* Line 1455 of yacc.c */
-#line 822 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 823 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (3)].identifier), false, NULL, NULL);
@@ -3664,8 +3678,8 @@ yyreduce:
case 120:
-/* Line 1455 of yacc.c */
-#line 831 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 832 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (5)].identifier), true, NULL, NULL);
@@ -3678,8 +3692,8 @@ yyreduce:
case 121:
-/* Line 1455 of yacc.c */
-#line 840 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 841 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (6)].identifier), true, (yyvsp[(5) - (6)].expression), NULL);
@@ -3692,8 +3706,8 @@ yyreduce:
case 122:
-/* Line 1455 of yacc.c */
-#line 849 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 850 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (7)].identifier), true, NULL, (yyvsp[(7) - (7)].expression));
@@ -3706,8 +3720,8 @@ yyreduce:
case 123:
-/* Line 1455 of yacc.c */
-#line 858 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 859 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (8)].identifier), true, (yyvsp[(5) - (8)].expression), (yyvsp[(8) - (8)].expression));
@@ -3720,8 +3734,8 @@ yyreduce:
case 124:
-/* Line 1455 of yacc.c */
-#line 867 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 868 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(3) - (5)].identifier), false, NULL, (yyvsp[(5) - (5)].expression));
@@ -3734,8 +3748,8 @@ yyreduce:
case 125:
-/* Line 1455 of yacc.c */
-#line 880 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 881 "glsl_parser.ypp"
{
void *ctx = state;
if ((yyvsp[(1) - (1)].fully_specified_type)->specifier->type_specifier != ast_struct) {
@@ -3750,8 +3764,8 @@ yyreduce:
case 126:
-/* Line 1455 of yacc.c */
-#line 891 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 892 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (2)].identifier), false, NULL, NULL);
@@ -3764,8 +3778,8 @@ yyreduce:
case 127:
-/* Line 1455 of yacc.c */
-#line 900 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 901 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), true, NULL, NULL);
@@ -3778,8 +3792,8 @@ yyreduce:
case 128:
-/* Line 1455 of yacc.c */
-#line 909 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 910 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (5)].identifier), true, (yyvsp[(4) - (5)].expression), NULL);
@@ -3792,8 +3806,8 @@ yyreduce:
case 129:
-/* Line 1455 of yacc.c */
-#line 918 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 919 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (6)].identifier), true, NULL, (yyvsp[(6) - (6)].expression));
@@ -3806,8 +3820,8 @@ yyreduce:
case 130:
-/* Line 1455 of yacc.c */
-#line 927 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 928 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (7)].identifier), true, (yyvsp[(4) - (7)].expression), (yyvsp[(7) - (7)].expression));
@@ -3820,8 +3834,8 @@ yyreduce:
case 131:
-/* Line 1455 of yacc.c */
-#line 936 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 937 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), false, NULL, (yyvsp[(4) - (4)].expression));
@@ -3834,8 +3848,8 @@ yyreduce:
case 132:
-/* Line 1455 of yacc.c */
-#line 945 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 946 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (2)].identifier), false, NULL, NULL);
@@ -3850,8 +3864,8 @@ yyreduce:
case 133:
-/* Line 1455 of yacc.c */
-#line 959 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 960 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.fully_specified_type) = new(ctx) ast_fully_specified_type();
@@ -3862,8 +3876,8 @@ yyreduce:
case 134:
-/* Line 1455 of yacc.c */
-#line 966 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 967 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.fully_specified_type) = new(ctx) ast_fully_specified_type();
@@ -3875,8 +3889,8 @@ yyreduce:
case 135:
-/* Line 1455 of yacc.c */
-#line 977 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 978 "glsl_parser.ypp"
{
(yyval.type_qualifier) = (yyvsp[(3) - (4)].type_qualifier);
;}
@@ -3884,8 +3898,8 @@ yyreduce:
case 137:
-/* Line 1455 of yacc.c */
-#line 985 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 986 "glsl_parser.ypp"
{
if (((yyvsp[(1) - (3)].type_qualifier).flags.i & (yyvsp[(3) - (3)].type_qualifier).flags.i) != 0) {
_mesa_glsl_error(& (yylsp[(3) - (3)]), state,
@@ -3905,8 +3919,8 @@ yyreduce:
case 138:
-/* Line 1455 of yacc.c */
-#line 1004 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1005 "glsl_parser.ypp"
{
bool got_one = false;
@@ -3939,8 +3953,8 @@ yyreduce:
case 139:
-/* Line 1455 of yacc.c */
-#line 1033 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1034 "glsl_parser.ypp"
{
bool got_one = false;
@@ -3982,8 +3996,8 @@ yyreduce:
case 140:
-/* Line 1455 of yacc.c */
-#line 1074 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1075 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.smooth = 1;
@@ -3992,8 +4006,8 @@ yyreduce:
case 141:
-/* Line 1455 of yacc.c */
-#line 1079 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1080 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.flat = 1;
@@ -4002,8 +4016,8 @@ yyreduce:
case 142:
-/* Line 1455 of yacc.c */
-#line 1084 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1085 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.noperspective = 1;
@@ -4012,8 +4026,8 @@ yyreduce:
case 143:
-/* Line 1455 of yacc.c */
-#line 1092 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1093 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.constant = 1;
@@ -4022,8 +4036,8 @@ yyreduce:
case 146:
-/* Line 1455 of yacc.c */
-#line 1102 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1103 "glsl_parser.ypp"
{
(yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier);
(yyval.type_qualifier).flags.i |= (yyvsp[(2) - (2)].type_qualifier).flags.i;
@@ -4032,8 +4046,8 @@ yyreduce:
case 148:
-/* Line 1455 of yacc.c */
-#line 1108 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1109 "glsl_parser.ypp"
{
(yyval.type_qualifier) = (yyvsp[(1) - (2)].type_qualifier);
(yyval.type_qualifier).flags.i |= (yyvsp[(2) - (2)].type_qualifier).flags.i;
@@ -4042,8 +4056,8 @@ yyreduce:
case 149:
-/* Line 1455 of yacc.c */
-#line 1113 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1114 "glsl_parser.ypp"
{
(yyval.type_qualifier) = (yyvsp[(2) - (2)].type_qualifier);
(yyval.type_qualifier).flags.q.invariant = 1;
@@ -4052,8 +4066,8 @@ yyreduce:
case 150:
-/* Line 1455 of yacc.c */
-#line 1118 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1119 "glsl_parser.ypp"
{
(yyval.type_qualifier) = (yyvsp[(2) - (3)].type_qualifier);
(yyval.type_qualifier).flags.i |= (yyvsp[(3) - (3)].type_qualifier).flags.i;
@@ -4063,8 +4077,8 @@ yyreduce:
case 151:
-/* Line 1455 of yacc.c */
-#line 1124 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1125 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.invariant = 1;
@@ -4073,8 +4087,8 @@ yyreduce:
case 152:
-/* Line 1455 of yacc.c */
-#line 1132 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1133 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.constant = 1;
@@ -4083,8 +4097,8 @@ yyreduce:
case 153:
-/* Line 1455 of yacc.c */
-#line 1137 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1138 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.attribute = 1;
@@ -4093,8 +4107,8 @@ yyreduce:
case 154:
-/* Line 1455 of yacc.c */
-#line 1142 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1143 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.varying = 1;
@@ -4103,8 +4117,8 @@ yyreduce:
case 155:
-/* Line 1455 of yacc.c */
-#line 1147 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1148 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.centroid = 1;
@@ -4114,8 +4128,8 @@ yyreduce:
case 156:
-/* Line 1455 of yacc.c */
-#line 1153 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1154 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.in = 1;
@@ -4124,8 +4138,8 @@ yyreduce:
case 157:
-/* Line 1455 of yacc.c */
-#line 1158 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1159 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.out = 1;
@@ -4134,8 +4148,8 @@ yyreduce:
case 158:
-/* Line 1455 of yacc.c */
-#line 1163 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1164 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.centroid = 1; (yyval.type_qualifier).flags.q.in = 1;
@@ -4144,8 +4158,8 @@ yyreduce:
case 159:
-/* Line 1455 of yacc.c */
-#line 1168 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1169 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.centroid = 1; (yyval.type_qualifier).flags.q.out = 1;
@@ -4154,8 +4168,8 @@ yyreduce:
case 160:
-/* Line 1455 of yacc.c */
-#line 1173 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1174 "glsl_parser.ypp"
{
memset(& (yyval.type_qualifier), 0, sizeof((yyval.type_qualifier)));
(yyval.type_qualifier).flags.q.uniform = 1;
@@ -4164,8 +4178,8 @@ yyreduce:
case 162:
-/* Line 1455 of yacc.c */
-#line 1182 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1183 "glsl_parser.ypp"
{
(yyval.type_specifier) = (yyvsp[(2) - (2)].type_specifier);
(yyval.type_specifier)->precision = (yyvsp[(1) - (2)].n);
@@ -4174,8 +4188,8 @@ yyreduce:
case 164:
-/* Line 1455 of yacc.c */
-#line 1191 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1192 "glsl_parser.ypp"
{
(yyval.type_specifier) = (yyvsp[(1) - (3)].type_specifier);
(yyval.type_specifier)->is_array = true;
@@ -4185,8 +4199,8 @@ yyreduce:
case 165:
-/* Line 1455 of yacc.c */
-#line 1197 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1198 "glsl_parser.ypp"
{
(yyval.type_specifier) = (yyvsp[(1) - (4)].type_specifier);
(yyval.type_specifier)->is_array = true;
@@ -4196,8 +4210,8 @@ yyreduce:
case 166:
-/* Line 1455 of yacc.c */
-#line 1206 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1207 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].n));
@@ -4207,8 +4221,8 @@ yyreduce:
case 167:
-/* Line 1455 of yacc.c */
-#line 1212 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1213 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].struct_specifier));
@@ -4218,8 +4232,8 @@ yyreduce:
case 168:
-/* Line 1455 of yacc.c */
-#line 1218 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1219 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.type_specifier) = new(ctx) ast_type_specifier((yyvsp[(1) - (1)].identifier));
@@ -4229,365 +4243,365 @@ yyreduce:
case 169:
-/* Line 1455 of yacc.c */
-#line 1226 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1227 "glsl_parser.ypp"
{ (yyval.n) = ast_void; ;}
break;
case 170:
-/* Line 1455 of yacc.c */
-#line 1227 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1228 "glsl_parser.ypp"
{ (yyval.n) = ast_float; ;}
break;
case 171:
-/* Line 1455 of yacc.c */
-#line 1228 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1229 "glsl_parser.ypp"
{ (yyval.n) = ast_int; ;}
break;
case 172:
-/* Line 1455 of yacc.c */
-#line 1229 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1230 "glsl_parser.ypp"
{ (yyval.n) = ast_uint; ;}
break;
case 173:
-/* Line 1455 of yacc.c */
-#line 1230 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1231 "glsl_parser.ypp"
{ (yyval.n) = ast_bool; ;}
break;
case 174:
-/* Line 1455 of yacc.c */
-#line 1231 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1232 "glsl_parser.ypp"
{ (yyval.n) = ast_vec2; ;}
break;
case 175:
-/* Line 1455 of yacc.c */
-#line 1232 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1233 "glsl_parser.ypp"
{ (yyval.n) = ast_vec3; ;}
break;
case 176:
-/* Line 1455 of yacc.c */
-#line 1233 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1234 "glsl_parser.ypp"
{ (yyval.n) = ast_vec4; ;}
break;
case 177:
-/* Line 1455 of yacc.c */
-#line 1234 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1235 "glsl_parser.ypp"
{ (yyval.n) = ast_bvec2; ;}
break;
case 178:
-/* Line 1455 of yacc.c */
-#line 1235 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1236 "glsl_parser.ypp"
{ (yyval.n) = ast_bvec3; ;}
break;
case 179:
-/* Line 1455 of yacc.c */
-#line 1236 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1237 "glsl_parser.ypp"
{ (yyval.n) = ast_bvec4; ;}
break;
case 180:
-/* Line 1455 of yacc.c */
-#line 1237 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1238 "glsl_parser.ypp"
{ (yyval.n) = ast_ivec2; ;}
break;
case 181:
-/* Line 1455 of yacc.c */
-#line 1238 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1239 "glsl_parser.ypp"
{ (yyval.n) = ast_ivec3; ;}
break;
case 182:
-/* Line 1455 of yacc.c */
-#line 1239 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1240 "glsl_parser.ypp"
{ (yyval.n) = ast_ivec4; ;}
break;
case 183:
-/* Line 1455 of yacc.c */
-#line 1240 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1241 "glsl_parser.ypp"
{ (yyval.n) = ast_uvec2; ;}
break;
case 184:
-/* Line 1455 of yacc.c */
-#line 1241 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1242 "glsl_parser.ypp"
{ (yyval.n) = ast_uvec3; ;}
break;
case 185:
-/* Line 1455 of yacc.c */
-#line 1242 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1243 "glsl_parser.ypp"
{ (yyval.n) = ast_uvec4; ;}
break;
case 186:
-/* Line 1455 of yacc.c */
-#line 1243 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1244 "glsl_parser.ypp"
{ (yyval.n) = ast_mat2; ;}
break;
case 187:
-/* Line 1455 of yacc.c */
-#line 1244 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1245 "glsl_parser.ypp"
{ (yyval.n) = ast_mat2x3; ;}
break;
case 188:
-/* Line 1455 of yacc.c */
-#line 1245 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1246 "glsl_parser.ypp"
{ (yyval.n) = ast_mat2x4; ;}
break;
case 189:
-/* Line 1455 of yacc.c */
-#line 1246 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1247 "glsl_parser.ypp"
{ (yyval.n) = ast_mat3x2; ;}
break;
case 190:
-/* Line 1455 of yacc.c */
-#line 1247 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1248 "glsl_parser.ypp"
{ (yyval.n) = ast_mat3; ;}
break;
case 191:
-/* Line 1455 of yacc.c */
-#line 1248 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1249 "glsl_parser.ypp"
{ (yyval.n) = ast_mat3x4; ;}
break;
case 192:
-/* Line 1455 of yacc.c */
-#line 1249 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1250 "glsl_parser.ypp"
{ (yyval.n) = ast_mat4x2; ;}
break;
case 193:
-/* Line 1455 of yacc.c */
-#line 1250 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1251 "glsl_parser.ypp"
{ (yyval.n) = ast_mat4x3; ;}
break;
case 194:
-/* Line 1455 of yacc.c */
-#line 1251 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1252 "glsl_parser.ypp"
{ (yyval.n) = ast_mat4; ;}
break;
case 195:
-/* Line 1455 of yacc.c */
-#line 1252 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1253 "glsl_parser.ypp"
{ (yyval.n) = ast_sampler1d; ;}
break;
case 196:
-/* Line 1455 of yacc.c */
-#line 1253 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1254 "glsl_parser.ypp"
{ (yyval.n) = ast_sampler2d; ;}
break;
case 197:
-/* Line 1455 of yacc.c */
-#line 1254 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1255 "glsl_parser.ypp"
{ (yyval.n) = ast_sampler2drect; ;}
break;
case 198:
-/* Line 1455 of yacc.c */
-#line 1255 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1256 "glsl_parser.ypp"
{ (yyval.n) = ast_sampler3d; ;}
break;
case 199:
-/* Line 1455 of yacc.c */
-#line 1256 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1257 "glsl_parser.ypp"
{ (yyval.n) = ast_samplercube; ;}
break;
case 200:
-/* Line 1455 of yacc.c */
-#line 1257 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1258 "glsl_parser.ypp"
{ (yyval.n) = ast_sampler1dshadow; ;}
break;
case 201:
-/* Line 1455 of yacc.c */
-#line 1258 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1259 "glsl_parser.ypp"
{ (yyval.n) = ast_sampler2dshadow; ;}
break;
case 202:
-/* Line 1455 of yacc.c */
-#line 1259 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1260 "glsl_parser.ypp"
{ (yyval.n) = ast_sampler2drectshadow; ;}
break;
case 203:
-/* Line 1455 of yacc.c */
-#line 1260 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1261 "glsl_parser.ypp"
{ (yyval.n) = ast_samplercubeshadow; ;}
break;
case 204:
-/* Line 1455 of yacc.c */
-#line 1261 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1262 "glsl_parser.ypp"
{ (yyval.n) = ast_sampler1darray; ;}
break;
case 205:
-/* Line 1455 of yacc.c */
-#line 1262 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1263 "glsl_parser.ypp"
{ (yyval.n) = ast_sampler2darray; ;}
break;
case 206:
-/* Line 1455 of yacc.c */
-#line 1263 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1264 "glsl_parser.ypp"
{ (yyval.n) = ast_sampler1darrayshadow; ;}
break;
case 207:
-/* Line 1455 of yacc.c */
-#line 1264 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1265 "glsl_parser.ypp"
{ (yyval.n) = ast_sampler2darrayshadow; ;}
break;
case 208:
-/* Line 1455 of yacc.c */
-#line 1265 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1266 "glsl_parser.ypp"
{ (yyval.n) = ast_isampler1d; ;}
break;
case 209:
-/* Line 1455 of yacc.c */
-#line 1266 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1267 "glsl_parser.ypp"
{ (yyval.n) = ast_isampler2d; ;}
break;
case 210:
-/* Line 1455 of yacc.c */
-#line 1267 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1268 "glsl_parser.ypp"
{ (yyval.n) = ast_isampler3d; ;}
break;
case 211:
-/* Line 1455 of yacc.c */
-#line 1268 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1269 "glsl_parser.ypp"
{ (yyval.n) = ast_isamplercube; ;}
break;
case 212:
-/* Line 1455 of yacc.c */
-#line 1269 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1270 "glsl_parser.ypp"
{ (yyval.n) = ast_isampler1darray; ;}
break;
case 213:
-/* Line 1455 of yacc.c */
-#line 1270 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1271 "glsl_parser.ypp"
{ (yyval.n) = ast_isampler2darray; ;}
break;
case 214:
-/* Line 1455 of yacc.c */
-#line 1271 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1272 "glsl_parser.ypp"
{ (yyval.n) = ast_usampler1d; ;}
break;
case 215:
-/* Line 1455 of yacc.c */
-#line 1272 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1273 "glsl_parser.ypp"
{ (yyval.n) = ast_usampler2d; ;}
break;
case 216:
-/* Line 1455 of yacc.c */
-#line 1273 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1274 "glsl_parser.ypp"
{ (yyval.n) = ast_usampler3d; ;}
break;
case 217:
-/* Line 1455 of yacc.c */
-#line 1274 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1275 "glsl_parser.ypp"
{ (yyval.n) = ast_usamplercube; ;}
break;
case 218:
-/* Line 1455 of yacc.c */
-#line 1275 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1276 "glsl_parser.ypp"
{ (yyval.n) = ast_usampler1darray; ;}
break;
case 219:
-/* Line 1455 of yacc.c */
-#line 1276 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1277 "glsl_parser.ypp"
{ (yyval.n) = ast_usampler2darray; ;}
break;
case 220:
-/* Line 1455 of yacc.c */
-#line 1280 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1281 "glsl_parser.ypp"
{
if (!state->es_shader && state->language_version < 130)
_mesa_glsl_error(& (yylsp[(1) - (1)]), state,
@@ -4603,8 +4617,8 @@ yyreduce:
case 221:
-/* Line 1455 of yacc.c */
-#line 1291 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1292 "glsl_parser.ypp"
{
if (!state->es_shader && state->language_version < 130)
_mesa_glsl_error(& (yylsp[(1) - (1)]), state,
@@ -4620,8 +4634,8 @@ yyreduce:
case 222:
-/* Line 1455 of yacc.c */
-#line 1302 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1303 "glsl_parser.ypp"
{
if (!state->es_shader && state->language_version < 130)
_mesa_glsl_error(& (yylsp[(1) - (1)]), state,
@@ -4637,8 +4651,8 @@ yyreduce:
case 223:
-/* Line 1455 of yacc.c */
-#line 1317 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1318 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.struct_specifier) = new(ctx) ast_struct_specifier((yyvsp[(2) - (5)].identifier), (yyvsp[(4) - (5)].node));
@@ -4648,8 +4662,8 @@ yyreduce:
case 224:
-/* Line 1455 of yacc.c */
-#line 1323 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1324 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.struct_specifier) = new(ctx) ast_struct_specifier(NULL, (yyvsp[(3) - (4)].node));
@@ -4659,8 +4673,8 @@ yyreduce:
case 225:
-/* Line 1455 of yacc.c */
-#line 1332 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1333 "glsl_parser.ypp"
{
(yyval.node) = (ast_node *) (yyvsp[(1) - (1)].declarator_list);
(yyvsp[(1) - (1)].declarator_list)->link.self_link();
@@ -4669,8 +4683,8 @@ yyreduce:
case 226:
-/* Line 1455 of yacc.c */
-#line 1337 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1338 "glsl_parser.ypp"
{
(yyval.node) = (ast_node *) (yyvsp[(1) - (2)].node);
(yyval.node)->link.insert_before(& (yyvsp[(2) - (2)].declarator_list)->link);
@@ -4679,8 +4693,8 @@ yyreduce:
case 227:
-/* Line 1455 of yacc.c */
-#line 1345 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1346 "glsl_parser.ypp"
{
void *ctx = state;
ast_fully_specified_type *type = new(ctx) ast_fully_specified_type();
@@ -4696,8 +4710,8 @@ yyreduce:
case 228:
-/* Line 1455 of yacc.c */
-#line 1360 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1361 "glsl_parser.ypp"
{
(yyval.declaration) = (yyvsp[(1) - (1)].declaration);
(yyvsp[(1) - (1)].declaration)->link.self_link();
@@ -4706,8 +4720,8 @@ yyreduce:
case 229:
-/* Line 1455 of yacc.c */
-#line 1365 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1366 "glsl_parser.ypp"
{
(yyval.declaration) = (yyvsp[(1) - (3)].declaration);
(yyval.declaration)->link.insert_before(& (yyvsp[(3) - (3)].declaration)->link);
@@ -4716,8 +4730,8 @@ yyreduce:
case 230:
-/* Line 1455 of yacc.c */
-#line 1373 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1374 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.declaration) = new(ctx) ast_declaration((yyvsp[(1) - (1)].identifier), false, NULL, NULL);
@@ -4727,8 +4741,8 @@ yyreduce:
case 231:
-/* Line 1455 of yacc.c */
-#line 1379 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1380 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.declaration) = new(ctx) ast_declaration((yyvsp[(1) - (4)].identifier), true, (yyvsp[(3) - (4)].expression), NULL);
@@ -4738,29 +4752,29 @@ yyreduce:
case 234:
-/* Line 1455 of yacc.c */
-#line 1397 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1398 "glsl_parser.ypp"
{ (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].compound_statement); ;}
break;
case 239:
-/* Line 1455 of yacc.c */
-#line 1405 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1406 "glsl_parser.ypp"
{ (yyval.node) = NULL; ;}
break;
case 240:
-/* Line 1455 of yacc.c */
-#line 1406 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1407 "glsl_parser.ypp"
{ (yyval.node) = NULL; ;}
break;
case 243:
-/* Line 1455 of yacc.c */
-#line 1413 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1414 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.compound_statement) = new(ctx) ast_compound_statement(true, NULL);
@@ -4770,8 +4784,8 @@ yyreduce:
case 244:
-/* Line 1455 of yacc.c */
-#line 1419 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1420 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.compound_statement) = new(ctx) ast_compound_statement(true, (yyvsp[(2) - (3)].node));
@@ -4781,15 +4795,15 @@ yyreduce:
case 245:
-/* Line 1455 of yacc.c */
-#line 1427 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1428 "glsl_parser.ypp"
{ (yyval.node) = (ast_node *) (yyvsp[(1) - (1)].compound_statement); ;}
break;
case 247:
-/* Line 1455 of yacc.c */
-#line 1433 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1434 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.compound_statement) = new(ctx) ast_compound_statement(false, NULL);
@@ -4799,8 +4813,8 @@ yyreduce:
case 248:
-/* Line 1455 of yacc.c */
-#line 1439 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1440 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.compound_statement) = new(ctx) ast_compound_statement(false, (yyvsp[(2) - (3)].node));
@@ -4810,8 +4824,8 @@ yyreduce:
case 249:
-/* Line 1455 of yacc.c */
-#line 1448 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1449 "glsl_parser.ypp"
{
if ((yyvsp[(1) - (1)].node) == NULL) {
_mesa_glsl_error(& (yylsp[(1) - (1)]), state, "<nil> statement\n");
@@ -4825,8 +4839,8 @@ yyreduce:
case 250:
-/* Line 1455 of yacc.c */
-#line 1458 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1459 "glsl_parser.ypp"
{
if ((yyvsp[(2) - (2)].node) == NULL) {
_mesa_glsl_error(& (yylsp[(2) - (2)]), state, "<nil> statement\n");
@@ -4839,8 +4853,8 @@ yyreduce:
case 251:
-/* Line 1455 of yacc.c */
-#line 1470 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1471 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.node) = new(ctx) ast_expression_statement(NULL);
@@ -4850,8 +4864,8 @@ yyreduce:
case 252:
-/* Line 1455 of yacc.c */
-#line 1476 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1477 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.node) = new(ctx) ast_expression_statement((yyvsp[(1) - (2)].expression));
@@ -4861,8 +4875,8 @@ yyreduce:
case 253:
-/* Line 1455 of yacc.c */
-#line 1485 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1486 "glsl_parser.ypp"
{
(yyval.node) = new(state) ast_selection_statement((yyvsp[(3) - (5)].expression), (yyvsp[(5) - (5)].selection_rest_statement).then_statement,
(yyvsp[(5) - (5)].selection_rest_statement).else_statement);
@@ -4872,8 +4886,8 @@ yyreduce:
case 254:
-/* Line 1455 of yacc.c */
-#line 1494 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1495 "glsl_parser.ypp"
{
(yyval.selection_rest_statement).then_statement = (yyvsp[(1) - (3)].node);
(yyval.selection_rest_statement).else_statement = (yyvsp[(3) - (3)].node);
@@ -4882,8 +4896,8 @@ yyreduce:
case 255:
-/* Line 1455 of yacc.c */
-#line 1499 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1500 "glsl_parser.ypp"
{
(yyval.selection_rest_statement).then_statement = (yyvsp[(1) - (1)].node);
(yyval.selection_rest_statement).else_statement = NULL;
@@ -4892,8 +4906,8 @@ yyreduce:
case 256:
-/* Line 1455 of yacc.c */
-#line 1507 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1508 "glsl_parser.ypp"
{
(yyval.node) = (ast_node *) (yyvsp[(1) - (1)].expression);
;}
@@ -4901,8 +4915,8 @@ yyreduce:
case 257:
-/* Line 1455 of yacc.c */
-#line 1511 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1512 "glsl_parser.ypp"
{
void *ctx = state;
ast_declaration *decl = new(ctx) ast_declaration((yyvsp[(2) - (4)].identifier), false, NULL, (yyvsp[(4) - (4)].expression));
@@ -4917,8 +4931,8 @@ yyreduce:
case 261:
-/* Line 1455 of yacc.c */
-#line 1534 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1535 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_while,
@@ -4929,8 +4943,8 @@ yyreduce:
case 262:
-/* Line 1455 of yacc.c */
-#line 1541 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1542 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_do_while,
@@ -4941,8 +4955,8 @@ yyreduce:
case 263:
-/* Line 1455 of yacc.c */
-#line 1548 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1549 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.node) = new(ctx) ast_iteration_statement(ast_iteration_statement::ast_for,
@@ -4953,8 +4967,8 @@ yyreduce:
case 267:
-/* Line 1455 of yacc.c */
-#line 1564 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1565 "glsl_parser.ypp"
{
(yyval.node) = NULL;
;}
@@ -4962,8 +4976,8 @@ yyreduce:
case 268:
-/* Line 1455 of yacc.c */
-#line 1571 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1572 "glsl_parser.ypp"
{
(yyval.for_rest_statement).cond = (yyvsp[(1) - (2)].node);
(yyval.for_rest_statement).rest = NULL;
@@ -4972,8 +4986,8 @@ yyreduce:
case 269:
-/* Line 1455 of yacc.c */
-#line 1576 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1577 "glsl_parser.ypp"
{
(yyval.for_rest_statement).cond = (yyvsp[(1) - (3)].node);
(yyval.for_rest_statement).rest = (yyvsp[(3) - (3)].expression);
@@ -4982,8 +4996,8 @@ yyreduce:
case 270:
-/* Line 1455 of yacc.c */
-#line 1585 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1586 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_continue, NULL);
@@ -4993,8 +5007,8 @@ yyreduce:
case 271:
-/* Line 1455 of yacc.c */
-#line 1591 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1592 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_break, NULL);
@@ -5004,8 +5018,8 @@ yyreduce:
case 272:
-/* Line 1455 of yacc.c */
-#line 1597 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1598 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, NULL);
@@ -5015,8 +5029,8 @@ yyreduce:
case 273:
-/* Line 1455 of yacc.c */
-#line 1603 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1604 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_return, (yyvsp[(2) - (3)].expression));
@@ -5026,8 +5040,8 @@ yyreduce:
case 274:
-/* Line 1455 of yacc.c */
-#line 1609 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1610 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.node) = new(ctx) ast_jump_statement(ast_jump_statement::ast_discard, NULL);
@@ -5037,29 +5051,29 @@ yyreduce:
case 275:
-/* Line 1455 of yacc.c */
-#line 1617 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1618 "glsl_parser.ypp"
{ (yyval.node) = (yyvsp[(1) - (1)].function_definition); ;}
break;
case 276:
-/* Line 1455 of yacc.c */
-#line 1618 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1619 "glsl_parser.ypp"
{ (yyval.node) = (yyvsp[(1) - (1)].node); ;}
break;
case 277:
-/* Line 1455 of yacc.c */
-#line 1619 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1620 "glsl_parser.ypp"
{ (yyval.node) = NULL; ;}
break;
case 278:
-/* Line 1455 of yacc.c */
-#line 1624 "glsl_parser.ypp"
+/* Line 1464 of yacc.c */
+#line 1625 "glsl_parser.ypp"
{
void *ctx = state;
(yyval.function_definition) = new(ctx) ast_function_definition();
@@ -5071,8 +5085,8 @@ yyreduce:
-/* Line 1455 of yacc.c */
-#line 5076 "glsl_parser.cpp"
+/* Line 1464 of yacc.c */
+#line 5090 "glsl_parser.cpp"
default: break;
}
YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
@@ -5144,7 +5158,7 @@ yyerrlab:
#endif
}
- yyerror_range[0] = yylloc;
+ yyerror_range[1] = yylloc;
if (yyerrstatus == 3)
{
@@ -5181,7 +5195,7 @@ yyerrorlab:
if (/*CONSTCOND*/ 0)
goto yyerrorlab;
- yyerror_range[0] = yylsp[1-yylen];
+ yyerror_range[1] = yylsp[1-yylen];
/* Do not reclaim the symbols of the rule which action triggered
this YYERROR. */
YYPOPSTACK (yylen);
@@ -5215,7 +5229,7 @@ yyerrlab1:
if (yyssp == yyss)
YYABORT;
- yyerror_range[0] = *yylsp;
+ yyerror_range[1] = *yylsp;
yydestruct ("Error: popping",
yystos[yystate], yyvsp, yylsp, state);
YYPOPSTACK (1);
@@ -5225,10 +5239,10 @@ yyerrlab1:
*++yyvsp = yylval;
- yyerror_range[1] = yylloc;
+ yyerror_range[2] = yylloc;
/* Using YYLLOC is tempting, but would change the location of
the lookahead. YYLOC is available though. */
- YYLLOC_DEFAULT (yyloc, (yyerror_range - 1), 2);
+ YYLLOC_DEFAULT (yyloc, yyerror_range, 2);
*++yylsp = yyloc;
/* Shift the error token. */
diff --git a/src/glsl/glsl_parser.h b/src/glsl/glsl_parser.h
index 9bb6ae6299..83aa56f7cb 100644
--- a/src/glsl/glsl_parser.h
+++ b/src/glsl/glsl_parser.h
@@ -1,10 +1,9 @@
-
-/* A Bison parser, made by GNU Bison 2.4.1. */
+/* A Bison parser, made by GNU Bison 2.4.3. */
/* Skeleton interface for Bison's Yacc-like parsers in C
- Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
+ Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
+ 2009, 2010 Free Software Foundation, Inc.
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -226,7 +225,9 @@
IMAGEBUFFER = 442,
IIMAGEBUFFER = 443,
UIMAGEBUFFER = 444,
- ROW_MAJOR = 445
+ IMAGE1DARRAYSHADOW = 445,
+ IMAGE2DARRAYSHADOW = 446,
+ ROW_MAJOR = 447
};
#endif
@@ -236,7 +237,7 @@
typedef union YYSTYPE
{
-/* Line 1676 of yacc.c */
+/* Line 1685 of yacc.c */
#line 52 "glsl_parser.ypp"
int n;
@@ -269,8 +270,8 @@ typedef union YYSTYPE
-/* Line 1676 of yacc.c */
-#line 274 "glsl_parser.h"
+/* Line 1685 of yacc.c */
+#line 275 "glsl_parser.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */
diff --git a/src/glsl/glsl_parser.ypp b/src/glsl/glsl_parser.ypp
index 3813d7a4e2..6d7d148eb0 100644
--- a/src/glsl/glsl_parser.ypp
+++ b/src/glsl/glsl_parser.ypp
@@ -126,6 +126,7 @@
%token IIMAGE1D IIMAGE2D IIMAGE3D IIMAGECUBE IIMAGE1DARRAY IIMAGE2DARRAY
%token UIMAGE1D UIMAGE2D UIMAGE3D UIMAGECUBE UIMAGE1DARRAY UIMAGE2DARRAY
%token IMAGE1DSHADOW IMAGE2DSHADOW IMAGEBUFFER IIMAGEBUFFER UIMAGEBUFFER
+%token IMAGE1DARRAYSHADOW IMAGE2DARRAYSHADOW
%token ROW_MAJOR
%type <identifier> variable_identifier
diff --git a/src/glsl/glsl_parser_extras.cpp b/src/glsl/glsl_parser_extras.cpp
index b2c378dd85..8dbe66927d 100644
--- a/src/glsl/glsl_parser_extras.cpp
+++ b/src/glsl/glsl_parser_extras.cpp
@@ -708,7 +708,7 @@ do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iteration
{
GLboolean progress = GL_FALSE;
- progress = do_sub_to_add_neg(ir) || progress;
+ progress = lower_instructions(ir, SUB_TO_ADD_NEG) || progress;
if (linked) {
progress = do_function_inlining(ir) || progress;
@@ -716,6 +716,7 @@ do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iteration
}
progress = do_structure_splitting(ir) || progress;
progress = do_if_simplification(ir) || progress;
+ progress = do_discard_simplification(ir) || progress;
progress = do_copy_propagation(ir) || progress;
if (linked)
progress = do_dead_code(ir) || progress;
diff --git a/src/glsl/glsl_symbol_table.cpp b/src/glsl/glsl_symbol_table.cpp
index e9bf89b951..3dcd928016 100644
--- a/src/glsl/glsl_symbol_table.cpp
+++ b/src/glsl/glsl_symbol_table.cpp
@@ -81,12 +81,12 @@ bool glsl_symbol_table::name_declared_this_scope(const char *name)
return _mesa_symbol_table_symbol_scope(table, -1, name) == 0;
}
-bool glsl_symbol_table::add_variable(const char *name, ir_variable *v)
+bool glsl_symbol_table::add_variable(ir_variable *v)
{
if (this->language_version == 110) {
/* In 1.10, functions and variables have separate namespaces. */
- symbol_table_entry *existing = get_entry(name);
- if (name_declared_this_scope(name)) {
+ symbol_table_entry *existing = get_entry(v->name);
+ if (name_declared_this_scope(v->name)) {
/* If there's already an existing function (not a constructor!) in
* the current scope, just update the existing entry to include 'v'.
*/
@@ -102,7 +102,7 @@ bool glsl_symbol_table::add_variable(const char *name, ir_variable *v)
symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(v);
if (existing != NULL)
entry->f = existing->f;
- int added = _mesa_symbol_table_add_symbol(table, -1, name, entry);
+ int added = _mesa_symbol_table_add_symbol(table, -1, v->name, entry);
assert(added == 0);
(void)added;
return true;
@@ -112,7 +112,7 @@ bool glsl_symbol_table::add_variable(const char *name, ir_variable *v)
/* 1.20+ rules: */
symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(v);
- return _mesa_symbol_table_add_symbol(table, -1, name, entry) == 0;
+ return _mesa_symbol_table_add_symbol(table, -1, v->name, entry) == 0;
}
bool glsl_symbol_table::add_type(const char *name, const glsl_type *t)
@@ -121,18 +121,25 @@ bool glsl_symbol_table::add_type(const char *name, const glsl_type *t)
return _mesa_symbol_table_add_symbol(table, -1, name, entry) == 0;
}
-bool glsl_symbol_table::add_function(const char *name, ir_function *f)
+bool glsl_symbol_table::add_function(ir_function *f)
{
- if (this->language_version == 110 && name_declared_this_scope(name)) {
+ if (this->language_version == 110 && name_declared_this_scope(f->name)) {
/* In 1.10, functions and variables have separate namespaces. */
- symbol_table_entry *existing = get_entry(name);
+ symbol_table_entry *existing = get_entry(f->name);
if ((existing->f == NULL) && (existing->t == NULL)) {
existing->f = f;
return true;
}
}
symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(f);
- return _mesa_symbol_table_add_symbol(table, -1, name, entry) == 0;
+ return _mesa_symbol_table_add_symbol(table, -1, f->name, entry) == 0;
+}
+
+void glsl_symbol_table::add_global_function(ir_function *f)
+{
+ symbol_table_entry *entry = new(mem_ctx) symbol_table_entry(f);
+ int added = _mesa_symbol_table_add_global_symbol(table, -1, f->name, entry);
+ assert(added == 0);
}
ir_variable *glsl_symbol_table::get_variable(const char *name)
diff --git a/src/glsl/glsl_symbol_table.h b/src/glsl/glsl_symbol_table.h
index f26de52432..28a44ebe91 100644
--- a/src/glsl/glsl_symbol_table.h
+++ b/src/glsl/glsl_symbol_table.h
@@ -97,12 +97,17 @@ public:
* reduces the clarity of the intention of code that uses these methods.
*/
/*@{*/
- bool add_variable(const char *name, ir_variable *v);
+ bool add_variable(ir_variable *v);
bool add_type(const char *name, const glsl_type *t);
- bool add_function(const char *name, ir_function *f);
+ bool add_function(ir_function *f);
/*@}*/
/**
+ * Add an function at global scope without checking for scoping conflicts.
+ */
+ void add_global_function(ir_function *f);
+
+ /**
* \name Methods to get symbols from the table
*/
/*@{*/
diff --git a/src/glsl/glsl_types.cpp b/src/glsl/glsl_types.cpp
index 82eb470605..95b8592648 100644
--- a/src/glsl/glsl_types.cpp
+++ b/src/glsl/glsl_types.cpp
@@ -46,7 +46,7 @@ glsl_type::init_talloc_type_ctx(void)
}
glsl_type::glsl_type(GLenum gl_type,
- unsigned base_type, unsigned vector_elements,
+ glsl_base_type base_type, unsigned vector_elements,
unsigned matrix_columns, const char *name) :
gl_type(gl_type),
base_type(base_type),
@@ -120,7 +120,7 @@ glsl_type::generate_100ES_types(glsl_symbol_table *symtab)
add_types_to_symbol_table(symtab, builtin_structure_types,
Elements(builtin_structure_types),
false);
- add_types_to_symbol_table(symtab, &void_type, 1, false);
+ add_types_to_symbol_table(symtab, void_type, 1, false);
}
void
@@ -279,7 +279,7 @@ const glsl_type *
glsl_type::get_instance(unsigned base_type, unsigned rows, unsigned columns)
{
if (base_type == GLSL_TYPE_VOID)
- return &void_type;
+ return void_type;
if ((rows < 1) || (rows > 4) || (columns < 1) || (columns > 4))
return error_type;
diff --git a/src/glsl/glsl_types.h b/src/glsl/glsl_types.h
index dccab0a60d..57e7b09d98 100644
--- a/src/glsl/glsl_types.h
+++ b/src/glsl/glsl_types.h
@@ -43,16 +43,17 @@ _mesa_glsl_initialize_types(struct _mesa_glsl_parse_state *state);
extern "C" void
_mesa_glsl_release_types(void);
-#define GLSL_TYPE_UINT 0
-#define GLSL_TYPE_INT 1
-#define GLSL_TYPE_FLOAT 2
-#define GLSL_TYPE_BOOL 3
-#define GLSL_TYPE_SAMPLER 4
-#define GLSL_TYPE_STRUCT 5
-#define GLSL_TYPE_ARRAY 6
-#define GLSL_TYPE_FUNCTION 7
-#define GLSL_TYPE_VOID 8
-#define GLSL_TYPE_ERROR 9
+enum glsl_base_type {
+ GLSL_TYPE_UINT = 0,
+ GLSL_TYPE_INT,
+ GLSL_TYPE_FLOAT,
+ GLSL_TYPE_BOOL,
+ GLSL_TYPE_SAMPLER,
+ GLSL_TYPE_STRUCT,
+ GLSL_TYPE_ARRAY,
+ GLSL_TYPE_VOID,
+ GLSL_TYPE_ERROR
+};
enum glsl_sampler_dim {
GLSL_SAMPLER_DIM_1D = 0,
@@ -66,7 +67,7 @@ enum glsl_sampler_dim {
struct glsl_type {
GLenum gl_type;
- unsigned base_type:4;
+ glsl_base_type base_type;
unsigned sampler_dimensionality:3;
unsigned sampler_shadow:1;
@@ -123,11 +124,6 @@ struct glsl_type {
* For \c GLSL_TYPE_ARRAY, this is the length of the array. For
* \c GLSL_TYPE_STRUCT, it is the number of elements in the structure and
* the number of values pointed to by \c fields.structure (below).
- *
- * For \c GLSL_TYPE_FUNCTION, it is the number of parameters to the
- * function. The return value from a function is implicitly the first
- * parameter. The types of the parameters are stored in
- * \c fields.parameters (below).
*/
unsigned length;
@@ -146,6 +142,7 @@ struct glsl_type {
*/
/*@{*/
static const glsl_type *const error_type;
+ static const glsl_type *const void_type;
static const glsl_type *const int_type;
static const glsl_type *const ivec4_type;
static const glsl_type *const uint_type;
@@ -399,7 +396,7 @@ private:
/** Constructor for vector and matrix types */
glsl_type(GLenum gl_type,
- unsigned base_type, unsigned vector_elements,
+ glsl_base_type base_type, unsigned vector_elements,
unsigned matrix_columns, const char *name);
/** Constructor for sampler types */
@@ -428,7 +425,7 @@ private:
*/
/*@{*/
static const glsl_type _error_type;
- static const glsl_type void_type;
+ static const glsl_type _void_type;
static const glsl_type builtin_core_types[];
static const glsl_type builtin_structure_types[];
static const glsl_type builtin_110_deprecated_structure_types[];
diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
index 87e78eee05..b8b0fed9d1 100644
--- a/src/glsl/ir.cpp
+++ b/src/glsl/ir.cpp
@@ -31,6 +31,21 @@ ir_rvalue::ir_rvalue()
this->type = glsl_type::error_type;
}
+bool ir_rvalue::is_zero() const
+{
+ return false;
+}
+
+bool ir_rvalue::is_one() const
+{
+ return false;
+}
+
+bool ir_rvalue::is_negative_one() const
+{
+ return false;
+}
+
/**
* Modify the swizzle make to move one component to another
*
@@ -177,91 +192,163 @@ ir_assignment::ir_assignment(ir_rvalue *lhs, ir_rvalue *rhs,
ir_expression::ir_expression(int op, const struct glsl_type *type,
+ ir_rvalue *op0)
+{
+ assert(get_num_operands(ir_expression_operation(op)) == 1);
+ this->ir_type = ir_type_expression;
+ this->type = type;
+ this->operation = ir_expression_operation(op);
+ this->operands[0] = op0;
+ this->operands[1] = NULL;
+ this->operands[2] = NULL;
+ this->operands[3] = NULL;
+}
+
+ir_expression::ir_expression(int op, const struct glsl_type *type,
ir_rvalue *op0, ir_rvalue *op1)
{
+ assert(((op1 == NULL) && (get_num_operands(ir_expression_operation(op)) == 1))
+ || (get_num_operands(ir_expression_operation(op)) == 2));
+ this->ir_type = ir_type_expression;
+ this->type = type;
+ this->operation = ir_expression_operation(op);
+ this->operands[0] = op0;
+ this->operands[1] = op1;
+ this->operands[2] = NULL;
+ this->operands[3] = NULL;
+}
+
+ir_expression::ir_expression(int op, const struct glsl_type *type,
+ ir_rvalue *op0, ir_rvalue *op1,
+ ir_rvalue *op2, ir_rvalue *op3)
+{
this->ir_type = ir_type_expression;
this->type = type;
this->operation = ir_expression_operation(op);
this->operands[0] = op0;
this->operands[1] = op1;
+ this->operands[2] = op2;
+ this->operands[3] = op3;
+}
+
+ir_expression::ir_expression(int op, ir_rvalue *op0)
+{
+ this->ir_type = ir_type_expression;
+
+ this->operation = ir_expression_operation(op);
+ this->operands[0] = op0;
+ this->operands[1] = NULL;
+ this->operands[2] = NULL;
+ this->operands[3] = NULL;
+
+ assert(op <= ir_last_unop);
+
+ switch (this->operation) {
+ case ir_unop_bit_not:
+ case ir_unop_logic_not:
+ case ir_unop_neg:
+ case ir_unop_abs:
+ case ir_unop_sign:
+ case ir_unop_rcp:
+ case ir_unop_rsq:
+ case ir_unop_sqrt:
+ case ir_unop_exp:
+ case ir_unop_log:
+ case ir_unop_exp2:
+ case ir_unop_log2:
+ case ir_unop_trunc:
+ case ir_unop_ceil:
+ case ir_unop_floor:
+ case ir_unop_fract:
+ case ir_unop_round_even:
+ case ir_unop_cos:
+ case ir_unop_dFdx:
+ case ir_unop_dFdy:
+ this->type = op0->type;
+ break;
+
+ case ir_unop_any:
+ this->type = glsl_type::bool_type;
+ break;
+
+ default:
+ assert(!"not reached: missing automatic type setup for ir_expression");
+ this->type = op0->type;
+ break;
+ }
+}
+
+ir_expression::ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1)
+{
+ this->ir_type = ir_type_expression;
+
+ this->operation = ir_expression_operation(op);
+ this->operands[0] = op0;
+ this->operands[1] = op1;
+ this->operands[2] = NULL;
+ this->operands[3] = NULL;
+
+ assert(op > ir_last_unop);
+
+ switch (this->operation) {
+ case ir_binop_all_equal:
+ case ir_binop_any_nequal:
+ this->type = glsl_type::bool_type;
+ break;
+
+ case ir_binop_add:
+ case ir_binop_sub:
+ case ir_binop_min:
+ case ir_binop_max:
+ case ir_binop_pow:
+ case ir_binop_mul:
+ if (op0->type->is_scalar()) {
+ this->type = op1->type;
+ } else if (op1->type->is_scalar()) {
+ this->type = op0->type;
+ } else {
+ /* FINISHME: matrix types */
+ assert(!op0->type->is_matrix() && !op1->type->is_matrix());
+ assert(op0->type == op1->type);
+ this->type = op0->type;
+ }
+ break;
+
+ case ir_binop_logic_and:
+ case ir_binop_logic_or:
+ if (op0->type->is_scalar()) {
+ this->type = op1->type;
+ } else if (op1->type->is_scalar()) {
+ this->type = op0->type;
+ }
+ break;
+
+ case ir_binop_dot:
+ this->type = glsl_type::float_type;
+ break;
+
+ default:
+ assert(!"not reached: missing automatic type setup for ir_expression");
+ this->type = glsl_type::float_type;
+ }
}
unsigned int
ir_expression::get_num_operands(ir_expression_operation op)
{
-/* Update ir_print_visitor.cpp when updating this list. */
- const int num_operands[] = {
- 1, /* ir_unop_bit_not */
- 1, /* ir_unop_logic_not */
- 1, /* ir_unop_neg */
- 1, /* ir_unop_abs */
- 1, /* ir_unop_sign */
- 1, /* ir_unop_rcp */
- 1, /* ir_unop_rsq */
- 1, /* ir_unop_sqrt */
- 1, /* ir_unop_exp */
- 1, /* ir_unop_log */
- 1, /* ir_unop_exp2 */
- 1, /* ir_unop_log2 */
- 1, /* ir_unop_f2i */
- 1, /* ir_unop_i2f */
- 1, /* ir_unop_f2b */
- 1, /* ir_unop_b2f */
- 1, /* ir_unop_i2b */
- 1, /* ir_unop_b2i */
- 1, /* ir_unop_u2f */
- 1, /* ir_unop_any */
-
- 1, /* ir_unop_trunc */
- 1, /* ir_unop_ceil */
- 1, /* ir_unop_floor */
- 1, /* ir_unop_fract */
- 1, /* ir_unop_round_even */
-
- 1, /* ir_unop_sin */
- 1, /* ir_unop_cos */
-
- 1, /* ir_unop_dFdx */
- 1, /* ir_unop_dFdy */
-
- 1, /* ir_unop_noise */
-
- 2, /* ir_binop_add */
- 2, /* ir_binop_sub */
- 2, /* ir_binop_mul */
- 2, /* ir_binop_div */
- 2, /* ir_binop_mod */
-
- 2, /* ir_binop_less */
- 2, /* ir_binop_greater */
- 2, /* ir_binop_lequal */
- 2, /* ir_binop_gequal */
- 2, /* ir_binop_equal */
- 2, /* ir_binop_nequal */
- 2, /* ir_binop_all_equal */
- 2, /* ir_binop_any_nequal */
-
- 2, /* ir_binop_lshift */
- 2, /* ir_binop_rshift */
- 2, /* ir_binop_bit_and */
- 2, /* ir_binop_bit_xor */
- 2, /* ir_binop_bit_or */
-
- 2, /* ir_binop_logic_and */
- 2, /* ir_binop_logic_xor */
- 2, /* ir_binop_logic_or */
-
- 2, /* ir_binop_dot */
- 2, /* ir_binop_cross */
- 2, /* ir_binop_min */
- 2, /* ir_binop_max */
-
- 2, /* ir_binop_pow */
- };
+ assert(op <= ir_last_opcode);
+
+ if (op <= ir_last_unop)
+ return 1;
- assert(sizeof(num_operands) / sizeof(num_operands[0]) == ir_binop_pow + 1);
+ if (op <= ir_last_binop)
+ return 2;
- return num_operands[op];
+ if (op == ir_quadop_vector)
+ return 4;
+
+ assert(false);
+ return 0;
}
static const char *const operator_strs[] = {
@@ -292,6 +379,8 @@ static const char *const operator_strs[] = {
"round_even",
"sin",
"cos",
+ "sin_reduced",
+ "cos_reduced",
"dFdx",
"dFdy",
"noise",
@@ -317,16 +406,16 @@ static const char *const operator_strs[] = {
"^^",
"||",
"dot",
- "cross",
"min",
"max",
"pow",
+ "vector",
};
const char *ir_expression::operator_string(ir_expression_operation op)
{
assert((unsigned int) op < Elements(operator_strs));
- assert(Elements(operator_strs) == (ir_binop_pow + 1));
+ assert(Elements(operator_strs) == (ir_quadop_vector + 1));
return operator_strs[op];
}
@@ -689,7 +778,7 @@ ir_constant::has_value(const ir_constant *c) const
if (this->type->is_array()) {
for (unsigned i = 0; i < this->type->length; i++) {
- if (this->array_elements[i]->has_value(c->array_elements[i]))
+ if (!this->array_elements[i]->has_value(c->array_elements[i]))
return false;
}
return true;
@@ -742,6 +831,115 @@ ir_constant::has_value(const ir_constant *c) const
return true;
}
+bool
+ir_constant::is_zero() const
+{
+ if (!this->type->is_scalar() && !this->type->is_vector())
+ return false;
+
+ for (unsigned c = 0; c < this->type->vector_elements; c++) {
+ switch (this->type->base_type) {
+ case GLSL_TYPE_FLOAT:
+ if (this->value.f[c] != 0.0)
+ return false;
+ break;
+ case GLSL_TYPE_INT:
+ if (this->value.i[c] != 0)
+ return false;
+ break;
+ case GLSL_TYPE_UINT:
+ if (this->value.u[c] != 0)
+ return false;
+ break;
+ case GLSL_TYPE_BOOL:
+ if (this->value.b[c] != false)
+ return false;
+ break;
+ default:
+ /* The only other base types are structures, arrays, and samplers.
+ * Samplers cannot be constants, and the others should have been
+ * filtered out above.
+ */
+ assert(!"Should not get here.");
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool
+ir_constant::is_one() const
+{
+ if (!this->type->is_scalar() && !this->type->is_vector())
+ return false;
+
+ for (unsigned c = 0; c < this->type->vector_elements; c++) {
+ switch (this->type->base_type) {
+ case GLSL_TYPE_FLOAT:
+ if (this->value.f[c] != 1.0)
+ return false;
+ break;
+ case GLSL_TYPE_INT:
+ if (this->value.i[c] != 1)
+ return false;
+ break;
+ case GLSL_TYPE_UINT:
+ if (this->value.u[c] != 1)
+ return false;
+ break;
+ case GLSL_TYPE_BOOL:
+ if (this->value.b[c] != true)
+ return false;
+ break;
+ default:
+ /* The only other base types are structures, arrays, and samplers.
+ * Samplers cannot be constants, and the others should have been
+ * filtered out above.
+ */
+ assert(!"Should not get here.");
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool
+ir_constant::is_negative_one() const
+{
+ if (!this->type->is_scalar() && !this->type->is_vector())
+ return false;
+
+ if (this->type->is_boolean())
+ return false;
+
+ for (unsigned c = 0; c < this->type->vector_elements; c++) {
+ switch (this->type->base_type) {
+ case GLSL_TYPE_FLOAT:
+ if (this->value.f[c] != -1.0)
+ return false;
+ break;
+ case GLSL_TYPE_INT:
+ if (this->value.i[c] != -1)
+ return false;
+ break;
+ case GLSL_TYPE_UINT:
+ if (int(this->value.u[c]) != -1)
+ return false;
+ break;
+ default:
+ /* The only other base types are structures, arrays, samplers, and
+ * booleans. Samplers cannot be constants, and the others should
+ * have been filtered out above.
+ */
+ assert(!"Should not get here.");
+ return false;
+ }
+ }
+
+ return true;
+}
ir_loop::ir_loop()
{
@@ -1239,3 +1437,59 @@ reparent_ir(exec_list *list, void *mem_ctx)
visit_tree((ir_instruction *) node, steal_memory, mem_ctx);
}
}
+
+
+static ir_rvalue *
+try_min_one(ir_rvalue *ir)
+{
+ ir_expression *expr = ir->as_expression();
+
+ if (!expr || expr->operation != ir_binop_min)
+ return NULL;
+
+ if (expr->operands[0]->is_one())
+ return expr->operands[1];
+
+ if (expr->operands[1]->is_one())
+ return expr->operands[0];
+
+ return NULL;
+}
+
+static ir_rvalue *
+try_max_zero(ir_rvalue *ir)
+{
+ ir_expression *expr = ir->as_expression();
+
+ if (!expr || expr->operation != ir_binop_max)
+ return NULL;
+
+ if (expr->operands[0]->is_zero())
+ return expr->operands[1];
+
+ if (expr->operands[1]->is_zero())
+ return expr->operands[0];
+
+ return NULL;
+}
+
+ir_rvalue *
+ir_rvalue::as_rvalue_to_saturate()
+{
+ ir_expression *expr = this->as_expression();
+
+ if (!expr)
+ return NULL;
+
+ ir_rvalue *max_zero = try_max_zero(expr);
+ if (max_zero) {
+ return try_min_one(max_zero);
+ } else {
+ ir_rvalue *min_one = try_min_one(expr);
+ if (min_one) {
+ return try_max_zero(min_one);
+ }
+ }
+
+ return NULL;
+}
diff --git a/src/glsl/ir.h b/src/glsl/ir.h
index 80e0f67d6d..102a68b655 100644
--- a/src/glsl/ir.h
+++ b/src/glsl/ir.h
@@ -33,6 +33,7 @@ extern "C" {
#include <talloc.h>
}
+#include "glsl_types.h"
#include "list.h"
#include "ir_visitor.h"
#include "ir_hierarchical_visitor.h"
@@ -121,6 +122,7 @@ public:
virtual class ir_if * as_if() { return NULL; }
virtual class ir_swizzle * as_swizzle() { return NULL; }
virtual class ir_constant * as_constant() { return NULL; }
+ virtual class ir_discard * as_discard() { return NULL; }
/*@}*/
protected:
@@ -143,6 +145,8 @@ public:
return this;
}
+ ir_rvalue *as_rvalue_to_saturate();
+
virtual bool is_lvalue()
{
return false;
@@ -171,6 +175,42 @@ public:
return NULL;
}
+ /**
+ * Determine if an r-value has the value zero
+ *
+ * The base implementation of this function always returns \c false. The
+ * \c ir_constant class over-rides this function to return \c true \b only
+ * for vector and scalar types that have all elements set to the value
+ * zero (or \c false for booleans).
+ *
+ * \sa ir_constant::has_value, ir_rvalue::is_one, ir_rvalue::is_negative_one
+ */
+ virtual bool is_zero() const;
+
+ /**
+ * Determine if an r-value has the value one
+ *
+ * The base implementation of this function always returns \c false. The
+ * \c ir_constant class over-rides this function to return \c true \b only
+ * for vector and scalar types that have all elements set to the value
+ * one (or \c true for booleans).
+ *
+ * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_negative_one
+ */
+ virtual bool is_one() const;
+
+ /**
+ * Determine if an r-value has the value negative one
+ *
+ * The base implementation of this function always returns \c false. The
+ * \c ir_constant class over-rides this function to return \c true \b only
+ * for vector and scalar types that have all elements set to the value
+ * negative one. For boolean times, the result is always \c false.
+ *
+ * \sa ir_constant::has_value, ir_rvalue::is_zero, ir_rvalue::is_one
+ */
+ virtual bool is_negative_one() const;
+
protected:
ir_rvalue();
};
@@ -336,6 +376,8 @@ public:
virtual ir_function_signature *clone(void *mem_ctx,
struct hash_table *ht) const;
+ ir_function_signature *clone_prototype(void *mem_ctx,
+ struct hash_table *ht) const;
virtual void accept(ir_visitor *v)
{
@@ -705,6 +747,8 @@ enum ir_expression_operation {
/*@{*/
ir_unop_sin,
ir_unop_cos,
+ ir_unop_sin_reduced, /**< Reduced range sin. [-pi, pi] */
+ ir_unop_cos_reduced, /**< Reduced range cos. [-pi, pi] */
/*@}*/
/**
@@ -717,6 +761,11 @@ enum ir_expression_operation {
ir_unop_noise,
+ /**
+ * A sentinel marking the last of the unary operations.
+ */
+ ir_last_unop = ir_unop_noise,
+
ir_binop_add,
ir_binop_sub,
ir_binop_mul,
@@ -771,17 +820,44 @@ enum ir_expression_operation {
ir_binop_logic_or,
ir_binop_dot,
- ir_binop_cross,
ir_binop_min,
ir_binop_max,
- ir_binop_pow
+ ir_binop_pow,
+
+ /**
+ * A sentinel marking the last of the binary operations.
+ */
+ ir_last_binop = ir_binop_pow,
+
+ ir_quadop_vector,
+
+ /**
+ * A sentinel marking the last of all operations.
+ */
+ ir_last_opcode = ir_last_binop
};
class ir_expression : public ir_rvalue {
public:
+ /**
+ * Constructor for unary operation expressions
+ */
+ ir_expression(int op, const struct glsl_type *type, ir_rvalue *);
+ ir_expression(int op, ir_rvalue *);
+
+ /**
+ * Constructor for binary operation expressions
+ */
ir_expression(int op, const struct glsl_type *type,
ir_rvalue *, ir_rvalue *);
+ ir_expression(int op, ir_rvalue *op0, ir_rvalue *op1);
+
+ /**
+ * Constructor for quad operator expressions
+ */
+ ir_expression(int op, const struct glsl_type *type,
+ ir_rvalue *, ir_rvalue *, ir_rvalue *, ir_rvalue *);
virtual ir_expression *as_expression()
{
@@ -808,7 +884,8 @@ public:
*/
unsigned int get_num_operands() const
{
- return get_num_operands(operation);
+ return (this->operation == ir_quadop_vector)
+ ? this->type->vector_elements : get_num_operands(operation);
}
/**
@@ -835,7 +912,7 @@ public:
virtual ir_visitor_status accept(ir_hierarchical_visitor *);
ir_expression_operation operation;
- ir_rvalue *operands[2];
+ ir_rvalue *operands[4];
};
@@ -1050,6 +1127,11 @@ public:
virtual ir_visitor_status accept(ir_hierarchical_visitor *);
+ virtual ir_discard *as_discard()
+ {
+ return this;
+ }
+
ir_rvalue *condition;
};
/*@}*/
@@ -1441,9 +1523,16 @@ public:
/**
* Determine whether a constant has the same value as another constant
+ *
+ * \sa ir_constant::is_zero, ir_constant::is_one,
+ * ir_constant::is_negative_one
*/
bool has_value(const ir_constant *) const;
+ virtual bool is_zero() const;
+ virtual bool is_one() const;
+ virtual bool is_negative_one() const;
+
/**
* Value of the constant.
*
diff --git a/src/glsl/ir_clone.cpp b/src/glsl/ir_clone.cpp
index a3cc8dbc97..1522af682b 100644
--- a/src/glsl/ir_clone.cpp
+++ b/src/glsl/ir_clone.cpp
@@ -22,6 +22,7 @@
*/
#include <string.h>
+#include "main/compiler.h"
#include "ir.h"
#include "glsl_types.h"
extern "C" {
@@ -160,14 +161,15 @@ ir_call::clone(void *mem_ctx, struct hash_table *ht) const
ir_expression *
ir_expression::clone(void *mem_ctx, struct hash_table *ht) const
{
- ir_rvalue *op[2] = {NULL, NULL};
+ ir_rvalue *op[Elements(this->operands)] = { NULL, };
unsigned int i;
for (i = 0; i < get_num_operands(); i++) {
op[i] = this->operands[i]->clone(mem_ctx, ht);
}
- return new(mem_ctx) ir_expression(this->operation, this->type, op[0], op[1]);
+ return new(mem_ctx) ir_expression(this->operation, this->type,
+ op[0], op[1], op[2], op[3]);
}
ir_dereference_variable *
@@ -274,13 +276,32 @@ ir_function::clone(void *mem_ctx, struct hash_table *ht) const
ir_function_signature *
ir_function_signature::clone(void *mem_ctx, struct hash_table *ht) const
{
+ ir_function_signature *copy = this->clone_prototype(mem_ctx, ht);
+
+ copy->is_defined = this->is_defined;
+
+ /* Clone the instruction list.
+ */
+ foreach_list_const(node, &this->body) {
+ const ir_instruction *const inst = (const ir_instruction *) node;
+
+ ir_instruction *const inst_copy = inst->clone(mem_ctx, ht);
+ copy->body.push_tail(inst_copy);
+ }
+
+ return copy;
+}
+
+ir_function_signature *
+ir_function_signature::clone_prototype(void *mem_ctx, struct hash_table *ht) const
+{
ir_function_signature *copy =
new(mem_ctx) ir_function_signature(this->return_type);
- copy->is_defined = this->is_defined;
+ copy->is_defined = false;
copy->is_builtin = this->is_builtin;
- /* Clone the parameter list.
+ /* Clone the parameter list, but NOT the body.
*/
foreach_list_const(node, &this->parameters) {
const ir_variable *const param = (const ir_variable *) node;
@@ -291,15 +312,6 @@ ir_function_signature::clone(void *mem_ctx, struct hash_table *ht) const
copy->parameters.push_tail(param_copy);
}
- /* Clone the instruction list.
- */
- foreach_list_const(node, &this->body) {
- const ir_instruction *const inst = (const ir_instruction *) node;
-
- ir_instruction *const inst_copy = inst->clone(mem_ctx, ht);
- copy->body.push_tail(inst_copy);
- }
-
return copy;
}
diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp
index ce13a06ff4..4fd6d09a3a 100644
--- a/src/glsl/ir_constant_expression.cpp
+++ b/src/glsl/ir_constant_expression.cpp
@@ -57,7 +57,7 @@ ir_expression::constant_expression_value()
if (this->type->is_error())
return NULL;
- ir_constant *op[2] = { NULL, NULL };
+ ir_constant *op[Elements(this->operands)] = { NULL, };
ir_constant_data data;
memset(&data, 0, sizeof(data));
@@ -127,31 +127,31 @@ ir_expression::constant_expression_value()
case ir_unop_f2i:
assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
for (unsigned c = 0; c < op[0]->type->components(); c++) {
- data.i[c] = op[0]->value.f[c];
+ data.i[c] = (int) op[0]->value.f[c];
}
break;
case ir_unop_i2f:
assert(op[0]->type->base_type == GLSL_TYPE_INT);
for (unsigned c = 0; c < op[0]->type->components(); c++) {
- data.f[c] = op[0]->value.i[c];
+ data.f[c] = (float) op[0]->value.i[c];
}
break;
case ir_unop_u2f:
assert(op[0]->type->base_type == GLSL_TYPE_UINT);
for (unsigned c = 0; c < op[0]->type->components(); c++) {
- data.f[c] = op[0]->value.u[c];
+ data.f[c] = (float) op[0]->value.u[c];
}
break;
case ir_unop_b2f:
assert(op[0]->type->base_type == GLSL_TYPE_BOOL);
for (unsigned c = 0; c < op[0]->type->components(); c++) {
- data.f[c] = op[0]->value.b[c] ? 1.0 : 0.0;
+ data.f[c] = op[0]->value.b[c] ? 1.0F : 0.0F;
}
break;
case ir_unop_f2b:
assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
for (unsigned c = 0; c < op[0]->type->components(); c++) {
- data.b[c] = bool(op[0]->value.f[c]);
+ data.b[c] = op[0]->value.f[c] != 0.0F ? true : false;
}
break;
case ir_unop_b2i:
@@ -163,7 +163,7 @@ ir_expression::constant_expression_value()
case ir_unop_i2b:
assert(op[0]->type->is_integer());
for (unsigned c = 0; c < op[0]->type->components(); c++) {
- data.b[c] = bool(op[0]->value.u[c]);
+ data.b[c] = op[0]->value.u[c] ? true : false;
}
break;
@@ -216,6 +216,7 @@ ir_expression::constant_expression_value()
break;
case ir_unop_sin:
+ case ir_unop_sin_reduced:
assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
for (unsigned c = 0; c < op[0]->type->components(); c++) {
data.f[c] = sinf(op[0]->value.f[c]);
@@ -223,6 +224,7 @@ ir_expression::constant_expression_value()
break;
case ir_unop_cos:
+ case ir_unop_cos_reduced:
assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
for (unsigned c = 0; c < op[0]->type->components(); c++) {
data.f[c] = cosf(op[0]->value.f[c]);
@@ -233,7 +235,7 @@ ir_expression::constant_expression_value()
for (unsigned c = 0; c < op[0]->type->components(); c++) {
switch (this->type->base_type) {
case GLSL_TYPE_UINT:
- data.u[c] = -op[0]->value.u[c];
+ data.u[c] = -((int) op[0]->value.u[c]);
break;
case GLSL_TYPE_INT:
data.i[c] = -op[0]->value.i[c];
@@ -299,7 +301,7 @@ ir_expression::constant_expression_value()
break;
case GLSL_TYPE_FLOAT:
if (op[0]->value.f[c] != 0.0)
- data.f[c] = 1.0 / op[0]->value.f[c];
+ data.f[c] = 1.0F / op[0]->value.f[c];
break;
default:
assert(0);
@@ -310,7 +312,7 @@ ir_expression::constant_expression_value()
case ir_unop_rsq:
assert(op[0]->type->base_type == GLSL_TYPE_FLOAT);
for (unsigned c = 0; c < op[0]->type->components(); c++) {
- data.f[c] = 1.0 / sqrtf(op[0]->value.f[c]);
+ data.f[c] = 1.0F / sqrtf(op[0]->value.f[c]);
}
break;
@@ -412,17 +414,6 @@ ir_expression::constant_expression_value()
}
break;
- case ir_binop_cross:
- assert(op[0]->type == glsl_type::vec3_type);
- assert(op[1]->type == glsl_type::vec3_type);
- data.f[0] = (op[0]->value.f[1] * op[1]->value.f[2] -
- op[1]->value.f[1] * op[0]->value.f[2]);
- data.f[1] = (op[0]->value.f[2] * op[1]->value.f[0] -
- op[1]->value.f[2] * op[0]->value.f[0]);
- data.f[2] = (op[0]->value.f[0] * op[1]->value.f[1] -
- op[1]->value.f[0] * op[0]->value.f[1]);
- break;
-
case ir_binop_add:
assert(op[0]->type == op[1]->type || op0_scalar || op1_scalar);
for (unsigned c = 0, c0 = 0, c1 = 0;
@@ -581,63 +572,75 @@ ir_expression::constant_expression_value()
break;
case ir_binop_less:
- switch (op[0]->type->base_type) {
- case GLSL_TYPE_UINT:
- data.b[0] = op[0]->value.u[0] < op[1]->value.u[0];
- break;
- case GLSL_TYPE_INT:
- data.b[0] = op[0]->value.i[0] < op[1]->value.i[0];
- break;
- case GLSL_TYPE_FLOAT:
- data.b[0] = op[0]->value.f[0] < op[1]->value.f[0];
- break;
- default:
- assert(0);
+ assert(op[0]->type == op[1]->type);
+ for (unsigned c = 0; c < op[0]->type->components(); c++) {
+ switch (op[0]->type->base_type) {
+ case GLSL_TYPE_UINT:
+ data.b[0] = op[0]->value.u[0] < op[1]->value.u[0];
+ break;
+ case GLSL_TYPE_INT:
+ data.b[0] = op[0]->value.i[0] < op[1]->value.i[0];
+ break;
+ case GLSL_TYPE_FLOAT:
+ data.b[0] = op[0]->value.f[0] < op[1]->value.f[0];
+ break;
+ default:
+ assert(0);
+ }
}
break;
case ir_binop_greater:
- switch (op[0]->type->base_type) {
- case GLSL_TYPE_UINT:
- data.b[0] = op[0]->value.u[0] > op[1]->value.u[0];
- break;
- case GLSL_TYPE_INT:
- data.b[0] = op[0]->value.i[0] > op[1]->value.i[0];
- break;
- case GLSL_TYPE_FLOAT:
- data.b[0] = op[0]->value.f[0] > op[1]->value.f[0];
- break;
- default:
- assert(0);
+ assert(op[0]->type == op[1]->type);
+ for (unsigned c = 0; c < op[0]->type->components(); c++) {
+ switch (op[0]->type->base_type) {
+ case GLSL_TYPE_UINT:
+ data.b[c] = op[0]->value.u[c] > op[1]->value.u[c];
+ break;
+ case GLSL_TYPE_INT:
+ data.b[c] = op[0]->value.i[c] > op[1]->value.i[c];
+ break;
+ case GLSL_TYPE_FLOAT:
+ data.b[c] = op[0]->value.f[c] > op[1]->value.f[c];
+ break;
+ default:
+ assert(0);
+ }
}
break;
case ir_binop_lequal:
- switch (op[0]->type->base_type) {
- case GLSL_TYPE_UINT:
- data.b[0] = op[0]->value.u[0] <= op[1]->value.u[0];
- break;
- case GLSL_TYPE_INT:
- data.b[0] = op[0]->value.i[0] <= op[1]->value.i[0];
- break;
- case GLSL_TYPE_FLOAT:
- data.b[0] = op[0]->value.f[0] <= op[1]->value.f[0];
- break;
- default:
- assert(0);
+ assert(op[0]->type == op[1]->type);
+ for (unsigned c = 0; c < op[0]->type->components(); c++) {
+ switch (op[0]->type->base_type) {
+ case GLSL_TYPE_UINT:
+ data.b[0] = op[0]->value.u[0] <= op[1]->value.u[0];
+ break;
+ case GLSL_TYPE_INT:
+ data.b[0] = op[0]->value.i[0] <= op[1]->value.i[0];
+ break;
+ case GLSL_TYPE_FLOAT:
+ data.b[0] = op[0]->value.f[0] <= op[1]->value.f[0];
+ break;
+ default:
+ assert(0);
+ }
}
break;
case ir_binop_gequal:
- switch (op[0]->type->base_type) {
- case GLSL_TYPE_UINT:
- data.b[0] = op[0]->value.u[0] >= op[1]->value.u[0];
- break;
- case GLSL_TYPE_INT:
- data.b[0] = op[0]->value.i[0] >= op[1]->value.i[0];
- break;
- case GLSL_TYPE_FLOAT:
- data.b[0] = op[0]->value.f[0] >= op[1]->value.f[0];
- break;
- default:
- assert(0);
+ assert(op[0]->type == op[1]->type);
+ for (unsigned c = 0; c < op[0]->type->components(); c++) {
+ switch (op[0]->type->base_type) {
+ case GLSL_TYPE_UINT:
+ data.b[0] = op[0]->value.u[0] >= op[1]->value.u[0];
+ break;
+ case GLSL_TYPE_INT:
+ data.b[0] = op[0]->value.i[0] >= op[1]->value.i[0];
+ break;
+ case GLSL_TYPE_FLOAT:
+ data.b[0] = op[0]->value.f[0] >= op[1]->value.f[0];
+ break;
+ default:
+ assert(0);
+ }
}
break;
case ir_binop_equal:
@@ -785,6 +788,24 @@ ir_expression::constant_expression_value()
}
break;
+ case ir_quadop_vector:
+ for (unsigned c = 0; c < this->type->vector_elements; c++) {
+ switch (this->type->base_type) {
+ case GLSL_TYPE_INT:
+ data.i[c] = op[c]->value.i[0];
+ break;
+ case GLSL_TYPE_UINT:
+ data.u[c] = op[c]->value.u[0];
+ break;
+ case GLSL_TYPE_FLOAT:
+ data.f[c] = op[c]->value.f[0];
+ break;
+ default:
+ assert(0);
+ }
+ }
+ break;
+
default:
/* FINISHME: Should handle all expression types. */
return NULL;
@@ -990,10 +1011,18 @@ ir_call::constant_expression_value()
assert(op[0]->type->is_float());
for (unsigned c = 0; c < op[0]->type->components(); c++)
data.f[c] = acosf(op[0]->value.f[c]);
+ } else if (strcmp(callee, "acosh") == 0) {
+ assert(op[0]->type->is_float());
+ for (unsigned c = 0; c < op[0]->type->components(); c++)
+ data.f[c] = acoshf(op[0]->value.f[c]);
} else if (strcmp(callee, "asin") == 0) {
assert(op[0]->type->is_float());
for (unsigned c = 0; c < op[0]->type->components(); c++)
data.f[c] = asinf(op[0]->value.f[c]);
+ } else if (strcmp(callee, "asinh") == 0) {
+ assert(op[0]->type->is_float());
+ for (unsigned c = 0; c < op[0]->type->components(); c++)
+ data.f[c] = asinhf(op[0]->value.f[c]);
} else if (strcmp(callee, "atan") == 0) {
assert(op[0]->type->is_float());
if (num_parameters == 2) {
@@ -1004,6 +1033,10 @@ ir_call::constant_expression_value()
for (unsigned c = 0; c < op[0]->type->components(); c++)
data.f[c] = atanf(op[0]->value.f[c]);
}
+ } else if (strcmp(callee, "atanh") == 0) {
+ assert(op[0]->type->is_float());
+ for (unsigned c = 0; c < op[0]->type->components(); c++)
+ data.f[c] = atanhf(op[0]->value.f[c]);
} else if (strcmp(callee, "dFdx") == 0 || strcmp(callee, "dFdy") == 0) {
return ir_constant::zero(mem_ctx, this->type);
} else if (strcmp(callee, "ceil") == 0) {
@@ -1040,11 +1073,18 @@ ir_call::constant_expression_value()
for (unsigned c = 0; c < op[0]->type->components(); c++)
data.f[c] = coshf(op[0]->value.f[c]);
} else if (strcmp(callee, "cross") == 0) {
- expr = new(mem_ctx) ir_expression(ir_binop_cross, type, op[0], op[1]);
+ assert(op[0]->type == glsl_type::vec3_type);
+ assert(op[1]->type == glsl_type::vec3_type);
+ data.f[0] = (op[0]->value.f[1] * op[1]->value.f[2] -
+ op[1]->value.f[1] * op[0]->value.f[2]);
+ data.f[1] = (op[0]->value.f[2] * op[1]->value.f[0] -
+ op[1]->value.f[2] * op[0]->value.f[0]);
+ data.f[2] = (op[0]->value.f[0] * op[1]->value.f[1] -
+ op[1]->value.f[0] * op[0]->value.f[1]);
} else if (strcmp(callee, "degrees") == 0) {
assert(op[0]->type->is_float());
for (unsigned c = 0; c < op[0]->type->components(); c++)
- data.f[c] = 180.0/M_PI * op[0]->value.f[c];
+ data.f[c] = 180.0F / M_PI * op[0]->value.f[c];
} else if (strcmp(callee, "distance") == 0) {
assert(op[0]->type->is_float() && op[1]->type->is_float());
float length_squared = 0.0;
@@ -1235,7 +1275,7 @@ ir_call::constant_expression_value()
} else if (strcmp(callee, "radians") == 0) {
assert(op[0]->type->is_float());
for (unsigned c = 0; c < op[0]->type->components(); c++)
- data.f[c] = M_PI/180.0 * op[0]->value.f[c];
+ data.f[c] = M_PI / 180.0F * op[0]->value.f[c];
} else if (strcmp(callee, "reflect") == 0) {
assert(op[0]->type->is_float());
float dot_NI = dot(op[1], op[0]);
@@ -1244,7 +1284,7 @@ ir_call::constant_expression_value()
} else if (strcmp(callee, "refract") == 0) {
const float eta = op[2]->value.f[0];
const float dot_NI = dot(op[1], op[0]);
- const float k = 1.0 - eta * eta * (1.0 - dot_NI * dot_NI);
+ const float k = 1.0F - eta * eta * (1.0F - dot_NI * dot_NI);
if (k < 0.0) {
return ir_constant::zero(mem_ctx, this->type);
} else {
@@ -1284,7 +1324,7 @@ ir_call::constant_expression_value()
/* op[0] (edge) may be either a scalar or a vector */
const unsigned c0_inc = op[0]->type->is_scalar() ? 0 : 1;
for (unsigned c = 0, c0 = 0; c < type->components(); c0 += c0_inc, c++)
- data.f[c] = (op[1]->value.f[c] < op[0]->value.f[c0]) ? 0.0 : 1.0;
+ data.f[c] = (op[1]->value.f[c] < op[0]->value.f[c0]) ? 0.0F : 1.0F;
} else if (strcmp(callee, "tan") == 0) {
assert(op[0]->type->is_float());
for (unsigned c = 0; c < op[0]->type->components(); c++)
diff --git a/src/glsl/ir_div_to_mul_rcp.cpp b/src/glsl/ir_div_to_mul_rcp.cpp
deleted file mode 100644
index 640d5d64f9..0000000000
--- a/src/glsl/ir_div_to_mul_rcp.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright © 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_div_to_mul_rcp.cpp
- *
- * Breaks an ir_unop_div expression down to op0 * (rcp(op1)).
- *
- * Many GPUs don't have a divide instruction (945 and 965 included),
- * but they do have an RCP instruction to compute an approximate
- * reciprocal. By breaking the operation down, constant reciprocals
- * can get constant folded.
- */
-
-#include "ir.h"
-#include "glsl_types.h"
-
-class ir_div_to_mul_rcp_visitor : public ir_hierarchical_visitor {
-public:
- ir_div_to_mul_rcp_visitor()
- {
- this->made_progress = false;
- }
-
- ir_visitor_status visit_leave(ir_expression *);
-
- bool made_progress;
-};
-
-bool
-do_div_to_mul_rcp(exec_list *instructions)
-{
- ir_div_to_mul_rcp_visitor v;
-
- visit_list_elements(&v, instructions);
- return v.made_progress;
-}
-
-ir_visitor_status
-ir_div_to_mul_rcp_visitor::visit_leave(ir_expression *ir)
-{
- if (ir->operation != ir_binop_div)
- return visit_continue;
-
- if (ir->operands[1]->type->base_type != GLSL_TYPE_INT &&
- ir->operands[1]->type->base_type != GLSL_TYPE_UINT) {
- /* New expression for the 1.0 / op1 */
- ir_rvalue *expr;
- expr = new(ir) ir_expression(ir_unop_rcp,
- ir->operands[1]->type,
- ir->operands[1],
- NULL);
-
- /* op0 / op1 -> op0 * (1.0 / op1) */
- ir->operation = ir_binop_mul;
- ir->operands[1] = expr;
- } else {
- /* Be careful with integer division -- we need to do it as a
- * float and re-truncate, since rcp(n > 1) of an integer would
- * just be 0.
- */
- ir_rvalue *op0, *op1;
- const struct glsl_type *vec_type;
-
- vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT,
- ir->operands[1]->type->vector_elements,
- ir->operands[1]->type->matrix_columns);
-
- if (ir->operands[1]->type->base_type == GLSL_TYPE_INT)
- op1 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[1], NULL);
- else
- op1 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[1], NULL);
-
- op1 = new(ir) ir_expression(ir_unop_rcp, op1->type, op1, NULL);
-
- vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT,
- ir->operands[0]->type->vector_elements,
- ir->operands[0]->type->matrix_columns);
-
- if (ir->operands[0]->type->base_type == GLSL_TYPE_INT)
- op0 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[0], NULL);
- else
- op0 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[0], NULL);
-
- op0 = new(ir) ir_expression(ir_binop_mul, vec_type, op0, op1);
-
- ir->operation = ir_unop_f2i;
- ir->operands[0] = op0;
- ir->operands[1] = NULL;
- }
-
- this->made_progress = true;
-
- return visit_continue;
-}
diff --git a/src/glsl/ir_explog_to_explog2.cpp b/src/glsl/ir_explog_to_explog2.cpp
deleted file mode 100644
index 78694a2029..0000000000
--- a/src/glsl/ir_explog_to_explog2.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright © 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_explog_to_explog2.cpp
- *
- * Many GPUs don't have a base e log or exponent instruction, but they
- * do have base 2 versions, so this pass converts exp and log to exp2
- * and log2 operations.
- */
-
-#include "main/core.h" /* for log2f on MSVC */
-#include "ir.h"
-#include "glsl_types.h"
-
-class ir_explog_to_explog2_visitor : public ir_hierarchical_visitor {
-public:
- ir_explog_to_explog2_visitor()
- {
- this->progress = false;
- }
-
- ir_visitor_status visit_leave(ir_expression *);
-
- bool progress;
-};
-
-bool
-do_explog_to_explog2(exec_list *instructions)
-{
- ir_explog_to_explog2_visitor v;
-
- visit_list_elements(&v, instructions);
- return v.progress;
-}
-
-ir_visitor_status
-ir_explog_to_explog2_visitor::visit_leave(ir_expression *ir)
-{
- if (ir->operation == ir_unop_exp) {
- void *mem_ctx = talloc_parent(ir);
- ir_constant *log2_e = new(mem_ctx) ir_constant(log2f(M_E));
-
- ir->operation = ir_unop_exp2;
- ir->operands[0] = new(mem_ctx) ir_expression(ir_binop_mul,
- ir->operands[0]->type,
- ir->operands[0],
- log2_e);
- this->progress = true;
- }
-
- if (ir->operation == ir_unop_log) {
- void *mem_ctx = talloc_parent(ir);
-
- ir->operation = ir_binop_mul;
- ir->operands[0] = new(mem_ctx) ir_expression(ir_unop_log2,
- ir->operands[0]->type,
- ir->operands[0],
- NULL);
- ir->operands[1] = new(mem_ctx) ir_constant(1.0f / log2f(M_E));
- this->progress = true;
- }
-
- return visit_continue;
-}
diff --git a/src/glsl/ir_function.cpp b/src/glsl/ir_function.cpp
index dfdec144b2..8db70119ec 100644
--- a/src/glsl/ir_function.cpp
+++ b/src/glsl/ir_function.cpp
@@ -70,7 +70,6 @@ type_compare(const glsl_type *a, const glsl_type *b)
*/
return (type_compare(a->fields.array, b->fields.array) == 0) ? 0 : -1;
- case GLSL_TYPE_FUNCTION:
case GLSL_TYPE_VOID:
case GLSL_TYPE_ERROR:
default:
diff --git a/src/glsl/ir_function_can_inline.cpp b/src/glsl/ir_function_can_inline.cpp
index f29f277ef4..c367c30e44 100644
--- a/src/glsl/ir_function_can_inline.cpp
+++ b/src/glsl/ir_function_can_inline.cpp
@@ -60,6 +60,8 @@ can_inline(ir_call *call)
{
ir_function_can_inline_visitor v;
const ir_function_signature *callee = call->get_callee();
+ if (!callee->is_defined)
+ return false;
v.run((exec_list *) &callee->body);
diff --git a/src/glsl/ir_import_prototypes.cpp b/src/glsl/ir_import_prototypes.cpp
index 066137e60a..4e0b30aa90 100644
--- a/src/glsl/ir_import_prototypes.cpp
+++ b/src/glsl/ir_import_prototypes.cpp
@@ -64,7 +64,7 @@ public:
/* Add the new function to the symbol table.
*/
- this->symbols->add_function(this->function->name, this->function);
+ this->symbols->add_function(this->function);
}
return visit_continue;
}
@@ -82,22 +82,7 @@ public:
{
assert(this->function != NULL);
- ir_function_signature *copy =
- new(mem_ctx) ir_function_signature(ir->return_type);
-
- copy->is_defined = false;
- copy->is_builtin = ir->is_builtin;
-
- /* Clone the parameter list, but NOT the body.
- */
- foreach_list_const(node, &ir->parameters) {
- const ir_variable *const param = (const ir_variable *) node;
-
- assert(const_cast<ir_variable *>(param)->as_variable() != NULL);
-
- ir_variable *const param_copy = param->clone(mem_ctx, NULL);
- copy->parameters.push_tail(param_copy);
- }
+ ir_function_signature *copy = ir->clone_prototype(mem_ctx, NULL);
this->function->add_signature(copy);
diff --git a/src/glsl/ir_mod_to_fract.cpp b/src/glsl/ir_mod_to_fract.cpp
deleted file mode 100644
index c82a1f64fd..0000000000
--- a/src/glsl/ir_mod_to_fract.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright © 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_mod_to_fract.cpp
- *
- * Breaks an ir_unop_mod expression down to (op1 * fract(op0 / op1))
- *
- * Many GPUs don't have a MOD instruction (945 and 965 included), and
- * if we have to break it down like this anyway, it gives an
- * opportunity to do things like constant fold the (1.0 / op1) easily.
- */
-
-#include "ir.h"
-
-class ir_mod_to_fract_visitor : public ir_hierarchical_visitor {
-public:
- ir_mod_to_fract_visitor()
- {
- this->made_progress = false;
- }
-
- ir_visitor_status visit_leave(ir_expression *);
-
- bool made_progress;
-};
-
-bool
-do_mod_to_fract(exec_list *instructions)
-{
- ir_mod_to_fract_visitor v;
-
- visit_list_elements(&v, instructions);
- return v.made_progress;
-}
-
-ir_visitor_status
-ir_mod_to_fract_visitor::visit_leave(ir_expression *ir)
-{
- if (ir->operation != ir_binop_mod)
- return visit_continue;
-
- ir_variable *temp = new(ir) ir_variable(ir->operands[1]->type, "mod_b",
- ir_var_temporary);
- this->base_ir->insert_before(temp);
-
- ir_assignment *assign;
- ir_rvalue *expr;
-
- assign = new(ir) ir_assignment(new(ir) ir_dereference_variable(temp),
- ir->operands[1], NULL);
- this->base_ir->insert_before(assign);
-
- expr = new(ir) ir_expression(ir_binop_div,
- ir->operands[0]->type,
- ir->operands[0],
- new(ir) ir_dereference_variable(temp));
-
- expr = new(ir) ir_expression(ir_unop_fract,
- ir->operands[0]->type,
- expr,
- NULL);
-
- ir->operation = ir_binop_mul;
- ir->operands[0] = new(ir) ir_dereference_variable(temp);
- ir->operands[1] = expr;
- this->made_progress = true;
-
- return visit_continue;
-}
diff --git a/src/glsl/ir_optimization.h b/src/glsl/ir_optimization.h
index ffdc66b9f7..f264265f4b 100644
--- a/src/glsl/ir_optimization.h
+++ b/src/glsl/ir_optimization.h
@@ -28,6 +28,14 @@
* Prototypes for optimization passes to be called by the compiler and drivers.
*/
+/* Operations for lower_instructions() */
+#define SUB_TO_ADD_NEG 0x01
+#define DIV_TO_MUL_RCP 0x02
+#define EXP_TO_EXP2 0x04
+#define POW_TO_EXP2 0x08
+#define LOG_TO_LOG2 0x10
+#define MOD_TO_FRACT 0x20
+
bool do_common_optimization(exec_list *ir, bool linked, unsigned max_unroll_iterations);
bool do_algebraic(exec_list *instructions);
@@ -40,12 +48,11 @@ bool do_dead_code(exec_list *instructions);
bool do_dead_code_local(exec_list *instructions);
bool do_dead_code_unlinked(exec_list *instructions);
bool do_dead_functions(exec_list *instructions);
-bool do_div_to_mul_rcp(exec_list *instructions);
-bool do_explog_to_explog2(exec_list *instructions);
bool do_function_inlining(exec_list *instructions);
bool do_lower_jumps(exec_list *instructions, bool pull_out_jumps = true, bool lower_sub_return = true, bool lower_main_return = false, bool lower_continue = false, bool lower_break = false);
bool do_lower_texture_projection(exec_list *instructions);
bool do_if_simplification(exec_list *instructions);
+bool do_discard_simplification(exec_list *instructions);
bool do_if_to_cond_assign(exec_list *instructions);
bool do_mat_op_to_vec(exec_list *instructions);
bool do_mod_to_fract(exec_list *instructions);
@@ -56,7 +63,10 @@ bool do_swizzle_swizzle(exec_list *instructions);
bool do_tree_grafting(exec_list *instructions);
bool do_vec_index_to_cond_assign(exec_list *instructions);
bool do_vec_index_to_swizzle(exec_list *instructions);
+bool lower_discard(exec_list *instructions);
+bool lower_instructions(exec_list *instructions, unsigned what_to_lower);
bool lower_noise(exec_list *instructions);
bool lower_variable_index_to_cond_assign(exec_list *instructions,
bool lower_input, bool lower_output, bool lower_temp, bool lower_uniform);
+bool lower_quadop_vector(exec_list *instructions, bool dont_lower_swz);
bool optimize_redundant_jumps(exec_list *instructions);
diff --git a/src/glsl/ir_print_visitor.cpp b/src/glsl/ir_print_visitor.cpp
index 5c19db1326..0aa0b0a5d3 100644
--- a/src/glsl/ir_print_visitor.cpp
+++ b/src/glsl/ir_print_visitor.cpp
@@ -153,17 +153,10 @@ void ir_print_visitor::visit(ir_function_signature *ir)
void ir_print_visitor::visit(ir_function *ir)
{
- if (!ir->has_user_signature())
- return;
-
printf("(function %s\n", ir->name);
indentation++;
foreach_iter(exec_list_iterator, iter, *ir) {
ir_function_signature *const sig = (ir_function_signature *) iter.get();
-
- if (sig->is_builtin)
- continue;
-
indent();
sig->accept(this);
printf("\n");
@@ -182,11 +175,10 @@ void ir_print_visitor::visit(ir_expression *ir)
printf(" %s ", ir->operator_string());
- if (ir->operands[0])
- ir->operands[0]->accept(this);
+ for (unsigned i = 0; i < ir->get_num_operands(); i++) {
+ ir->operands[i]->accept(this);
+ }
- if (ir->operands[1])
- ir->operands[1]->accept(this);
printf(") ");
}
@@ -326,6 +318,15 @@ void ir_print_visitor::visit(ir_constant *ir)
if (ir->type->is_array()) {
for (unsigned i = 0; i < ir->type->length; i++)
ir->get_array_element(i)->accept(this);
+ } else if (ir->type->is_record()) {
+ ir_constant *value = (ir_constant *) ir->components.get_head();
+ for (unsigned i = 0; i < ir->type->length; i++) {
+ printf("(%s ", ir->type->fields.structure->name);
+ value->accept(this);
+ printf(")");
+
+ value = (ir_constant *) value->next;
+ }
} else {
for (unsigned i = 0; i < ir->type->components(); i++) {
if (i != 0)
diff --git a/src/glsl/ir_reader.cpp b/src/glsl/ir_reader.cpp
index 7a22a945ec..5a718d3b75 100644
--- a/src/glsl/ir_reader.cpp
+++ b/src/glsl/ir_reader.cpp
@@ -221,7 +221,7 @@ read_function(_mesa_glsl_parse_state *st, s_list *list, bool skip_body)
ir_function *f = st->symbols->get_function(name->value());
if (f == NULL) {
f = new(ctx) ir_function(name->value());
- added = st->symbols->add_function(f->name, f);
+ added = st->symbols->add_function(f);
assert(added);
}
@@ -474,7 +474,7 @@ read_declaration(_mesa_glsl_parse_state *st, s_list *list)
}
// Add the variable to the symbol table
- st->symbols->add_variable(var->name, var);
+ st->symbols->add_variable(var);
return var;
}
diff --git a/src/glsl/ir_set_program_inouts.cpp b/src/glsl/ir_set_program_inouts.cpp
index b3f1cc0d8b..714281539a 100644
--- a/src/glsl/ir_set_program_inouts.cpp
+++ b/src/glsl/ir_set_program_inouts.cpp
@@ -66,7 +66,7 @@ public:
};
static void
-mark(struct gl_program *prog, ir_variable *var, int index)
+mark(struct gl_program *prog, ir_variable *var, int offset, int len)
{
/* As of GLSL 1.20, varyings can only be floats, floating-point
* vectors or matrices, or arrays of them. For Mesa programs using
@@ -75,25 +75,12 @@ mark(struct gl_program *prog, ir_variable *var, int index)
* something doing a more clever packing would use something other
* than InputsRead/OutputsWritten.
*/
- const glsl_type *element_type;
- int element_size;
- if (var->type->is_array())
- element_type = var->type->fields.array;
- else
- element_type = var->type;
-
- if (element_type->is_matrix())
- element_size = element_type->matrix_columns;
- else
- element_size = 1;
-
- index *= element_size;
- for (int i = 0; i < element_size; i++) {
+ for (int i = 0; i < len; i++) {
if (var->mode == ir_var_in)
- prog->InputsRead |= BITFIELD64_BIT(var->location + index + i);
+ prog->InputsRead |= BITFIELD64_BIT(var->location + offset + i);
else
- prog->OutputsWritten |= BITFIELD64_BIT(var->location + index + i);
+ prog->OutputsWritten |= BITFIELD64_BIT(var->location + offset + i);
}
}
@@ -106,10 +93,11 @@ ir_set_program_inouts_visitor::visit(ir_dereference_variable *ir)
if (ir->type->is_array()) {
for (unsigned int i = 0; i < ir->type->length; i++) {
- mark(this->prog, ir->var, i);
+ mark(this->prog, ir->var, i,
+ ir->type->length * ir->type->fields.array->matrix_columns);
}
} else {
- mark(this->prog, ir->var, 0);
+ mark(this->prog, ir->var, 0, ir->type->matrix_columns);
}
return visit_continue;
@@ -128,7 +116,14 @@ ir_set_program_inouts_visitor::visit_enter(ir_dereference_array *ir)
var = (ir_variable *)hash_table_find(this->ht, deref_var->var);
if (index && var) {
- mark(this->prog, var, index->value.i[0]);
+ int width = 1;
+
+ if (deref_var->type->is_array() &&
+ deref_var->type->fields.array->is_matrix()) {
+ width = deref_var->type->fields.array->matrix_columns;
+ }
+
+ mark(this->prog, var, index->value.i[0] * width, width);
return visit_continue_with_parent;
}
diff --git a/src/glsl/ir_sub_to_add_neg.cpp b/src/glsl/ir_sub_to_add_neg.cpp
deleted file mode 100644
index 7ed8c1495e..0000000000
--- a/src/glsl/ir_sub_to_add_neg.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
- * Copyright © 2010 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/**
- * \file ir_sub_to_add_neg.cpp
- *
- * Breaks an ir_binop_sub expression down to add(op0, neg(op1))
- *
- * This simplifies expression reassociation, and for many backends
- * there is no subtract operation separate from adding the negation.
- * For backends with native subtract operations, they will probably
- * want to recognize add(op0, neg(op1)) or the other way around to
- * produce a subtract anyway.
- */
-
-#include "ir.h"
-
-class ir_sub_to_add_neg_visitor : public ir_hierarchical_visitor {
-public:
- ir_sub_to_add_neg_visitor()
- {
- this->progress = false;
- }
-
- ir_visitor_status visit_leave(ir_expression *);
-
- bool progress;
-};
-
-bool
-do_sub_to_add_neg(exec_list *instructions)
-{
- ir_sub_to_add_neg_visitor v;
-
- visit_list_elements(&v, instructions);
- return v.progress;
-}
-
-ir_visitor_status
-ir_sub_to_add_neg_visitor::visit_leave(ir_expression *ir)
-{
- if (ir->operation != ir_binop_sub)
- return visit_continue;
-
- void *mem_ctx = talloc_parent(ir);
-
- ir->operation = ir_binop_add;
- ir->operands[1] = new(mem_ctx) ir_expression(ir_unop_neg,
- ir->operands[1]->type,
- ir->operands[1],
- NULL);
-
- this->progress = true;
-
- return visit_continue;
-}
diff --git a/src/glsl/ir_validate.cpp b/src/glsl/ir_validate.cpp
index d22789f990..5b055f64d3 100644
--- a/src/glsl/ir_validate.cpp
+++ b/src/glsl/ir_validate.cpp
@@ -273,6 +273,8 @@ ir_validate::visit_leave(ir_expression *ir)
case ir_unop_fract:
case ir_unop_sin:
case ir_unop_cos:
+ case ir_unop_sin_reduced:
+ case ir_unop_cos_reduced:
case ir_unop_dFdx:
case ir_unop_dFdy:
assert(ir->operands[0]->type->base_type == GLSL_TYPE_FLOAT);
@@ -373,11 +375,50 @@ ir_validate::visit_leave(ir_expression *ir)
assert(ir->operands[0]->type == ir->operands[1]->type);
break;
- case ir_binop_cross:
- assert(ir->operands[0]->type == glsl_type::vec3_type);
- assert(ir->operands[1]->type == glsl_type::vec3_type);
- assert(ir->type == glsl_type::vec3_type);
- break;
+ case ir_quadop_vector:
+ /* The vector operator collects some number of scalars and generates a
+ * vector from them.
+ *
+ * - All of the operands must be scalar.
+ * - Number of operands must matche the size of the resulting vector.
+ * - Base type of the operands must match the base type of the result.
+ */
+ assert(ir->type->is_vector());
+ switch (ir->type->vector_elements) {
+ case 2:
+ assert(ir->operands[0]->type->is_scalar());
+ assert(ir->operands[0]->type->base_type == ir->type->base_type);
+ assert(ir->operands[1]->type->is_scalar());
+ assert(ir->operands[1]->type->base_type == ir->type->base_type);
+ assert(ir->operands[2] == NULL);
+ assert(ir->operands[3] == NULL);
+ break;
+ case 3:
+ assert(ir->operands[0]->type->is_scalar());
+ assert(ir->operands[0]->type->base_type == ir->type->base_type);
+ assert(ir->operands[1]->type->is_scalar());
+ assert(ir->operands[1]->type->base_type == ir->type->base_type);
+ assert(ir->operands[2]->type->is_scalar());
+ assert(ir->operands[2]->type->base_type == ir->type->base_type);
+ assert(ir->operands[3] == NULL);
+ break;
+ case 4:
+ assert(ir->operands[0]->type->is_scalar());
+ assert(ir->operands[0]->type->base_type == ir->type->base_type);
+ assert(ir->operands[1]->type->is_scalar());
+ assert(ir->operands[1]->type->base_type == ir->type->base_type);
+ assert(ir->operands[2]->type->is_scalar());
+ assert(ir->operands[2]->type->base_type == ir->type->base_type);
+ assert(ir->operands[3]->type->is_scalar());
+ assert(ir->operands[3]->type->base_type == ir->type->base_type);
+ break;
+ default:
+ /* The is_vector assertion above should prevent execution from ever
+ * getting here.
+ */
+ assert(!"Should not get here.");
+ break;
+ }
}
return visit_continue;
diff --git a/src/glsl/ir_variable.cpp b/src/glsl/ir_variable.cpp
index 6b9b29458d..5b8281e16e 100644
--- a/src/glsl/ir_variable.cpp
+++ b/src/glsl/ir_variable.cpp
@@ -59,7 +59,7 @@ add_variable(const char *name, enum ir_variable_mode mode, int slot,
*/
instructions->push_tail(var);
- symtab->add_variable(var->name, var);
+ symtab->add_variable(var);
return var;
}
diff --git a/src/glsl/link_functions.cpp b/src/glsl/link_functions.cpp
index 78c8b48cf1..05930edb80 100644
--- a/src/glsl/link_functions.cpp
+++ b/src/glsl/link_functions.cpp
@@ -183,7 +183,7 @@ public:
* it to the linked shader.
*/
var = ir->var->clone(linked, NULL);
- linked->symbols->add_variable(var->name, var);
+ linked->symbols->add_variable(var);
linked->ir->push_head(var);
}
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 616ec78007..d8c42ac462 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -360,8 +360,12 @@ cross_validate_globals(struct gl_shader_program *prog,
&& (var->type->fields.array == existing->type->fields.array)
&& ((var->type->length == 0)
|| (existing->type->length == 0))) {
- if (existing->type->length == 0)
+ if (existing->type->length == 0) {
existing->type = var->type;
+ existing->max_array_access =
+ MAX2(existing->max_array_access,
+ var->max_array_access);
+ }
} else {
linker_error_printf(prog, "%s `%s' declared as type "
"`%s' and type `%s'\n",
@@ -411,8 +415,15 @@ cross_validate_globals(struct gl_shader_program *prog,
existing->constant_value =
var->constant_value->clone(talloc_parent(existing), NULL);
}
+
+ if (existing->invariant != var->invariant) {
+ linker_error_printf(prog, "declarations for %s `%s' have "
+ "mismatching invariant qualifiers\n",
+ mode_string(var), var->name);
+ return false;
+ }
} else
- variables.add_variable(var->name, var);
+ variables.add_variable(var);
}
}
@@ -454,7 +465,7 @@ cross_validate_outputs_to_inputs(struct gl_shader_program *prog,
if ((var == NULL) || (var->mode != ir_var_out))
continue;
- parameters.add_variable(var->name, var);
+ parameters.add_variable(var);
}
@@ -476,14 +487,35 @@ cross_validate_outputs_to_inputs(struct gl_shader_program *prog,
/* Check that the types match between stages.
*/
if (input->type != output->type) {
- linker_error_printf(prog,
- "%s shader output `%s' declared as "
- "type `%s', but %s shader input declared "
- "as type `%s'\n",
- producer_stage, output->name,
- output->type->name,
- consumer_stage, input->type->name);
- return false;
+ /* There is a bit of a special case for gl_TexCoord. This
+ * built-in is unsized by default. Appliations that variable
+ * access it must redeclare it with a size. There is some
+ * language in the GLSL spec that implies the fragment shader
+ * and vertex shader do not have to agree on this size. Other
+ * driver behave this way, and one or two applications seem to
+ * rely on it.
+ *
+ * Neither declaration needs to be modified here because the array
+ * sizes are fixed later when update_array_sizes is called.
+ *
+ * From page 48 (page 54 of the PDF) of the GLSL 1.10 spec:
+ *
+ * "Unlike user-defined varying variables, the built-in
+ * varying variables don't have a strict one-to-one
+ * correspondence between the vertex language and the
+ * fragment language."
+ */
+ if (!output->type->is_array()
+ || (strncmp("gl_", output->name, 3) != 0)) {
+ linker_error_printf(prog,
+ "%s shader output `%s' declared as "
+ "type `%s', but %s shader input declared "
+ "as type `%s'\n",
+ producer_stage, output->name,
+ output->type->name,
+ consumer_stage, input->type->name);
+ return false;
+ }
}
/* Check that all of the qualifiers match between stages.
@@ -546,9 +578,9 @@ populate_symbol_table(gl_shader *sh)
ir_function *func;
if ((func = inst->as_function()) != NULL) {
- sh->symbols->add_function(func->name, func);
+ sh->symbols->add_function(func);
} else if ((var = inst->as_variable()) != NULL) {
- sh->symbols->add_variable(var->name, var);
+ sh->symbols->add_variable(var);
}
}
}
@@ -605,7 +637,7 @@ remap_variables(ir_instruction *inst, struct gl_shader *target,
else {
ir_variable *copy = ir->var->clone(this->target, NULL);
- this->symbols->add_variable(copy->name, copy);
+ this->symbols->add_variable(copy);
this->instructions->push_head(copy);
ir->var = copy;
}
@@ -726,7 +758,8 @@ get_main_function_signature(gl_shader *sh)
* shader is returned.
*/
static struct gl_shader *
-link_intrastage_shaders(struct gl_context *ctx,
+link_intrastage_shaders(void *mem_ctx,
+ struct gl_context *ctx,
struct gl_shader_program *prog,
struct gl_shader **shader_list,
unsigned num_shaders)
@@ -802,7 +835,7 @@ link_intrastage_shaders(struct gl_context *ctx,
gl_shader *linked = ctx->Driver.NewShader(NULL, 0, main->Type);
linked->ir = new(linked) exec_list;
- clone_ir_list(linked, linked->ir, main->ir);
+ clone_ir_list(mem_ctx, linked->ir, main->ir);
populate_symbol_table(linked);
@@ -855,6 +888,32 @@ link_intrastage_shaders(struct gl_context *ctx,
free(linking_shaders);
+ /* Make a pass over all global variables to ensure that arrays with
+ * unspecified sizes have a size specified. The size is inferred from the
+ * max_array_access field.
+ */
+ if (linked != NULL) {
+ foreach_list(node, linked->ir) {
+ ir_variable *const var = ((ir_instruction *) node)->as_variable();
+
+ if (var == NULL)
+ continue;
+
+ if ((var->mode != ir_var_auto) && (var->mode != ir_var_temporary))
+ continue;
+
+ if (!var->type->is_array() || (var->type->length != 0))
+ continue;
+
+ const glsl_type *type =
+ glsl_type::get_array_instance(var->type->fields.array,
+ var->max_array_access);
+
+ assert(type != NULL);
+ var->type = type;
+ }
+ }
+
return linked;
}
@@ -1407,6 +1466,8 @@ assign_varying_locations(struct gl_shader_program *prog,
void
link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
{
+ void *mem_ctx = talloc_init("temporary linker context");
+
prog->LinkStatus = false;
prog->Validated = false;
prog->_Used = false;
@@ -1475,7 +1536,8 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
*/
if (num_vert_shaders > 0) {
gl_shader *const sh =
- link_intrastage_shaders(ctx, prog, vert_shader_list, num_vert_shaders);
+ link_intrastage_shaders(mem_ctx, ctx, prog, vert_shader_list,
+ num_vert_shaders);
if (sh == NULL)
goto done;
@@ -1489,7 +1551,8 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
if (num_frag_shaders > 0) {
gl_shader *const sh =
- link_intrastage_shaders(ctx, prog, frag_shader_list, num_frag_shaders);
+ link_intrastage_shaders(mem_ctx, ctx, prog, frag_shader_list,
+ num_frag_shaders);
if (sh == NULL)
goto done;
@@ -1598,4 +1661,14 @@ link_shaders(struct gl_context *ctx, struct gl_shader_program *prog)
done:
free(vert_shader_list);
+
+ for (unsigned i = 0; i < MESA_SHADER_TYPES; i++) {
+ if (prog->_LinkedShaders[i] == NULL)
+ continue;
+
+ /* Retain any live IR, but trash the rest. */
+ reparent_ir(prog->_LinkedShaders[i]->ir, prog->_LinkedShaders[i]->ir);
+ }
+
+ talloc_free(mem_ctx);
}
diff --git a/src/glsl/loop_unroll.cpp b/src/glsl/loop_unroll.cpp
index 11709587e2..46000524ba 100644
--- a/src/glsl/loop_unroll.cpp
+++ b/src/glsl/loop_unroll.cpp
@@ -43,6 +43,14 @@ public:
};
+static bool
+is_break(ir_instruction *ir)
+{
+ return ir != NULL && ir->ir_type == ir_type_loop_jump
+ && ((ir_loop_jump *) ir)->is_break();
+}
+
+
ir_visitor_status
loop_unroll_visitor::visit_leave(ir_loop *ir)
{
@@ -73,44 +81,74 @@ loop_unroll_visitor::visit_leave(ir_loop *ir)
if (ls->num_loop_jumps > 1)
return visit_continue;
else if (ls->num_loop_jumps) {
- /* recognize loops in the form produced by ir_lower_jumps */
- ir_instruction *last_ir =
- ((ir_instruction*)ir->body_instructions.get_tail());
-
+ ir_instruction *last_ir = (ir_instruction *) ir->body_instructions.get_tail();
assert(last_ir != NULL);
- ir_if *last_if = last_ir->as_if();
- if (last_if) {
- bool continue_from_then_branch;
-
- /* Determine which if-statement branch, if any, ends with a break.
- * The branch that did *not* have the break will get a temporary
- * continue inserted in each iteration of the loop unroll.
- *
- * Note that since ls->num_loop_jumps is <= 1, it is impossible for
- * both branches to end with a break.
- */
- ir_instruction *last =
- (ir_instruction *) last_if->then_instructions.get_tail();
-
- if (last && last->ir_type == ir_type_loop_jump
- && ((ir_loop_jump*) last)->is_break()) {
- continue_from_then_branch = false;
- } else {
- last = (ir_instruction *) last_if->then_instructions.get_tail();
-
- if (last && last->ir_type == ir_type_loop_jump
- && ((ir_loop_jump*) last)->is_break())
- continue_from_then_branch = true;
- else
- /* Bail out if neither if-statement branch ends with a break.
+ if (is_break(last_ir)) {
+ /* If the only loop-jump is a break at the end of the loop, the loop
+ * will execute exactly once. Remove the break, set the iteration
+ * count, and fall through to the normal unroller.
+ */
+ last_ir->remove();
+ iterations = 1;
+
+ this->progress = true;
+ } else {
+ ir_if *ir_if = NULL;
+ ir_instruction *break_ir = NULL;
+ bool continue_from_then_branch = false;
+
+ foreach_list(node, &ir->body_instructions) {
+ /* recognize loops in the form produced by ir_lower_jumps */
+ ir_instruction *cur_ir = (ir_instruction *) node;
+
+ ir_if = cur_ir->as_if();
+ if (ir_if != NULL) {
+ /* Determine which if-statement branch, if any, ends with a
+ * break. The branch that did *not* have the break will get a
+ * temporary continue inserted in each iteration of the loop
+ * unroll.
+ *
+ * Note that since ls->num_loop_jumps is <= 1, it is impossible
+ * for both branches to end with a break.
*/
- return visit_continue;
- }
+ ir_instruction *ir_if_last =
+ (ir_instruction *) ir_if->then_instructions.get_tail();
+
+ if (is_break(ir_if_last)) {
+ continue_from_then_branch = false;
+ break_ir = ir_if_last;
+ break;
+ } else {
+ ir_if_last =
+ (ir_instruction *) ir_if->else_instructions.get_tail();
+
+ if (is_break(ir_if_last)) {
+ break_ir = ir_if_last;
+ continue_from_then_branch = true;
+ break;
+ }
+ }
+ }
+ }
+
+ if (break_ir == NULL)
+ return visit_continue;
+
+ /* move instructions after then if in the continue branch */
+ while (!ir_if->get_next()->is_tail_sentinel()) {
+ ir_instruction *move_ir = (ir_instruction *) ir_if->get_next();
+
+ move_ir->remove();
+ if (continue_from_then_branch)
+ ir_if->then_instructions.push_tail(move_ir);
+ else
+ ir_if->else_instructions.push_tail(move_ir);
+ }
- /* Remove the break from the if-statement.
- */
- last->remove();
+ /* Remove the break from the if-statement.
+ */
+ break_ir->remove();
void *const mem_ctx = talloc_parent(ir);
ir_instruction *ir_to_replace = ir;
@@ -121,8 +159,8 @@ loop_unroll_visitor::visit_leave(ir_loop *ir)
copy_list.make_empty();
clone_ir_list(mem_ctx, &copy_list, &ir->body_instructions);
- last_if = ((ir_instruction*)copy_list.get_tail())->as_if();
- assert(last_if);
+ ir_if = ((ir_instruction *) copy_list.get_tail())->as_if();
+ assert(ir_if != NULL);
ir_to_replace->insert_before(&copy_list);
ir_to_replace->remove();
@@ -132,7 +170,7 @@ loop_unroll_visitor::visit_leave(ir_loop *ir)
new(mem_ctx) ir_loop_jump(ir_loop_jump::jump_continue);
exec_list *const list = (continue_from_then_branch)
- ? &last_if->then_instructions : &last_if->else_instructions;
+ ? &ir_if->then_instructions : &ir_if->else_instructions;
list->push_tail(ir_to_replace);
}
@@ -141,18 +179,7 @@ loop_unroll_visitor::visit_leave(ir_loop *ir)
this->progress = true;
return visit_continue;
- } else if (last_ir->ir_type == ir_type_loop_jump
- && ((ir_loop_jump *)last_ir)->is_break()) {
- /* If the only loop-jump is a break at the end of the loop, the loop
- * will execute exactly once. Remove the break, set the iteration
- * count, and fall through to the normal unroller.
- */
- last_ir->remove();
- iterations = 1;
-
- this->progress = true;
- } else
- return visit_continue;
+ }
}
void *const mem_ctx = talloc_parent(ir);
diff --git a/src/glsl/lower_discard.cpp b/src/glsl/lower_discard.cpp
new file mode 100644
index 0000000000..b95313df8c
--- /dev/null
+++ b/src/glsl/lower_discard.cpp
@@ -0,0 +1,198 @@
+/*
+ * Copyright © 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_discard.cpp
+ *
+ * This pass moves discards out of if-statements.
+ *
+ * Case 1: The "then" branch contains a conditional discard:
+ * ---------------------------------------------------------
+ *
+ * if (cond1) {
+ * s1;
+ * discard cond2;
+ * s2;
+ * } else {
+ * s3;
+ * }
+ *
+ * becomes:
+ *
+ * temp = false;
+ * if (cond1) {
+ * s1;
+ * temp = cond2;
+ * s2;
+ * } else {
+ * s3;
+ * }
+ * discard temp;
+ *
+ * Case 2: The "else" branch contains a conditional discard:
+ * ---------------------------------------------------------
+ *
+ * if (cond1) {
+ * s1;
+ * } else {
+ * s2;
+ * discard cond2;
+ * s3;
+ * }
+ *
+ * becomes:
+ *
+ * temp = false;
+ * if (cond1) {
+ * s1;
+ * } else {
+ * s2;
+ * temp = cond2;
+ * s3;
+ * }
+ * discard temp;
+ *
+ * Case 3: Both branches contain a conditional discard:
+ * ----------------------------------------------------
+ *
+ * if (cond1) {
+ * s1;
+ * discard cond2;
+ * s2;
+ * } else {
+ * s3;
+ * discard cond3;
+ * s4;
+ * }
+ *
+ * becomes:
+ *
+ * temp = false;
+ * if (cond1) {
+ * s1;
+ * temp = cond2;
+ * s2;
+ * } else {
+ * s3;
+ * temp = cond3;
+ * s4;
+ * }
+ * discard temp;
+ *
+ * If there are multiple conditional discards, we need only deal with one of
+ * them. Repeatedly applying this pass will take care of the others.
+ *
+ * Unconditional discards are treated as having a condition of "true".
+ */
+
+#include "glsl_types.h"
+#include "ir.h"
+
+class lower_discard_visitor : public ir_hierarchical_visitor {
+public:
+ lower_discard_visitor()
+ {
+ this->progress = false;
+ }
+
+ ir_visitor_status visit_leave(ir_if *);
+
+ bool progress;
+};
+
+
+bool
+lower_discard(exec_list *instructions)
+{
+ lower_discard_visitor v;
+
+ visit_list_elements(&v, instructions);
+
+ return v.progress;
+}
+
+
+static ir_discard *
+find_discard(exec_list &instructions)
+{
+ foreach_list(n, &instructions) {
+ ir_discard *ir = ((ir_instruction *) n)->as_discard();
+ if (ir != NULL)
+ return ir;
+ }
+ return NULL;
+}
+
+
+static void
+replace_discard(void *mem_ctx, ir_variable *var, ir_discard *ir)
+{
+ ir_rvalue *condition = ir->condition;
+
+ /* For unconditional discards, use "true" as the condition. */
+ if (condition == NULL)
+ condition = new(mem_ctx) ir_constant(true);
+
+ ir_assignment *assignment =
+ new(mem_ctx) ir_assignment(new(mem_ctx) ir_dereference_variable(var),
+ condition, NULL);
+
+ ir->replace_with(assignment);
+}
+
+
+ir_visitor_status
+lower_discard_visitor::visit_leave(ir_if *ir)
+{
+ ir_discard *then_discard = find_discard(ir->then_instructions);
+ ir_discard *else_discard = find_discard(ir->else_instructions);
+
+ if (then_discard == NULL && else_discard == NULL)
+ return visit_continue;
+
+ void *mem_ctx = talloc_parent(ir);
+
+ ir_variable *temp = new(mem_ctx) ir_variable(glsl_type::bool_type,
+ "discard_cond_temp",
+ ir_var_temporary);
+ ir_assignment *temp_initializer =
+ new(mem_ctx) ir_assignment(new(mem_ctx) ir_dereference_variable(temp),
+ new(mem_ctx) ir_constant(false), NULL);
+
+ ir->insert_before(temp);
+ ir->insert_before(temp_initializer);
+
+ if (then_discard != NULL)
+ replace_discard(mem_ctx, temp, then_discard);
+
+ if (else_discard != NULL)
+ replace_discard(mem_ctx, temp, else_discard);
+
+ ir_discard *discard = then_discard != NULL ? then_discard : else_discard;
+ discard->condition = new(mem_ctx) ir_dereference_variable(temp);
+ ir->insert_after(discard);
+
+ this->progress = true;
+
+ return visit_continue;
+}
diff --git a/src/glsl/ir_if_to_cond_assign.cpp b/src/glsl/lower_if_to_cond_assign.cpp
index 0b87413941..cf48cfb8d6 100644
--- a/src/glsl/ir_if_to_cond_assign.cpp
+++ b/src/glsl/lower_if_to_cond_assign.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_if_to_cond_assign.cpp
+ * \file lower_if_to_cond_assign.cpp
*
* This attempts to flatten all if statements to conditional
* assignments for GPUs that don't do control flow.
diff --git a/src/glsl/lower_instructions.cpp b/src/glsl/lower_instructions.cpp
new file mode 100644
index 0000000000..a5f61f213d
--- /dev/null
+++ b/src/glsl/lower_instructions.cpp
@@ -0,0 +1,288 @@
+/*
+ * Copyright © 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_instructions.cpp
+ *
+ * Many GPUs lack native instructions for certain expression operations, and
+ * must replace them with some other expression tree. This pass lowers some
+ * of the most common cases, allowing the lowering code to be implemented once
+ * rather than in each driver backend.
+ *
+ * Currently supported transformations:
+ * - SUB_TO_ADD_NEG
+ * - DIV_TO_MUL_RCP
+ * - EXP_TO_EXP2
+ * - POW_TO_EXP2
+ * - LOG_TO_LOG2
+ * - MOD_TO_FRACT
+ *
+ * SUB_TO_ADD_NEG:
+ * ---------------
+ * Breaks an ir_binop_sub expression down to add(op0, neg(op1))
+ *
+ * This simplifies expression reassociation, and for many backends
+ * there is no subtract operation separate from adding the negation.
+ * For backends with native subtract operations, they will probably
+ * want to recognize add(op0, neg(op1)) or the other way around to
+ * produce a subtract anyway.
+ *
+ * DIV_TO_MUL_RCP:
+ * ---------------
+ * Breaks an ir_unop_div expression down to op0 * (rcp(op1)).
+ *
+ * Many GPUs don't have a divide instruction (945 and 965 included),
+ * but they do have an RCP instruction to compute an approximate
+ * reciprocal. By breaking the operation down, constant reciprocals
+ * can get constant folded.
+ *
+ * EXP_TO_EXP2 and LOG_TO_LOG2:
+ * ----------------------------
+ * Many GPUs don't have a base e log or exponent instruction, but they
+ * do have base 2 versions, so this pass converts exp and log to exp2
+ * and log2 operations.
+ *
+ * POW_TO_EXP2:
+ * -----------
+ * Many older GPUs don't have an x**y instruction. For these GPUs, convert
+ * x**y to 2**(y * log2(x)).
+ *
+ * MOD_TO_FRACT:
+ * -------------
+ * Breaks an ir_unop_mod expression down to (op1 * fract(op0 / op1))
+ *
+ * Many GPUs don't have a MOD instruction (945 and 965 included), and
+ * if we have to break it down like this anyway, it gives an
+ * opportunity to do things like constant fold the (1.0 / op1) easily.
+ */
+
+#include "main/core.h" /* for M_LOG2E */
+#include "glsl_types.h"
+#include "ir.h"
+#include "ir_optimization.h"
+
+class lower_instructions_visitor : public ir_hierarchical_visitor {
+public:
+ lower_instructions_visitor(unsigned lower)
+ : progress(false), lower(lower) { }
+
+ ir_visitor_status visit_leave(ir_expression *);
+
+ bool progress;
+
+private:
+ unsigned lower; /** Bitfield of which operations to lower */
+
+ void sub_to_add_neg(ir_expression *);
+ void div_to_mul_rcp(ir_expression *);
+ void mod_to_fract(ir_expression *);
+ void exp_to_exp2(ir_expression *);
+ void pow_to_exp2(ir_expression *);
+ void log_to_log2(ir_expression *);
+};
+
+/**
+ * Determine if a particular type of lowering should occur
+ */
+#define lowering(x) (this->lower & x)
+
+bool
+lower_instructions(exec_list *instructions, unsigned what_to_lower)
+{
+ lower_instructions_visitor v(what_to_lower);
+
+ visit_list_elements(&v, instructions);
+ return v.progress;
+}
+
+void
+lower_instructions_visitor::sub_to_add_neg(ir_expression *ir)
+{
+ ir->operation = ir_binop_add;
+ ir->operands[1] = new(ir) ir_expression(ir_unop_neg, ir->operands[1]->type,
+ ir->operands[1], NULL);
+ this->progress = true;
+}
+
+void
+lower_instructions_visitor::div_to_mul_rcp(ir_expression *ir)
+{
+ if (!ir->operands[1]->type->is_integer()) {
+ /* New expression for the 1.0 / op1 */
+ ir_rvalue *expr;
+ expr = new(ir) ir_expression(ir_unop_rcp,
+ ir->operands[1]->type,
+ ir->operands[1],
+ NULL);
+
+ /* op0 / op1 -> op0 * (1.0 / op1) */
+ ir->operation = ir_binop_mul;
+ ir->operands[1] = expr;
+ } else {
+ /* Be careful with integer division -- we need to do it as a
+ * float and re-truncate, since rcp(n > 1) of an integer would
+ * just be 0.
+ */
+ ir_rvalue *op0, *op1;
+ const struct glsl_type *vec_type;
+
+ vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT,
+ ir->operands[1]->type->vector_elements,
+ ir->operands[1]->type->matrix_columns);
+
+ if (ir->operands[1]->type->base_type == GLSL_TYPE_INT)
+ op1 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[1], NULL);
+ else
+ op1 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[1], NULL);
+
+ op1 = new(ir) ir_expression(ir_unop_rcp, op1->type, op1, NULL);
+
+ vec_type = glsl_type::get_instance(GLSL_TYPE_FLOAT,
+ ir->operands[0]->type->vector_elements,
+ ir->operands[0]->type->matrix_columns);
+
+ if (ir->operands[0]->type->base_type == GLSL_TYPE_INT)
+ op0 = new(ir) ir_expression(ir_unop_i2f, vec_type, ir->operands[0], NULL);
+ else
+ op0 = new(ir) ir_expression(ir_unop_u2f, vec_type, ir->operands[0], NULL);
+
+ op0 = new(ir) ir_expression(ir_binop_mul, vec_type, op0, op1);
+
+ ir->operation = ir_unop_f2i;
+ ir->operands[0] = op0;
+ ir->operands[1] = NULL;
+ }
+
+ this->progress = true;
+}
+
+void
+lower_instructions_visitor::exp_to_exp2(ir_expression *ir)
+{
+ ir_constant *log2_e = new(ir) ir_constant(float(M_LOG2E));
+
+ ir->operation = ir_unop_exp2;
+ ir->operands[0] = new(ir) ir_expression(ir_binop_mul, ir->operands[0]->type,
+ ir->operands[0], log2_e);
+ this->progress = true;
+}
+
+void
+lower_instructions_visitor::pow_to_exp2(ir_expression *ir)
+{
+ ir_expression *const log2_x =
+ new(ir) ir_expression(ir_unop_log2, ir->operands[0]->type,
+ ir->operands[0]);
+
+ ir->operation = ir_unop_exp2;
+ ir->operands[0] = new(ir) ir_expression(ir_binop_mul, ir->operands[1]->type,
+ ir->operands[1], log2_x);
+ ir->operands[1] = NULL;
+ this->progress = true;
+}
+
+void
+lower_instructions_visitor::log_to_log2(ir_expression *ir)
+{
+ ir->operation = ir_binop_mul;
+ ir->operands[0] = new(ir) ir_expression(ir_unop_log2, ir->operands[0]->type,
+ ir->operands[0], NULL);
+ ir->operands[1] = new(ir) ir_constant(float(1.0 / M_LOG2E));
+ this->progress = true;
+}
+
+void
+lower_instructions_visitor::mod_to_fract(ir_expression *ir)
+{
+ ir_variable *temp = new(ir) ir_variable(ir->operands[1]->type, "mod_b",
+ ir_var_temporary);
+ this->base_ir->insert_before(temp);
+
+ ir_assignment *const assign =
+ new(ir) ir_assignment(new(ir) ir_dereference_variable(temp),
+ ir->operands[1], NULL);
+
+ this->base_ir->insert_before(assign);
+
+ ir_expression *const div_expr =
+ new(ir) ir_expression(ir_binop_div, ir->operands[0]->type,
+ ir->operands[0],
+ new(ir) ir_dereference_variable(temp));
+
+ /* Don't generate new IR that would need to be lowered in an additional
+ * pass.
+ */
+ if (lowering(DIV_TO_MUL_RCP))
+ div_to_mul_rcp(div_expr);
+
+ ir_rvalue *expr = new(ir) ir_expression(ir_unop_fract,
+ ir->operands[0]->type,
+ div_expr,
+ NULL);
+
+ ir->operation = ir_binop_mul;
+ ir->operands[0] = new(ir) ir_dereference_variable(temp);
+ ir->operands[1] = expr;
+ this->progress = true;
+}
+
+ir_visitor_status
+lower_instructions_visitor::visit_leave(ir_expression *ir)
+{
+ switch (ir->operation) {
+ case ir_binop_sub:
+ if (lowering(SUB_TO_ADD_NEG))
+ sub_to_add_neg(ir);
+ break;
+
+ case ir_binop_div:
+ if (lowering(DIV_TO_MUL_RCP))
+ div_to_mul_rcp(ir);
+ break;
+
+ case ir_unop_exp:
+ if (lowering(EXP_TO_EXP2))
+ exp_to_exp2(ir);
+ break;
+
+ case ir_unop_log:
+ if (lowering(LOG_TO_LOG2))
+ log_to_log2(ir);
+ break;
+
+ case ir_binop_mod:
+ if (lowering(MOD_TO_FRACT))
+ mod_to_fract(ir);
+ break;
+
+ case ir_binop_pow:
+ if (lowering(POW_TO_EXP2))
+ pow_to_exp2(ir);
+ break;
+
+ default:
+ return visit_continue;
+ }
+
+ return visit_continue;
+}
diff --git a/src/glsl/ir_lower_jumps.cpp b/src/glsl/lower_jumps.cpp
index b69cc1ec31..d99e0aa739 100644
--- a/src/glsl/ir_lower_jumps.cpp
+++ b/src/glsl/lower_jumps.cpp
@@ -22,7 +22,38 @@
*/
/**
- * \file ir_lower_jumps.cpp
+ * \file lower_jumps.cpp
+ *
+ * This pass lowers jumps (break, continue, and return) to if/else structures.
+ *
+ * It can be asked to:
+ * 1. Pull jumps out of ifs where possible
+ * 2. Remove all "continue"s, replacing them with an "execute flag"
+ * 3. Replace all "break" with a single conditional one at the end of the loop
+ * 4. Replace all "return"s with a single return at the end of the function,
+ * for the main function and/or other functions
+ *
+ * Applying this pass gives several benefits:
+ * 1. All functions can be inlined.
+ * 2. nv40 and other pre-DX10 chips without "continue" can be supported
+ * 3. nv30 and other pre-DX10 chips with no control flow at all are better
+ * supported
+ *
+ * Continues are lowered by adding a per-loop "execute flag", initialized to
+ * true, that when cleared inhibits all execution until the end of the loop.
+ *
+ * Breaks are lowered to continues, plus setting a "break flag" that is checked
+ * at the end of the loop, and trigger the unique "break".
+ *
+ * Returns are lowered to breaks/continues, plus adding a "return flag" that
+ * causes loops to break again out of their enclosing loops until all the
+ * loops are exited: then the "execute flag" logic will ignore everything
+ * until the end of the function.
+ *
+ * Note that "continue" and "return" can also be implemented by adding
+ * a dummy loop and using break.
+ * However, this is bad for hardware with limited nesting depth, and
+ * prevents further optimization, and thus is not currently performed.
*/
#include "glsl_types.h"
@@ -36,7 +67,6 @@ enum jump_strength
strength_continue,
strength_break,
strength_return,
- strength_discard
};
struct block_record
@@ -202,8 +232,6 @@ struct ir_lower_jumps_visitor : public ir_control_flow_visitor {
virtual void visit(class ir_discard * ir)
{
- truncate_after_instruction(ir);
- this->block.min_strength = strength_discard;
}
enum jump_strength get_jump_strength(ir_instruction* ir)
@@ -217,8 +245,6 @@ struct ir_lower_jumps_visitor : public ir_control_flow_visitor {
return strength_continue;
} else if(ir->ir_type == ir_type_return)
return strength_return;
- else if(ir->ir_type == ir_type_discard)
- return strength_discard;
else
return strength_none;
}
@@ -253,9 +279,6 @@ struct ir_lower_jumps_visitor : public ir_control_flow_visitor {
else
lower = lower_sub_return;
break;
- case strength_discard:
- lower = false; /* probably nothing needs this lowered */
- break;
}
return lower;
}
@@ -313,9 +336,8 @@ retry: /* we get here if we put code after the if inside a branch */
/* FINISHME: unify returns with identical expressions */
else if(jump_strengths[0] == strength_return && this->function.signature->return_type->is_void())
ir->insert_after(new(ir) ir_return(NULL));
- /* FINISHME: unify discards */
- else
- unify = false;
+ else
+ unify = false;
if(unify) {
jumps[0]->remove();
@@ -490,7 +512,11 @@ lower_continue:
if(this->loop.may_set_return_flag) {
assert(this->function.return_flag);
ir_if* return_if = new(ir) ir_if(new(ir) ir_dereference_variable(this->function.return_flag));
- return_if->then_instructions.push_tail(new(ir) ir_loop_jump(saved_loop.loop ? ir_loop_jump::jump_break : ir_loop_jump::jump_continue));
+ saved_loop.may_set_return_flag = true;
+ if(saved_loop.loop)
+ return_if->then_instructions.push_tail(new(ir) ir_loop_jump(ir_loop_jump::jump_break));
+ else
+ move_outer_block_inside(ir, &return_if->else_instructions);
ir->insert_after(return_if);
}
diff --git a/src/glsl/ir_mat_op_to_vec.cpp b/src/glsl/lower_mat_op_to_vec.cpp
index 244fe48928..7065fdec35 100644
--- a/src/glsl/ir_mat_op_to_vec.cpp
+++ b/src/glsl/lower_mat_op_to_vec.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_mat_op_to_vec.cpp
+ * \file lower_mat_op_to_vec.cpp
*
* Breaks matrix operation expressions down to a series of vector operations.
*
@@ -366,6 +366,8 @@ ir_mat_op_to_vec_visitor::visit_leave(ir_assignment *orig_assign)
if (!has_matrix_operand(orig_expr, matrix_columns))
return visit_continue;
+ assert(orig_expr->get_num_operands() <= 2);
+
mem_ctx = talloc_parent(orig_assign);
ir_dereference_variable *lhs_deref =
diff --git a/src/glsl/ir_vec_index_to_cond_assign.cpp b/src/glsl/lower_vec_index_to_cond_assign.cpp
index cd8dedf2fe..f8011a16e5 100644
--- a/src/glsl/ir_vec_index_to_cond_assign.cpp
+++ b/src/glsl/lower_vec_index_to_cond_assign.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_vec_index_to_cond_assign.cpp
+ * \file lower_vec_index_to_cond_assign.cpp
*
* Turns indexing into vector types to a series of conditional moves
* of each channel's swizzle into a temporary.
diff --git a/src/glsl/ir_vec_index_to_swizzle.cpp b/src/glsl/lower_vec_index_to_swizzle.cpp
index 969dc8f94a..9ae43c0db1 100644
--- a/src/glsl/ir_vec_index_to_swizzle.cpp
+++ b/src/glsl/lower_vec_index_to_swizzle.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_vec_index_to_swizzle.cpp
+ * \file lower_vec_index_to_swizzle.cpp
*
* Turns constant indexing into vector types to swizzles. This will
* let other swizzle-aware optimization passes catch these constructs,
diff --git a/src/glsl/lower_vector.cpp b/src/glsl/lower_vector.cpp
new file mode 100644
index 0000000000..93c37638bb
--- /dev/null
+++ b/src/glsl/lower_vector.cpp
@@ -0,0 +1,224 @@
+/*
+ * Copyright © 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file lower_vector.cpp
+ * IR lowering pass to remove some types of ir_quadop_vector
+ *
+ * \author Ian Romanick <ian.d.romanick@intel.com>
+ */
+
+#include "ir.h"
+#include "ir_rvalue_visitor.h"
+
+class lower_vector_visitor : public ir_rvalue_visitor {
+public:
+ lower_vector_visitor() : progress(false)
+ {
+ /* empty */
+ }
+
+ void handle_rvalue(ir_rvalue **rvalue);
+
+ /**
+ * Should SWZ-like expressions be lowered?
+ */
+ bool dont_lower_swz;
+
+ bool progress;
+};
+
+/**
+ * Determine if an IR expression tree looks like an extended swizzle
+ *
+ * Extended swizzles consist of access of a single vector source (with possible
+ * per component negation) and the constants -1, 0, or 1.
+ */
+bool
+is_extended_swizzle(ir_expression *ir)
+{
+ /* Track any variables that are accessed by this expression.
+ */
+ ir_variable *var = NULL;
+
+ assert(ir->operation == ir_quadop_vector);
+
+ for (unsigned i = 0; i < ir->type->vector_elements; i++) {
+ ir_rvalue *op = ir->operands[i];
+
+ while (op != NULL) {
+ switch (op->ir_type) {
+ case ir_type_constant: {
+ const ir_constant *const c = op->as_constant();
+
+ if (!c->is_one() && !c->is_zero() && !c->is_negative_one())
+ return false;
+
+ op = NULL;
+ break;
+ }
+
+ case ir_type_dereference_variable: {
+ ir_dereference_variable *const d = (ir_dereference_variable *) op;
+
+ if ((var != NULL) && (var != d->var))
+ return false;
+
+ var = d->var;
+ op = NULL;
+ break;
+ }
+
+ case ir_type_expression: {
+ ir_expression *const ex = (ir_expression *) op;
+
+ if (ex->operation != ir_unop_neg)
+ return false;
+
+ op = ex->operands[0];
+ break;
+ }
+
+ case ir_type_swizzle:
+ op = ((ir_swizzle *) op)->val;
+ break;
+
+ default:
+ return false;
+ }
+ }
+ }
+
+ return true;
+}
+
+void
+lower_vector_visitor::handle_rvalue(ir_rvalue **rvalue)
+{
+ if (!*rvalue)
+ return;
+
+ ir_expression *expr = (*rvalue)->as_expression();
+ if ((expr == NULL) || (expr->operation != ir_quadop_vector))
+ return;
+
+ if (this->dont_lower_swz && is_extended_swizzle(expr))
+ return;
+
+ /* FINISHME: Is this the right thing to use for the talloc context?
+ */
+ void *const mem_ctx = expr;
+
+ assert(expr->type->vector_elements == expr->get_num_operands());
+
+ /* Generate a temporary with the same type as the ir_quadop_operation.
+ */
+ ir_variable *const temp =
+ new(mem_ctx) ir_variable(expr->type, "vecop_tmp", ir_var_temporary);
+
+ this->base_ir->insert_before(temp);
+
+ /* Counter of the number of components collected so far.
+ */
+ unsigned assigned;
+
+ /* Write-mask in the destination that receives counted by 'assigned'.
+ */
+ unsigned write_mask;
+
+
+ /* Generate upto four assignments to that variable. Try to group component
+ * assignments together:
+ *
+ * - All constant components can be assigned at once.
+ * - All assigments of components from a single variable with the same
+ * unary operator can be assigned at once.
+ */
+ ir_constant_data d = { { 0 } };
+
+ assigned = 0;
+ write_mask = 0;
+ for (unsigned i = 0; i < expr->type->vector_elements; i++) {
+ const ir_constant *const c = expr->operands[i]->as_constant();
+
+ if (c == NULL)
+ continue;
+
+ switch (expr->type->base_type) {
+ case GLSL_TYPE_UINT: d.u[assigned] = c->value.u[0]; break;
+ case GLSL_TYPE_INT: d.i[assigned] = c->value.i[0]; break;
+ case GLSL_TYPE_FLOAT: d.f[assigned] = c->value.f[0]; break;
+ case GLSL_TYPE_BOOL: d.b[assigned] = c->value.b[0]; break;
+ default: assert(!"Should not get here."); break;
+ }
+
+ write_mask |= (1U << i);
+ assigned++;
+ }
+
+ assert((write_mask == 0) == (assigned == 0));
+
+ /* If there were constant values, generate an assignment.
+ */
+ if (assigned > 0) {
+ ir_constant *const c =
+ new(mem_ctx) ir_constant(glsl_type::get_instance(expr->type->base_type,
+ assigned, 0),
+ &d);
+ ir_dereference *const lhs = new(mem_ctx) ir_dereference_variable(temp);
+ ir_assignment *const assign =
+ new(mem_ctx) ir_assignment(lhs, c, NULL, write_mask);
+
+ this->base_ir->insert_before(assign);
+ }
+
+ /* FINISHME: This should try to coalesce assignments.
+ */
+ for (unsigned i = 0; i < expr->type->vector_elements; i++) {
+ if (expr->operands[i]->ir_type == ir_type_constant)
+ continue;
+
+ ir_dereference *const lhs = new(mem_ctx) ir_dereference_variable(temp);
+ ir_assignment *const assign =
+ new(mem_ctx) ir_assignment(lhs, expr->operands[i], NULL, (1U << i));
+
+ this->base_ir->insert_before(assign);
+ assigned++;
+ }
+
+ assert(assigned == expr->type->vector_elements);
+
+ *rvalue = new(mem_ctx) ir_dereference_variable(temp);
+ this->progress = true;
+}
+
+bool
+lower_quadop_vector(exec_list *instructions, bool dont_lower_swz)
+{
+ lower_vector_visitor v;
+
+ v.dont_lower_swz = dont_lower_swz;
+ visit_list_elements(&v, instructions);
+
+ return v.progress;
+}
diff --git a/src/glsl/main.cpp b/src/glsl/main.cpp
index 08a44c96e5..c8fc267625 100644
--- a/src/glsl/main.cpp
+++ b/src/glsl/main.cpp
@@ -146,15 +146,6 @@ load_text_file(void *ctx, const char *file_name)
return text;
}
-
-void
-usage_fail(const char *name)
-{
- printf("%s <filename.frag|filename.vert>\n", name);
- exit(EXIT_FAILURE);
-}
-
-
int glsl_es = 0;
int dump_ast = 0;
int dump_hir = 0;
@@ -170,6 +161,25 @@ const struct option compiler_opts[] = {
{ NULL, 0, NULL, 0 }
};
+/**
+ * \brief Print proper usage and exit with failure.
+ */
+void
+usage_fail(const char *name)
+{
+
+ const char *header =
+ "usage: %s [options] <file.vert | file.geom | file.frag>\n"
+ "\n"
+ "Possible options are:\n";
+ printf(header, name, name);
+ for (const struct option *o = compiler_opts; o->name != 0; ++o) {
+ printf(" --%s\n", o->name);
+ }
+ exit(EXIT_FAILURE);
+}
+
+
void
compile_shader(struct gl_context *ctx, struct gl_shader *shader)
{
@@ -208,26 +218,7 @@ compile_shader(struct gl_context *ctx, struct gl_shader *shader)
if (!state->error && !shader->ir->is_empty()) {
bool progress;
do {
- progress = false;
-
- progress = do_function_inlining(shader->ir) || progress;
- progress = do_if_simplification(shader->ir) || progress;
- progress = do_copy_propagation(shader->ir) || progress;
- progress = do_dead_code_local(shader->ir) || progress;
- progress = do_dead_code_unlinked(shader->ir) || progress;
- progress = do_tree_grafting(shader->ir) || progress;
- progress = do_constant_propagation(shader->ir) || progress;
- progress = do_constant_variable_unlinked(shader->ir) || progress;
- progress = do_constant_folding(shader->ir) || progress;
- progress = do_algebraic(shader->ir) || progress;
- progress = do_vec_index_to_swizzle(shader->ir) || progress;
- progress = do_vec_index_to_cond_assign(shader->ir) || progress;
- progress = do_swizzle_swizzle(shader->ir) || progress;
-
- loop_state *ls = analyze_loop_variables(shader->ir);
- progress = set_loop_controls(shader->ir, ls) || progress;
- progress = unroll_loops(shader->ir, ls, 32) || progress;
- delete ls;
+ progress = do_common_optimization(shader->ir, false, 32);
} while (progress);
validate_ir_tree(shader->ir);
diff --git a/src/glsl/ir_algebraic.cpp b/src/glsl/opt_algebraic.cpp
index 2ed66db476..20f6159f0e 100644
--- a/src/glsl/ir_algebraic.cpp
+++ b/src/glsl/opt_algebraic.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_algebraic.cpp
+ * \file opt_algebraic.cpp
*
* Takes advantage of association, commutivity, and other algebraic
* properties to simplify expressions.
@@ -68,80 +68,16 @@ public:
bool progress;
};
-static bool
+static inline bool
is_vec_zero(ir_constant *ir)
{
- int c;
-
- if (!ir)
- return false;
- if (!ir->type->is_scalar() &&
- !ir->type->is_vector())
- return false;
-
- for (c = 0; c < ir->type->vector_elements; c++) {
- switch (ir->type->base_type) {
- case GLSL_TYPE_FLOAT:
- if (ir->value.f[c] != 0.0)
- return false;
- break;
- case GLSL_TYPE_INT:
- if (ir->value.i[c] != 0)
- return false;
- break;
- case GLSL_TYPE_UINT:
- if (ir->value.u[c] != 0)
- return false;
- break;
- case GLSL_TYPE_BOOL:
- if (ir->value.b[c] != false)
- return false;
- break;
- default:
- assert(!"bad base type");
- return false;
- }
- }
-
- return true;
+ return (ir == NULL) ? false : ir->is_zero();
}
-static bool
+static inline bool
is_vec_one(ir_constant *ir)
{
- int c;
-
- if (!ir)
- return false;
- if (!ir->type->is_scalar() &&
- !ir->type->is_vector())
- return false;
-
- for (c = 0; c < ir->type->vector_elements; c++) {
- switch (ir->type->base_type) {
- case GLSL_TYPE_FLOAT:
- if (ir->value.f[c] != 1.0)
- return false;
- break;
- case GLSL_TYPE_INT:
- if (ir->value.i[c] != 1)
- return false;
- break;
- case GLSL_TYPE_UINT:
- if (ir->value.u[c] != 1)
- return false;
- break;
- case GLSL_TYPE_BOOL:
- if (ir->value.b[c] != true)
- return false;
- break;
- default:
- assert(!"bad base type");
- return false;
- }
- }
-
- return true;
+ return (ir == NULL) ? false : ir->is_one();
}
static void
@@ -187,8 +123,8 @@ ir_algebraic_visitor::reassociate_constant(ir_expression *ir1, int const_index,
/* Don't want to even think about matrices. */
if (ir1->operands[0]->type->is_matrix() ||
- ir1->operands[0]->type->is_matrix() ||
- ir2->operands[1]->type->is_matrix() ||
+ ir1->operands[1]->type->is_matrix() ||
+ ir2->operands[0]->type->is_matrix() ||
ir2->operands[1]->type->is_matrix())
return false;
@@ -245,6 +181,7 @@ ir_algebraic_visitor::handle_expression(ir_expression *ir)
ir_expression *temp;
unsigned int i;
+ assert(ir->get_num_operands() <= 2);
for (i = 0; i < ir->get_num_operands(); i++) {
if (ir->operands[i]->type->is_matrix())
return ir;
@@ -457,7 +394,7 @@ ir_algebraic_visitor::handle_rvalue(ir_rvalue **rvalue)
return;
ir_expression *expr = (*rvalue)->as_expression();
- if (!expr)
+ if (!expr || expr->operation == ir_quadop_vector)
return;
*rvalue = handle_expression(expr);
diff --git a/src/glsl/ir_constant_folding.cpp b/src/glsl/opt_constant_folding.cpp
index 554c54fae3..d69ca75fe0 100644
--- a/src/glsl/ir_constant_folding.cpp
+++ b/src/glsl/opt_constant_folding.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_constant_folding.cpp
+ * \file opt_constant_folding.cpp
* Replace constant-valued expressions with references to constant values.
*/
diff --git a/src/glsl/ir_constant_propagation.cpp b/src/glsl/opt_constant_propagation.cpp
index 5d875b7be0..6719fc8186 100644
--- a/src/glsl/ir_constant_propagation.cpp
+++ b/src/glsl/opt_constant_propagation.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_constant_propagation.cpp
+ * \file opt_constant_propagation.cpp
*
* Tracks assignments of constants to channels of variables, and
* usage of those constant channels with direct usage of the constants.
diff --git a/src/glsl/ir_constant_variable.cpp b/src/glsl/opt_constant_variable.cpp
index 1fb73e765e..8068d0c143 100644
--- a/src/glsl/ir_constant_variable.cpp
+++ b/src/glsl/opt_constant_variable.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_constant_variable.cpp
+ * \file opt_constant_variable.cpp
*
* Marks variables assigned a single constant value over the course
* of the program as constant.
diff --git a/src/glsl/ir_copy_propagation.cpp b/src/glsl/opt_copy_propagation.cpp
index 0fe8fa6c41..8d07fefbfd 100644
--- a/src/glsl/ir_copy_propagation.cpp
+++ b/src/glsl/opt_copy_propagation.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_copy_propagation.cpp
+ * \file opt_copy_propagation.cpp
*
* Moves usage of recently-copied variables to the previous copy of
* the variable.
diff --git a/src/glsl/ir_dead_code.cpp b/src/glsl/opt_dead_code.cpp
index 5cf5e99add..cb500d2d10 100644
--- a/src/glsl/ir_dead_code.cpp
+++ b/src/glsl/opt_dead_code.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_dead_code.cpp
+ * \file opt_dead_code.cpp
*
* Eliminates dead assignments and variable declarations from the code.
*/
diff --git a/src/glsl/ir_dead_code_local.cpp b/src/glsl/opt_dead_code_local.cpp
index 4bbedf0ff9..5689e7d20d 100644
--- a/src/glsl/ir_dead_code_local.cpp
+++ b/src/glsl/opt_dead_code_local.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_dead_code_local.cpp
+ * \file opt_dead_code_local.cpp
*
* Eliminates local dead assignments from the code.
*
diff --git a/src/glsl/ir_dead_functions.cpp b/src/glsl/opt_dead_functions.cpp
index 16037a2632..cf91cb6d36 100644
--- a/src/glsl/ir_dead_functions.cpp
+++ b/src/glsl/opt_dead_functions.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_dead_functions.cpp
+ * \file opt_dead_functions.cpp
*
* Eliminates unused functions from the linked program.
*/
diff --git a/src/glsl/opt_discard_simplification.cpp b/src/glsl/opt_discard_simplification.cpp
new file mode 100644
index 0000000000..0e577c478a
--- /dev/null
+++ b/src/glsl/opt_discard_simplification.cpp
@@ -0,0 +1,180 @@
+/*
+ * Copyright © 2010 Intel Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/**
+ * \file opt_discard_simplification.cpp
+ *
+ * This pass simplifies if-statements and loops containing unconditional
+ * discards.
+ *
+ * Case 1: Both branches contain unconditional discards:
+ * -----------------------------------------------------
+ *
+ * if (cond) {
+ * s1;
+ * discard;
+ * s2;
+ * } else {
+ * s3;
+ * discard;
+ * s4;
+ * }
+ *
+ * becomes:
+ *
+ * discard
+ *
+ * Case 2: The "then" clause contains an unconditional discard:
+ * ------------------------------------------------------------
+ *
+ * if (cond) {
+ * s1;
+ * discard;
+ * s2;
+ * } else {
+ * s3;
+ * }
+ *
+ * becomes:
+ *
+ * if (cond) {
+ * discard;
+ * } else {
+ * s3;
+ * }
+ *
+ * Case 3: The "else" clause contains an unconditional discard:
+ * ------------------------------------------------------------
+ *
+ * if (cond) {
+ * s1;
+ * } else {
+ * s2;
+ * discard;
+ * s3;
+ * }
+ *
+ * becomes:
+ *
+ * if (cond) {
+ * s1;
+ * } else {
+ * discard;
+ * }
+ */
+
+#include "glsl_types.h"
+#include "ir.h"
+
+class discard_simplifier : public ir_hierarchical_visitor {
+public:
+ discard_simplifier()
+ {
+ this->progress = false;
+ }
+
+ ir_visitor_status visit_enter(ir_if *);
+ ir_visitor_status visit_enter(ir_loop *);
+
+ bool progress;
+};
+
+static ir_discard *
+find_unconditional_discard(exec_list &instructions)
+{
+ foreach_list(n, &instructions) {
+ ir_discard *ir = ((ir_instruction *) n)->as_discard();
+ if (ir != NULL && ir->condition == NULL)
+ return ir;
+ }
+ return NULL;
+}
+
+static bool
+is_only_instruction(ir_discard *discard)
+{
+ return (discard->prev->is_head_sentinel() &&
+ discard->next->is_tail_sentinel());
+}
+
+ir_visitor_status
+discard_simplifier::visit_enter(ir_if *ir)
+{
+ ir_discard *then_discard = find_unconditional_discard(ir->then_instructions);
+ ir_discard *else_discard = find_unconditional_discard(ir->else_instructions);
+
+ if (then_discard == NULL && else_discard == NULL)
+ return visit_continue;
+
+ /* If both branches result in discard, replace whole if with discard. */
+ if (then_discard != NULL && else_discard != NULL) {
+ this->progress = true;
+ ir->replace_with(then_discard);
+ return visit_continue_with_parent;
+ }
+
+ /* Otherwise, one branch has a discard. */
+ if (then_discard != NULL && !is_only_instruction(then_discard)) {
+ this->progress = true;
+ ir->then_instructions.make_empty();
+ ir->then_instructions.push_tail(then_discard);
+ } else if (else_discard != NULL && !is_only_instruction(else_discard)) {
+ this->progress = true;
+ ir->else_instructions.make_empty();
+ ir->else_instructions.push_tail(else_discard);
+ }
+
+ visit_list_elements(this, &ir->then_instructions);
+ return visit_continue_with_parent;
+}
+
+ir_visitor_status
+discard_simplifier::visit_enter(ir_loop *ir)
+{
+ ir_discard *discard = find_unconditional_discard(ir->body_instructions);
+
+ if (discard) {
+ ir->replace_with(discard);
+ return visit_continue_with_parent;
+ }
+
+ return visit_continue;
+}
+
+bool
+do_discard_simplification(exec_list *instructions)
+{
+ /* Look for a top-level unconditional discard */
+ ir_discard *discard = find_unconditional_discard(*instructions);
+ if (discard != NULL) {
+ instructions->make_empty();
+ instructions->push_tail(discard);
+ return true;
+ }
+
+ discard_simplifier v;
+
+ visit_list_elements(&v, instructions);
+
+ return v.progress;
+}
diff --git a/src/glsl/ir_function_inlining.cpp b/src/glsl/opt_function_inlining.cpp
index 147c1824c1..169fd82688 100644
--- a/src/glsl/ir_function_inlining.cpp
+++ b/src/glsl/opt_function_inlining.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_function_inlining.cpp
+ * \file opt_function_inlining.cpp
*
* Replaces calls to functions with the body of the function.
*/
diff --git a/src/glsl/ir_if_simplification.cpp b/src/glsl/opt_if_simplification.cpp
index 021615ebd1..618bacfecf 100644
--- a/src/glsl/ir_if_simplification.cpp
+++ b/src/glsl/opt_if_simplification.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_if_simplification.cpp
+ * \file opt_if_simplification.cpp
*
* Moves constant branches of if statements out to the surrounding
* instruction stream.
diff --git a/src/glsl/ir_noop_swizzle.cpp b/src/glsl/opt_noop_swizzle.cpp
index 0403dfa4e9..0a906aaf1d 100644
--- a/src/glsl/ir_noop_swizzle.cpp
+++ b/src/glsl/opt_noop_swizzle.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_noop_swizzle.cpp
+ * \file opt_noop_swizzle.cpp
*
* If a swizzle doesn't change the order or count of components, then
* remove the swizzle so that other optimization passes see the value
diff --git a/src/glsl/ir_structure_splitting.cpp b/src/glsl/opt_structure_splitting.cpp
index ff3ec936eb..d6191002c2 100644
--- a/src/glsl/ir_structure_splitting.cpp
+++ b/src/glsl/opt_structure_splitting.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_structure_splitting.cpp
+ * \file opt_structure_splitting.cpp
*
* If a structure is only ever referenced by its components, then
* split those components out to individual variables so they can be
diff --git a/src/glsl/ir_swizzle_swizzle.cpp b/src/glsl/opt_swizzle_swizzle.cpp
index 0ffb4fa313..bc442fa869 100644
--- a/src/glsl/ir_swizzle_swizzle.cpp
+++ b/src/glsl/opt_swizzle_swizzle.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_swizzle_swizzle.cpp
+ * \file opt_swizzle_swizzle.cpp
*
* Eliminates the second swizzle in a swizzle chain.
*/
diff --git a/src/glsl/ir_tree_grafting.cpp b/src/glsl/opt_tree_grafting.cpp
index 9b569b8284..9917c045b1 100644
--- a/src/glsl/ir_tree_grafting.cpp
+++ b/src/glsl/opt_tree_grafting.cpp
@@ -22,7 +22,7 @@
*/
/**
- * \file ir_tree_grafting.cpp
+ * \file opt_tree_grafting.cpp
*
* Takes assignments to variables that are dereferenced only once and
* pastes the RHS expression into where the variable is dereferenced.
diff --git a/src/glsl/s_expression.cpp b/src/glsl/s_expression.cpp
index 4c8829fea9..e420cd6e7e 100644
--- a/src/glsl/s_expression.cpp
+++ b/src/glsl/s_expression.cpp
@@ -62,7 +62,7 @@ read_atom(void *ctx, const char *& src)
// Check if the atom is a number.
char *float_end = NULL;
- double f = strtod(src, &float_end);
+ double f = glsl_strtod(src, &float_end);
if (float_end != src) {
char *int_end = NULL;
int i = strtol(src, &int_end, 10);
diff --git a/src/glsl/s_expression.h b/src/glsl/s_expression.h
index aa22475a1b..29d800e394 100644
--- a/src/glsl/s_expression.h
+++ b/src/glsl/s_expression.h
@@ -26,6 +26,7 @@
#ifndef S_EXPRESSION_H
#define S_EXPRESSION_H
+#include "strtod.h"
#include "list.h"
#define SX_AS_(t,x) ((x) && ((s_expression*) x)->is_##t()) ? ((s_##t*) (x)) \
diff --git a/src/glsl/strtod.c b/src/glsl/strtod.c
new file mode 100644
index 0000000000..ff34591488
--- /dev/null
+++ b/src/glsl/strtod.c
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2010 VMware, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+#include <stdlib.h>
+
+#ifdef _GNU_SOURCE
+#include <locale.h>
+#ifdef __APPLE__
+#include <xlocale.h>
+#endif
+#endif
+
+#include "strtod.h"
+
+
+
+/**
+ * Wrapper around strtod which uses the "C" locale so the decimal
+ * point is always '.'
+ */
+double
+glsl_strtod(const char *s, char **end)
+{
+#if defined(_GNU_SOURCE) && !defined(__CYGWIN__) && !defined(__FreeBSD__)
+ static locale_t loc = NULL;
+ if (!loc) {
+ loc = newlocale(LC_CTYPE_MASK, "C", NULL);
+ }
+ return strtod_l(s, end, loc);
+#else
+ return strtod(s, end);
+#endif
+}
diff --git a/src/glsl/strtod.h b/src/glsl/strtod.h
new file mode 100644
index 0000000000..0cf6409d42
--- /dev/null
+++ b/src/glsl/strtod.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2010 VMware, Inc.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ */
+
+
+#ifndef STRTOD_H
+#define STRTOD_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern double
+glsl_strtod(const char *s, char **end);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif