diff --git a/reactos/dll/directx/wine/d3dcompiler_43/bytecodewriter.c b/reactos/dll/directx/wine/d3dcompiler_43/bytecodewriter.c index 5db3bd655ea..17ea050624f 100644 --- a/reactos/dll/directx/wine/d3dcompiler_43/bytecodewriter.c +++ b/reactos/dll/directx/wine/d3dcompiler_43/bytecodewriter.c @@ -567,6 +567,13 @@ static DWORD d3d9_opcode(DWORD bwriter_opcode) } } +static DWORD d3dsp_register( D3DSHADER_PARAM_REGISTER_TYPE type, DWORD num ) +{ + return ((type << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK) | + ((type << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2) | + (num & D3DSP_REGNUM_MASK); /* No shift */ +} + /****************************************************** * Implementation of the writer functions starts here * ******************************************************/ @@ -607,10 +614,7 @@ static void write_declarations(struct bc_writer *This, static void write_const(struct constant **consts, int num, DWORD opcode, DWORD reg_type, struct bytecode_buffer *buffer, BOOL len) { int i; DWORD instr_def = opcode; - const DWORD reg = (1<<31) | - ((reg_type << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK) | - ((reg_type << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2) | - D3DSP_WRITEMASK_ALL; + const DWORD reg = (1<<31) | d3dsp_register( reg_type, 0 ) | D3DSP_WRITEMASK_ALL; if(len) { if(opcode == D3DSIO_DEFB) @@ -845,41 +849,28 @@ static void end(struct bc_writer *This, const struct bwriter_shader *shader, str } static DWORD map_vs_output(struct bc_writer *This, DWORD regnum, DWORD mask, DWORD *has_components) { - DWORD token = 0; DWORD i; *has_components = TRUE; if(regnum == This->oPos_regnum) { - token |= (D3DSPR_RASTOUT << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= D3DSRO_POSITION & D3DSP_REGNUM_MASK; /* No shift */ - return token; + return d3dsp_register( D3DSPR_RASTOUT, D3DSRO_POSITION ); } if(regnum == This->oFog_regnum && mask == This->oFog_mask) { - token |= (D3DSPR_RASTOUT << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= D3DSRO_FOG & D3DSP_REGNUM_MASK; /* No shift */ - token |= D3DSP_WRITEMASK_ALL; *has_components = FALSE; - return token; + return d3dsp_register( D3DSPR_RASTOUT, D3DSRO_FOG ) | D3DSP_WRITEMASK_ALL; } if(regnum == This->oPts_regnum && mask == This->oPts_mask) { - token |= (D3DSPR_RASTOUT << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= D3DSRO_POINT_SIZE & D3DSP_REGNUM_MASK; /* No shift */ - token |= D3DSP_WRITEMASK_ALL; *has_components = FALSE; - return token; + return d3dsp_register( D3DSPR_RASTOUT, D3DSRO_POINT_SIZE ) | D3DSP_WRITEMASK_ALL; } for(i = 0; i < 2; i++) { if(regnum == This->oD_regnum[i]) { - token |= (D3DSPR_ATTROUT << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= i & D3DSP_REGNUM_MASK; /* No shift */ - return token; + return d3dsp_register( D3DSPR_ATTROUT, i ); } } for(i = 0; i < 8; i++) { if(regnum == This->oT_regnum[i]) { - token |= (D3DSPR_TEXCRDOUT << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= i & D3DSP_REGNUM_MASK; /* No shift */ - return token; + return d3dsp_register( D3DSPR_TEXCRDOUT, i ); } } @@ -918,8 +909,7 @@ static void vs_12_dstreg(struct bc_writer *This, const struct shader_reg *reg, case BWRITERSPR_INPUT: case BWRITERSPR_TEMP: case BWRITERSPR_CONST: - token |= (reg->type << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= reg->regnum & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( reg->type, reg->regnum ); has_wmask = TRUE; break; @@ -929,8 +919,7 @@ static void vs_12_dstreg(struct bc_writer *This, const struct shader_reg *reg, This->state = E_INVALIDARG; return; } - token |= (D3DSPR_ADDR << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= 0 & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( D3DSPR_ADDR, 0 ); has_wmask = TRUE; break; @@ -945,9 +934,7 @@ static void vs_12_dstreg(struct bc_writer *This, const struct shader_reg *reg, This->state = E_INVALIDARG; return; } - token |= (D3DSPR_PREDICATE << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= (D3DSPR_PREDICATE << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2; - token |= 0 & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( D3DSPR_PREDICATE, 0 ); has_wmask = TRUE; break; @@ -1011,8 +998,7 @@ static void vs_1_x_srcreg(struct bc_writer *This, const struct shader_reg *reg, case BWRITERSPR_TEMP: case BWRITERSPR_CONST: case BWRITERSPR_ADDR: - token |= (reg->type << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= reg->regnum & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( reg->type, reg->regnum ); if(reg->rel_reg) { if(reg->rel_reg->type != BWRITERSPR_ADDR || reg->rel_reg->regnum != 0 || @@ -1049,48 +1035,37 @@ static void write_srcregs(struct bc_writer *This, const struct instruction *inst } static DWORD map_ps13_temp(struct bc_writer *This, const struct shader_reg *reg) { - DWORD token = 0; if(reg->regnum == T0_REG) { - token |= (D3DSPR_TEXTURE << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= 0 & D3DSP_REGNUM_MASK; /* No shift */ + return d3dsp_register( D3DSPR_TEXTURE, 0 ); } else if(reg->regnum == T1_REG) { - token |= (D3DSPR_TEXTURE << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= 1 & D3DSP_REGNUM_MASK; /* No shift */ + return d3dsp_register( D3DSPR_TEXTURE, 1 ); } else if(reg->regnum == T2_REG) { - token |= (D3DSPR_TEXTURE << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= 2 & D3DSP_REGNUM_MASK; /* No shift */ + return d3dsp_register( D3DSPR_TEXTURE, 2 ); } else if(reg->regnum == T3_REG) { - token |= (D3DSPR_TEXTURE << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= 3 & D3DSP_REGNUM_MASK; /* No shift */ + return d3dsp_register( D3DSPR_TEXTURE, 3 ); } else { - token |= (D3DSPR_TEMP << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= reg->regnum & D3DSP_REGNUM_MASK; /* No shift */ + return d3dsp_register( D3DSPR_TEMP, reg->regnum ); } - return token; } static DWORD map_ps_input(struct bc_writer *This, const struct shader_reg *reg) { - DWORD i, token = 0; + DWORD i; /* Map color interpolators */ for(i = 0; i < 2; i++) { if(reg->regnum == This->v_regnum[i]) { - token |= (D3DSPR_INPUT << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= i & D3DSP_REGNUM_MASK; /* No shift */ - return token; + return d3dsp_register( D3DSPR_INPUT, i ); } } for(i = 0; i < 8; i++) { if(reg->regnum == This->t_regnum[i]) { - token |= (D3DSPR_TEXTURE << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= i & D3DSP_REGNUM_MASK; /* No shift */ - return token; + return d3dsp_register( D3DSPR_TEXTURE, i ); } } WARN("Invalid ps 1/2 varying\n"); This->state = E_INVALIDARG; - return token; + return 0; } static void ps_1_0123_srcreg(struct bc_writer *This, const struct shader_reg *reg, @@ -1116,8 +1091,7 @@ static void ps_1_0123_srcreg(struct bc_writer *This, const struct shader_reg *re break; case BWRITERSPR_CONST: /* Can be mapped 1:1 */ - token |= (reg->type << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= reg->regnum & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( reg->type, reg->regnum ); break; default: @@ -1419,8 +1393,7 @@ static void ps_1_4_srcreg(struct bc_writer *This, const struct shader_reg *reg, /* Can be mapped 1:1 */ case BWRITERSPR_TEMP: case BWRITERSPR_CONST: - token |= (reg->type << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= reg->regnum & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( reg->type, reg->regnum ); break; default: @@ -1454,8 +1427,7 @@ static void ps_1_4_dstreg(struct bc_writer *This, const struct shader_reg *reg, switch(reg->type) { case BWRITERSPR_TEMP: /* 1:1 mapping */ - token |= (reg->type << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= reg->regnum & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( reg->type, reg->regnum ); break; /* For texkill */ @@ -1636,9 +1608,7 @@ static void vs_2_srcreg(struct bc_writer *This, case BWRITERSPR_CONSTBOOL: case BWRITERSPR_LABEL: d3d9reg = d3d9_register(reg->type); - token |= (d3d9reg << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= (d3d9reg << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2; - token |= reg->regnum & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( d3d9reg, reg->regnum ); break; case BWRITERSPR_LOOP: @@ -1647,9 +1617,7 @@ static void vs_2_srcreg(struct bc_writer *This, This->state = E_INVALIDARG; return; } - token |= (D3DSPR_LOOP << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= (D3DSPR_LOOP << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2; - token |= 0 & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( D3DSPR_LOOP, 0 ); break; case BWRITERSPR_PREDICATE: @@ -1663,10 +1631,7 @@ static void vs_2_srcreg(struct bc_writer *This, This->state = E_INVALIDARG; return; } - token |= (D3DSPR_PREDICATE << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= (D3DSPR_PREDICATE << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2; - token |= 0 & D3DSP_REGNUM_MASK; /* No shift */ - + token |= d3dsp_register( D3DSPR_PREDICATE, 0 ); break; default: @@ -1834,10 +1799,7 @@ static void write_samplers(const struct bwriter_shader *shader, struct bytecode_ DWORD i; DWORD instr_dcl = D3DSIO_DCL | (2 << D3DSI_INSTLENGTH_SHIFT); DWORD token; - const DWORD reg = (1<<31) | - ((D3DSPR_SAMPLER << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK) | - ((D3DSPR_SAMPLER << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2) | - D3DSP_WRITEMASK_ALL; + const DWORD reg = (1<<31) | d3dsp_register( D3DSPR_SAMPLER, 0 ) | D3DSP_WRITEMASK_ALL; for(i = 0; i < shader->num_samplers; i++) { /* Write the DCL instruction */ @@ -1892,9 +1854,7 @@ static void ps_2_srcreg(struct bc_writer *This, case BWRITERSPR_LABEL: case BWRITERSPR_DEPTHOUT: d3d9reg = d3d9_register(reg->type); - token |= (d3d9reg << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= (d3d9reg << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2; - token |= reg->regnum & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( d3d9reg, reg->regnum ); break; case BWRITERSPR_PREDICATE: @@ -1907,9 +1867,7 @@ static void ps_2_srcreg(struct bc_writer *This, reg->regnum); This->state = E_INVALIDARG; } - token |= (D3DSPR_PREDICATE << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= (D3DSPR_PREDICATE << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2; - token |= 0 & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( D3DSPR_PREDICATE, 0 ); break; default: @@ -1942,9 +1900,7 @@ static void ps_2_0_dstreg(struct bc_writer *This, case BWRITERSPR_COLOROUT: case BWRITERSPR_DEPTHOUT: d3d9reg = d3d9_register(reg->type); - token |= (d3d9reg << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= (d3d9reg << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2; - token |= reg->regnum & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( d3d9reg, reg->regnum ); break; case BWRITERSPR_PREDICATE: @@ -1952,9 +1908,7 @@ static void ps_2_0_dstreg(struct bc_writer *This, WARN("Predicate register not supported in ps_2_0\n"); This->state = E_INVALIDARG; } - token |= (D3DSPR_PREDICATE << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= (D3DSPR_PREDICATE << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2; - token |= reg->regnum & D3DSP_REGNUM_MASK; /* No shift */ + token |= d3dsp_register( D3DSPR_PREDICATE, reg->regnum ); break; /* texkill uses the input register as a destination parameter */ @@ -2109,10 +2063,7 @@ static void sm_3_srcreg(struct bc_writer *This, DWORD d3d9reg; d3d9reg = d3d9_register(reg->type); - token |= (d3d9reg << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= (d3d9reg << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2; - token |= reg->regnum & D3DSP_REGNUM_MASK; - + token |= d3dsp_register( d3d9reg, reg->regnum ); token |= d3d9_swizzle(reg->u.swizzle) & D3DVS_SWIZZLE_MASK; token |= d3d9_srcmod(reg->srcmod); @@ -2162,12 +2113,8 @@ static void sm_3_dstreg(struct bc_writer *This, } d3d9reg = d3d9_register(reg->type); - token |= (d3d9reg << D3DSP_REGTYPE_SHIFT) & D3DSP_REGTYPE_MASK; - token |= (d3d9reg << D3DSP_REGTYPE_SHIFT2) & D3DSP_REGTYPE_MASK2; - token |= reg->regnum & D3DSP_REGNUM_MASK; /* No shift */ - + token |= d3dsp_register( d3d9reg, reg->regnum ); token |= d3d9_dstmod(mod); - token |= d3d9_writemask(reg->u.writemask); put_dword(buffer, token); diff --git a/reactos/dll/directx/wine/d3dcompiler_43/d3dcompiler_private.h b/reactos/dll/directx/wine/d3dcompiler_43/d3dcompiler_private.h index 303b95e9137..b0c93895a62 100644 --- a/reactos/dll/directx/wine/d3dcompiler_43/d3dcompiler_private.h +++ b/reactos/dll/directx/wine/d3dcompiler_43/d3dcompiler_private.h @@ -750,12 +750,19 @@ struct hlsl_ir_node #define HLSL_MODIFIERS_COMPARISON_MASK (HLSL_MODIFIER_ROW_MAJOR | HLSL_MODIFIER_COLUMN_MAJOR) +struct reg_reservation +{ + enum bwritershader_param_register_type type; + DWORD regnum; +}; + struct hlsl_ir_var { struct hlsl_ir_node node; const char *name; const char *semantic; unsigned int modifiers; + const struct reg_reservation *reg_reservation; struct list scope_entry; struct hlsl_var_allocation *allocation; @@ -964,9 +971,16 @@ struct parse_parameter struct hlsl_type *type; const char *name; const char *semantic; + const struct reg_reservation *reg_reservation; unsigned int modifiers; }; +struct parse_colon_attribute +{ + const char *semantic; + struct reg_reservation *reg_reservation; +}; + struct parse_variable_def { struct list entry; @@ -974,7 +988,8 @@ struct parse_variable_def char *name; unsigned int array_size; - char *semantic; + const char *semantic; + struct reg_reservation *reg_reservation; struct list *initializer; }; diff --git a/reactos/dll/directx/wine/d3dcompiler_43/hlsl.tab.c b/reactos/dll/directx/wine/d3dcompiler_43/hlsl.tab.c index 1e857be6020..1252270035c 100644 --- a/reactos/dll/directx/wine/d3dcompiler_43/hlsl.tab.c +++ b/reactos/dll/directx/wine/d3dcompiler_43/hlsl.tab.c @@ -646,6 +646,7 @@ static struct list *declare_vars(struct hlsl_type *basic_type, DWORD modifiers, var->name = v->name; var->modifiers = modifiers; var->semantic = v->semantic; + var->reg_reservation = v->reg_reservation; debug_dump_decl(type, modifiers, v->name, v->loc.line); if (hlsl_ctx.cur_scope == hlsl_ctx.globals) @@ -871,6 +872,7 @@ static BOOL add_func_parameter(struct list *list, struct parse_parameter *param, decl->node.loc = *loc; decl->name = param->name; decl->semantic = param->semantic; + decl->reg_reservation = param->reg_reservation; decl->modifiers = param->modifiers; if (!add_declaration(hlsl_ctx.cur_scope, decl, FALSE)) @@ -882,6 +884,48 @@ static BOOL add_func_parameter(struct list *list, struct parse_parameter *param, return TRUE; } +static struct reg_reservation *parse_reg_reservation(const char *reg_string) +{ + struct reg_reservation *reg_res; + enum bwritershader_param_register_type type; + DWORD regnum = 0; + + switch (reg_string[0]) + { + case 'c': + type = BWRITERSPR_CONST; + break; + case 'i': + type = BWRITERSPR_CONSTINT; + break; + case 'b': + type = BWRITERSPR_CONSTBOOL; + break; + case 's': + type = BWRITERSPR_SAMPLER; + break; + default: + FIXME("Unsupported register type.\n"); + return NULL; + } + + if (!sscanf(reg_string + 1, "%u", ®num)) + { + FIXME("Unsupported register reservation syntax.\n"); + return NULL; + } + + reg_res = d3dcompiler_alloc(sizeof(*reg_res)); + if (!reg_res) + { + ERR("Out of memory.\n"); + return NULL; + } + reg_res->type = type; + reg_res->regnum = regnum; + return reg_res; +} + static const struct hlsl_ir_function_decl *get_overloaded_func(struct wine_rb_tree *funcs, char *name, struct list *params, BOOL exact_signature) { @@ -906,7 +950,7 @@ static const struct hlsl_ir_function_decl *get_overloaded_func(struct wine_rb_tr } -#line 915 "hlsl.tab.c" /* yacc.c:339 */ +#line 959 "hlsl.tab.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -1048,7 +1092,7 @@ extern int hlsl_debug; typedef union YYSTYPE YYSTYPE; union YYSTYPE { -#line 866 "hlsl.y" /* yacc.c:355 */ +#line 910 "hlsl.y" /* yacc.c:355 */ struct hlsl_type *type; INT intval; @@ -1065,8 +1109,10 @@ union YYSTYPE struct parse_if_body if_body; enum parse_unary_op unary_op; enum parse_assign_op assign_op; + struct reg_reservation *reg_reservation; + struct parse_colon_attribute colon_attribute; -#line 1075 "hlsl.tab.c" /* yacc.c:355 */ +#line 1121 "hlsl.tab.c" /* yacc.c:355 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -1095,7 +1141,7 @@ int hlsl_parse (void); /* Copy the second part of user declarations. */ -#line 1104 "hlsl.tab.c" /* yacc.c:358 */ +#line 1150 "hlsl.tab.c" /* yacc.c:358 */ #ifdef short # undef short @@ -1339,16 +1385,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 848 +#define YYLAST 821 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 129 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 63 +#define YYNNTS 65 /* YYNRULES -- Number of rules. */ -#define YYNRULES 171 +#define YYNRULES 175 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 312 +#define YYNSTATES 321 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ @@ -1404,24 +1450,24 @@ static const yytype_uint8 yytranslate[] = /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 1047, 1047, 1049, 1086, 1090, 1093, 1098, 1117, 1134, - 1135, 1137, 1163, 1173, 1174, 1175, 1178, 1182, 1201, 1205, - 1210, 1217, 1224, 1249, 1254, 1261, 1265, 1266, 1269, 1272, - 1277, 1282, 1287, 1301, 1315, 1325, 1328, 1339, 1343, 1347, - 1352, 1356, 1375, 1395, 1399, 1404, 1409, 1414, 1419, 1424, - 1432, 1450, 1451, 1452, 1463, 1471, 1480, 1486, 1492, 1500, - 1506, 1509, 1514, 1520, 1526, 1534, 1546, 1549, 1557, 1560, - 1564, 1568, 1572, 1576, 1580, 1584, 1588, 1592, 1596, 1600, - 1605, 1611, 1615, 1620, 1625, 1631, 1637, 1641, 1646, 1650, - 1657, 1658, 1659, 1660, 1661, 1662, 1665, 1688, 1712, 1717, - 1723, 1738, 1753, 1761, 1773, 1778, 1786, 1800, 1814, 1828, - 1839, 1844, 1858, 1862, 1881, 1900, 1954, 2014, 2050, 2054, - 2070, 2086, 2106, 2138, 2142, 2146, 2150, 2155, 2159, 2166, - 2173, 2181, 2185, 2192, 2200, 2204, 2208, 2213, 2217, 2224, - 2231, 2238, 2246, 2250, 2257, 2265, 2269, 2274, 2278, 2283, - 2287, 2292, 2296, 2301, 2305, 2310, 2314, 2319, 2323, 2340, - 2344, 2348, 2352, 2356, 2360, 2364, 2368, 2372, 2376, 2380, - 2385, 2389 + 0, 1095, 1095, 1097, 1134, 1138, 1141, 1146, 1168, 1185, + 1186, 1188, 1214, 1224, 1225, 1226, 1229, 1233, 1252, 1256, + 1261, 1268, 1275, 1305, 1310, 1317, 1321, 1322, 1325, 1329, + 1334, 1340, 1346, 1351, 1360, 1365, 1370, 1384, 1398, 1409, + 1412, 1423, 1427, 1431, 1436, 1440, 1459, 1479, 1483, 1488, + 1493, 1498, 1503, 1508, 1516, 1534, 1535, 1536, 1547, 1555, + 1564, 1570, 1576, 1584, 1590, 1593, 1598, 1604, 1610, 1619, + 1632, 1635, 1643, 1646, 1650, 1654, 1658, 1662, 1666, 1670, + 1674, 1678, 1682, 1686, 1691, 1697, 1701, 1706, 1711, 1717, + 1723, 1727, 1732, 1736, 1743, 1744, 1745, 1746, 1747, 1748, + 1751, 1774, 1798, 1803, 1809, 1824, 1839, 1847, 1859, 1864, + 1872, 1886, 1900, 1914, 1925, 1930, 1944, 1948, 1967, 1986, + 2040, 2100, 2136, 2140, 2156, 2172, 2192, 2224, 2228, 2232, + 2236, 2241, 2245, 2252, 2259, 2267, 2271, 2278, 2286, 2290, + 2294, 2299, 2303, 2310, 2317, 2324, 2332, 2336, 2343, 2351, + 2355, 2360, 2364, 2369, 2373, 2378, 2382, 2387, 2391, 2396, + 2400, 2405, 2409, 2426, 2430, 2434, 2438, 2442, 2446, 2450, + 2454, 2458, 2462, 2466, 2471, 2475 }; #endif @@ -1460,18 +1506,19 @@ static const char *const yytname[] = "struct_declaration", "struct_spec", "named_struct_spec", "unnamed_struct_spec", "any_identifier", "fields_list", "field", "func_declaration", "func_prototype", "compound_statement", - "scope_start", "var_identifier", "semantic", "parameters", "param_list", - "parameter", "input_mods", "input_mod", "type", "base_type", - "declaration_statement", "typedef", "type_specs", "type_spec", - "declaration", "variables_def_optional", "variables_def", "variable_def", - "array", "var_modifiers", "complex_initializer", "initializer_expr", - "initializer_expr_list", "boolean", "statement_list", "statement", - "jump_statement", "selection_statement", "if_body", "loop_statement", - "expr_statement", "primary_expr", "variable", "postfix_expr", - "unary_expr", "unary_op", "mul_expr", "add_expr", "shift_expr", - "relational_expr", "equality_expr", "bitand_expr", "bitxor_expr", - "bitor_expr", "logicand_expr", "logicor_expr", "conditional_expr", - "assignment_expr", "assign_op", "expr", YY_NULLPTR + "scope_start", "var_identifier", "colon_attribute", "semantic", + "register_opt", "parameters", "param_list", "parameter", "input_mods", + "input_mod", "type", "base_type", "declaration_statement", "typedef", + "type_specs", "type_spec", "declaration", "variables_def_optional", + "variables_def", "variable_def", "array", "var_modifiers", + "complex_initializer", "initializer_expr", "initializer_expr_list", + "boolean", "statement_list", "statement", "jump_statement", + "selection_statement", "if_body", "loop_statement", "expr_statement", + "primary_expr", "variable", "postfix_expr", "unary_expr", "unary_op", + "mul_expr", "add_expr", "shift_expr", "relational_expr", "equality_expr", + "bitand_expr", "bitxor_expr", "bitor_expr", "logicand_expr", + "logicor_expr", "conditional_expr", "assignment_expr", "assign_op", + "expr", YY_NULLPTR }; #endif @@ -1496,12 +1543,12 @@ static const yytype_uint16 yytoknum[] = }; # endif -#define YYPACT_NINF -231 +#define YYPACT_NINF -237 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-231))) + (!!((Yystate) == (-237))) -#define YYTABLE_NINF -31 +#define YYTABLE_NINF -35 #define yytable_value_is_error(Yytable_value) \ 0 @@ -1510,38 +1557,39 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - -231, 640, -231, 777, 777, 777, 777, 777, 777, 777, - 777, 777, 777, 777, 777, -69, -231, -231, -231, 32, - -231, -231, -231, 118, -231, -231, -231, 12, -231, -231, - -231, -231, -231, -231, -231, -231, -231, 32, 12, -231, - -231, -231, -231, -231, -231, -67, -41, -26, -231, -231, - 8, -231, -20, -231, -231, -231, -231, -231, -60, 14, - -231, -231, 72, -231, -67, -81, -231, 32, 579, -39, - -231, 32, -231, 320, 145, 28, -231, 34, 145, 15, - 35, 74, -15, -231, -231, 32, -10, -231, -231, 579, - 579, -231, -231, -231, 579, -231, -231, -231, -231, 37, - -231, -231, -231, -18, 182, 579, 52, 86, -19, -55, - -40, 66, 70, 90, 126, -44, -231, -231, 2, 32, - 127, -231, 320, 105, 124, 579, 135, -231, -231, -231, - 12, 212, -231, -231, -231, -231, -231, -7, 125, 137, - 684, -231, 141, -231, -231, -231, -231, -231, -231, 37, - 79, 147, -231, -231, 579, 32, -231, -231, -231, -231, - -231, -231, -231, -231, -231, -231, -231, 579, -231, 579, - 579, 579, 579, 579, 579, 579, 579, 579, 579, 579, - 579, 579, 579, 579, 579, 579, 579, 579, 579, -231, - -231, 399, 181, -231, 579, -5, 579, -65, -231, -231, - -231, -231, 154, -231, 32, -231, 139, 716, 158, 155, - 167, -48, -231, 579, 11, -231, -231, -231, -231, -231, - -231, 52, 52, 86, 86, -19, -19, -19, -19, -55, - -55, -40, 66, 70, 90, 126, 117, -231, 579, -231, - -231, -231, 174, 439, 83, -231, 88, 176, -2, 10, - 32, -231, 175, 178, -231, 745, -39, 183, -231, 99, - -231, 579, 17, 579, 439, 37, 439, 320, 320, 186, - -231, 9, -231, -231, -231, -231, -231, -231, 37, -231, - 579, -231, 579, -231, -231, 518, 103, 579, 579, 275, - -231, -231, 180, -231, -231, 32, -231, -231, -231, 189, - 107, 111, 320, -231, -39, -231, 320, 320, -231, -231, - -231, -231 + -237, 674, -237, 750, 750, 750, 750, 750, 750, 750, + 750, 750, 750, 750, 750, -50, -237, -237, -237, 100, + -237, -237, -237, -78, -237, -237, -237, 39, -237, -237, + -237, -237, -237, -237, -237, -237, -237, 100, 39, -237, + -237, -237, -237, -237, -237, -54, 0, -42, -237, -237, + 3, -237, -10, -237, -237, -237, -237, -237, 13, 6, + -237, -237, 121, -237, -54, -5, -237, 100, 613, 5, + -237, 100, -237, 354, 134, 18, -237, 30, 134, 36, + 70, 115, 15, -237, -237, 100, 17, -237, -237, 613, + 613, -237, -237, -237, 613, -237, -237, -237, -237, 258, + -237, -237, -237, -16, 138, 613, 116, -34, -37, -49, + -38, 64, 106, 67, 161, -55, -237, -237, -57, -3, + 130, -237, -237, -237, 354, 153, 168, 613, 174, -237, + -237, -237, 39, 246, -237, -237, -237, -237, -237, 20, + 156, 137, 23, -237, 158, -237, -237, -237, -237, -237, + -237, 258, 81, 177, -237, -237, 613, 100, -237, -237, + -237, -237, -237, -237, -237, -237, -237, -237, -237, 613, + -237, 613, 613, 613, 613, 613, 613, 613, 613, 613, + 613, 613, 613, 613, 613, 613, 613, 613, 613, 613, + 613, -237, 178, -237, 433, 215, -237, 613, 22, 613, + -63, -237, -237, -237, -237, 184, -237, 100, -237, 366, + 170, 185, 181, 183, -62, -237, 613, -8, -237, -237, + -237, -237, -237, -237, 116, 116, -34, -34, -37, -37, + -37, -37, -49, -49, -38, 64, 106, 67, 161, 60, + -237, 100, 613, -237, -237, -237, 187, 473, 86, -237, + 99, 182, 24, -44, 100, -237, 188, 191, -237, 721, + 5, 194, -237, 124, -237, 613, 136, -19, 613, 473, + 258, 473, 354, 354, 200, -237, 29, -237, -237, -237, + -237, -237, -237, 258, -237, 613, -237, 613, -237, -237, + 100, -237, 552, 140, 613, 613, 289, -237, -237, 193, + -237, -237, 100, -237, -237, 198, -237, 205, 148, 164, + 354, -237, 5, -237, -237, 354, 354, -237, -237, -237, + -237 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1549,62 +1597,63 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 2, 68, 1, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 0, 6, 5, 52, 60, - 9, 10, 3, 0, 4, 53, 51, 0, 79, 77, - 69, 73, 70, 71, 78, 72, 74, 0, 0, 75, - 76, 7, 13, 14, 15, 66, 0, 61, 62, 21, - 25, 20, 0, 44, 45, 46, 47, 48, 0, 0, - 43, 49, 0, 40, 66, 0, 56, 0, 68, 28, - 8, 0, 23, 68, 0, 50, 16, 0, 0, 13, - 15, 0, 0, 58, 55, 0, 0, 87, 86, 68, - 68, 111, 106, 107, 68, 123, 124, 125, 126, 0, - 108, 112, 109, 118, 127, 68, 131, 134, 137, 142, - 145, 147, 149, 151, 153, 155, 157, 170, 0, 0, - 64, 63, 68, 0, 0, 68, 0, 104, 92, 90, - 0, 68, 88, 93, 94, 95, 91, 0, 0, 0, - 68, 16, 0, 25, 59, 57, 54, 119, 120, 0, - 0, 0, 113, 114, 68, 0, 165, 166, 160, 161, - 162, 163, 164, 167, 168, 169, 159, 68, 121, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 68, - 68, 68, 68, 68, 68, 68, 68, 68, 68, 67, - 29, 68, 0, 25, 68, 0, 68, 0, 24, 89, - 105, 50, 0, 12, 0, 17, 0, 68, 0, 35, - 0, 66, 110, 68, 0, 115, 158, 128, 129, 130, - 127, 132, 133, 135, 136, 140, 141, 138, 139, 143, - 144, 146, 148, 150, 152, 154, 0, 171, 68, 65, - 80, 83, 0, 68, 0, 96, 0, 0, 0, 0, - 0, 11, 0, 31, 32, 68, 28, 0, 84, 0, - 116, 68, 0, 68, 68, 0, 68, 68, 68, 0, - 19, 0, 41, 35, 37, 39, 38, 36, 0, 22, - 68, 117, 68, 156, 81, 68, 0, 68, 68, 98, - 97, 100, 0, 18, 33, 0, 122, 85, 82, 0, - 0, 0, 68, 42, 28, 101, 68, 68, 99, 34, - 103, 102 + 2, 72, 1, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 0, 6, 5, 56, 64, + 9, 10, 3, 0, 4, 57, 55, 0, 83, 81, + 73, 77, 74, 75, 82, 76, 78, 0, 0, 79, + 80, 7, 13, 14, 15, 70, 0, 65, 66, 21, + 25, 20, 0, 48, 49, 50, 51, 52, 0, 0, + 47, 53, 0, 44, 70, 0, 60, 0, 72, 28, + 8, 0, 23, 72, 0, 54, 16, 0, 0, 13, + 15, 0, 0, 62, 59, 0, 0, 91, 90, 72, + 72, 115, 110, 111, 72, 127, 128, 129, 130, 0, + 112, 116, 113, 122, 131, 72, 135, 138, 141, 146, + 149, 151, 153, 155, 157, 159, 161, 174, 0, 0, + 68, 29, 30, 67, 72, 0, 0, 72, 0, 108, + 96, 94, 0, 72, 92, 97, 98, 99, 95, 0, + 0, 0, 72, 16, 0, 25, 63, 61, 58, 123, + 124, 0, 0, 0, 117, 118, 72, 0, 169, 170, + 164, 165, 166, 167, 168, 171, 172, 173, 163, 72, + 125, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 71, 0, 31, 72, 0, 25, 72, 0, 72, + 0, 24, 93, 109, 54, 0, 12, 0, 17, 0, + 72, 0, 39, 0, 70, 114, 72, 0, 119, 162, + 132, 133, 134, 131, 136, 137, 139, 140, 144, 145, + 142, 143, 147, 148, 150, 152, 154, 156, 158, 0, + 175, 0, 72, 69, 84, 87, 0, 72, 0, 100, + 0, 0, 0, 0, 0, 11, 0, 35, 36, 72, + 28, 0, 88, 0, 120, 72, 0, 0, 72, 72, + 0, 72, 72, 72, 0, 19, 0, 45, 39, 41, + 43, 42, 40, 0, 22, 72, 121, 72, 160, 32, + 0, 85, 72, 0, 72, 72, 102, 101, 104, 0, + 18, 37, 0, 126, 89, 0, 86, 0, 0, 0, + 72, 46, 28, 33, 105, 72, 72, 103, 38, 107, + 106 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -231, -231, -231, -231, 283, -231, -119, -36, 156, -231, - -231, -231, 276, -123, -231, -230, -231, -231, 25, -231, - -231, -13, 51, 299, -231, 235, 218, 61, -231, -4, - 236, -45, -1, -231, -174, 71, -231, -231, -104, -231, - -231, -231, -231, -175, -231, -231, -231, -24, -231, 65, - 76, -9, 100, 128, 129, 130, 123, 136, -231, -231, - -144, -231, -52 + -237, -237, -237, -237, 304, -237, -123, -36, 179, -237, + -237, -237, 298, -122, -237, -236, -237, -237, -237, -237, + 45, -237, -237, -13, 68, 323, -237, 260, 240, 82, + -237, -4, 259, -47, -1, -237, -176, 89, -237, -237, + -104, -237, -237, -237, -237, -221, -237, -237, -237, -23, + -237, 11, 37, 2, 97, 149, 147, 150, 151, 146, + -237, -237, -99, -237, -52 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 17, 18, 19, 20, 21, 45, 140, 205, - 22, 23, 128, 73, 81, 120, 210, 253, 254, 255, - 277, 197, 63, 129, 25, 65, 66, 26, 46, 82, - 48, 69, 99, 239, 258, 259, 100, 131, 132, 133, - 134, 290, 135, 136, 101, 102, 103, 104, 105, 106, - 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, - 117, 167, 137 + -1, 1, 17, 18, 19, 20, 21, 45, 142, 208, + 22, 23, 130, 73, 81, 120, 121, 122, 213, 257, + 258, 259, 282, 200, 63, 131, 25, 65, 66, 26, + 46, 82, 48, 69, 99, 243, 262, 263, 100, 133, + 134, 135, 136, 297, 137, 138, 101, 102, 103, 104, + 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, + 115, 116, 117, 169, 139 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1613,179 +1662,175 @@ static const yytype_int16 yydefgoto[] = static const yytype_int16 yytable[] = { 27, 64, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 38, 39, 40, 62, 47, 118, 240, 192, 83, - 209, 204, 77, 216, 84, 67, 279, 199, 176, 177, - 85, 64, 186, 41, 42, 43, 44, 180, 52, 42, - 75, 44, 150, 213, 237, 181, 76, 241, 68, 64, - 53, 54, 55, 56, 57, 152, 153, 178, 179, 174, - 213, 175, 58, 52, 70, 147, 148, 68, 266, 241, - 243, 119, 130, 195, 309, 53, 54, 55, 56, 57, - 59, 168, 60, 190, 187, 71, 151, 138, 204, 287, - 144, 288, 74, 149, 241, 146, 71, 154, 200, 155, - 245, 85, 214, 270, 188, 59, 188, 60, 297, 71, - 201, 297, 61, 188, 293, 72, 76, 283, 189, 215, - 71, 130, 188, -26, 284, 139, 78, 260, 285, 142, - 130, 42, 43, 44, -14, 236, 211, 61, 241, 206, - 141, 241, 244, -27, 246, 217, 218, 219, 220, 220, - 220, 220, 220, 220, 220, 220, 220, 220, 220, 220, - 220, 220, 220, 289, 291, 52, 257, 225, 226, 227, - 228, 79, 43, 80, 169, 170, 171, 53, 54, 55, - 56, 57, 143, 53, 54, 55, 56, 57, 212, 249, - 188, 182, 267, 250, 188, 138, 183, 268, 308, 188, - 248, 185, 310, 311, 172, 173, 206, 59, 281, 60, - 282, 286, 299, 193, 188, 60, 306, 184, 188, 3, - 307, 4, 188, 49, 50, 201, 122, 261, 188, 5, - 87, 123, 194, 6, 124, 300, 301, 221, 222, 61, - 7, 191, 265, 196, 8, 61, 271, 125, 202, 9, - 223, 224, 208, 242, 278, 213, 296, 10, 247, 304, - 11, 156, 252, 157, -30, 295, 130, 130, 158, 159, - 160, 161, 162, 163, 164, 165, 256, 88, 12, 13, - 229, 230, 263, 14, 126, 89, 90, 269, 272, 273, - 292, 302, 280, 303, 305, 37, 166, 207, 294, 51, - 24, 130, 86, 145, 264, 130, 130, 121, 234, 262, - 231, 91, 232, 0, 233, 92, 93, 127, 50, 198, - 94, 0, 235, 0, 0, 0, 0, 3, 0, 4, - 95, 96, 97, 98, 122, 0, 0, 5, 87, 123, - 0, 6, 124, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 8, 0, 0, 125, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 10, 0, 0, 11, 0, + 36, 38, 39, 40, 62, 47, 118, 83, 244, 207, + 195, 188, 77, 212, 284, 67, 271, 49, 50, 202, + 3, 64, 4, 192, 178, 179, 42, 43, 44, 182, + 5, 176, 152, 177, 6, 216, 216, 183, 294, 64, + 295, 7, 41, 68, 190, 8, 204, 154, 155, 191, + 9, 68, 76, 180, 181, 52, 149, 150, 10, 71, + 219, 11, 132, 189, 247, 198, 318, 53, 54, 55, + 56, 57, 170, 193, 174, 175, 153, 207, 291, 58, + 13, 240, 292, 151, 14, 245, 42, 43, 44, 156, + 84, 157, 74, 190, 217, 70, 85, 59, 264, 60, + 72, 304, 42, 75, 44, 119, 304, 245, 78, 76, + 146, 218, 148, 132, -14, 203, 71, 249, 85, 275, + 206, 190, 132, 190, 300, 71, 143, 239, 214, 61, + 71, 209, 141, 245, -26, 248, 144, 250, 220, 221, + 222, 223, 223, 223, 223, 223, 223, 223, 223, 223, + 223, 223, 223, 223, 223, 223, 288, 261, 296, 298, + 265, 190, 53, 54, 55, 56, 57, 3, -27, 4, + 228, 229, 230, 231, 140, 224, 225, 5, 245, 184, + 215, 6, 190, 245, 186, 272, 254, 190, 7, 42, + 43, 44, 8, 252, 60, 266, 317, 9, 273, 209, + 190, 319, 320, 226, 227, 10, 293, 158, 11, 159, + 79, 43, 80, 145, 160, 161, 162, 163, 164, 165, + 166, 167, 185, 286, 61, 287, 187, 13, 171, 172, + 173, 14, 308, 309, 194, 289, 270, 290, 205, 307, + 276, 190, 168, 3, 305, 4, 204, 315, 283, 190, + 124, 196, 303, 5, 87, 125, 312, 6, 126, 211, + 302, 132, 132, 316, 7, 190, 197, 255, 8, 232, + 233, 127, 199, 9, 52, 216, 241, 246, 251, 256, + -34, 10, 260, 274, 11, 268, 53, 54, 55, 56, + 57, 277, 278, 285, 299, 310, 311, 313, 140, 132, + 314, 88, 12, 13, 132, 132, 37, 14, 128, 89, + 90, 51, 210, 301, 24, 147, 59, 86, 60, 269, + 123, 267, 235, 234, 238, 0, 236, 0, 237, 0, + 0, 0, 0, 0, 0, 91, 0, 0, 0, 92, + 93, 129, 50, 201, 94, 0, 0, 0, 61, 0, + 0, 3, 0, 4, 95, 96, 97, 98, 124, 0, + 0, 5, 87, 125, 0, 6, 126, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 8, 0, 0, 127, + 0, 9, 52, 0, 0, 0, 0, 0, 0, 10, + 0, 0, 11, 0, 53, 54, 55, 56, 57, 0, + 0, 0, 0, 0, 0, 0, 253, 0, 0, 88, + 12, 13, 0, 0, 0, 14, 128, 89, 90, 0, + 0, 0, 0, 0, 59, 0, 60, 0, 0, 0, + 3, 0, 4, 0, 0, 0, 0, 0, 0, 0, + 5, 87, 0, 91, 6, 0, 0, 92, 93, 129, + 50, 7, 94, 0, 0, 8, 61, 0, 0, 0, + 9, 0, 95, 96, 97, 98, 0, 0, 10, 0, + 3, 11, 4, 0, 0, 0, 0, 0, 0, 0, + 5, 87, 0, 0, 6, 0, 0, 0, 88, 0, + 13, 7, 0, 0, 14, 8, 89, 90, 0, 0, + 9, 0, 0, 0, 0, 0, 0, 0, 10, 0, + 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 91, 0, 0, 0, 92, 93, 88, 242, + 13, 94, 0, 0, 14, 0, 89, 90, 0, 0, + 0, 95, 96, 97, 98, 0, 0, 0, 0, 3, + 0, 4, 0, 0, 0, 0, 0, 0, 0, 5, + 87, 0, 91, 6, 0, 0, 92, 93, 129, 0, + 7, 94, 0, 0, 8, 0, 0, 0, 0, 9, + 0, 95, 96, 97, 98, 0, 0, 10, 0, 0, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 88, 0, 13, + 3, 0, 4, 14, 0, 89, 90, 0, 0, 0, + 5, 87, 0, 0, 6, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 8, 0, 0, 0, 0, + 9, 91, 0, 0, 0, 92, 93, 0, 10, 306, + 94, 11, 0, 0, 0, 0, 0, 0, 0, 0, + 95, 96, 97, 98, 2, 0, 0, 0, 88, 0, + 13, 3, 0, 4, 14, 0, 89, 90, 0, 0, + 0, 5, 0, 0, 0, 6, 0, 0, 0, 0, + 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, + 0, 9, 91, 0, 0, 0, 92, 93, 0, 10, + 0, 94, 11, 0, 0, 0, 0, 0, 3, 0, + 4, 95, 96, 97, 98, 0, 0, 0, 5, 0, + 12, 13, 6, 0, 279, 14, 280, 0, 0, 7, + 281, 0, 0, 8, 0, 0, 0, 3, 9, 4, + 0, 0, 0, 0, 0, 0, 10, 5, 0, 11, + 0, 6, 15, 0, 0, 0, 0, 0, 7, 16, + 0, 0, 8, 0, 0, 0, 0, 9, 13, 0, + 0, 0, 14, 0, 0, 10, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 88, 12, 13, 0, 0, - 0, 14, 126, 89, 90, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 3, 0, 4, 0, - 0, 0, 0, 0, 0, 0, 5, 87, 0, 91, - 6, 0, 0, 92, 93, 127, 50, 7, 94, 0, - 0, 8, 0, 0, 0, 0, 9, 0, 95, 96, - 97, 98, 0, 0, 10, 0, 3, 11, 4, 0, - 0, 0, 0, 0, 0, 0, 5, 87, 0, 0, - 6, 0, 0, 0, 88, 0, 13, 7, 0, 0, - 14, 8, 89, 90, 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 10, 0, 0, 11, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 91, 0, - 0, 0, 92, 93, 88, 238, 13, 94, 0, 0, - 14, 0, 89, 90, 0, 0, 0, 95, 96, 97, - 98, 0, 0, 0, 0, 3, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 5, 87, 0, 91, 6, - 0, 0, 92, 93, 127, 0, 7, 94, 0, 0, - 8, 0, 0, 0, 0, 9, 0, 95, 96, 97, - 98, 0, 0, 10, 0, 0, 11, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 88, 0, 13, 3, 0, 4, 14, - 0, 89, 90, 0, 0, 0, 5, 87, 0, 0, - 6, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 8, 0, 0, 0, 0, 9, 91, 0, 0, - 0, 92, 93, 0, 10, 298, 94, 11, 0, 0, - 0, 0, 0, 0, 0, 0, 95, 96, 97, 98, - 2, 0, 0, 0, 88, 0, 13, 3, 0, 4, - 14, 0, 89, 90, 0, 0, 0, 5, 0, 0, - 0, 6, 0, 0, 0, 0, 0, 0, 7, 0, - 0, 0, 8, 0, 0, 0, 0, 9, 91, 0, - 0, 0, 92, 93, 0, 10, 0, 94, 11, 0, - 0, 3, 0, 4, 0, 0, 0, 95, 96, 97, - 98, 5, 0, 0, 0, 6, 12, 13, 0, 0, - 0, 14, 7, 0, 0, 0, 8, 0, 0, 0, - 0, 9, 0, 3, 0, 4, 0, 0, 0, 10, - 0, 0, 11, 5, 0, 0, 0, 6, 15, 0, - 0, 0, 0, 0, 7, 16, 0, 0, 8, 0, - 0, 13, 3, 9, 4, 14, 0, 0, 0, 0, - 0, 10, 5, 0, 11, 0, 6, 0, 274, 0, - 275, 0, 0, 7, 276, 0, 0, 8, 0, 0, - 0, 0, 9, 13, 3, 0, 4, 14, 0, 0, - 10, 203, 0, 11, 5, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 7, 0, 0, 0, 8, - 0, 0, 13, 0, 9, 0, 14, 0, 0, 0, - 0, 0, 10, 251, 0, 11, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, 0, 0, 14 + 0, 0, 0, 0, 0, 0, 0, 13, 0, 0, + 0, 14 }; static const yytype_int16 yycheck[] = { 1, 37, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 27, 19, 68, 191, 122, 64, - 143, 140, 58, 167, 105, 38, 256, 131, 83, 84, - 111, 67, 76, 102, 99, 100, 101, 77, 26, 99, - 100, 101, 94, 108, 188, 85, 106, 191, 115, 85, - 38, 39, 40, 41, 42, 73, 74, 112, 113, 78, - 108, 80, 50, 26, 105, 89, 90, 115, 243, 213, - 193, 110, 73, 125, 304, 38, 39, 40, 41, 42, - 68, 105, 70, 119, 128, 111, 99, 50, 207, 264, - 105, 266, 112, 94, 238, 105, 111, 115, 105, 117, - 105, 111, 154, 105, 111, 68, 111, 70, 282, 111, - 100, 285, 100, 111, 105, 107, 106, 261, 116, 155, - 111, 122, 111, 108, 107, 74, 112, 116, 111, 78, - 131, 99, 100, 101, 106, 187, 149, 100, 282, 140, - 106, 285, 194, 108, 196, 169, 170, 171, 172, 173, - 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, - 184, 185, 186, 267, 268, 26, 211, 176, 177, 178, - 179, 99, 100, 101, 122, 123, 124, 38, 39, 40, - 41, 42, 108, 38, 39, 40, 41, 42, 109, 50, - 111, 125, 109, 206, 111, 50, 126, 109, 302, 111, - 204, 75, 306, 307, 118, 119, 207, 68, 109, 70, - 111, 263, 109, 108, 111, 70, 109, 127, 111, 7, - 109, 9, 111, 105, 106, 100, 14, 110, 111, 17, - 18, 19, 108, 21, 22, 287, 288, 172, 173, 100, - 28, 114, 243, 108, 32, 100, 250, 35, 111, 37, - 174, 175, 111, 72, 255, 108, 280, 45, 104, 295, - 48, 79, 104, 81, 109, 278, 267, 268, 86, 87, - 88, 89, 90, 91, 92, 93, 109, 65, 66, 67, - 180, 181, 108, 71, 72, 73, 74, 111, 113, 111, - 104, 16, 109, 113, 105, 12, 114, 141, 273, 23, - 1, 302, 67, 85, 243, 306, 307, 71, 185, 238, - 182, 99, 183, -1, 184, 103, 104, 105, 106, 107, - 108, -1, 186, -1, -1, -1, -1, 7, -1, 9, - 118, 119, 120, 121, 14, -1, -1, 17, 18, 19, - -1, 21, 22, -1, -1, -1, -1, -1, 28, -1, - -1, -1, 32, -1, -1, 35, -1, 37, -1, -1, - -1, -1, -1, -1, -1, 45, -1, -1, 48, -1, + 11, 12, 13, 14, 27, 19, 68, 64, 194, 142, + 124, 76, 58, 145, 260, 38, 247, 105, 106, 133, + 7, 67, 9, 36, 83, 84, 99, 100, 101, 77, + 17, 78, 94, 80, 21, 108, 108, 85, 269, 85, + 271, 28, 102, 115, 111, 32, 100, 73, 74, 116, + 37, 115, 106, 112, 113, 26, 89, 90, 45, 111, + 169, 48, 73, 128, 196, 127, 312, 38, 39, 40, + 41, 42, 105, 119, 118, 119, 99, 210, 107, 50, + 67, 190, 111, 94, 71, 194, 99, 100, 101, 115, + 105, 117, 112, 111, 156, 105, 111, 68, 116, 70, + 107, 287, 99, 100, 101, 110, 292, 216, 112, 106, + 105, 157, 105, 124, 106, 105, 111, 105, 111, 105, + 107, 111, 133, 111, 105, 111, 106, 189, 151, 100, + 111, 142, 74, 242, 108, 197, 78, 199, 171, 172, + 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, + 183, 184, 185, 186, 187, 188, 265, 214, 272, 273, + 110, 111, 38, 39, 40, 41, 42, 7, 108, 9, + 178, 179, 180, 181, 50, 174, 175, 17, 287, 125, + 109, 21, 111, 292, 127, 109, 209, 111, 28, 99, + 100, 101, 32, 207, 70, 241, 310, 37, 109, 210, + 111, 315, 316, 176, 177, 45, 268, 79, 48, 81, + 99, 100, 101, 108, 86, 87, 88, 89, 90, 91, + 92, 93, 126, 109, 100, 111, 75, 67, 122, 123, + 124, 71, 294, 295, 114, 109, 247, 111, 111, 109, + 254, 111, 114, 7, 290, 9, 100, 109, 259, 111, + 14, 108, 285, 17, 18, 19, 302, 21, 22, 111, + 283, 272, 273, 109, 28, 111, 108, 107, 32, 182, + 183, 35, 108, 37, 26, 108, 108, 72, 104, 104, + 109, 45, 109, 111, 48, 108, 38, 39, 40, 41, + 42, 113, 111, 109, 104, 16, 113, 109, 50, 310, + 105, 65, 66, 67, 315, 316, 12, 71, 72, 73, + 74, 23, 143, 278, 1, 85, 68, 67, 70, 247, + 71, 242, 185, 184, 188, -1, 186, -1, 187, -1, + -1, -1, -1, -1, -1, 99, -1, -1, -1, 103, + 104, 105, 106, 107, 108, -1, -1, -1, 100, -1, + -1, 7, -1, 9, 118, 119, 120, 121, 14, -1, + -1, 17, 18, 19, -1, 21, 22, -1, -1, -1, + -1, -1, 28, -1, -1, -1, 32, -1, -1, 35, + -1, 37, 26, -1, -1, -1, -1, -1, -1, 45, + -1, -1, 48, -1, 38, 39, 40, 41, 42, -1, + -1, -1, -1, -1, -1, -1, 50, -1, -1, 65, + 66, 67, -1, -1, -1, 71, 72, 73, 74, -1, + -1, -1, -1, -1, 68, -1, 70, -1, -1, -1, + 7, -1, 9, -1, -1, -1, -1, -1, -1, -1, + 17, 18, -1, 99, 21, -1, -1, 103, 104, 105, + 106, 28, 108, -1, -1, 32, 100, -1, -1, -1, + 37, -1, 118, 119, 120, 121, -1, -1, 45, -1, + 7, 48, 9, -1, -1, -1, -1, -1, -1, -1, + 17, 18, -1, -1, 21, -1, -1, -1, 65, -1, + 67, 28, -1, -1, 71, 32, 73, 74, -1, -1, + 37, -1, -1, -1, -1, -1, -1, -1, 45, -1, + -1, 48, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 99, -1, -1, -1, 103, 104, 65, 106, + 67, 108, -1, -1, 71, -1, 73, 74, -1, -1, + -1, 118, 119, 120, 121, -1, -1, -1, -1, 7, + -1, 9, -1, -1, -1, -1, -1, -1, -1, 17, + 18, -1, 99, 21, -1, -1, 103, 104, 105, -1, + 28, 108, -1, -1, 32, -1, -1, -1, -1, 37, + -1, 118, 119, 120, 121, -1, -1, 45, -1, -1, + 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 65, -1, 67, + 7, -1, 9, 71, -1, 73, 74, -1, -1, -1, + 17, 18, -1, -1, 21, -1, -1, -1, -1, -1, + -1, 28, -1, -1, -1, 32, -1, -1, -1, -1, + 37, 99, -1, -1, -1, 103, 104, -1, 45, 107, + 108, 48, -1, -1, -1, -1, -1, -1, -1, -1, + 118, 119, 120, 121, 0, -1, -1, -1, 65, -1, + 67, 7, -1, 9, 71, -1, 73, 74, -1, -1, + -1, 17, -1, -1, -1, 21, -1, -1, -1, -1, + -1, -1, 28, -1, -1, -1, 32, -1, -1, -1, + -1, 37, 99, -1, -1, -1, 103, 104, -1, 45, + -1, 108, 48, -1, -1, -1, -1, -1, 7, -1, + 9, 118, 119, 120, 121, -1, -1, -1, 17, -1, + 66, 67, 21, -1, 23, 71, 25, -1, -1, 28, + 29, -1, -1, 32, -1, -1, -1, 7, 37, 9, + -1, -1, -1, -1, -1, -1, 45, 17, -1, 48, + -1, 21, 98, -1, -1, -1, -1, -1, 28, 105, + -1, -1, 32, -1, -1, -1, -1, 37, 67, -1, + -1, -1, 71, -1, -1, 45, -1, -1, 48, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 65, 66, 67, -1, -1, - -1, 71, 72, 73, 74, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 7, -1, 9, -1, - -1, -1, -1, -1, -1, -1, 17, 18, -1, 99, - 21, -1, -1, 103, 104, 105, 106, 28, 108, -1, - -1, 32, -1, -1, -1, -1, 37, -1, 118, 119, - 120, 121, -1, -1, 45, -1, 7, 48, 9, -1, - -1, -1, -1, -1, -1, -1, 17, 18, -1, -1, - 21, -1, -1, -1, 65, -1, 67, 28, -1, -1, - 71, 32, 73, 74, -1, -1, 37, -1, -1, -1, - -1, -1, -1, -1, 45, -1, -1, 48, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 99, -1, - -1, -1, 103, 104, 65, 106, 67, 108, -1, -1, - 71, -1, 73, 74, -1, -1, -1, 118, 119, 120, - 121, -1, -1, -1, -1, 7, -1, 9, -1, -1, - -1, -1, -1, -1, -1, 17, 18, -1, 99, 21, - -1, -1, 103, 104, 105, -1, 28, 108, -1, -1, - 32, -1, -1, -1, -1, 37, -1, 118, 119, 120, - 121, -1, -1, 45, -1, -1, 48, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 65, -1, 67, 7, -1, 9, 71, - -1, 73, 74, -1, -1, -1, 17, 18, -1, -1, - 21, -1, -1, -1, -1, -1, -1, 28, -1, -1, - -1, 32, -1, -1, -1, -1, 37, 99, -1, -1, - -1, 103, 104, -1, 45, 107, 108, 48, -1, -1, - -1, -1, -1, -1, -1, -1, 118, 119, 120, 121, - 0, -1, -1, -1, 65, -1, 67, 7, -1, 9, - 71, -1, 73, 74, -1, -1, -1, 17, -1, -1, - -1, 21, -1, -1, -1, -1, -1, -1, 28, -1, - -1, -1, 32, -1, -1, -1, -1, 37, 99, -1, - -1, -1, 103, 104, -1, 45, -1, 108, 48, -1, - -1, 7, -1, 9, -1, -1, -1, 118, 119, 120, - 121, 17, -1, -1, -1, 21, 66, 67, -1, -1, - -1, 71, 28, -1, -1, -1, 32, -1, -1, -1, - -1, 37, -1, 7, -1, 9, -1, -1, -1, 45, - -1, -1, 48, 17, -1, -1, -1, 21, 98, -1, - -1, -1, -1, -1, 28, 105, -1, -1, 32, -1, - -1, 67, 7, 37, 9, 71, -1, -1, -1, -1, - -1, 45, 17, -1, 48, -1, 21, -1, 23, -1, - 25, -1, -1, 28, 29, -1, -1, 32, -1, -1, - -1, -1, 37, 67, 7, -1, 9, 71, -1, -1, - 45, 107, -1, 48, 17, -1, -1, -1, 21, -1, - -1, -1, -1, -1, -1, 28, -1, -1, -1, 32, - -1, -1, 67, -1, 37, -1, 71, -1, -1, -1, - -1, -1, 45, 107, -1, 48, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 67, -1, -1, -1, 71 + -1, -1, -1, -1, -1, -1, -1, 67, -1, -1, + -1, 71 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -1794,36 +1839,37 @@ static const yytype_uint8 yystos[] = { 0, 130, 0, 7, 9, 17, 21, 28, 32, 37, 45, 48, 66, 67, 71, 98, 105, 131, 132, 133, - 134, 135, 139, 140, 152, 153, 156, 161, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 133, 161, 161, - 161, 102, 99, 100, 101, 136, 157, 158, 159, 105, + 134, 135, 139, 140, 154, 155, 158, 163, 163, 163, + 163, 163, 163, 163, 163, 163, 163, 133, 163, 163, + 163, 102, 99, 100, 101, 136, 159, 160, 161, 105, 106, 141, 26, 38, 39, 40, 41, 42, 50, 68, - 70, 100, 150, 151, 136, 154, 155, 150, 115, 160, + 70, 100, 152, 153, 136, 156, 157, 152, 115, 162, 105, 111, 107, 142, 112, 100, 106, 136, 112, 99, - 101, 143, 158, 160, 105, 111, 154, 18, 65, 73, - 74, 99, 103, 104, 108, 118, 119, 120, 121, 161, - 165, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 191, 110, - 144, 159, 14, 19, 22, 35, 72, 105, 141, 152, - 161, 166, 167, 168, 169, 171, 172, 191, 50, 151, - 137, 106, 151, 108, 105, 155, 105, 176, 176, 161, - 191, 150, 73, 74, 115, 117, 79, 81, 86, 87, - 88, 89, 90, 91, 92, 93, 114, 190, 176, 122, - 123, 124, 118, 119, 78, 80, 83, 84, 112, 113, - 77, 85, 125, 126, 127, 75, 76, 128, 111, 116, - 136, 114, 167, 108, 108, 191, 108, 150, 107, 167, - 105, 100, 111, 107, 135, 138, 161, 137, 111, 142, - 145, 150, 109, 108, 191, 136, 189, 176, 176, 176, - 176, 178, 178, 179, 179, 180, 180, 180, 180, 181, - 181, 182, 183, 184, 185, 186, 191, 189, 106, 162, - 163, 189, 72, 142, 191, 105, 191, 104, 158, 50, - 150, 107, 104, 146, 147, 148, 109, 160, 163, 164, - 116, 110, 164, 108, 156, 161, 172, 109, 109, 111, - 105, 158, 113, 111, 23, 25, 29, 149, 161, 144, - 109, 109, 111, 189, 107, 111, 191, 172, 172, 167, - 170, 167, 104, 105, 147, 150, 176, 163, 107, 109, - 191, 191, 16, 113, 136, 105, 109, 109, 167, 144, - 167, 167 + 101, 143, 160, 162, 105, 111, 156, 18, 65, 73, + 74, 99, 103, 104, 108, 118, 119, 120, 121, 163, + 167, 175, 176, 177, 178, 179, 180, 181, 182, 183, + 184, 185, 186, 187, 188, 189, 190, 191, 193, 110, + 144, 145, 146, 161, 14, 19, 22, 35, 72, 105, + 141, 154, 163, 168, 169, 170, 171, 173, 174, 193, + 50, 153, 137, 106, 153, 108, 105, 157, 105, 178, + 178, 163, 193, 152, 73, 74, 115, 117, 79, 81, + 86, 87, 88, 89, 90, 91, 92, 93, 114, 192, + 178, 122, 123, 124, 118, 119, 78, 80, 83, 84, + 112, 113, 77, 85, 125, 126, 127, 75, 76, 128, + 111, 116, 36, 136, 114, 169, 108, 108, 193, 108, + 152, 107, 169, 105, 100, 111, 107, 135, 138, 163, + 137, 111, 142, 147, 152, 109, 108, 193, 136, 191, + 178, 178, 178, 178, 180, 180, 181, 181, 182, 182, + 182, 182, 183, 183, 184, 185, 186, 187, 188, 193, + 191, 108, 106, 164, 165, 191, 72, 142, 193, 105, + 193, 104, 160, 50, 152, 107, 104, 148, 149, 150, + 109, 162, 165, 166, 116, 110, 136, 166, 108, 158, + 163, 174, 109, 109, 111, 105, 160, 113, 111, 23, + 25, 29, 151, 163, 144, 109, 109, 111, 191, 109, + 111, 107, 111, 193, 174, 174, 169, 172, 169, 104, + 105, 149, 152, 178, 165, 136, 107, 109, 193, 193, + 16, 113, 136, 109, 105, 109, 109, 169, 144, 169, + 169 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -1832,21 +1878,21 @@ static const yytype_uint8 yyr1[] = 0, 129, 130, 130, 130, 130, 130, 131, 132, 133, 133, 134, 135, 136, 136, 136, 137, 137, 138, 138, 139, 139, 140, 141, 141, 142, 143, 143, 144, 144, - 145, 145, 146, 146, 147, 148, 148, 149, 149, 149, - 150, 150, 150, 151, 151, 151, 151, 151, 151, 151, - 151, 152, 152, 152, 153, 153, 154, 154, 155, 156, - 157, 157, 158, 158, 159, 159, 160, 160, 161, 161, - 161, 161, 161, 161, 161, 161, 161, 161, 161, 161, - 162, 162, 162, 163, 164, 164, 165, 165, 166, 166, - 167, 167, 167, 167, 167, 167, 168, 169, 170, 170, - 171, 171, 171, 171, 172, 172, 173, 173, 173, 173, - 173, 174, 175, 175, 175, 175, 175, 175, 176, 176, - 176, 176, 176, 177, 177, 177, 177, 178, 178, 178, - 178, 179, 179, 179, 180, 180, 180, 181, 181, 181, - 181, 181, 182, 182, 182, 183, 183, 184, 184, 185, + 144, 145, 146, 146, 147, 147, 148, 148, 149, 150, + 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, + 153, 153, 153, 153, 153, 154, 154, 154, 155, 155, + 156, 156, 157, 158, 159, 159, 160, 160, 161, 161, + 162, 162, 163, 163, 163, 163, 163, 163, 163, 163, + 163, 163, 163, 163, 164, 164, 164, 165, 166, 166, + 167, 167, 168, 168, 169, 169, 169, 169, 169, 169, + 170, 171, 172, 172, 173, 173, 173, 173, 174, 174, + 175, 175, 175, 175, 175, 176, 177, 177, 177, 177, + 177, 177, 178, 178, 178, 178, 178, 179, 179, 179, + 179, 180, 180, 180, 180, 181, 181, 181, 182, 182, + 182, 183, 183, 183, 183, 183, 184, 184, 184, 185, 185, 186, 186, 187, 187, 188, 188, 189, 189, 190, - 190, 190, 190, 190, 190, 190, 190, 190, 190, 190, - 191, 191 + 190, 191, 191, 192, 192, 192, 192, 192, 192, 192, + 192, 192, 192, 192, 193, 193 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -1854,22 +1900,22 @@ static const yytype_uint8 yyr2[] = { 0, 2, 0, 2, 2, 2, 2, 2, 3, 1, 1, 6, 5, 1, 1, 1, 0, 2, 4, 3, - 2, 2, 7, 2, 4, 0, 1, 1, 0, 2, - 1, 2, 1, 3, 5, 0, 2, 1, 1, 1, - 1, 6, 8, 1, 1, 1, 1, 1, 1, 1, - 2, 1, 1, 1, 5, 4, 1, 3, 2, 4, - 0, 1, 1, 3, 3, 5, 0, 3, 0, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 3, 4, 1, 1, 3, 1, 1, 1, 2, - 1, 1, 1, 1, 1, 1, 3, 5, 1, 3, - 5, 7, 8, 8, 1, 2, 1, 1, 1, 1, - 3, 1, 1, 2, 2, 3, 4, 5, 1, 2, - 2, 2, 6, 1, 1, 1, 1, 1, 3, 3, - 3, 1, 3, 3, 1, 3, 3, 1, 3, 3, - 3, 3, 1, 3, 3, 1, 3, 1, 3, 1, - 3, 1, 3, 1, 3, 1, 5, 1, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 3 + 2, 2, 7, 2, 4, 0, 1, 1, 0, 1, + 1, 2, 5, 7, 1, 2, 1, 3, 5, 0, + 2, 1, 1, 1, 1, 6, 8, 1, 1, 1, + 1, 1, 1, 1, 2, 1, 1, 1, 5, 4, + 1, 3, 2, 4, 0, 1, 1, 3, 3, 5, + 0, 3, 0, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 1, 3, 4, 1, 1, 3, + 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, + 3, 5, 1, 3, 5, 7, 8, 8, 1, 2, + 1, 1, 1, 1, 3, 1, 1, 2, 2, 3, + 4, 5, 1, 2, 2, 2, 6, 1, 1, 1, + 1, 1, 3, 3, 3, 1, 3, 3, 1, 3, + 3, 1, 3, 3, 3, 3, 1, 3, 3, 1, + 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, + 5, 1, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 3 }; @@ -2639,14 +2685,14 @@ yyreduce: switch (yyn) { case 2: -#line 1047 "hlsl.y" /* yacc.c:1646 */ +#line 1095 "hlsl.y" /* yacc.c:1646 */ { } -#line 2651 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2697 "hlsl.tab.c" /* yacc.c:1646 */ break; case 3: -#line 1050 "hlsl.y" /* yacc.c:1646 */ +#line 1098 "hlsl.y" /* yacc.c:1646 */ { const struct hlsl_ir_function_decl *decl; @@ -2683,56 +2729,59 @@ yyreduce: TRACE("Adding function '%s' to the function list.\n", (yyvsp[0].function).name); add_function_decl(&hlsl_ctx.functions, (yyvsp[0].function).name, (yyvsp[0].function).decl, FALSE); } -#line 2692 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2738 "hlsl.tab.c" /* yacc.c:1646 */ break; case 4: -#line 1087 "hlsl.y" /* yacc.c:1646 */ +#line 1135 "hlsl.y" /* yacc.c:1646 */ { TRACE("Declaration statement parsed.\n"); } -#line 2700 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2746 "hlsl.tab.c" /* yacc.c:1646 */ break; case 5: -#line 1091 "hlsl.y" /* yacc.c:1646 */ +#line 1139 "hlsl.y" /* yacc.c:1646 */ { } -#line 2707 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2753 "hlsl.tab.c" /* yacc.c:1646 */ break; case 6: -#line 1094 "hlsl.y" /* yacc.c:1646 */ +#line 1142 "hlsl.y" /* yacc.c:1646 */ { TRACE("Skipping stray semicolon.\n"); } -#line 2715 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2761 "hlsl.tab.c" /* yacc.c:1646 */ break; case 7: -#line 1099 "hlsl.y" /* yacc.c:1646 */ +#line 1147 "hlsl.y" /* yacc.c:1646 */ { + const char **new_array = NULL; + TRACE("Updating line information to file %s, line %u\n", debugstr_a((yyvsp[0].name)), (yyvsp[-1].intval)); hlsl_ctx.line_no = (yyvsp[-1].intval); if (strcmp((yyvsp[0].name), hlsl_ctx.source_file)) - { - const char **new_array; - - hlsl_ctx.source_file = (yyvsp[0].name); new_array = d3dcompiler_realloc(hlsl_ctx.source_files, sizeof(*hlsl_ctx.source_files) * hlsl_ctx.source_files_count + 1); - if (new_array) - { - hlsl_ctx.source_files = new_array; - hlsl_ctx.source_files[hlsl_ctx.source_files_count++] = (yyvsp[0].name); - } + + if (new_array) + { + hlsl_ctx.source_files = new_array; + hlsl_ctx.source_files[hlsl_ctx.source_files_count++] = (yyvsp[0].name); + hlsl_ctx.source_file = (yyvsp[0].name); + } + else + { + d3dcompiler_free((yyvsp[0].name)); } } -#line 2737 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2786 "hlsl.tab.c" /* yacc.c:1646 */ break; case 8: -#line 1118 "hlsl.y" /* yacc.c:1646 */ +#line 1169 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; @@ -2748,11 +2797,11 @@ yyreduce: } (yyval.list) = declare_vars((yyvsp[-2].type), 0, (yyvsp[-1].list)); } -#line 2757 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2806 "hlsl.tab.c" /* yacc.c:1646 */ break; case 11: -#line 1138 "hlsl.y" /* yacc.c:1646 */ +#line 1189 "hlsl.y" /* yacc.c:1646 */ { BOOL ret; struct source_location loc; @@ -2777,11 +2826,11 @@ yyreduce: return 1; } } -#line 2786 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2835 "hlsl.tab.c" /* yacc.c:1646 */ break; case 12: -#line 1164 "hlsl.y" /* yacc.c:1646 */ +#line 1215 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; @@ -2790,20 +2839,20 @@ yyreduce: check_invalid_matrix_modifiers((yyvsp[-4].modifiers), &loc); (yyval.type) = new_struct_type(NULL, (yyvsp[-4].modifiers), (yyvsp[-1].list)); } -#line 2799 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2848 "hlsl.tab.c" /* yacc.c:1646 */ break; case 16: -#line 1178 "hlsl.y" /* yacc.c:1646 */ +#line 1229 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = d3dcompiler_alloc(sizeof(*(yyval.list))); list_init((yyval.list)); } -#line 2808 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2857 "hlsl.tab.c" /* yacc.c:1646 */ break; case 17: -#line 1183 "hlsl.y" /* yacc.c:1646 */ +#line 1234 "hlsl.y" /* yacc.c:1646 */ { BOOL ret; struct hlsl_struct_field *field, *next; @@ -2821,48 +2870,48 @@ yyreduce: } d3dcompiler_free((yyvsp[0].list)); } -#line 2830 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2879 "hlsl.tab.c" /* yacc.c:1646 */ break; case 18: -#line 1202 "hlsl.y" /* yacc.c:1646 */ +#line 1253 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = gen_struct_fields((yyvsp[-2].type), (yyvsp[-3].modifiers), (yyvsp[-1].list)); } -#line 2838 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2887 "hlsl.tab.c" /* yacc.c:1646 */ break; case 19: -#line 1206 "hlsl.y" /* yacc.c:1646 */ +#line 1257 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = gen_struct_fields((yyvsp[-2].type), 0, (yyvsp[-1].list)); } -#line 2846 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2895 "hlsl.tab.c" /* yacc.c:1646 */ break; case 20: -#line 1211 "hlsl.y" /* yacc.c:1646 */ +#line 1262 "hlsl.y" /* yacc.c:1646 */ { TRACE("Function %s parsed.\n", (yyvsp[-1].function).name); (yyval.function) = (yyvsp[-1].function); (yyval.function).decl->body = (yyvsp[0].list); pop_scope(&hlsl_ctx); } -#line 2857 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2906 "hlsl.tab.c" /* yacc.c:1646 */ break; case 21: -#line 1218 "hlsl.y" /* yacc.c:1646 */ +#line 1269 "hlsl.y" /* yacc.c:1646 */ { TRACE("Function prototype for %s.\n", (yyvsp[-1].function).name); (yyval.function) = (yyvsp[-1].function); pop_scope(&hlsl_ctx); } -#line 2867 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2916 "hlsl.tab.c" /* yacc.c:1646 */ break; case 22: -#line 1225 "hlsl.y" /* yacc.c:1646 */ +#line 1276 "hlsl.y" /* yacc.c:1646 */ { if (get_variable(hlsl_ctx.globals, (yyvsp[-4].name))) { @@ -2870,12 +2919,17 @@ yyreduce: HLSL_LEVEL_ERROR, "redefinition of '%s'\n", (yyvsp[-4].name)); return 1; } - if ((yyvsp[-5].type)->base_type == HLSL_TYPE_VOID && (yyvsp[0].name)) + if ((yyvsp[-5].type)->base_type == HLSL_TYPE_VOID && (yyvsp[0].colon_attribute).semantic) { hlsl_report_message(hlsl_ctx.source_file, (yylsp[0]).first_line, (yylsp[0]).first_column, HLSL_LEVEL_ERROR, "void function with a semantic"); } + if ((yyvsp[0].colon_attribute).reg_reservation) + { + FIXME("Unexpected register reservation for a function.\n"); + d3dcompiler_free((yyvsp[0].colon_attribute).reg_reservation); + } (yyval.function).decl = new_func_decl((yyvsp[-5].type), (yyvsp[-2].list)); if (!(yyval.function).decl) { @@ -2883,73 +2937,113 @@ yyreduce: return -1; } (yyval.function).name = (yyvsp[-4].name); - (yyval.function).decl->semantic = (yyvsp[0].name); + (yyval.function).decl->semantic = (yyvsp[0].colon_attribute).semantic; set_location(&(yyval.function).decl->node.loc, &(yylsp[-4])); } -#line 2895 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2949 "hlsl.tab.c" /* yacc.c:1646 */ break; case 23: -#line 1250 "hlsl.y" /* yacc.c:1646 */ +#line 1306 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = d3dcompiler_alloc(sizeof(*(yyval.list))); list_init((yyval.list)); } -#line 2904 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2958 "hlsl.tab.c" /* yacc.c:1646 */ break; case 24: -#line 1255 "hlsl.y" /* yacc.c:1646 */ +#line 1311 "hlsl.y" /* yacc.c:1646 */ { pop_scope(&hlsl_ctx); (yyval.list) = (yyvsp[-1].list); } -#line 2913 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2967 "hlsl.tab.c" /* yacc.c:1646 */ break; case 25: -#line 1261 "hlsl.y" /* yacc.c:1646 */ +#line 1317 "hlsl.y" /* yacc.c:1646 */ { push_scope(&hlsl_ctx); } -#line 2921 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2975 "hlsl.tab.c" /* yacc.c:1646 */ break; case 28: -#line 1269 "hlsl.y" /* yacc.c:1646 */ +#line 1325 "hlsl.y" /* yacc.c:1646 */ { - (yyval.name) = NULL; + (yyval.colon_attribute).semantic = NULL; + (yyval.colon_attribute).reg_reservation = NULL; } -#line 2929 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2984 "hlsl.tab.c" /* yacc.c:1646 */ break; case 29: -#line 1273 "hlsl.y" /* yacc.c:1646 */ +#line 1330 "hlsl.y" /* yacc.c:1646 */ { - (yyval.name) = (yyvsp[0].name); + (yyval.colon_attribute).semantic = (yyvsp[0].name); + (yyval.colon_attribute).reg_reservation = NULL; } -#line 2937 "hlsl.tab.c" /* yacc.c:1646 */ +#line 2993 "hlsl.tab.c" /* yacc.c:1646 */ break; case 30: -#line 1278 "hlsl.y" /* yacc.c:1646 */ +#line 1335 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.colon_attribute).semantic = NULL; + (yyval.colon_attribute).reg_reservation = (yyvsp[0].reg_reservation); + } +#line 3002 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 31: +#line 1341 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.name) = (yyvsp[0].name); + } +#line 3010 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 32: +#line 1347 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.reg_reservation) = parse_reg_reservation((yyvsp[-1].name)); + d3dcompiler_free((yyvsp[-1].name)); + } +#line 3019 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 33: +#line 1352 "hlsl.y" /* yacc.c:1646 */ + { + FIXME("Ignoring shader target %s in a register reservation.\n", debugstr_a((yyvsp[-3].name))); + d3dcompiler_free((yyvsp[-3].name)); + + (yyval.reg_reservation) = parse_reg_reservation((yyvsp[-1].name)); + d3dcompiler_free((yyvsp[-1].name)); + } +#line 3031 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 34: +#line 1361 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = d3dcompiler_alloc(sizeof(*(yyval.list))); list_init((yyval.list)); } -#line 2946 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3040 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 31: -#line 1283 "hlsl.y" /* yacc.c:1646 */ + case 35: +#line 1366 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = (yyvsp[0].list); } -#line 2954 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3048 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 32: -#line 1288 "hlsl.y" /* yacc.c:1646 */ + case 36: +#line 1371 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; @@ -2963,11 +3057,11 @@ yyreduce: return -1; } } -#line 2972 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3066 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 33: -#line 1302 "hlsl.y" /* yacc.c:1646 */ + case 37: +#line 1385 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; @@ -2980,31 +3074,32 @@ yyreduce: return 1; } } -#line 2989 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3083 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 34: -#line 1316 "hlsl.y" /* yacc.c:1646 */ + case 38: +#line 1399 "hlsl.y" /* yacc.c:1646 */ { (yyval.parameter).modifiers = (yyvsp[-4].modifiers) ? (yyvsp[-4].modifiers) : HLSL_MODIFIER_IN; (yyval.parameter).modifiers |= (yyvsp[-3].modifiers); (yyval.parameter).type = (yyvsp[-2].type); (yyval.parameter).name = (yyvsp[-1].name); - (yyval.parameter).semantic = (yyvsp[0].name); + (yyval.parameter).semantic = (yyvsp[0].colon_attribute).semantic; + (yyval.parameter).reg_reservation = (yyvsp[0].colon_attribute).reg_reservation; } -#line 3001 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3096 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 35: -#line 1325 "hlsl.y" /* yacc.c:1646 */ + case 39: +#line 1409 "hlsl.y" /* yacc.c:1646 */ { (yyval.modifiers) = 0; } -#line 3009 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3104 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 36: -#line 1329 "hlsl.y" /* yacc.c:1646 */ + case 40: +#line 1413 "hlsl.y" /* yacc.c:1646 */ { if ((yyvsp[-1].modifiers) & (yyvsp[0].modifiers)) { @@ -3014,43 +3109,43 @@ yyreduce: } (yyval.modifiers) = (yyvsp[-1].modifiers) | (yyvsp[0].modifiers); } -#line 3023 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 37: -#line 1340 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.modifiers) = HLSL_MODIFIER_IN; - } -#line 3031 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 38: -#line 1344 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.modifiers) = HLSL_MODIFIER_OUT; - } -#line 3039 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 39: -#line 1348 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.modifiers) = HLSL_MODIFIER_IN | HLSL_MODIFIER_OUT; - } -#line 3047 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 40: -#line 1353 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.type) = (yyvsp[0].type); - } -#line 3055 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3118 "hlsl.tab.c" /* yacc.c:1646 */ break; case 41: -#line 1357 "hlsl.y" /* yacc.c:1646 */ +#line 1424 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.modifiers) = HLSL_MODIFIER_IN; + } +#line 3126 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 42: +#line 1428 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.modifiers) = HLSL_MODIFIER_OUT; + } +#line 3134 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 43: +#line 1432 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.modifiers) = HLSL_MODIFIER_IN | HLSL_MODIFIER_OUT; + } +#line 3142 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 44: +#line 1437 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.type) = (yyvsp[0].type); + } +#line 3150 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 45: +#line 1441 "hlsl.y" /* yacc.c:1646 */ { if ((yyvsp[-3].type)->type != HLSL_CLASS_SCALAR) { @@ -3069,11 +3164,11 @@ yyreduce: (yyval.type) = new_hlsl_type(NULL, HLSL_CLASS_VECTOR, (yyvsp[-3].type)->base_type, (yyvsp[-1].intval), 1); } -#line 3078 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3173 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 42: -#line 1376 "hlsl.y" /* yacc.c:1646 */ + case 46: +#line 1460 "hlsl.y" /* yacc.c:1646 */ { if ((yyvsp[-5].type)->type != HLSL_CLASS_SCALAR) { @@ -3092,64 +3187,64 @@ yyreduce: (yyval.type) = new_hlsl_type(NULL, HLSL_CLASS_MATRIX, (yyvsp[-5].type)->base_type, (yyvsp[-3].intval), (yyvsp[-1].intval)); } -#line 3101 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3196 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 43: -#line 1396 "hlsl.y" /* yacc.c:1646 */ + case 47: +#line 1480 "hlsl.y" /* yacc.c:1646 */ { (yyval.type) = new_hlsl_type(d3dcompiler_strdup("void"), HLSL_CLASS_OBJECT, HLSL_TYPE_VOID, 1, 1); } -#line 3109 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3204 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 44: -#line 1400 "hlsl.y" /* yacc.c:1646 */ + case 48: +#line 1484 "hlsl.y" /* yacc.c:1646 */ { (yyval.type) = new_hlsl_type(d3dcompiler_strdup("sampler"), HLSL_CLASS_OBJECT, HLSL_TYPE_SAMPLER, 1, 1); (yyval.type)->sampler_dim = HLSL_SAMPLER_DIM_GENERIC; } -#line 3118 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3213 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 45: -#line 1405 "hlsl.y" /* yacc.c:1646 */ + case 49: +#line 1489 "hlsl.y" /* yacc.c:1646 */ { (yyval.type) = new_hlsl_type(d3dcompiler_strdup("sampler1D"), HLSL_CLASS_OBJECT, HLSL_TYPE_SAMPLER, 1, 1); (yyval.type)->sampler_dim = HLSL_SAMPLER_DIM_1D; } -#line 3127 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3222 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 46: -#line 1410 "hlsl.y" /* yacc.c:1646 */ + case 50: +#line 1494 "hlsl.y" /* yacc.c:1646 */ { (yyval.type) = new_hlsl_type(d3dcompiler_strdup("sampler2D"), HLSL_CLASS_OBJECT, HLSL_TYPE_SAMPLER, 1, 1); (yyval.type)->sampler_dim = HLSL_SAMPLER_DIM_2D; } -#line 3136 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3231 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 47: -#line 1415 "hlsl.y" /* yacc.c:1646 */ + case 51: +#line 1499 "hlsl.y" /* yacc.c:1646 */ { (yyval.type) = new_hlsl_type(d3dcompiler_strdup("sampler3D"), HLSL_CLASS_OBJECT, HLSL_TYPE_SAMPLER, 1, 1); (yyval.type)->sampler_dim = HLSL_SAMPLER_DIM_3D; } -#line 3145 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3240 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 48: -#line 1420 "hlsl.y" /* yacc.c:1646 */ + case 52: +#line 1504 "hlsl.y" /* yacc.c:1646 */ { (yyval.type) = new_hlsl_type(d3dcompiler_strdup("samplerCUBE"), HLSL_CLASS_OBJECT, HLSL_TYPE_SAMPLER, 1, 1); (yyval.type)->sampler_dim = HLSL_SAMPLER_DIM_CUBE; } -#line 3154 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3249 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 49: -#line 1425 "hlsl.y" /* yacc.c:1646 */ + case 53: +#line 1509 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_type *type; @@ -3157,11 +3252,11 @@ yyreduce: (yyval.type) = type; d3dcompiler_free((yyvsp[0].name)); } -#line 3166 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3261 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 50: -#line 1433 "hlsl.y" /* yacc.c:1646 */ + case 54: +#line 1517 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_type *type; @@ -3178,11 +3273,11 @@ yyreduce: } d3dcompiler_free((yyvsp[0].name)); } -#line 3187 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3282 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 53: -#line 1453 "hlsl.y" /* yacc.c:1646 */ + case 57: +#line 1537 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = d3dcompiler_alloc(sizeof(*(yyval.list))); if (!(yyval.list)) @@ -3192,11 +3287,11 @@ yyreduce: } list_init((yyval.list)); } -#line 3201 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3296 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 54: -#line 1464 "hlsl.y" /* yacc.c:1646 */ + case 58: +#line 1548 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; @@ -3204,11 +3299,11 @@ yyreduce: if (!add_typedef((yyvsp[-3].modifiers), (yyvsp[-2].type), (yyvsp[-1].list), &loc)) return 1; } -#line 3213 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3308 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 55: -#line 1472 "hlsl.y" /* yacc.c:1646 */ + case 59: +#line 1556 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; @@ -3216,311 +3311,313 @@ yyreduce: if (!add_typedef(0, (yyvsp[-2].type), (yyvsp[-1].list), &loc)) return 1; } -#line 3225 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3320 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 56: -#line 1481 "hlsl.y" /* yacc.c:1646 */ + case 60: +#line 1565 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = d3dcompiler_alloc(sizeof(*(yyval.list))); list_init((yyval.list)); list_add_head((yyval.list), &(yyvsp[0].variable_def)->entry); } -#line 3235 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3330 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 57: -#line 1487 "hlsl.y" /* yacc.c:1646 */ + case 61: +#line 1571 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = (yyvsp[-2].list); list_add_tail((yyval.list), &(yyvsp[0].variable_def)->entry); } -#line 3244 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3339 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 58: -#line 1493 "hlsl.y" /* yacc.c:1646 */ + case 62: +#line 1577 "hlsl.y" /* yacc.c:1646 */ { (yyval.variable_def) = d3dcompiler_alloc(sizeof(*(yyval.variable_def))); set_location(&(yyval.variable_def)->loc, &(yylsp[-1])); (yyval.variable_def)->name = (yyvsp[-1].name); (yyval.variable_def)->array_size = (yyvsp[0].intval); } -#line 3255 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3350 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 59: -#line 1501 "hlsl.y" /* yacc.c:1646 */ + case 63: +#line 1585 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = declare_vars((yyvsp[-2].type), (yyvsp[-3].modifiers), (yyvsp[-1].list)); } -#line 3263 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3358 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 60: -#line 1506 "hlsl.y" /* yacc.c:1646 */ + case 64: +#line 1590 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = NULL; } -#line 3271 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3366 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 61: -#line 1510 "hlsl.y" /* yacc.c:1646 */ + case 65: +#line 1594 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = (yyvsp[0].list); } -#line 3279 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3374 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 62: -#line 1515 "hlsl.y" /* yacc.c:1646 */ + case 66: +#line 1599 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = d3dcompiler_alloc(sizeof(*(yyval.list))); list_init((yyval.list)); list_add_head((yyval.list), &(yyvsp[0].variable_def)->entry); } -#line 3289 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3384 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 63: -#line 1521 "hlsl.y" /* yacc.c:1646 */ + case 67: +#line 1605 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = (yyvsp[-2].list); list_add_tail((yyval.list), &(yyvsp[0].variable_def)->entry); } -#line 3298 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3393 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 64: -#line 1527 "hlsl.y" /* yacc.c:1646 */ + case 68: +#line 1611 "hlsl.y" /* yacc.c:1646 */ { (yyval.variable_def) = d3dcompiler_alloc(sizeof(*(yyval.variable_def))); set_location(&(yyval.variable_def)->loc, &(yylsp[-2])); (yyval.variable_def)->name = (yyvsp[-2].name); (yyval.variable_def)->array_size = (yyvsp[-1].intval); - (yyval.variable_def)->semantic = (yyvsp[0].name); + (yyval.variable_def)->semantic = (yyvsp[0].colon_attribute).semantic; + (yyval.variable_def)->reg_reservation = (yyvsp[0].colon_attribute).reg_reservation; } -#line 3310 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3406 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 65: -#line 1535 "hlsl.y" /* yacc.c:1646 */ + case 69: +#line 1620 "hlsl.y" /* yacc.c:1646 */ { TRACE("Declaration with initializer.\n"); (yyval.variable_def) = d3dcompiler_alloc(sizeof(*(yyval.variable_def))); set_location(&(yyval.variable_def)->loc, &(yylsp[-4])); (yyval.variable_def)->name = (yyvsp[-4].name); (yyval.variable_def)->array_size = (yyvsp[-3].intval); - (yyval.variable_def)->semantic = (yyvsp[-2].name); + (yyval.variable_def)->semantic = (yyvsp[-2].colon_attribute).semantic; + (yyval.variable_def)->reg_reservation = (yyvsp[-2].colon_attribute).reg_reservation; (yyval.variable_def)->initializer = (yyvsp[0].list); } -#line 3324 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3421 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 66: -#line 1546 "hlsl.y" /* yacc.c:1646 */ + case 70: +#line 1632 "hlsl.y" /* yacc.c:1646 */ { (yyval.intval) = 0; } -#line 3332 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3429 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 67: -#line 1550 "hlsl.y" /* yacc.c:1646 */ + case 71: +#line 1636 "hlsl.y" /* yacc.c:1646 */ { FIXME("Array.\n"); (yyval.intval) = 0; free_instr((yyvsp[-1].instr)); } -#line 3342 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 68: -#line 1557 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.modifiers) = 0; - } -#line 3350 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 69: -#line 1561 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_EXTERN, &(yylsp[-1])); - } -#line 3358 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 70: -#line 1565 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_NOINTERPOLATION, &(yylsp[-1])); - } -#line 3366 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 71: -#line 1569 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_MODIFIER_PRECISE, &(yylsp[-1])); - } -#line 3374 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3439 "hlsl.tab.c" /* yacc.c:1646 */ break; case 72: -#line 1573 "hlsl.y" /* yacc.c:1646 */ +#line 1643 "hlsl.y" /* yacc.c:1646 */ { - (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_SHARED, &(yylsp[-1])); + (yyval.modifiers) = 0; } -#line 3382 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3447 "hlsl.tab.c" /* yacc.c:1646 */ break; case 73: -#line 1577 "hlsl.y" /* yacc.c:1646 */ +#line 1647 "hlsl.y" /* yacc.c:1646 */ { - (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_GROUPSHARED, &(yylsp[-1])); + (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_EXTERN, &(yylsp[-1])); } -#line 3390 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3455 "hlsl.tab.c" /* yacc.c:1646 */ break; case 74: -#line 1581 "hlsl.y" /* yacc.c:1646 */ +#line 1651 "hlsl.y" /* yacc.c:1646 */ { - (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_STATIC, &(yylsp[-1])); + (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_NOINTERPOLATION, &(yylsp[-1])); } -#line 3398 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3463 "hlsl.tab.c" /* yacc.c:1646 */ break; case 75: -#line 1585 "hlsl.y" /* yacc.c:1646 */ +#line 1655 "hlsl.y" /* yacc.c:1646 */ { - (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_UNIFORM, &(yylsp[-1])); + (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_MODIFIER_PRECISE, &(yylsp[-1])); } -#line 3406 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3471 "hlsl.tab.c" /* yacc.c:1646 */ break; case 76: -#line 1589 "hlsl.y" /* yacc.c:1646 */ +#line 1659 "hlsl.y" /* yacc.c:1646 */ { - (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_VOLATILE, &(yylsp[-1])); + (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_SHARED, &(yylsp[-1])); } -#line 3414 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3479 "hlsl.tab.c" /* yacc.c:1646 */ break; case 77: -#line 1593 "hlsl.y" /* yacc.c:1646 */ +#line 1663 "hlsl.y" /* yacc.c:1646 */ { - (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_MODIFIER_CONST, &(yylsp[-1])); + (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_GROUPSHARED, &(yylsp[-1])); } -#line 3422 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3487 "hlsl.tab.c" /* yacc.c:1646 */ break; case 78: -#line 1597 "hlsl.y" /* yacc.c:1646 */ +#line 1667 "hlsl.y" /* yacc.c:1646 */ { - (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_MODIFIER_ROW_MAJOR, &(yylsp[-1])); + (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_STATIC, &(yylsp[-1])); } -#line 3430 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3495 "hlsl.tab.c" /* yacc.c:1646 */ break; case 79: -#line 1601 "hlsl.y" /* yacc.c:1646 */ +#line 1671 "hlsl.y" /* yacc.c:1646 */ { - (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_MODIFIER_COLUMN_MAJOR, &(yylsp[-1])); + (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_UNIFORM, &(yylsp[-1])); } -#line 3438 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3503 "hlsl.tab.c" /* yacc.c:1646 */ break; case 80: -#line 1606 "hlsl.y" /* yacc.c:1646 */ +#line 1675 "hlsl.y" /* yacc.c:1646 */ { - (yyval.list) = d3dcompiler_alloc(sizeof(*(yyval.list))); - list_init((yyval.list)); - list_add_head((yyval.list), &(yyvsp[0].instr)->entry); + (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_STORAGE_VOLATILE, &(yylsp[-1])); } -#line 3448 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3511 "hlsl.tab.c" /* yacc.c:1646 */ break; case 81: -#line 1612 "hlsl.y" /* yacc.c:1646 */ +#line 1679 "hlsl.y" /* yacc.c:1646 */ { - (yyval.list) = (yyvsp[-1].list); + (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_MODIFIER_CONST, &(yylsp[-1])); } -#line 3456 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3519 "hlsl.tab.c" /* yacc.c:1646 */ break; case 82: -#line 1616 "hlsl.y" /* yacc.c:1646 */ +#line 1683 "hlsl.y" /* yacc.c:1646 */ { - (yyval.list) = (yyvsp[-2].list); + (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_MODIFIER_ROW_MAJOR, &(yylsp[-1])); } -#line 3464 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3527 "hlsl.tab.c" /* yacc.c:1646 */ break; case 83: -#line 1621 "hlsl.y" /* yacc.c:1646 */ +#line 1687 "hlsl.y" /* yacc.c:1646 */ { - (yyval.instr) = (yyvsp[0].instr); + (yyval.modifiers) = add_modifier((yyvsp[0].modifiers), HLSL_MODIFIER_COLUMN_MAJOR, &(yylsp[-1])); } -#line 3472 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3535 "hlsl.tab.c" /* yacc.c:1646 */ break; case 84: -#line 1626 "hlsl.y" /* yacc.c:1646 */ +#line 1692 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = d3dcompiler_alloc(sizeof(*(yyval.list))); list_init((yyval.list)); list_add_head((yyval.list), &(yyvsp[0].instr)->entry); } -#line 3482 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3545 "hlsl.tab.c" /* yacc.c:1646 */ break; case 85: -#line 1632 "hlsl.y" /* yacc.c:1646 */ +#line 1698 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.list) = (yyvsp[-1].list); + } +#line 3553 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 86: +#line 1702 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.list) = (yyvsp[-2].list); + } +#line 3561 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 87: +#line 1707 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.instr) = (yyvsp[0].instr); + } +#line 3569 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 88: +#line 1712 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.list) = d3dcompiler_alloc(sizeof(*(yyval.list))); + list_init((yyval.list)); + list_add_head((yyval.list), &(yyvsp[0].instr)->entry); + } +#line 3579 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 89: +#line 1718 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = (yyvsp[-2].list); list_add_tail((yyval.list), &(yyvsp[0].instr)->entry); } -#line 3491 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3588 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 86: -#line 1638 "hlsl.y" /* yacc.c:1646 */ + case 90: +#line 1724 "hlsl.y" /* yacc.c:1646 */ { (yyval.boolval) = TRUE; } -#line 3499 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3596 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 87: -#line 1642 "hlsl.y" /* yacc.c:1646 */ + case 91: +#line 1728 "hlsl.y" /* yacc.c:1646 */ { (yyval.boolval) = FALSE; } -#line 3507 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3604 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 88: -#line 1647 "hlsl.y" /* yacc.c:1646 */ + case 92: +#line 1733 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = (yyvsp[0].list); } -#line 3515 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3612 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 89: -#line 1651 "hlsl.y" /* yacc.c:1646 */ + case 93: +#line 1737 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = (yyvsp[-1].list); list_move_tail((yyval.list), (yyvsp[0].list)); d3dcompiler_free((yyvsp[0].list)); } -#line 3525 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3622 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 96: -#line 1666 "hlsl.y" /* yacc.c:1646 */ + case 100: +#line 1752 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_jump *jump = d3dcompiler_alloc(sizeof(*jump)); if (!jump) @@ -3542,11 +3639,11 @@ yyreduce: list_init((yyval.list)); list_add_tail((yyval.list), &jump->node.entry); } -#line 3551 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3648 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 97: -#line 1689 "hlsl.y" /* yacc.c:1646 */ + case 101: +#line 1775 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_if *instr = d3dcompiler_alloc(sizeof(*instr)); if (!instr) @@ -3569,29 +3666,29 @@ yyreduce: list_init((yyval.list)); list_add_head((yyval.list), &instr->node.entry); } -#line 3578 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3675 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 98: -#line 1713 "hlsl.y" /* yacc.c:1646 */ + case 102: +#line 1799 "hlsl.y" /* yacc.c:1646 */ { (yyval.if_body).then_instrs = (yyvsp[0].list); (yyval.if_body).else_instrs = NULL; } -#line 3587 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3684 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 99: -#line 1718 "hlsl.y" /* yacc.c:1646 */ + case 103: +#line 1804 "hlsl.y" /* yacc.c:1646 */ { (yyval.if_body).then_instrs = (yyvsp[-2].list); (yyval.if_body).else_instrs = (yyvsp[0].list); } -#line 3596 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3693 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 100: -#line 1724 "hlsl.y" /* yacc.c:1646 */ + case 104: +#line 1810 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; struct list *cond = d3dcompiler_alloc(sizeof(*cond)); @@ -3606,11 +3703,11 @@ yyreduce: set_location(&loc, &(yylsp[-4])); (yyval.list) = create_loop(LOOP_WHILE, NULL, cond, NULL, (yyvsp[0].list), &loc); } -#line 3615 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3712 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 101: -#line 1739 "hlsl.y" /* yacc.c:1646 */ + case 105: +#line 1825 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; struct list *cond = d3dcompiler_alloc(sizeof(*cond)); @@ -3625,11 +3722,11 @@ yyreduce: set_location(&loc, &(yylsp[-6])); (yyval.list) = create_loop(LOOP_DO_WHILE, NULL, cond, NULL, (yyvsp[-5].list), &loc); } -#line 3634 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3731 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 102: -#line 1754 "hlsl.y" /* yacc.c:1646 */ + case 106: +#line 1840 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; @@ -3637,11 +3734,11 @@ yyreduce: (yyval.list) = create_loop(LOOP_FOR, (yyvsp[-4].list), (yyvsp[-3].list), (yyvsp[-2].instr), (yyvsp[0].list), &loc); pop_scope(&hlsl_ctx); } -#line 3646 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3743 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 103: -#line 1762 "hlsl.y" /* yacc.c:1646 */ + case 107: +#line 1848 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; @@ -3652,31 +3749,31 @@ yyreduce: (yyval.list) = create_loop(LOOP_FOR, (yyvsp[-4].list), (yyvsp[-3].list), (yyvsp[-2].instr), (yyvsp[0].list), &loc); pop_scope(&hlsl_ctx); } -#line 3661 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3758 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 104: -#line 1774 "hlsl.y" /* yacc.c:1646 */ + case 108: +#line 1860 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = d3dcompiler_alloc(sizeof(*(yyval.list))); list_init((yyval.list)); } -#line 3670 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3767 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 105: -#line 1779 "hlsl.y" /* yacc.c:1646 */ + case 109: +#line 1865 "hlsl.y" /* yacc.c:1646 */ { (yyval.list) = d3dcompiler_alloc(sizeof(*(yyval.list))); list_init((yyval.list)); if ((yyvsp[-1].instr)) list_add_head((yyval.list), &(yyvsp[-1].instr)->entry); } -#line 3681 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3778 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 106: -#line 1787 "hlsl.y" /* yacc.c:1646 */ + case 110: +#line 1873 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_constant *c = d3dcompiler_alloc(sizeof(*c)); if (!c) @@ -3690,11 +3787,11 @@ yyreduce: c->v.value.f[0] = (yyvsp[0].floatval); (yyval.instr) = &c->node; } -#line 3699 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3796 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 107: -#line 1801 "hlsl.y" /* yacc.c:1646 */ + case 111: +#line 1887 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_constant *c = d3dcompiler_alloc(sizeof(*c)); if (!c) @@ -3708,11 +3805,11 @@ yyreduce: c->v.value.i[0] = (yyvsp[0].intval); (yyval.instr) = &c->node; } -#line 3717 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3814 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 108: -#line 1815 "hlsl.y" /* yacc.c:1646 */ + case 112: +#line 1901 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_constant *c = d3dcompiler_alloc(sizeof(*c)); if (!c) @@ -3726,11 +3823,11 @@ yyreduce: c->v.value.b[0] = (yyvsp[0].boolval); (yyval.instr) = &c->node; } -#line 3735 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3832 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 109: -#line 1829 "hlsl.y" /* yacc.c:1646 */ + case 113: +#line 1915 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_deref *deref = new_var_deref((yyvsp[0].var)); if (deref) @@ -3741,19 +3838,19 @@ yyreduce: else (yyval.instr) = NULL; } -#line 3750 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3847 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 110: -#line 1840 "hlsl.y" /* yacc.c:1646 */ + case 114: +#line 1926 "hlsl.y" /* yacc.c:1646 */ { (yyval.instr) = (yyvsp[-1].instr); } -#line 3758 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3855 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 111: -#line 1845 "hlsl.y" /* yacc.c:1646 */ + case 115: +#line 1931 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_var *var; var = get_variable(hlsl_ctx.cur_scope, (yyvsp[0].name)); @@ -3766,19 +3863,19 @@ yyreduce: } (yyval.var) = var; } -#line 3775 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3872 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 112: -#line 1859 "hlsl.y" /* yacc.c:1646 */ + case 116: +#line 1945 "hlsl.y" /* yacc.c:1646 */ { (yyval.instr) = (yyvsp[0].instr); } -#line 3783 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3880 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 113: -#line 1863 "hlsl.y" /* yacc.c:1646 */ + case 117: +#line 1949 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_node *operands[3]; struct source_location loc; @@ -3797,11 +3894,11 @@ yyreduce: (yyval.instr)->data_type = clone_hlsl_type((yyval.instr)->data_type); (yyval.instr)->data_type->modifiers |= HLSL_MODIFIER_CONST; } -#line 3806 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3903 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 114: -#line 1882 "hlsl.y" /* yacc.c:1646 */ + case 118: +#line 1968 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_node *operands[3]; struct source_location loc; @@ -3820,11 +3917,11 @@ yyreduce: (yyval.instr)->data_type = clone_hlsl_type((yyval.instr)->data_type); (yyval.instr)->data_type->modifiers |= HLSL_MODIFIER_CONST; } -#line 3829 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3926 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 115: -#line 1901 "hlsl.y" /* yacc.c:1646 */ + case 119: +#line 1987 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; @@ -3878,11 +3975,11 @@ yyreduce: return 1; } } -#line 3887 "hlsl.tab.c" /* yacc.c:1646 */ +#line 3984 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 116: -#line 1955 "hlsl.y" /* yacc.c:1646 */ + case 120: +#line 2041 "hlsl.y" /* yacc.c:1646 */ { /* This may be an array dereference or a vector/matrix * subcomponent access. @@ -3940,11 +4037,11 @@ yyreduce: (yyval.instr) = &deref->node; } -#line 3949 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4046 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 117: -#line 2015 "hlsl.y" /* yacc.c:1646 */ + case 121: +#line 2101 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_constructor *constructor; @@ -3979,19 +4076,19 @@ yyreduce: (yyval.instr) = &constructor->node; } -#line 3988 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4085 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 118: -#line 2051 "hlsl.y" /* yacc.c:1646 */ + case 122: +#line 2137 "hlsl.y" /* yacc.c:1646 */ { (yyval.instr) = (yyvsp[0].instr); } -#line 3996 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4093 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 119: -#line 2055 "hlsl.y" /* yacc.c:1646 */ + case 123: +#line 2141 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_node *operands[3]; struct source_location loc; @@ -4007,11 +4104,11 @@ yyreduce: operands[1] = operands[2] = NULL; (yyval.instr) = &new_expr(HLSL_IR_UNOP_PREINC, operands, &loc)->node; } -#line 4016 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4113 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 120: -#line 2071 "hlsl.y" /* yacc.c:1646 */ + case 124: +#line 2157 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_node *operands[3]; struct source_location loc; @@ -4027,11 +4124,11 @@ yyreduce: operands[1] = operands[2] = NULL; (yyval.instr) = &new_expr(HLSL_IR_UNOP_PREDEC, operands, &loc)->node; } -#line 4036 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4133 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 121: -#line 2087 "hlsl.y" /* yacc.c:1646 */ + case 125: +#line 2173 "hlsl.y" /* yacc.c:1646 */ { enum hlsl_ir_expr_op ops[] = {0, HLSL_IR_UNOP_NEG, HLSL_IR_UNOP_LOGIC_NOT, HLSL_IR_UNOP_BIT_NOT}; @@ -4050,11 +4147,11 @@ yyreduce: (yyval.instr) = &new_expr(ops[(yyvsp[-1].unary_op)], operands, &loc)->node; } } -#line 4059 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4156 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 122: -#line 2107 "hlsl.y" /* yacc.c:1646 */ + case 126: +#line 2193 "hlsl.y" /* yacc.c:1646 */ { struct hlsl_ir_expr *expr; struct hlsl_type *src_type = (yyvsp[0].instr)->data_type; @@ -4085,324 +4182,324 @@ yyreduce: expr = new_cast((yyvsp[0].instr), dst_type, &loc); (yyval.instr) = expr ? &expr->node : NULL; } -#line 4094 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 123: -#line 2139 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.unary_op) = UNARY_OP_PLUS; - } -#line 4102 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 124: -#line 2143 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.unary_op) = UNARY_OP_MINUS; - } -#line 4110 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 125: -#line 2147 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.unary_op) = UNARY_OP_LOGICNOT; - } -#line 4118 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 126: -#line 2151 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.unary_op) = UNARY_OP_BITNOT; - } -#line 4126 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4191 "hlsl.tab.c" /* yacc.c:1646 */ break; case 127: -#line 2156 "hlsl.y" /* yacc.c:1646 */ +#line 2225 "hlsl.y" /* yacc.c:1646 */ { - (yyval.instr) = (yyvsp[0].instr); + (yyval.unary_op) = UNARY_OP_PLUS; } -#line 4134 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4199 "hlsl.tab.c" /* yacc.c:1646 */ break; case 128: -#line 2160 "hlsl.y" /* yacc.c:1646 */ +#line 2229 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.unary_op) = UNARY_OP_MINUS; + } +#line 4207 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 129: +#line 2233 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.unary_op) = UNARY_OP_LOGICNOT; + } +#line 4215 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 130: +#line 2237 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.unary_op) = UNARY_OP_BITNOT; + } +#line 4223 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 131: +#line 2242 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.instr) = (yyvsp[0].instr); + } +#line 4231 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 132: +#line 2246 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; set_location(&loc, &(yylsp[-1])); (yyval.instr) = &hlsl_mul((yyvsp[-2].instr), (yyvsp[0].instr), &loc)->node; } -#line 4145 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4242 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 129: -#line 2167 "hlsl.y" /* yacc.c:1646 */ + case 133: +#line 2253 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; set_location(&loc, &(yylsp[-1])); (yyval.instr) = &hlsl_div((yyvsp[-2].instr), (yyvsp[0].instr), &loc)->node; } -#line 4156 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4253 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 130: -#line 2174 "hlsl.y" /* yacc.c:1646 */ + case 134: +#line 2260 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; set_location(&loc, &(yylsp[-1])); (yyval.instr) = &hlsl_mod((yyvsp[-2].instr), (yyvsp[0].instr), &loc)->node; } -#line 4167 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4264 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 131: -#line 2182 "hlsl.y" /* yacc.c:1646 */ + case 135: +#line 2268 "hlsl.y" /* yacc.c:1646 */ { (yyval.instr) = (yyvsp[0].instr); } -#line 4175 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4272 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 132: -#line 2186 "hlsl.y" /* yacc.c:1646 */ + case 136: +#line 2272 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; set_location(&loc, &(yylsp[-1])); (yyval.instr) = &hlsl_add((yyvsp[-2].instr), (yyvsp[0].instr), &loc)->node; } -#line 4186 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4283 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 133: -#line 2193 "hlsl.y" /* yacc.c:1646 */ + case 137: +#line 2279 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; set_location(&loc, &(yylsp[-1])); (yyval.instr) = &hlsl_sub((yyvsp[-2].instr), (yyvsp[0].instr), &loc)->node; } -#line 4197 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 134: -#line 2201 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.instr) = (yyvsp[0].instr); - } -#line 4205 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 135: -#line 2205 "hlsl.y" /* yacc.c:1646 */ - { - FIXME("Left shift\n"); - } -#line 4213 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 136: -#line 2209 "hlsl.y" /* yacc.c:1646 */ - { - FIXME("Right shift\n"); - } -#line 4221 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 137: -#line 2214 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.instr) = (yyvsp[0].instr); - } -#line 4229 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4294 "hlsl.tab.c" /* yacc.c:1646 */ break; case 138: -#line 2218 "hlsl.y" /* yacc.c:1646 */ +#line 2287 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.instr) = (yyvsp[0].instr); + } +#line 4302 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 139: +#line 2291 "hlsl.y" /* yacc.c:1646 */ + { + FIXME("Left shift\n"); + } +#line 4310 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 140: +#line 2295 "hlsl.y" /* yacc.c:1646 */ + { + FIXME("Right shift\n"); + } +#line 4318 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 141: +#line 2300 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.instr) = (yyvsp[0].instr); + } +#line 4326 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 142: +#line 2304 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; set_location(&loc, &(yylsp[-1])); (yyval.instr) = &hlsl_lt((yyvsp[-2].instr), (yyvsp[0].instr), &loc)->node; } -#line 4240 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4337 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 139: -#line 2225 "hlsl.y" /* yacc.c:1646 */ + case 143: +#line 2311 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; set_location(&loc, &(yylsp[-1])); (yyval.instr) = &hlsl_gt((yyvsp[-2].instr), (yyvsp[0].instr), &loc)->node; } -#line 4251 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4348 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 140: -#line 2232 "hlsl.y" /* yacc.c:1646 */ + case 144: +#line 2318 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; set_location(&loc, &(yylsp[-1])); (yyval.instr) = &hlsl_le((yyvsp[-2].instr), (yyvsp[0].instr), &loc)->node; } -#line 4262 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4359 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 141: -#line 2239 "hlsl.y" /* yacc.c:1646 */ + case 145: +#line 2325 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; set_location(&loc, &(yylsp[-1])); (yyval.instr) = &hlsl_ge((yyvsp[-2].instr), (yyvsp[0].instr), &loc)->node; } -#line 4273 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4370 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 142: -#line 2247 "hlsl.y" /* yacc.c:1646 */ + case 146: +#line 2333 "hlsl.y" /* yacc.c:1646 */ { (yyval.instr) = (yyvsp[0].instr); } -#line 4281 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4378 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 143: -#line 2251 "hlsl.y" /* yacc.c:1646 */ + case 147: +#line 2337 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; set_location(&loc, &(yylsp[-1])); (yyval.instr) = &hlsl_eq((yyvsp[-2].instr), (yyvsp[0].instr), &loc)->node; } -#line 4292 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4389 "hlsl.tab.c" /* yacc.c:1646 */ break; - case 144: -#line 2258 "hlsl.y" /* yacc.c:1646 */ + case 148: +#line 2344 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; set_location(&loc, &(yylsp[-1])); (yyval.instr) = &hlsl_ne((yyvsp[-2].instr), (yyvsp[0].instr), &loc)->node; } -#line 4303 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 145: -#line 2266 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.instr) = (yyvsp[0].instr); - } -#line 4311 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 146: -#line 2270 "hlsl.y" /* yacc.c:1646 */ - { - FIXME("bitwise AND\n"); - } -#line 4319 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 147: -#line 2275 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.instr) = (yyvsp[0].instr); - } -#line 4327 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 148: -#line 2279 "hlsl.y" /* yacc.c:1646 */ - { - FIXME("bitwise XOR\n"); - } -#line 4335 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4400 "hlsl.tab.c" /* yacc.c:1646 */ break; case 149: -#line 2284 "hlsl.y" /* yacc.c:1646 */ +#line 2352 "hlsl.y" /* yacc.c:1646 */ { (yyval.instr) = (yyvsp[0].instr); } -#line 4343 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4408 "hlsl.tab.c" /* yacc.c:1646 */ break; case 150: -#line 2288 "hlsl.y" /* yacc.c:1646 */ +#line 2356 "hlsl.y" /* yacc.c:1646 */ { - FIXME("bitwise OR\n"); + FIXME("bitwise AND\n"); } -#line 4351 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4416 "hlsl.tab.c" /* yacc.c:1646 */ break; case 151: -#line 2293 "hlsl.y" /* yacc.c:1646 */ +#line 2361 "hlsl.y" /* yacc.c:1646 */ { (yyval.instr) = (yyvsp[0].instr); } -#line 4359 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4424 "hlsl.tab.c" /* yacc.c:1646 */ break; case 152: -#line 2297 "hlsl.y" /* yacc.c:1646 */ +#line 2365 "hlsl.y" /* yacc.c:1646 */ { - FIXME("logic AND\n"); + FIXME("bitwise XOR\n"); } -#line 4367 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4432 "hlsl.tab.c" /* yacc.c:1646 */ break; case 153: -#line 2302 "hlsl.y" /* yacc.c:1646 */ +#line 2370 "hlsl.y" /* yacc.c:1646 */ { (yyval.instr) = (yyvsp[0].instr); } -#line 4375 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4440 "hlsl.tab.c" /* yacc.c:1646 */ break; case 154: -#line 2306 "hlsl.y" /* yacc.c:1646 */ +#line 2374 "hlsl.y" /* yacc.c:1646 */ { - FIXME("logic OR\n"); + FIXME("bitwise OR\n"); } -#line 4383 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4448 "hlsl.tab.c" /* yacc.c:1646 */ break; case 155: -#line 2311 "hlsl.y" /* yacc.c:1646 */ +#line 2379 "hlsl.y" /* yacc.c:1646 */ { (yyval.instr) = (yyvsp[0].instr); } -#line 4391 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4456 "hlsl.tab.c" /* yacc.c:1646 */ break; case 156: -#line 2315 "hlsl.y" /* yacc.c:1646 */ +#line 2383 "hlsl.y" /* yacc.c:1646 */ { - FIXME("ternary operator\n"); + FIXME("logic AND\n"); } -#line 4399 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4464 "hlsl.tab.c" /* yacc.c:1646 */ break; case 157: -#line 2320 "hlsl.y" /* yacc.c:1646 */ +#line 2388 "hlsl.y" /* yacc.c:1646 */ { (yyval.instr) = (yyvsp[0].instr); } -#line 4407 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4472 "hlsl.tab.c" /* yacc.c:1646 */ break; case 158: -#line 2324 "hlsl.y" /* yacc.c:1646 */ +#line 2392 "hlsl.y" /* yacc.c:1646 */ + { + FIXME("logic OR\n"); + } +#line 4480 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 159: +#line 2397 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.instr) = (yyvsp[0].instr); + } +#line 4488 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 160: +#line 2401 "hlsl.y" /* yacc.c:1646 */ + { + FIXME("ternary operator\n"); + } +#line 4496 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 161: +#line 2406 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.instr) = (yyvsp[0].instr); + } +#line 4504 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 162: +#line 2410 "hlsl.y" /* yacc.c:1646 */ { struct source_location loc; @@ -4418,115 +4515,115 @@ yyreduce: return 1; (yyval.instr)->loc = loc; } -#line 4427 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 159: -#line 2341 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.assign_op) = ASSIGN_OP_ASSIGN; - } -#line 4435 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 160: -#line 2345 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.assign_op) = ASSIGN_OP_ADD; - } -#line 4443 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 161: -#line 2349 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.assign_op) = ASSIGN_OP_SUB; - } -#line 4451 "hlsl.tab.c" /* yacc.c:1646 */ - break; - - case 162: -#line 2353 "hlsl.y" /* yacc.c:1646 */ - { - (yyval.assign_op) = ASSIGN_OP_MUL; - } -#line 4459 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4524 "hlsl.tab.c" /* yacc.c:1646 */ break; case 163: -#line 2357 "hlsl.y" /* yacc.c:1646 */ +#line 2427 "hlsl.y" /* yacc.c:1646 */ { - (yyval.assign_op) = ASSIGN_OP_DIV; + (yyval.assign_op) = ASSIGN_OP_ASSIGN; } -#line 4467 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4532 "hlsl.tab.c" /* yacc.c:1646 */ break; case 164: -#line 2361 "hlsl.y" /* yacc.c:1646 */ +#line 2431 "hlsl.y" /* yacc.c:1646 */ { - (yyval.assign_op) = ASSIGN_OP_MOD; + (yyval.assign_op) = ASSIGN_OP_ADD; } -#line 4475 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4540 "hlsl.tab.c" /* yacc.c:1646 */ break; case 165: -#line 2365 "hlsl.y" /* yacc.c:1646 */ +#line 2435 "hlsl.y" /* yacc.c:1646 */ { - (yyval.assign_op) = ASSIGN_OP_LSHIFT; + (yyval.assign_op) = ASSIGN_OP_SUB; } -#line 4483 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4548 "hlsl.tab.c" /* yacc.c:1646 */ break; case 166: -#line 2369 "hlsl.y" /* yacc.c:1646 */ +#line 2439 "hlsl.y" /* yacc.c:1646 */ { - (yyval.assign_op) = ASSIGN_OP_RSHIFT; + (yyval.assign_op) = ASSIGN_OP_MUL; } -#line 4491 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4556 "hlsl.tab.c" /* yacc.c:1646 */ break; case 167: -#line 2373 "hlsl.y" /* yacc.c:1646 */ +#line 2443 "hlsl.y" /* yacc.c:1646 */ { - (yyval.assign_op) = ASSIGN_OP_AND; + (yyval.assign_op) = ASSIGN_OP_DIV; } -#line 4499 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4564 "hlsl.tab.c" /* yacc.c:1646 */ break; case 168: -#line 2377 "hlsl.y" /* yacc.c:1646 */ +#line 2447 "hlsl.y" /* yacc.c:1646 */ { - (yyval.assign_op) = ASSIGN_OP_OR; + (yyval.assign_op) = ASSIGN_OP_MOD; } -#line 4507 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4572 "hlsl.tab.c" /* yacc.c:1646 */ break; case 169: -#line 2381 "hlsl.y" /* yacc.c:1646 */ +#line 2451 "hlsl.y" /* yacc.c:1646 */ { - (yyval.assign_op) = ASSIGN_OP_XOR; + (yyval.assign_op) = ASSIGN_OP_LSHIFT; } -#line 4515 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4580 "hlsl.tab.c" /* yacc.c:1646 */ break; case 170: -#line 2386 "hlsl.y" /* yacc.c:1646 */ +#line 2455 "hlsl.y" /* yacc.c:1646 */ { - (yyval.instr) = (yyvsp[0].instr); + (yyval.assign_op) = ASSIGN_OP_RSHIFT; } -#line 4523 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4588 "hlsl.tab.c" /* yacc.c:1646 */ break; case 171: -#line 2390 "hlsl.y" /* yacc.c:1646 */ +#line 2459 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.assign_op) = ASSIGN_OP_AND; + } +#line 4596 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 172: +#line 2463 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.assign_op) = ASSIGN_OP_OR; + } +#line 4604 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 173: +#line 2467 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.assign_op) = ASSIGN_OP_XOR; + } +#line 4612 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 174: +#line 2472 "hlsl.y" /* yacc.c:1646 */ + { + (yyval.instr) = (yyvsp[0].instr); + } +#line 4620 "hlsl.tab.c" /* yacc.c:1646 */ + break; + + case 175: +#line 2476 "hlsl.y" /* yacc.c:1646 */ { FIXME("Comma expression\n"); } -#line 4531 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4628 "hlsl.tab.c" /* yacc.c:1646 */ break; -#line 4535 "hlsl.tab.c" /* yacc.c:1646 */ +#line 4632 "hlsl.tab.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -4761,7 +4858,7 @@ yyreturn: #endif return yyresult; } -#line 2394 "hlsl.y" /* yacc.c:1906 */ +#line 2480 "hlsl.y" /* yacc.c:1906 */ static void set_location(struct source_location *loc, const struct YYLTYPE *l) diff --git a/reactos/dll/directx/wine/d3dcompiler_43/hlsl.tab.h b/reactos/dll/directx/wine/d3dcompiler_43/hlsl.tab.h index c08c4a983aa..c9fa66dfc71 100644 --- a/reactos/dll/directx/wine/d3dcompiler_43/hlsl.tab.h +++ b/reactos/dll/directx/wine/d3dcompiler_43/hlsl.tab.h @@ -155,7 +155,7 @@ extern int hlsl_debug; typedef union YYSTYPE YYSTYPE; union YYSTYPE { -#line 866 "hlsl.y" /* yacc.c:1909 */ +#line 910 "hlsl.y" /* yacc.c:1909 */ struct hlsl_type *type; INT intval; @@ -172,8 +172,10 @@ union YYSTYPE struct parse_if_body if_body; enum parse_unary_op unary_op; enum parse_assign_op assign_op; + struct reg_reservation *reg_reservation; + struct parse_colon_attribute colon_attribute; -#line 177 "hlsl.tab.h" /* yacc.c:1909 */ +#line 179 "hlsl.tab.h" /* yacc.c:1909 */ }; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 diff --git a/reactos/dll/directx/wine/d3dcompiler_43/hlsl.y b/reactos/dll/directx/wine/d3dcompiler_43/hlsl.y index f37e07eef09..c5f66d6a1be 100644 --- a/reactos/dll/directx/wine/d3dcompiler_43/hlsl.y +++ b/reactos/dll/directx/wine/d3dcompiler_43/hlsl.y @@ -597,6 +597,7 @@ static struct list *declare_vars(struct hlsl_type *basic_type, DWORD modifiers, var->name = v->name; var->modifiers = modifiers; var->semantic = v->semantic; + var->reg_reservation = v->reg_reservation; debug_dump_decl(type, modifiers, v->name, v->loc.line); if (hlsl_ctx.cur_scope == hlsl_ctx.globals) @@ -822,6 +823,7 @@ static BOOL add_func_parameter(struct list *list, struct parse_parameter *param, decl->node.loc = *loc; decl->name = param->name; decl->semantic = param->semantic; + decl->reg_reservation = param->reg_reservation; decl->modifiers = param->modifiers; if (!add_declaration(hlsl_ctx.cur_scope, decl, FALSE)) @@ -833,6 +835,48 @@ static BOOL add_func_parameter(struct list *list, struct parse_parameter *param, return TRUE; } +static struct reg_reservation *parse_reg_reservation(const char *reg_string) +{ + struct reg_reservation *reg_res; + enum bwritershader_param_register_type type; + DWORD regnum = 0; + + switch (reg_string[0]) + { + case 'c': + type = BWRITERSPR_CONST; + break; + case 'i': + type = BWRITERSPR_CONSTINT; + break; + case 'b': + type = BWRITERSPR_CONSTBOOL; + break; + case 's': + type = BWRITERSPR_SAMPLER; + break; + default: + FIXME("Unsupported register type.\n"); + return NULL; + } + + if (!sscanf(reg_string + 1, "%u", ®num)) + { + FIXME("Unsupported register reservation syntax.\n"); + return NULL; + } + + reg_res = d3dcompiler_alloc(sizeof(*reg_res)); + if (!reg_res) + { + ERR("Out of memory.\n"); + return NULL; + } + reg_res->type = type; + reg_res->regnum = regnum; + return reg_res; +} + static const struct hlsl_ir_function_decl *get_overloaded_func(struct wine_rb_tree *funcs, char *name, struct list *params, BOOL exact_signature) { @@ -879,6 +923,8 @@ static const struct hlsl_ir_function_decl *get_overloaded_func(struct wine_rb_tr struct parse_if_body if_body; enum parse_unary_op unary_op; enum parse_assign_op assign_op; + struct reg_reservation *reg_reservation; + struct parse_colon_attribute colon_attribute; } %token KW_BLENDSTATE @@ -1016,7 +1062,9 @@ static const struct hlsl_ir_function_decl *get_overloaded_func(struct wine_rb_tr %type func_prototype %type fields_list %type parameter +%type colon_attribute %type semantic +%type register_opt %type variable_def %type variables_def %type variables_def_optional @@ -1097,20 +1145,23 @@ hlsl_prog: /* empty */ preproc_directive: PRE_LINE STRING { + const char **new_array = NULL; + TRACE("Updating line information to file %s, line %u\n", debugstr_a($2), $1); hlsl_ctx.line_no = $1; if (strcmp($2, hlsl_ctx.source_file)) - { - const char **new_array; - - hlsl_ctx.source_file = $2; new_array = d3dcompiler_realloc(hlsl_ctx.source_files, sizeof(*hlsl_ctx.source_files) * hlsl_ctx.source_files_count + 1); - if (new_array) - { - hlsl_ctx.source_files = new_array; - hlsl_ctx.source_files[hlsl_ctx.source_files_count++] = $2; - } + + if (new_array) + { + hlsl_ctx.source_files = new_array; + hlsl_ctx.source_files[hlsl_ctx.source_files_count++] = $2; + hlsl_ctx.source_file = $2; + } + else + { + d3dcompiler_free($2); } } @@ -1221,7 +1272,7 @@ func_declaration: func_prototype compound_statement pop_scope(&hlsl_ctx); } -func_prototype: var_modifiers type var_identifier '(' parameters ')' semantic +func_prototype: var_modifiers type var_identifier '(' parameters ')' colon_attribute { if (get_variable(hlsl_ctx.globals, $3)) { @@ -1229,12 +1280,17 @@ func_prototype: var_modifiers type var_identifier '(' parameters ')' s HLSL_LEVEL_ERROR, "redefinition of '%s'\n", $3); return 1; } - if ($2->base_type == HLSL_TYPE_VOID && $7) + if ($2->base_type == HLSL_TYPE_VOID && $7.semantic) { hlsl_report_message(hlsl_ctx.source_file, @7.first_line, @7.first_column, HLSL_LEVEL_ERROR, "void function with a semantic"); } + if ($7.reg_reservation) + { + FIXME("Unexpected register reservation for a function.\n"); + d3dcompiler_free($7.reg_reservation); + } $$.decl = new_func_decl($2, $5); if (!$$.decl) { @@ -1242,7 +1298,7 @@ func_prototype: var_modifiers type var_identifier '(' parameters ')' s return -1; } $$.name = $3; - $$.decl->semantic = $7; + $$.decl->semantic = $7.semantic; set_location(&$$.decl->node.loc, &@3); } @@ -1265,15 +1321,42 @@ scope_start: /* Empty */ var_identifier: VAR_IDENTIFIER | NEW_IDENTIFIER -semantic: /* Empty */ +colon_attribute: /* Empty */ { - $$ = NULL; + $$.semantic = NULL; + $$.reg_reservation = NULL; } - | ':' any_identifier + | semantic + { + $$.semantic = $1; + $$.reg_reservation = NULL; + } + | register_opt + { + $$.semantic = NULL; + $$.reg_reservation = $1; + } + +semantic: ':' any_identifier { $$ = $2; } + /* FIXME: Writemasks */ +register_opt: ':' KW_REGISTER '(' any_identifier ')' + { + $$ = parse_reg_reservation($4); + d3dcompiler_free($4); + } + | ':' KW_REGISTER '(' any_identifier ',' any_identifier ')' + { + FIXME("Ignoring shader target %s in a register reservation.\n", debugstr_a($4)); + d3dcompiler_free($4); + + $$ = parse_reg_reservation($6); + d3dcompiler_free($6); + } + parameters: scope_start { $$ = d3dcompiler_alloc(sizeof(*$$)); @@ -1312,13 +1395,14 @@ param_list: parameter } } -parameter: input_mods var_modifiers type any_identifier semantic +parameter: input_mods var_modifiers type any_identifier colon_attribute { $$.modifiers = $1 ? $1 : HLSL_MODIFIER_IN; $$.modifiers |= $2; $$.type = $3; $$.name = $4; - $$.semantic = $5; + $$.semantic = $5.semantic; + $$.reg_reservation = $5.reg_reservation; } input_mods: /* Empty */ @@ -1523,22 +1607,24 @@ variables_def: variable_def list_add_tail($$, &$3->entry); } -variable_def: any_identifier array semantic +variable_def: any_identifier array colon_attribute { $$ = d3dcompiler_alloc(sizeof(*$$)); set_location(&$$->loc, &@1); $$->name = $1; $$->array_size = $2; - $$->semantic = $3; + $$->semantic = $3.semantic; + $$->reg_reservation = $3.reg_reservation; } - | any_identifier array semantic '=' complex_initializer + | any_identifier array colon_attribute '=' complex_initializer { TRACE("Declaration with initializer.\n"); $$ = d3dcompiler_alloc(sizeof(*$$)); set_location(&$$->loc, &@1); $$->name = $1; $$->array_size = $2; - $$->semantic = $3; + $$->semantic = $3.semantic; + $$->reg_reservation = $3.reg_reservation; $$->initializer = $5; } diff --git a/reactos/dll/directx/wine/d3dcompiler_43/utils.c b/reactos/dll/directx/wine/d3dcompiler_43/utils.c index aea0a56d2aa..aedfdce760e 100644 --- a/reactos/dll/directx/wine/d3dcompiler_43/utils.c +++ b/reactos/dll/directx/wine/d3dcompiler_43/utils.c @@ -797,6 +797,7 @@ void free_declaration(struct hlsl_ir_var *decl) { d3dcompiler_free((void *)decl->name); d3dcompiler_free((void *)decl->semantic); + d3dcompiler_free((void *)decl->reg_reservation); d3dcompiler_free(decl); } @@ -1579,8 +1580,31 @@ struct hlsl_ir_node *make_assignment(struct hlsl_ir_node *left, enum parse_assig type = left->data_type; else { - FIXME("Assignments with writemasks not supported yet.\n"); - type = NULL; + unsigned int dimx = 0; + DWORD bitmask; + enum hlsl_type_class type_class; + + if (left->data_type->type > HLSL_CLASS_LAST_NUMERIC) + { + hlsl_report_message(left->loc.file, left->loc.line, left->loc.col, HLSL_LEVEL_ERROR, + "writemask on a non scalar/vector/matrix type"); + d3dcompiler_free(assign); + return NULL; + } + bitmask = writemask & ((1 << left->data_type->dimx) - 1); + while (bitmask) + { + if (bitmask & 1) + dimx++; + bitmask >>= 1; + } + if (left->data_type->type == HLSL_CLASS_MATRIX) + FIXME("Assignments with writemasks and matrices on lhs are not supported yet.\n"); + if (dimx == 1) + type_class = HLSL_CLASS_SCALAR; + else + type_class = left->data_type->type; + type = new_hlsl_type(NULL, type_class, left->data_type->base_type, dimx, 1); } assign->node.type = HLSL_IR_ASSIGNMENT; assign->node.loc = left->loc; @@ -2440,12 +2464,12 @@ void free_instr(struct hlsl_ir_node *node) } } -static void free_function_decl(struct hlsl_ir_function_decl *func) +static void free_function_decl(struct hlsl_ir_function_decl *decl) { - d3dcompiler_free((void *)func->semantic); - d3dcompiler_free(func->parameters); - free_instr_list(func->body); - d3dcompiler_free(func); + d3dcompiler_free((void *)decl->semantic); + d3dcompiler_free(decl->parameters); + free_instr_list(decl->body); + d3dcompiler_free(decl); } static void free_function_decl_rb(struct wine_rb_entry *entry, void *context) @@ -2457,6 +2481,7 @@ static void free_function(struct hlsl_ir_function *func) { wine_rb_destroy(&func->overloads, free_function_decl_rb, NULL); d3dcompiler_free((void *)func->name); + d3dcompiler_free(func); } void free_function_rb(struct wine_rb_entry *entry, void *context) @@ -2473,6 +2498,22 @@ void add_function_decl(struct wine_rb_tree *funcs, char *name, struct hlsl_ir_fu if (func_entry) { func = WINE_RB_ENTRY_VALUE(func_entry, struct hlsl_ir_function, entry); + if (intrinsic != func->intrinsic) + { + if (intrinsic) + { + ERR("Redeclaring a user defined function as an intrinsic.\n"); + return; + } + TRACE("Function %s redeclared as a user defined function.\n", debugstr_a(name)); + func->intrinsic = intrinsic; + wine_rb_destroy(&func->overloads, free_function_decl_rb, NULL); + if (wine_rb_init(&func->overloads, &hlsl_ir_function_decl_rb_funcs) == -1) + { + ERR("Failed to initialize function rbtree.\n"); + return; + } + } decl->func = func; if ((old_entry = wine_rb_get(&func->overloads, decl->parameters))) { diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index ce76a8c6b5c..18094fd0618 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -24,7 +24,7 @@ The following libraries are shared with Wine. reactos/dll/directx/wine/amstream # Synced to WineStaging-1.7.47 reactos/dll/directx/wine/d3d8 # Synced to WineStaging-1.7.47 reactos/dll/directx/wine/d3d9 # Synced to WineStaging-1.7.47 -reactos/dll/directx/wine/d3dcompiler_43 # Synced to WineStaging-1.7.37 +reactos/dll/directx/wine/d3dcompiler_43 # Synced to WineStaging-1.7.47 reactos/dll/directx/wine/d3drm # Synced to WineStaging-1.7.47 reactos/dll/directx/wine/d3dx9_24 => 43 # Synced to WineStaging-1.7.37 reactos/dll/directx/wine/d3dxof # Synced to WineStaging-1.7.47