15Parser::Parser(Engine *engine,
const char *source,
unsigned size,
int variant)
16 : _engine(engine), _tos(-1), _index(0), yyloc(-1), yytoken(-1), yyrecovering(0), _recovered(
false)
18 _tokens.reserve(1024);
20 _stateStack.resize(128);
21 _locationStack.resize(128);
22 _symStack.resize(128);
24 _tokens.push_back(Token());
26 std::stack<
int> parenStack;
27 std::stack<
int> bracketStack;
28 std::stack<
int> braceStack;
30 Lexer lexer(engine, source, size);
31 lexer.setVariant(variant);
38 parenStack.push(
static_cast<
int>(_tokens.size()));
41 bracketStack.push(
static_cast<
int>(_tokens.size()));
44 braceStack.push(
static_cast<
int>(_tokens.size()));
48 if (! parenStack.empty()) {
49 _tokens[parenStack.top()].matchingBrace =
static_cast<
int>(_tokens.size());
54 if (! bracketStack.empty()) {
55 _tokens[bracketStack.top()].matchingBrace =
static_cast<
int>(_tokens.size());
60 if (! braceStack.empty()) {
61 _tokens[braceStack.top()].matchingBrace =
static_cast<
int>(_tokens.size());
69 _tokens.push_back(tk);
70 }
while (tk.isNot(EOF_SYMBOL));
79AST *Parser::parse(
int startToken)
84 void *yyval =
nullptr;
88 _startToken.kind = startToken;
89 int recoveryAttempts = 0;
96 if (
unsigned(++_tos) == _stateStack.size()) {
97 _stateStack.resize(_tos * 2);
98 _locationStack.resize(_tos * 2);
99 _symStack.resize(_tos * 2);
102 _stateStack[_tos] = action;
104 if (yytoken == -1 && -TERMINAL_COUNT != action_index[action]) {
105 yyloc = consumeToken();
106 yytoken = tokenKind(yyloc);
109 if (yytoken == T_IDENTIFIER && t_action(action, T_TYPE_NAME) != 0) {
110 const Token &la = tokenAt(_index);
112 if (la.is(T_IDENTIFIER)) {
113 yytoken = T_TYPE_NAME;
114 }
else if (la.is(T_LEFT_BRACKET) && la.matchingBrace != 0 &&
115 tokenAt(la.matchingBrace + 1).is(T_IDENTIFIER)) {
116 yytoken = T_TYPE_NAME;
119 yyval = _tokens.at(yyloc).ptr;
122 action = t_action(action, yytoken);
124 if (action == ACCEPT_STATE) {
126 return _symStack[0].translation_unit;
128 _symStack[_tos].ptr = yyval;
129 _locationStack[_tos] = yyloc;
131 }
else if (action < 0) {
132 const int ruleno = -action - 1;
133 const int N = rhs[ruleno];
136 action = nt_action(_stateStack[_tos], lhs[ruleno] - TERMINAL_COUNT);
137 }
else if (action == 0) {
139 if (recoveryAttempts > 10)
141 const int line = _tokens[yyloc].line + 1;
142 QString message = QLatin1String(
"Syntax error");
144 const QLatin1String s(spell[yytoken]);
145 message = QString::fromLatin1(
"Unexpected token `%1'").arg(s);
150 for (; _tos; --_tos) {
151 const int state = _stateStack[_tos];
153 static int tks1[] = {
154 T_RIGHT_BRACE, T_RIGHT_PAREN, T_RIGHT_BRACKET,
155 T_SEMICOLON, T_COLON, T_COMMA,
156 T_NUMBER, T_TYPE_NAME, T_IDENTIFIER,
157 T_LEFT_BRACE, T_LEFT_PAREN, T_LEFT_BRACKET,
161 static int tks2[] = {
162 T_RIGHT_BRACE, T_RIGHT_PAREN, T_RIGHT_BRACKET,
163 T_SEMICOLON, T_COLON, T_COMMA,
167 if (recoveryAttempts < 2)
172 for (
int *tptr = tks; *tptr; ++tptr) {
173 const int next = t_action(state, *tptr);
175 if (! yyrecovering && ! _recovered) {
177 error(line, QString::fromLatin1(
"Expected `%1'").arg(QLatin1String(spell[*tptr])));
181 if (*tptr == T_IDENTIFIER)
182 yyval = (
void *) _engine->identifier(QLatin1String(
"$identifier"));
183 else if (*tptr == T_NUMBER || *tptr == T_TYPE_NAME)
184 yyval = (
void *) _engine->identifier(QLatin1String(
"$0"));
188 _symStack[_tos].ptr = yyval;
189 _locationStack[_tos] = yyloc;
193 goto againAfterRecovery;
200 error(line, message);
211void Parser::reduce(
int ruleno)
218 ast(1) = makeAstNode<IdentifierExpressionAST>(string(1));
224 ast(1) = makeAstNode<LiteralExpressionAST>(string(1));
230 ast(1) = makeAstNode<LiteralExpressionAST>(_engine->identifier(
"true", 4));
236 ast(1) = makeAstNode<LiteralExpressionAST>(_engine->identifier(
"false", 5));
260 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_ArrayAccess, expression(1), expression(3));
272 ast(1) = makeAstNode<MemberAccessExpressionAST>(expression(1), string(3));
278 ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PostIncrement, expression(1));
284 ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PostDecrement, expression(1));
302 ast(1) = makeAstNode<FunctionCallExpressionAST>
303 (sym(1).function.id, sym(1).function.arguments);
309 ast(1) = makeAstNode<FunctionCallExpressionAST>
310 (expression(1), sym(3).function.id, sym(3).function.arguments);
328 sym(1).function.id = sym(1).function_identifier;
329 sym(1).function.arguments =
nullptr;
335 sym(1).function.id = sym(1).function_identifier;
336 sym(1).function.arguments =
nullptr;
342 sym(1).function.id = sym(1).function_identifier;
343 sym(1).function.arguments =
344 makeAstNode< List<ExpressionAST *> >(expression(2));
350 sym(1).function.arguments =
351 makeAstNode< List<ExpressionAST *> >
352 (sym(1).function.arguments, expression(3));
364 ast(1) = makeAstNode<FunctionIdentifierAST>(type(1));
370 ast(1) = makeAstNode<FunctionIdentifierAST>(string(1));
382 ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PreIncrement, expression(2));
388 ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PreDecrement, expression(2));
394 ast(1) = makeAstNode<UnaryExpressionAST>(sym(1).kind, expression(2));
400 sym(1).kind = AST::Kind_UnaryPlus;
406 sym(1).kind = AST::Kind_UnaryMinus;
412 sym(1).kind = AST::Kind_LogicalNot;
418 sym(1).kind = AST::Kind_BitwiseNot;
430 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Multiply, expression(1), expression(3));
436 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Divide, expression(1), expression(3));
442 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Modulus, expression(1), expression(3));
454 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Plus, expression(1), expression(3));
460 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Minus, expression(1), expression(3));
472 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_ShiftLeft, expression(1), expression(3));
478 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_ShiftRight, expression(1), expression(3));
490 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LessThan, expression(1), expression(3));
496 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_GreaterThan, expression(1), expression(3));
502 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LessEqual, expression(1), expression(3));
508 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_GreaterEqual, expression(1), expression(3));
520 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Equal, expression(1), expression(3));
526 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_NotEqual, expression(1), expression(3));
538 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_BitwiseAnd, expression(1), expression(3));
550 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_BitwiseXor, expression(1), expression(3));
562 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_BitwiseOr, expression(1), expression(3));
574 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LogicalAnd, expression(1), expression(3));
586 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LogicalXor, expression(1), expression(3));
598 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LogicalOr, expression(1), expression(3));
610 ast(1) = makeAstNode<TernaryExpressionAST>(AST::Kind_Conditional, expression(1), expression(3), expression(5));
622 ast(1) = makeAstNode<AssignmentExpressionAST>(sym(2).kind, expression(1), expression(3));
628 sym(1).kind = AST::Kind_Assign;
634 sym(1).kind = AST::Kind_AssignMultiply;
640 sym(1).kind = AST::Kind_AssignDivide;
646 sym(1).kind = AST::Kind_AssignModulus;
652 sym(1).kind = AST::Kind_AssignPlus;
658 sym(1).kind = AST::Kind_AssignMinus;
664 sym(1).kind = AST::Kind_AssignShiftLeft;
670 sym(1).kind = AST::Kind_AssignShiftRight;
676 sym(1).kind = AST::Kind_AssignAnd;
682 sym(1).kind = AST::Kind_AssignXor;
688 sym(1).kind = AST::Kind_AssignOr;
700 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Comma, expression(1), expression(3));
718 ast(1) = makeAstNode<InitDeclarationAST>(sym(1).declaration_list);
724 ast(1) = makeAstNode<PrecisionDeclarationAST>(sym(2).precision, type(3));
730 if (sym(1).type_qualifier.qualifier != QualifiedTypeAST::Struct) {
733 TypeAST *type = makeAstNode<StructTypeAST>(string(2), sym(4).field_list);
734 ast(1) = makeAstNode<TypeDeclarationAST>(type);
740 if ((sym(1).type_qualifier.qualifier & QualifiedTypeAST::Struct) == 0) {
743 TypeAST *type = makeAstNode<StructTypeAST>(string(2), sym(4).field_list);
744 TypeAST *qualtype = type;
745 if (sym(1).type_qualifier.qualifier != QualifiedTypeAST::Struct) {
746 qualtype = makeAstNode<QualifiedTypeAST>
747 (sym(1).type_qualifier.qualifier & ~QualifiedTypeAST::Struct, qualtype,
748 sym(1).type_qualifier.layout_list);
750 ast(1) = makeAstNode<TypeAndVariableDeclarationAST>
751 (makeAstNode<TypeDeclarationAST>(type),
752 makeAstNode<VariableDeclarationAST>(qualtype, string(6)));
758 if ((sym(1).type_qualifier.qualifier & QualifiedTypeAST::Struct) == 0) {
761 TypeAST *type = makeAstNode<StructTypeAST>(string(2), sym(4).field_list);
762 TypeAST *qualtype = type;
763 if (sym(1).type_qualifier.qualifier != QualifiedTypeAST::Struct) {
764 qualtype = makeAstNode<QualifiedTypeAST>
765 (sym(1).type_qualifier.qualifier & ~QualifiedTypeAST::Struct, qualtype,
766 sym(1).type_qualifier.layout_list);
768 ast(1) = makeAstNode<TypeAndVariableDeclarationAST>
769 (makeAstNode<TypeDeclarationAST>(type),
770 makeAstNode<VariableDeclarationAST>
771 (makeAstNode<ArrayTypeAST>(qualtype), string(6)));
777 if ((sym(1).type_qualifier.qualifier & QualifiedTypeAST::Struct) == 0) {
780 TypeAST *type = makeAstNode<StructTypeAST>(string(2), sym(4).field_list);
781 TypeAST *qualtype = type;
782 if (sym(1).type_qualifier.qualifier != QualifiedTypeAST::Struct) {
783 qualtype = makeAstNode<QualifiedTypeAST>
784 (sym(1).type_qualifier.qualifier & ~QualifiedTypeAST::Struct, qualtype,
785 sym(1).type_qualifier.layout_list);
787 ast(1) = makeAstNode<TypeAndVariableDeclarationAST>
788 (makeAstNode<TypeDeclarationAST>(type),
789 makeAstNode<VariableDeclarationAST>
790 (makeAstNode<ArrayTypeAST>(qualtype, expression(8)), string(6)));
796 TypeAST *type = makeAstNode<QualifiedTypeAST>
797 (sym(1).type_qualifier.qualifier, (TypeAST *)
nullptr,
798 sym(1).type_qualifier.layout_list);
799 ast(1) = makeAstNode<TypeDeclarationAST>(type);
805 function(1)->finishParams();
823 function(1)->params = makeAstNode< List<ParameterDeclarationAST *> >
824 (sym(2).param_declaration);
830 function(1)->params = makeAstNode< List<ParameterDeclarationAST *> >
831 (function(1)->params, sym(3).param_declaration);
837 function(1) = makeAstNode<FunctionDeclarationAST>(type(1), string(2));
843 sym(1).param_declarator.type = type(1);
844 sym(1).param_declarator.name = string(2);
850 sym(1).param_declarator.type = makeAstNode<ArrayTypeAST>(type(1), expression(4));
851 sym(1).param_declarator.name = string(2);
857 ast(1) = makeAstNode<ParameterDeclarationAST>
858 (makeAstNode<QualifiedTypeAST>
859 (sym(1).qualifier, sym(3).param_declarator.type,
860 (List<LayoutQualifierAST *> *)
nullptr),
861 ParameterDeclarationAST::Qualifier(sym(2).qualifier),
862 sym(3).param_declarator.name);
868 ast(1) = makeAstNode<ParameterDeclarationAST>
869 (sym(2).param_declarator.type,
870 ParameterDeclarationAST::Qualifier(sym(1).qualifier),
871 sym(2).param_declarator.name);
877 ast(1) = makeAstNode<ParameterDeclarationAST>
878 (makeAstNode<QualifiedTypeAST>
879 (sym(1).qualifier, type(3), (List<LayoutQualifierAST *> *)
nullptr),
880 ParameterDeclarationAST::Qualifier(sym(2).qualifier),
881 (
const QString *)
nullptr);
887 ast(1) = makeAstNode<ParameterDeclarationAST>
888 (type(2), ParameterDeclarationAST::Qualifier(sym(1).qualifier),
889 (
const QString *)
nullptr);
895 sym(1).qualifier = ParameterDeclarationAST::In;
901 sym(1).qualifier = ParameterDeclarationAST::In;
907 sym(1).qualifier = ParameterDeclarationAST::Out;
913 sym(1).qualifier = ParameterDeclarationAST::InOut;
925 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
926 (sym(1).declaration);
932 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
933 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>(type, string(3));
934 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
935 (sym(1).declaration_list, decl);
941 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
942 type = makeAstNode<ArrayTypeAST>(type);
943 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>(type, string(3));
944 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
945 (sym(1).declaration_list, decl);
951 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
952 type = makeAstNode<ArrayTypeAST>(type, expression(5));
953 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>(type, string(3));
954 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
955 (sym(1).declaration_list, decl);
961 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
962 type = makeAstNode<ArrayTypeAST>(type);
963 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>
964 (type, string(3), expression(7));
965 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
966 (sym(1).declaration_list, decl);
972 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
973 type = makeAstNode<ArrayTypeAST>(type, expression(5));
974 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>
975 (type, string(3), expression(8));
976 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
977 (sym(1).declaration_list, decl);
983 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
984 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>
985 (type, string(3), expression(5));
986 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
987 (sym(1).declaration_list, decl);
993 ast(1) = makeAstNode<TypeDeclarationAST>(type(1));
999 ast(1) = makeAstNode<VariableDeclarationAST>(type(1), string(2));
1002#line 1568
"./glsl.g"
1005 ast(1) = makeAstNode<VariableDeclarationAST>
1006 (makeAstNode<ArrayTypeAST>(type(1)), string(2));
1009#line 1576
"./glsl.g"
1012 ast(1) = makeAstNode<VariableDeclarationAST>
1013 (makeAstNode<ArrayTypeAST>(type(1), expression(4)), string(2));
1016#line 1584
"./glsl.g"
1019 ast(1) = makeAstNode<VariableDeclarationAST>
1020 (makeAstNode<ArrayTypeAST>(type(1)), string(2), expression(6));
1023#line 1592
"./glsl.g"
1026 ast(1) = makeAstNode<VariableDeclarationAST>
1027 (makeAstNode<ArrayTypeAST>(type(1), expression(4)),
1028 string(2), expression(7));
1031#line 1601
"./glsl.g"
1034 ast(1) = makeAstNode<VariableDeclarationAST>
1035 (type(1), string(2), expression(4));
1038#line 1609
"./glsl.g"
1041 ast(1) = makeAstNode<InvariantDeclarationAST>(string(2));
1044#line 1616
"./glsl.g"
1047 ast(1) = makeAstNode<QualifiedTypeAST>(0, type(1), (List<LayoutQualifierAST *> *)
nullptr);
1050#line 1623
"./glsl.g"
1053 ast(1) = makeAstNode<QualifiedTypeAST>
1054 (sym(1).type_qualifier.qualifier, type(2),
1055 sym(1).type_qualifier.layout_list);
1058#line 1632
"./glsl.g"
1061 sym(1).qualifier = QualifiedTypeAST::Invariant;
1064#line 1639
"./glsl.g"
1067 sym(1).qualifier = QualifiedTypeAST::Smooth;
1070#line 1646
"./glsl.g"
1073 sym(1).qualifier = QualifiedTypeAST::Flat;
1076#line 1653
"./glsl.g"
1079 sym(1).qualifier = QualifiedTypeAST::NoPerspective;
1082#line 1660
"./glsl.g"
1088#line 1667
"./glsl.g"
1091 sym(1).layout_list = makeAstNode< List<LayoutQualifierAST *> >(sym(1).layout);
1094#line 1674
"./glsl.g"
1097 sym(1).layout_list = makeAstNode< List<LayoutQualifierAST *> >(sym(1).layout_list, sym(3).layout);
1100#line 1681
"./glsl.g"
1103 sym(1).layout = makeAstNode<LayoutQualifierAST>(string(1), (
const QString *)
nullptr);
1106#line 1688
"./glsl.g"
1109 sym(1).layout = makeAstNode<LayoutQualifierAST>(string(1), string(3));
1112#line 1695
"./glsl.g"
1115 sym(1).qualifier = QualifiedTypeAST::Const;
1118#line 1702
"./glsl.g"
1121 sym(1).type_qualifier.qualifier = sym(1).qualifier;
1122 sym(1).type_qualifier.layout_list =
nullptr;
1125#line 1710
"./glsl.g"
1128 sym(1).type_qualifier.layout_list = sym(1).layout_list;
1129 sym(1).type_qualifier.qualifier = 0;
1132#line 1718
"./glsl.g"
1135 sym(1).type_qualifier.layout_list = sym(1).layout_list;
1136 sym(1).type_qualifier.qualifier = sym(2).qualifier;
1139#line 1726
"./glsl.g"
1142 sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier;
1143 sym(1).type_qualifier.layout_list =
nullptr;
1146#line 1734
"./glsl.g"
1149 sym(1).type_qualifier.qualifier = sym(1).qualifier;
1150 sym(1).type_qualifier.layout_list =
nullptr;
1153#line 1742
"./glsl.g"
1156 sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier;
1157 sym(1).type_qualifier.layout_list =
nullptr;
1160#line 1750
"./glsl.g"
1163 sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier | sym(3).qualifier;
1164 sym(1).type_qualifier.layout_list =
nullptr;
1167#line 1758
"./glsl.g"
1170 sym(1).type_qualifier.qualifier = QualifiedTypeAST::Invariant;
1171 sym(1).type_qualifier.layout_list =
nullptr;
1174#line 1766
"./glsl.g"
1177 sym(1).qualifier = QualifiedTypeAST::Const;
1180#line 1773
"./glsl.g"
1183 sym(1).qualifier = QualifiedTypeAST::Attribute;
1186#line 1780
"./glsl.g"
1189 sym(1).qualifier = QualifiedTypeAST::Varying;
1192#line 1787
"./glsl.g"
1195 sym(1).qualifier = QualifiedTypeAST::CentroidVarying;
1198#line 1794
"./glsl.g"
1201 sym(1).qualifier = QualifiedTypeAST::In;
1204#line 1801
"./glsl.g"
1207 sym(1).qualifier = QualifiedTypeAST::Out;
1210#line 1808
"./glsl.g"
1213 sym(1).qualifier = QualifiedTypeAST::CentroidIn;
1216#line 1815
"./glsl.g"
1219 sym(1).qualifier = QualifiedTypeAST::CentroidOut;
1222#line 1822
"./glsl.g"
1225 sym(1).qualifier = QualifiedTypeAST::PatchIn;
1228#line 1829
"./glsl.g"
1231 sym(1).qualifier = QualifiedTypeAST::PatchOut;
1234#line 1836
"./glsl.g"
1237 sym(1).qualifier = QualifiedTypeAST::SampleIn;
1240#line 1843
"./glsl.g"
1243 sym(1).qualifier = QualifiedTypeAST::SampleOut;
1246#line 1850
"./glsl.g"
1249 sym(1).qualifier = QualifiedTypeAST::Uniform;
1252#line 1857
"./glsl.g"
1258#line 1864
"./glsl.g"
1261 if (!type(2)->setPrecision(sym(1).precision)) {
1267#line 1874
"./glsl.g"
1273#line 1881
"./glsl.g"
1276 ast(1) = makeAstNode<ArrayTypeAST>(type(1));
1279#line 1888
"./glsl.g"
1282 ast(1) = makeAstNode<ArrayTypeAST>(type(1), expression(3));
1285#line 1895
"./glsl.g"
1288 ast(1) = makeBasicType(T_VOID);
1291#line 1902
"./glsl.g"
1294 ast(1) = makeBasicType(T_FLOAT);
1297#line 1909
"./glsl.g"
1300 ast(1) = makeBasicType(T_DOUBLE);
1303#line 1916
"./glsl.g"
1306 ast(1) = makeBasicType(T_INT);
1309#line 1923
"./glsl.g"
1312 ast(1) = makeBasicType(T_UINT);
1315#line 1930
"./glsl.g"
1318 ast(1) = makeBasicType(T_BOOL);
1321#line 1937
"./glsl.g"
1324 ast(1) = makeBasicType(T_VEC2);
1327#line 1944
"./glsl.g"
1330 ast(1) = makeBasicType(T_VEC3);
1333#line 1951
"./glsl.g"
1336 ast(1) = makeBasicType(T_VEC4);
1339#line 1958
"./glsl.g"
1342 ast(1) = makeBasicType(T_DVEC2);
1345#line 1965
"./glsl.g"
1348 ast(1) = makeBasicType(T_DVEC3);
1351#line 1972
"./glsl.g"
1354 ast(1) = makeBasicType(T_DVEC4);
1357#line 1979
"./glsl.g"
1360 ast(1) = makeBasicType(T_BVEC2);
1363#line 1986
"./glsl.g"
1366 ast(1) = makeBasicType(T_BVEC3);
1369#line 1993
"./glsl.g"
1372 ast(1) = makeBasicType(T_BVEC4);
1375#line 2000
"./glsl.g"
1378 ast(1) = makeBasicType(T_IVEC2);
1381#line 2007
"./glsl.g"
1384 ast(1) = makeBasicType(T_IVEC3);
1387#line 2014
"./glsl.g"
1390 ast(1) = makeBasicType(T_IVEC4);
1393#line 2021
"./glsl.g"
1396 ast(1) = makeBasicType(T_UVEC2);
1399#line 2028
"./glsl.g"
1402 ast(1) = makeBasicType(T_UVEC3);
1405#line 2035
"./glsl.g"
1408 ast(1) = makeBasicType(T_UVEC4);
1411#line 2042
"./glsl.g"
1414 ast(1) = makeBasicType(T_MAT2);
1417#line 2049
"./glsl.g"
1420 ast(1) = makeBasicType(T_MAT3);
1423#line 2056
"./glsl.g"
1426 ast(1) = makeBasicType(T_MAT4);
1429#line 2063
"./glsl.g"
1432 ast(1) = makeBasicType(T_MAT2);
1435#line 2070
"./glsl.g"
1438 ast(1) = makeBasicType(T_MAT2X3);
1441#line 2077
"./glsl.g"
1444 ast(1) = makeBasicType(T_MAT2X4);
1447#line 2084
"./glsl.g"
1450 ast(1) = makeBasicType(T_MAT3X2);
1453#line 2091
"./glsl.g"
1456 ast(1) = makeBasicType(T_MAT3);
1459#line 2098
"./glsl.g"
1462 ast(1) = makeBasicType(T_MAT3X4);
1465#line 2105
"./glsl.g"
1468 ast(1) = makeBasicType(T_MAT4X2);
1471#line 2112
"./glsl.g"
1474 ast(1) = makeBasicType(T_MAT4X3);
1477#line 2119
"./glsl.g"
1480 ast(1) = makeBasicType(T_MAT4);
1483#line 2126
"./glsl.g"
1486 ast(1) = makeBasicType(T_DMAT2);
1489#line 2133
"./glsl.g"
1492 ast(1) = makeBasicType(T_DMAT3);
1495#line 2140
"./glsl.g"
1498 ast(1) = makeBasicType(T_DMAT4);
1501#line 2147
"./glsl.g"
1504 ast(1) = makeBasicType(T_DMAT2);
1507#line 2154
"./glsl.g"
1510 ast(1) = makeBasicType(T_DMAT2X3);
1513#line 2161
"./glsl.g"
1516 ast(1) = makeBasicType(T_DMAT2X4);
1519#line 2168
"./glsl.g"
1522 ast(1) = makeBasicType(T_DMAT3X2);
1525#line 2175
"./glsl.g"
1528 ast(1) = makeBasicType(T_DMAT3);
1531#line 2182
"./glsl.g"
1534 ast(1) = makeBasicType(T_DMAT3X4);
1537#line 2189
"./glsl.g"
1540 ast(1) = makeBasicType(T_DMAT4X2);
1543#line 2196
"./glsl.g"
1546 ast(1) = makeBasicType(T_DMAT4X3);
1549#line 2203
"./glsl.g"
1552 ast(1) = makeBasicType(T_DMAT4);
1555#line 2210
"./glsl.g"
1558 ast(1) = makeBasicType(T_SAMPLER1D);
1561#line 2217
"./glsl.g"
1564 ast(1) = makeBasicType(T_SAMPLER2D);
1567#line 2224
"./glsl.g"
1570 ast(1) = makeBasicType(T_SAMPLER3D);
1573#line 2231
"./glsl.g"
1576 ast(1) = makeBasicType(T_SAMPLERCUBE);
1579#line 2238
"./glsl.g"
1582 ast(1) = makeBasicType(T_SAMPLER1DSHADOW);
1585#line 2245
"./glsl.g"
1588 ast(1) = makeBasicType(T_SAMPLER2DSHADOW);
1591#line 2252
"./glsl.g"
1594 ast(1) = makeBasicType(T_SAMPLERCUBESHADOW);
1597#line 2259
"./glsl.g"
1600 ast(1) = makeBasicType(T_SAMPLER1DARRAY);
1603#line 2266
"./glsl.g"
1606 ast(1) = makeBasicType(T_SAMPLER2DARRAY);
1609#line 2273
"./glsl.g"
1612 ast(1) = makeBasicType(T_SAMPLER1DARRAYSHADOW);
1615#line 2280
"./glsl.g"
1618 ast(1) = makeBasicType(T_SAMPLER2DARRAYSHADOW);
1621#line 2287
"./glsl.g"
1624 ast(1) = makeBasicType(T_SAMPLERCUBEARRAY);
1627#line 2294
"./glsl.g"
1630 ast(1) = makeBasicType(T_SAMPLERCUBEARRAYSHADOW);
1633#line 2301
"./glsl.g"
1636 ast(1) = makeBasicType(T_ISAMPLER1D);
1639#line 2308
"./glsl.g"
1642 ast(1) = makeBasicType(T_ISAMPLER2D);
1645#line 2315
"./glsl.g"
1648 ast(1) = makeBasicType(T_ISAMPLER3D);
1651#line 2322
"./glsl.g"
1654 ast(1) = makeBasicType(T_ISAMPLERCUBE);
1657#line 2329
"./glsl.g"
1660 ast(1) = makeBasicType(T_ISAMPLER1DARRAY);
1663#line 2336
"./glsl.g"
1666 ast(1) = makeBasicType(T_ISAMPLER2DARRAY);
1669#line 2343
"./glsl.g"
1672 ast(1) = makeBasicType(T_ISAMPLERCUBEARRAY);
1675#line 2350
"./glsl.g"
1678 ast(1) = makeBasicType(T_USAMPLER1D);
1681#line 2357
"./glsl.g"
1684 ast(1) = makeBasicType(T_USAMPLER2D);
1687#line 2364
"./glsl.g"
1690 ast(1) = makeBasicType(T_USAMPLER3D);
1693#line 2371
"./glsl.g"
1696 ast(1) = makeBasicType(T_USAMPLERCUBE);
1699#line 2378
"./glsl.g"
1702 ast(1) = makeBasicType(T_USAMPLER1DARRAY);
1705#line 2385
"./glsl.g"
1708 ast(1) = makeBasicType(T_USAMPLER2DARRAY);
1711#line 2392
"./glsl.g"
1714 ast(1) = makeBasicType(T_USAMPLERCUBEARRAY);
1717#line 2399
"./glsl.g"
1720 ast(1) = makeBasicType(T_SAMPLER2DRECT);
1723#line 2406
"./glsl.g"
1726 ast(1) = makeBasicType(T_SAMPLER2DRECTSHADOW);
1729#line 2413
"./glsl.g"
1732 ast(1) = makeBasicType(T_ISAMPLER2DRECT);
1735#line 2420
"./glsl.g"
1738 ast(1) = makeBasicType(T_USAMPLER2DRECT);
1741#line 2427
"./glsl.g"
1744 ast(1) = makeBasicType(T_SAMPLERBUFFER);
1747#line 2434
"./glsl.g"
1750 ast(1) = makeBasicType(T_ISAMPLERBUFFER);
1753#line 2441
"./glsl.g"
1756 ast(1) = makeBasicType(T_USAMPLERBUFFER);
1759#line 2448
"./glsl.g"
1762 ast(1) = makeBasicType(T_SAMPLER2DMS);
1765#line 2455
"./glsl.g"
1768 ast(1) = makeBasicType(T_ISAMPLER2DMS);
1771#line 2462
"./glsl.g"
1774 ast(1) = makeBasicType(T_USAMPLER2DMS);
1777#line 2469
"./glsl.g"
1780 ast(1) = makeBasicType(T_SAMPLER2DMSARRAY);
1783#line 2476
"./glsl.g"
1786 ast(1) = makeBasicType(T_ISAMPLER2DMSARRAY);
1789#line 2483
"./glsl.g"
1792 ast(1) = makeBasicType(T_USAMPLER2DMSARRAY);
1795#line 2490
"./glsl.g"
1801#line 2497
"./glsl.g"
1804 ast(1) = makeAstNode<NamedTypeAST>(string(1));
1807#line 2504
"./glsl.g"
1810 sym(1).precision = TypeAST::Highp;
1813#line 2511
"./glsl.g"
1816 sym(1).precision = TypeAST::Mediump;
1819#line 2518
"./glsl.g"
1822 sym(1).precision = TypeAST::Lowp;
1825#line 2525
"./glsl.g"
1828 ast(1) = makeAstNode<StructTypeAST>(string(2), sym(4).field_list);
1831#line 2532
"./glsl.g"
1834 ast(1) = makeAstNode<StructTypeAST>(sym(3).field_list);
1837#line 2539
"./glsl.g"
1843#line 2546
"./glsl.g"
1846 sym(1).field_list = appendLists(sym(1).field_list, sym(2).field_list);
1849#line 2553
"./glsl.g"
1852 sym(1).field_list = StructTypeAST::fixInnerTypes(type(1), sym(2).field_list);
1855#line 2560
"./glsl.g"
1858 sym(1).field_list = StructTypeAST::fixInnerTypes
1859 (makeAstNode<QualifiedTypeAST>
1860 (sym(1).type_qualifier.qualifier, type(2),
1861 sym(1).type_qualifier.layout_list), sym(3).field_list);
1864#line 2570
"./glsl.g"
1868 sym(1).field_list = makeAstNode< List<StructTypeAST::Field *> >(sym(1).field);
1871#line 2578
"./glsl.g"
1874 sym(1).field_list = makeAstNode< List<StructTypeAST::Field *> >(sym(1).field_list, sym(3).field);
1877#line 2585
"./glsl.g"
1880 sym(1).field = makeAstNode<StructTypeAST::Field>(string(1));
1883#line 2592
"./glsl.g"
1886 sym(1).field = makeAstNode<StructTypeAST::Field>
1887 (string(1), makeAstNode<ArrayTypeAST>((TypeAST *)
nullptr));
1890#line 2600
"./glsl.g"
1893 sym(1).field = makeAstNode<StructTypeAST::Field>
1894 (string(1), makeAstNode<ArrayTypeAST>((TypeAST *)
nullptr, expression(3)));
1897#line 2608
"./glsl.g"
1903#line 2615
"./glsl.g"
1906 ast(1) = makeAstNode<DeclarationStatementAST>(sym(1).declaration);
1909#line 2622
"./glsl.g"
1915#line 2629
"./glsl.g"
1921#line 2636
"./glsl.g"
1927#line 2643
"./glsl.g"
1933#line 2650
"./glsl.g"
1939#line 2657
"./glsl.g"
1945#line 2664
"./glsl.g"
1951#line 2671
"./glsl.g"
1957#line 2678
"./glsl.g"
1963#line 2685
"./glsl.g"
1966 CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>();
1967 stmt->start = tokenAt(location(1)).begin();
1968 stmt->end = tokenAt(location(2)).end();
1972#line 2695
"./glsl.g"
1975 CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>(sym(2).statement_list);
1976 stmt->start = tokenAt(location(1)).begin();
1977 stmt->end = tokenAt(location(3)).end();
1981#line 2705
"./glsl.g"
1987#line 2712
"./glsl.g"
1993#line 2719
"./glsl.g"
1996 CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>();
1997 stmt->start = tokenAt(location(1)).begin();
1998 stmt->end = tokenAt(location(2)).end();
2002#line 2729
"./glsl.g"
2005 CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>(sym(2).statement_list);
2006 stmt->start = tokenAt(location(1)).begin();
2007 stmt->end = tokenAt(location(3)).end();
2011#line 2739
"./glsl.g"
2014 sym(1).statement_list = makeAstNode< List<StatementAST *> >(sym(1).statement);
2017#line 2746
"./glsl.g"
2020 sym(1).statement_list = makeAstNode< List<StatementAST *> >(sym(1).statement_list, sym(2).statement);
2023#line 2753
"./glsl.g"
2026 ast(1) = makeAstNode<CompoundStatementAST>();
2029#line 2760
"./glsl.g"
2032 ast(1) = makeAstNode<ExpressionStatementAST>(expression(1));
2035#line 2767
"./glsl.g"
2038 ast(1) = makeAstNode<IfStatementAST>(expression(3), sym(5).ifstmt.thenClause, sym(5).ifstmt.elseClause);
2041#line 2774
"./glsl.g"
2044 sym(1).ifstmt.thenClause = statement(1);
2045 sym(1).ifstmt.elseClause = statement(3);
2048#line 2782
"./glsl.g"
2051 sym(1).ifstmt.thenClause = statement(1);
2052 sym(1).ifstmt.elseClause =
nullptr;
2055#line 2790
"./glsl.g"
2061#line 2797
"./glsl.g"
2064 ast(1) = makeAstNode<DeclarationExpressionAST>
2065 (type(1), string(2), expression(4));
2068#line 2805
"./glsl.g"
2071 ast(1) = makeAstNode<SwitchStatementAST>(expression(3), statement(6));
2074#line 2812
"./glsl.g"
2077 ast(1) = makeAstNode<CompoundStatementAST>();
2080#line 2819
"./glsl.g"
2083 ast(1) = makeAstNode<CompoundStatementAST>(sym(1).statement_list);
2086#line 2826
"./glsl.g"
2089 ast(1) = makeAstNode<CaseLabelStatementAST>(expression(2));
2092#line 2833
"./glsl.g"
2095 ast(1) = makeAstNode<CaseLabelStatementAST>();
2098#line 2840
"./glsl.g"
2101 ast(1) = makeAstNode<WhileStatementAST>(expression(3), statement(5));
2104#line 2847
"./glsl.g"
2107 ast(1) = makeAstNode<DoStatementAST>(statement(2), expression(5));
2110#line 2854
"./glsl.g"
2113 ast(1) = makeAstNode<ForStatementAST>(statement(3), sym(4).forstmt.condition, sym(4).forstmt.increment, statement(6));
2116#line 2861
"./glsl.g"
2122#line 2868
"./glsl.g"
2128#line 2875
"./glsl.g"
2134#line 2882
"./glsl.g"
2140#line 2889
"./glsl.g"
2143 sym(1).forstmt.condition = expression(1);
2144 sym(1).forstmt.increment =
nullptr;
2147#line 2897
"./glsl.g"
2150 sym(1).forstmt.condition = expression(1);
2151 sym(1).forstmt.increment = expression(3);
2154#line 2905
"./glsl.g"
2157 ast(1) = makeAstNode<JumpStatementAST>(AST::Kind_Continue);
2160#line 2912
"./glsl.g"
2163 ast(1) = makeAstNode<JumpStatementAST>(AST::Kind_Break);
2166#line 2919
"./glsl.g"
2169 ast(1) = makeAstNode<ReturnStatementAST>();
2172#line 2926
"./glsl.g"
2175 ast(1) = makeAstNode<ReturnStatementAST>(expression(2));
2178#line 2933
"./glsl.g"
2181 ast(1) = makeAstNode<JumpStatementAST>(AST::Kind_Discard);
2184#line 2940
"./glsl.g"
2187 ast(1) = makeAstNode<TranslationUnitAST>(sym(1).declaration_list);
2190#line 2947
"./glsl.g"
2193 if (sym(1).declaration) {
2194 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
2195 (sym(1).declaration);
2197 sym(1).declaration_list =
nullptr;
2201#line 2959
"./glsl.g"
2204 if (sym(1).declaration_list && sym(2).declaration) {
2205 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
2206 (sym(1).declaration_list, sym(2).declaration);
2207 }
else if (!sym(1).declaration_list) {
2208 if (sym(2).declaration) {
2209 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
2210 (sym(2).declaration);
2212 sym(1).declaration_list =
nullptr;
2217#line 2976
"./glsl.g"
2223#line 2983
"./glsl.g"
2229#line 2990
"./glsl.g"
2235#line 2997
"./glsl.g"
2238 function(1)->body = statement(2);
2241#line 3004
"./glsl.g"
2247#line 3012
"./glsl.g"
2253#line 3019
"./glsl.g"
2259#line 3025
"./glsl.g"