diff options
Diffstat (limited to 'src/mesa')
| -rw-r--r-- | src/mesa/shader/slang/library/slang_shader.syn | 132 | ||||
| -rw-r--r-- | src/mesa/shader/slang/library/slang_shader_syn.h | 130 | 
2 files changed, 72 insertions, 190 deletions
| diff --git a/src/mesa/shader/slang/library/slang_shader.syn b/src/mesa/shader/slang/library/slang_shader.syn index af83543cbb..4558ed58b0 100644 --- a/src/mesa/shader/slang/library/slang_shader.syn +++ b/src/mesa/shader/slang/library/slang_shader.syn @@ -692,11 +692,7 @@ function_header_with_parameters_1   * <function_header> ::= <fully_specified_type> <identifier> "("   */  function_header -    function_header_nospace .or function_header_space; -function_header_space -    fully_specified_type_space .and space .and function_decl_identifier .and lparen; -function_header_nospace -    fully_specified_type_nospace .and function_decl_identifier .and lparen; +    fully_specified_type .and function_decl_identifier .and lparen;  /*   * <function_decl_identifier> ::= "__constructor" @@ -793,11 +789,7 @@ overriden_operator   *                          | <type_specifier> <identifier> "[" <constant_expression> "]"   */  parameter_declarator -    parameter_declarator_nospace .or parameter_declarator_space; -parameter_declarator_nospace -    type_specifier_nospace .and identifier .and parameter_declarator_1; -parameter_declarator_space -    type_specifier_space .and space .and identifier .and parameter_declarator_1; +    type_specifier .and identifier .and parameter_declarator_1;  parameter_declarator_1      parameter_declarator_2 .emit PARAMETER_ARRAY_PRESENT .or      .true .emit PARAMETER_ARRAY_NOT_PRESENT; @@ -825,15 +817,13 @@ parameter_declaration  parameter_declaration_1      parameter_declaration_2 .or parameter_declaration_3;  parameter_declaration_2 -    type_qualifier .and space .and parameter_qualifier .and parameter_declaration_4; +    type_qualifier .and parameter_qualifier .and parameter_declaration_4;  parameter_declaration_3      parameter_qualifier .emit TYPE_QUALIFIER_NONE .and parameter_declaration_4;  parameter_declaration_4      parameter_declaration_optprec .and parameter_declaration_rest;  parameter_declaration_optprec -    parameter_declaration_prec .or .true .emit PRECISION_DEFAULT; -parameter_declaration_prec -    precision .and space; +    precision .or .true .emit PRECISION_DEFAULT;  parameter_declaration_rest      parameter_declarator .or parameter_type_specifier; @@ -846,8 +836,6 @@ parameter_declaration_rest  parameter_qualifier      parameter_qualifier_1 .or .true .emit PARAM_QUALIFIER_IN;  parameter_qualifier_1 -    parameter_qualifier_2 .and space; -parameter_qualifier_2      "in" .emit PARAM_QUALIFIER_IN .or      "out" .emit PARAM_QUALIFIER_OUT .or      "inout" .emit PARAM_QUALIFIER_INOUT; @@ -857,9 +845,7 @@ parameter_qualifier_2   *                              | <type_specifier> "[" <constant_expression> "]"   */  parameter_type_specifier -    parameter_type_specifier_1 .and .true .emit '\0' .and parameter_type_specifier_2; -parameter_type_specifier_1 -    type_specifier_nospace .or type_specifier_space; +    type_specifier .and .true .emit '\0' .and parameter_type_specifier_2;  parameter_type_specifier_2      parameter_type_specifier_3 .emit PARAMETER_ARRAY_PRESENT .or      .true .emit PARAMETER_ARRAY_NOT_PRESENT; @@ -895,18 +881,10 @@ init_declarator_list_5   *                        | <fully_specified_type> <identifier> "=" <initializer>   */  single_declaration -    single_declaration_nospace .or single_declaration_space; -single_declaration_space -    fully_specified_type_space .and single_declaration_space_1; -single_declaration_nospace -    fully_specified_type_nospace .and single_declaration_nospace_1; -single_declaration_space_1 -    single_declaration_space_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE; -single_declaration_nospace_1 -    single_declaration_nospace_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE; -single_declaration_space_2 -    space .and identifier .and single_declaration_3; -single_declaration_nospace_2 +    fully_specified_type .and single_declaration_1; +single_declaration_1 +    single_declaration_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE; +single_declaration_2      identifier .and single_declaration_3;  single_declaration_3      single_declaration_4 .or single_declaration_5 .or .true .emit VARIABLE_NONE; @@ -922,26 +900,16 @@ single_declaration_6   *   * Example: "invariant varying highp vec3"   */ -fully_specified_type_space -    fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier_space; -fully_specified_type_nospace -    fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier_nospace; +fully_specified_type +    fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier;  fully_specified_type_optinvariant -    fully_specified_type_invariant .or .true .emit TYPE_VARIANT; -fully_specified_type_invariant -    invariant_qualifier .and space; +    invariant_qualifier .or .true .emit TYPE_VARIANT;  fully_specified_type_optcentroid -    fully_specified_type_centroid .or .true .emit TYPE_CENTER; -fully_specified_type_centroid -    centroid_qualifier .and space; +    centroid_qualifier .or .true .emit TYPE_CENTER;  fully_specified_type_optqual -    fully_specified_type_qual .or .true .emit TYPE_QUALIFIER_NONE; -fully_specified_type_qual -    type_qualifier .and space; +    type_qualifier .or .true .emit TYPE_QUALIFIER_NONE;  fully_specified_type_optprec -    fully_specified_type_prec .or .true .emit PRECISION_DEFAULT; -fully_specified_type_prec -    precision .and space; +    precision .or .true .emit PRECISION_DEFAULT;  /*   * <invariant_qualifier> ::= "invariant" @@ -1006,7 +974,8 @@ type_qualifier   *                             | <struct_specifier>   *                             | <type_name>   */ -type_specifier_nonarray_space +type_specifier_nonarray +    struct_specifier .emit TYPE_SPECIFIER_STRUCT .or      "void" .emit TYPE_SPECIFIER_VOID .or      "float" .emit TYPE_SPECIFIER_FLOAT .or      "int" .emit TYPE_SPECIFIER_INT .or @@ -1038,22 +1007,16 @@ type_specifier_nonarray_space      "sampler2DRect" .emit TYPE_SPECIFIER_SAMPLER2DRECT .or      "sampler2DRectShadow" .emit TYPE_SPECIFIER_SAMPLER2DRECTSHADOW .or      type_name .emit TYPE_SPECIFIER_TYPENAME; -type_specifier_nonarray_nospace -    struct_specifier .emit TYPE_SPECIFIER_STRUCT; -type_specifier_nonarray -    type_specifier_nonarray_nospace .or type_specifier_nonarray_space;  /*   * <type_specifier> ::= <type_specifier_nonarray>   *                    | <type_specifier_nonarray> "[" <constant_expression> "]"   */ -type_specifier_space -    type_specifier_nonarray_space .and .true .emit TYPE_SPECIFIER_NONARRAY; -type_specifier_nospace -    type_specifier_nospace_array .or type_specifier_nospace_1; -type_specifier_nospace_1 -    type_specifier_nonarray_nospace .and .true .emit TYPE_SPECIFIER_NONARRAY; -type_specifier_nospace_array +type_specifier +    type_specifier_array .or type_specifier_1; +type_specifier_1 +    type_specifier_nonarray .and .true .emit TYPE_SPECIFIER_NONARRAY; +type_specifier_array      type_specifier_nonarray .and lbracket .emit TYPE_SPECIFIER_ARRAY .and constant_expression .and rbracket;  /* @@ -1061,12 +1024,10 @@ type_specifier_nospace_array   *                      | "struct" "{" <struct_declaration_list> "}"   */  struct_specifier -    "struct" .and struct_specifier_1 .and optional_space .and lbrace .error LBRACE_EXPECTED .and +    "struct" .and struct_specifier_1 .and lbrace .error LBRACE_EXPECTED .and      struct_declaration_list .and rbrace .emit FIELD_NONE;  struct_specifier_1 -    struct_specifier_2 .or .true .emit '\0'; -struct_specifier_2 -    space .and identifier; +    identifier .or .true .emit '\0';  /*   * <struct_declaration_list> ::= <struct_declaration> @@ -1079,11 +1040,7 @@ struct_declaration_list   * <struct_declaration> ::= <type_specifier> <struct_declarator_list> ";"   */  struct_declaration -    struct_declaration_nospace .or struct_declaration_space; -struct_declaration_space -    type_specifier_space .and space .and struct_declarator_list .and semicolon .emit FIELD_NONE; -struct_declaration_nospace -    type_specifier_nospace .and struct_declarator_list .and semicolon .emit FIELD_NONE; +    type_specifier .and struct_declarator_list .and semicolon .emit FIELD_NONE;  /*   * <struct_declarator_list> ::= <struct_declarator> @@ -1123,10 +1080,6 @@ declaration_statement   */  statement      compound_statement .or simple_statement; -statement_space -    compound_statement .or statement_space_1; -statement_space_1 -    space .and simple_statement;  /*   * <simple_statement> ::= <__asm_statement> @@ -1209,7 +1162,7 @@ selection_rest_statement  selection_rest_statement_1      selection_rest_statement_2 .or .true .emit OP_EXPRESSION .emit OP_PUSH_VOID .emit OP_END;  selection_rest_statement_2 -    "else" .and optional_space .and statement; +    "else" .and statement;  /*   * <condition> ::= <expression> @@ -1220,17 +1173,11 @@ selection_rest_statement_2   */  condition      condition_1 .emit OP_DECLARE .emit DECLARATION_INIT_DECLARATOR_LIST .or -    condition_3 .emit OP_EXPRESSION; +    condition_2 .emit OP_EXPRESSION;  condition_1 -    condition_1_nospace .or condition_1_space; -condition_1_nospace -    fully_specified_type_nospace .and condition_2; -condition_1_space -    fully_specified_type_space .and space .and condition_2; +    fully_specified_type .and identifier .emit VARIABLE_IDENTIFIER .and +    equals .emit VARIABLE_INITIALIZER .and initializer .and .true .emit DECLARATOR_NONE;  condition_2 -    identifier .emit VARIABLE_IDENTIFIER .and equals .emit VARIABLE_INITIALIZER .and -    initializer .and .true .emit DECLARATOR_NONE; -condition_3      expression .and .true .emit OP_END;  /* @@ -1244,7 +1191,7 @@ iteration_statement_1      "while" .emit OP_WHILE .and lparen .error LPAREN_EXPECTED .and condition .and      rparen .error RPAREN_EXPECTED .and statement;  iteration_statement_2 -    "do" .emit OP_DO .and statement_space .and "while" .and lparen .error LPAREN_EXPECTED .and +    "do" .emit OP_DO .and statement .and "while" .and lparen .error LPAREN_EXPECTED .and      expression .and rparen .error RPAREN_EXPECTED .emit OP_END .and semicolon;  iteration_statement_3      "for" .emit OP_FOR .and lparen .error LPAREN_EXPECTED .and for_init_statement .and @@ -1295,7 +1242,7 @@ jump_statement_1  jump_statement_2      "break" .and semicolon .emit OP_BREAK;  jump_statement_3 -    "return" .emit OP_RETURN .and optional_space .and expression .and semicolon .emit OP_END; +    "return" .emit OP_RETURN .and expression .and semicolon .emit OP_END;  jump_statement_4      "return" .emit OP_RETURN .and semicolon .emit OP_PUSH_VOID .emit OP_END;  jump_statement_5 @@ -1308,7 +1255,7 @@ jump_statement_5   * normally slang disallows __asm statements   */  __asm_statement -    "__asm" .and space .and identifier .and space .and asm_arguments .and semicolon .emit OP_END; +    "__asm" .and identifier .and asm_arguments .and semicolon .emit OP_END;  /*   * <asm_arguments> ::= <asm_argument> @@ -1343,9 +1290,8 @@ var_with_field   *                      | <translation_unit> <external_declaration>   */  translation_unit -    optional_space .emit REVISION .and external_declaration .error INVALID_EXTERNAL_DECLARATION .and -    .loop external_declaration .and optional_space .and -    '\0' .error INVALID_EXTERNAL_DECLARATION .emit EXTERNAL_NULL; +    .true .emit REVISION .and external_declaration .error INVALID_EXTERNAL_DECLARATION .and +    .loop external_declaration .and '\0' .error INVALID_EXTERNAL_DECLARATION .emit EXTERNAL_NULL;  /* @@ -1363,7 +1309,7 @@ external_declaration   * <precision_stmt> ::= "precision" <precision> <prectype>   */  precision_stmt -    "precision" .and space .and precision .error INVALID_PRECISION .and space .and prectype .error INVALID_PRECISION_TYPE .and semicolon; +    "precision" .and precision .error INVALID_PRECISION .and prectype .error INVALID_PRECISION_TYPE .and semicolon;  /*   * <precision> ::= "lowp" @@ -1397,7 +1343,7 @@ prectype   * <invariant_stmt> ::= "invariant" identifier;   */  invariant_stmt -    "invariant" .and space .and identifier .and semicolon; +    "invariant" .and identifier .and semicolon;  /* @@ -1440,12 +1386,6 @@ intconstant  boolconstant      boolean .emit OP_PUSH_BOOL; -optional_space -   .true; - -space -   .true; -  /* lexical rules */  /*ampersand diff --git a/src/mesa/shader/slang/library/slang_shader_syn.h b/src/mesa/shader/slang/library/slang_shader_syn.h index 98e6453a00..e94238e012 100644 --- a/src/mesa/shader/slang/library/slang_shader_syn.h +++ b/src/mesa/shader/slang/library/slang_shader_syn.h @@ -321,11 +321,7 @@  "function_header_with_parameters_1\n"  " comma .and parameter_declaration;\n"  "function_header\n" -" function_header_nospace .or function_header_space;\n" -"function_header_space\n" -" fully_specified_type_space .and space .and function_decl_identifier .and lparen;\n" -"function_header_nospace\n" -" fully_specified_type_nospace .and function_decl_identifier .and lparen;\n" +" fully_specified_type .and function_decl_identifier .and lparen;\n"  "function_decl_identifier\n"  " .if (parsing_builtin != 0) __operator .emit FUNCTION_OPERATOR .or\n"  " .if (parsing_builtin != 0) \"__constructor\" .emit FUNCTION_CONSTRUCTOR .or\n" @@ -362,11 +358,7 @@  " \n"  " caretcaret .emit OPERATOR_LOGICALXOR ;\n"  "parameter_declarator\n" -" parameter_declarator_nospace .or parameter_declarator_space;\n" -"parameter_declarator_nospace\n" -" type_specifier_nospace .and identifier .and parameter_declarator_1;\n" -"parameter_declarator_space\n" -" type_specifier_space .and space .and identifier .and parameter_declarator_1;\n" +" type_specifier .and identifier .and parameter_declarator_1;\n"  "parameter_declarator_1\n"  " parameter_declarator_2 .emit PARAMETER_ARRAY_PRESENT .or\n"  " .true .emit PARAMETER_ARRAY_NOT_PRESENT;\n" @@ -377,29 +369,23 @@  "parameter_declaration_1\n"  " parameter_declaration_2 .or parameter_declaration_3;\n"  "parameter_declaration_2\n" -" type_qualifier .and space .and parameter_qualifier .and parameter_declaration_4;\n" +" type_qualifier .and parameter_qualifier .and parameter_declaration_4;\n"  "parameter_declaration_3\n"  " parameter_qualifier .emit TYPE_QUALIFIER_NONE .and parameter_declaration_4;\n"  "parameter_declaration_4\n"  " parameter_declaration_optprec .and parameter_declaration_rest;\n"  "parameter_declaration_optprec\n" -" parameter_declaration_prec .or .true .emit PRECISION_DEFAULT;\n" -"parameter_declaration_prec\n" -" precision .and space;\n" +" precision .or .true .emit PRECISION_DEFAULT;\n"  "parameter_declaration_rest\n"  " parameter_declarator .or parameter_type_specifier;\n"  "parameter_qualifier\n"  " parameter_qualifier_1 .or .true .emit PARAM_QUALIFIER_IN;\n"  "parameter_qualifier_1\n" -" parameter_qualifier_2 .and space;\n" -"parameter_qualifier_2\n"  " \"in\" .emit PARAM_QUALIFIER_IN .or\n"  " \"out\" .emit PARAM_QUALIFIER_OUT .or\n"  " \"inout\" .emit PARAM_QUALIFIER_INOUT;\n"  "parameter_type_specifier\n" -" parameter_type_specifier_1 .and .true .emit '\\0' .and parameter_type_specifier_2;\n" -"parameter_type_specifier_1\n" -" type_specifier_nospace .or type_specifier_space;\n" +" type_specifier .and .true .emit '\\0' .and parameter_type_specifier_2;\n"  "parameter_type_specifier_2\n"  " parameter_type_specifier_3 .emit PARAMETER_ARRAY_PRESENT .or\n"  " .true .emit PARAMETER_ARRAY_NOT_PRESENT;\n" @@ -419,18 +405,10 @@  "init_declarator_list_5\n"  " constant_expression .emit VARIABLE_ARRAY_EXPLICIT .or .true .emit VARIABLE_ARRAY_UNKNOWN;\n"  "single_declaration\n" -" single_declaration_nospace .or single_declaration_space;\n" -"single_declaration_space\n" -" fully_specified_type_space .and single_declaration_space_1;\n" -"single_declaration_nospace\n" -" fully_specified_type_nospace .and single_declaration_nospace_1;\n" -"single_declaration_space_1\n" -" single_declaration_space_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE;\n" -"single_declaration_nospace_1\n" -" single_declaration_nospace_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE;\n" -"single_declaration_space_2\n" -" space .and identifier .and single_declaration_3;\n" -"single_declaration_nospace_2\n" +" fully_specified_type .and single_declaration_1;\n" +"single_declaration_1\n" +" single_declaration_2 .emit VARIABLE_IDENTIFIER .or .true .emit VARIABLE_NONE;\n" +"single_declaration_2\n"  " identifier .and single_declaration_3;\n"  "single_declaration_3\n"  " single_declaration_4 .or single_declaration_5 .or .true .emit VARIABLE_NONE;\n" @@ -440,26 +418,16 @@  " lbracket .and single_declaration_6 .and rbracket;\n"  "single_declaration_6\n"  " constant_expression .emit VARIABLE_ARRAY_EXPLICIT .or .true .emit VARIABLE_ARRAY_UNKNOWN;\n" -"fully_specified_type_space\n" -" fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier_space;\n" -"fully_specified_type_nospace\n" -" fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier_nospace;\n" +"fully_specified_type\n" +" fully_specified_type_optinvariant .and fully_specified_type_optcentroid .and fully_specified_type_optqual .and fully_specified_type_optprec .and type_specifier;\n"  "fully_specified_type_optinvariant\n" -" fully_specified_type_invariant .or .true .emit TYPE_VARIANT;\n" -"fully_specified_type_invariant\n" -" invariant_qualifier .and space;\n" +" invariant_qualifier .or .true .emit TYPE_VARIANT;\n"  "fully_specified_type_optcentroid\n" -" fully_specified_type_centroid .or .true .emit TYPE_CENTER;\n" -"fully_specified_type_centroid\n" -" centroid_qualifier .and space;\n" +" centroid_qualifier .or .true .emit TYPE_CENTER;\n"  "fully_specified_type_optqual\n" -" fully_specified_type_qual .or .true .emit TYPE_QUALIFIER_NONE;\n" -"fully_specified_type_qual\n" -" type_qualifier .and space;\n" +" type_qualifier .or .true .emit TYPE_QUALIFIER_NONE;\n"  "fully_specified_type_optprec\n" -" fully_specified_type_prec .or .true .emit PRECISION_DEFAULT;\n" -"fully_specified_type_prec\n" -" precision .and space;\n" +" precision .or .true .emit PRECISION_DEFAULT;\n"  "invariant_qualifier\n"  " \"invariant\" .emit TYPE_INVARIANT;\n"  "centroid_qualifier\n" @@ -471,7 +439,8 @@  " \"uniform\" .emit TYPE_QUALIFIER_UNIFORM .or\n"  " .if (parsing_builtin != 0) \"__fixed_output\" .emit TYPE_QUALIFIER_FIXEDOUTPUT .or\n"  " .if (parsing_builtin != 0) \"__fixed_input\" .emit TYPE_QUALIFIER_FIXEDINPUT;\n" -"type_specifier_nonarray_space\n" +"type_specifier_nonarray\n" +" struct_specifier .emit TYPE_SPECIFIER_STRUCT .or\n"  " \"void\" .emit TYPE_SPECIFIER_VOID .or\n"  " \"float\" .emit TYPE_SPECIFIER_FLOAT .or\n"  " \"int\" .emit TYPE_SPECIFIER_INT .or\n" @@ -503,33 +472,21 @@  " \"sampler2DRect\" .emit TYPE_SPECIFIER_SAMPLER2DRECT .or\n"  " \"sampler2DRectShadow\" .emit TYPE_SPECIFIER_SAMPLER2DRECTSHADOW .or\n"  " type_name .emit TYPE_SPECIFIER_TYPENAME;\n" -"type_specifier_nonarray_nospace\n" -" struct_specifier .emit TYPE_SPECIFIER_STRUCT;\n" -"type_specifier_nonarray\n" -" type_specifier_nonarray_nospace .or type_specifier_nonarray_space;\n" -"type_specifier_space\n" -" type_specifier_nonarray_space .and .true .emit TYPE_SPECIFIER_NONARRAY;\n" -"type_specifier_nospace\n" -" type_specifier_nospace_array .or type_specifier_nospace_1;\n" -"type_specifier_nospace_1\n" -" type_specifier_nonarray_nospace .and .true .emit TYPE_SPECIFIER_NONARRAY;\n" -"type_specifier_nospace_array\n" +"type_specifier\n" +" type_specifier_array .or type_specifier_1;\n" +"type_specifier_1\n" +" type_specifier_nonarray .and .true .emit TYPE_SPECIFIER_NONARRAY;\n" +"type_specifier_array\n"  " type_specifier_nonarray .and lbracket .emit TYPE_SPECIFIER_ARRAY .and constant_expression .and rbracket;\n"  "struct_specifier\n" -" \"struct\" .and struct_specifier_1 .and optional_space .and lbrace .error LBRACE_EXPECTED .and\n" +" \"struct\" .and struct_specifier_1 .and lbrace .error LBRACE_EXPECTED .and\n"  " struct_declaration_list .and rbrace .emit FIELD_NONE;\n"  "struct_specifier_1\n" -" struct_specifier_2 .or .true .emit '\\0';\n" -"struct_specifier_2\n" -" space .and identifier;\n" +" identifier .or .true .emit '\\0';\n"  "struct_declaration_list\n"  " struct_declaration .and .loop struct_declaration .emit FIELD_NEXT;\n"  "struct_declaration\n" -" struct_declaration_nospace .or struct_declaration_space;\n" -"struct_declaration_space\n" -" type_specifier_space .and space .and struct_declarator_list .and semicolon .emit FIELD_NONE;\n" -"struct_declaration_nospace\n" -" type_specifier_nospace .and struct_declarator_list .and semicolon .emit FIELD_NONE;\n" +" type_specifier .and struct_declarator_list .and semicolon .emit FIELD_NONE;\n"  "struct_declarator_list\n"  " struct_declarator .and .loop struct_declarator_list_1 .emit FIELD_NEXT;\n"  "struct_declarator_list_1\n" @@ -546,10 +503,6 @@  " declaration;\n"  "statement\n"  " compound_statement .or simple_statement;\n" -"statement_space\n" -" compound_statement .or statement_space_1;\n" -"statement_space_1\n" -" space .and simple_statement;\n"  "simple_statement\n"  " .if (parsing_builtin != 0) __asm_statement .emit OP_ASM .or\n"  " selection_statement .or\n" @@ -590,20 +543,14 @@  "selection_rest_statement_1\n"  " selection_rest_statement_2 .or .true .emit OP_EXPRESSION .emit OP_PUSH_VOID .emit OP_END;\n"  "selection_rest_statement_2\n" -" \"else\" .and optional_space .and statement;\n" +" \"else\" .and statement;\n"  "condition\n"  " condition_1 .emit OP_DECLARE .emit DECLARATION_INIT_DECLARATOR_LIST .or\n" -" condition_3 .emit OP_EXPRESSION;\n" +" condition_2 .emit OP_EXPRESSION;\n"  "condition_1\n" -" condition_1_nospace .or condition_1_space;\n" -"condition_1_nospace\n" -" fully_specified_type_nospace .and condition_2;\n" -"condition_1_space\n" -" fully_specified_type_space .and space .and condition_2;\n" +" fully_specified_type .and identifier .emit VARIABLE_IDENTIFIER .and\n" +" equals .emit VARIABLE_INITIALIZER .and initializer .and .true .emit DECLARATOR_NONE;\n"  "condition_2\n" -" identifier .emit VARIABLE_IDENTIFIER .and equals .emit VARIABLE_INITIALIZER .and\n" -" initializer .and .true .emit DECLARATOR_NONE;\n" -"condition_3\n"  " expression .and .true .emit OP_END;\n"  "iteration_statement\n"  " iteration_statement_1 .or iteration_statement_2 .or iteration_statement_3;\n" @@ -611,7 +558,7 @@  " \"while\" .emit OP_WHILE .and lparen .error LPAREN_EXPECTED .and condition .and\n"  " rparen .error RPAREN_EXPECTED .and statement;\n"  "iteration_statement_2\n" -" \"do\" .emit OP_DO .and statement_space .and \"while\" .and lparen .error LPAREN_EXPECTED .and\n" +" \"do\" .emit OP_DO .and statement .and \"while\" .and lparen .error LPAREN_EXPECTED .and\n"  " expression .and rparen .error RPAREN_EXPECTED .emit OP_END .and semicolon;\n"  "iteration_statement_3\n"  " \"for\" .emit OP_FOR .and lparen .error LPAREN_EXPECTED .and for_init_statement .and\n" @@ -635,13 +582,13 @@  "jump_statement_2\n"  " \"break\" .and semicolon .emit OP_BREAK;\n"  "jump_statement_3\n" -" \"return\" .emit OP_RETURN .and optional_space .and expression .and semicolon .emit OP_END;\n" +" \"return\" .emit OP_RETURN .and expression .and semicolon .emit OP_END;\n"  "jump_statement_4\n"  " \"return\" .emit OP_RETURN .and semicolon .emit OP_PUSH_VOID .emit OP_END;\n"  "jump_statement_5\n"  " \"discard\" .and semicolon .emit OP_DISCARD;\n"  "__asm_statement\n" -" \"__asm\" .and space .and identifier .and space .and asm_arguments .and semicolon .emit OP_END;\n" +" \"__asm\" .and identifier .and asm_arguments .and semicolon .emit OP_END;\n"  "asm_arguments\n"  " asm_argument .and .true .emit OP_END .and .loop asm_arguments_1;\n"  "asm_arguments_1\n" @@ -653,16 +600,15 @@  "var_with_field\n"  " variable_identifier .and dot .and field_selection .emit OP_FIELD;\n"  "translation_unit\n" -" optional_space .emit REVISION .and external_declaration .error INVALID_EXTERNAL_DECLARATION .and\n" -" .loop external_declaration .and optional_space .and\n" -" '\\0' .error INVALID_EXTERNAL_DECLARATION .emit EXTERNAL_NULL;\n" +" .true .emit REVISION .and external_declaration .error INVALID_EXTERNAL_DECLARATION .and\n" +" .loop external_declaration .and '\\0' .error INVALID_EXTERNAL_DECLARATION .emit EXTERNAL_NULL;\n"  "external_declaration\n"  " precision_stmt .emit DEFAULT_PRECISION .or\n"  " function_definition .emit EXTERNAL_FUNCTION_DEFINITION .or\n"  " invariant_stmt .emit INVARIANT_STMT .or\n"  " declaration .emit EXTERNAL_DECLARATION;\n"  "precision_stmt\n" -" \"precision\" .and space .and precision .error INVALID_PRECISION .and space .and prectype .error INVALID_PRECISION_TYPE .and semicolon;\n" +" \"precision\" .and precision .error INVALID_PRECISION .and prectype .error INVALID_PRECISION_TYPE .and semicolon;\n"  "precision\n"  " \"lowp\" .emit PRECISION_LOW .or\n"  " \"mediump\" .emit PRECISION_MEDIUM .or\n" @@ -679,7 +625,7 @@  " \"sampler2DRect\" .emit TYPE_SPECIFIER_SAMPLER2DRECT .or\n"  " \"sampler2DRectShadow\" .emit TYPE_SPECIFIER_SAMPLER2DRECTSHADOW;\n"  "invariant_stmt\n" -" \"invariant\" .and space .and identifier .and semicolon;\n" +" \"invariant\" .and identifier .and semicolon;\n"  "function_definition\n"  " function_prototype .and compound_statement_no_new_scope;\n"  "identifier\n" @@ -701,10 +647,6 @@  " integer .emit OP_PUSH_INT;\n"  "boolconstant\n"  " boolean .emit OP_PUSH_BOOL;\n" -"optional_space\n" -" .true;\n" -"space\n" -" .true;\n"  "ampersandampersand\n"  " \"@&&\";\n"  "barbar\n" | 
