13Parser::Parser(Engine *engine,
const char *source,
unsigned size,
int variant)
14 : _engine(engine), _tos(-1), _index(0), yyloc(-1), yytoken(-1), yyrecovering(0), _recovered(
false)
16 _tokens.reserve(1024);
18 _stateStack.resize(128);
19 _locationStack.resize(128);
20 _symStack.resize(128);
22 _tokens.push_back(Token());
24 std::stack<
int> parenStack;
25 std::stack<
int> bracketStack;
26 std::stack<
int> braceStack;
28 Lexer lexer(engine, source, size);
29 lexer.setVariant(variant);
36 parenStack.push(
static_cast<
int>(_tokens.size()));
39 bracketStack.push(
static_cast<
int>(_tokens.size()));
42 braceStack.push(
static_cast<
int>(_tokens.size()));
46 if (! parenStack.empty()) {
47 _tokens[parenStack.top()].matchingBrace =
static_cast<
int>(_tokens.size());
52 if (! bracketStack.empty()) {
53 _tokens[bracketStack.top()].matchingBrace =
static_cast<
int>(_tokens.size());
58 if (! braceStack.empty()) {
59 _tokens[braceStack.top()].matchingBrace =
static_cast<
int>(_tokens.size());
67 _tokens.push_back(tk);
68 }
while (tk.isNot(EOF_SYMBOL));
77AST *Parser::parse(
int startToken)
82 void *yyval =
nullptr;
86 _startToken.kind = startToken;
87 int recoveryAttempts = 0;
94 if (
unsigned(++_tos) == _stateStack.size()) {
95 _stateStack.resize(_tos * 2);
96 _locationStack.resize(_tos * 2);
97 _symStack.resize(_tos * 2);
100 _stateStack[_tos] = action;
102 if (yytoken == -1 && -TERMINAL_COUNT != action_index[action]) {
103 yyloc = consumeToken();
104 yytoken = tokenKind(yyloc);
107 if (yytoken == T_IDENTIFIER && t_action(action, T_TYPE_NAME) != 0) {
108 const Token &la = tokenAt(_index);
110 if (la.is(T_IDENTIFIER)) {
111 yytoken = T_TYPE_NAME;
112 }
else if (la.is(T_LEFT_BRACKET) && la.matchingBrace != 0 &&
113 tokenAt(la.matchingBrace + 1).is(T_IDENTIFIER)) {
114 yytoken = T_TYPE_NAME;
117 yyval = _tokens.at(yyloc).ptr;
120 action = t_action(action, yytoken);
122 if (action == ACCEPT_STATE) {
124 return _symStack[0].translation_unit;
126 _symStack[_tos].ptr = yyval;
127 _locationStack[_tos] = yyloc;
129 }
else if (action < 0) {
130 const int ruleno = -action - 1;
131 const int N = rhs[ruleno];
134 action = nt_action(_stateStack[_tos], lhs[ruleno] - TERMINAL_COUNT);
135 }
else if (action == 0) {
137 if (recoveryAttempts > 10)
139 const int line = _tokens[yyloc].line + 1;
140 QString message = QLatin1String(
"Syntax error");
142 const QLatin1String s(spell[yytoken]);
143 message = QString::fromLatin1(
"Unexpected token `%1'").arg(s);
148 for (; _tos; --_tos) {
149 const int state = _stateStack[_tos];
151 static int tks1[] = {
152 T_RIGHT_BRACE, T_RIGHT_PAREN, T_RIGHT_BRACKET,
153 T_SEMICOLON, T_COLON, T_COMMA,
154 T_NUMBER, T_TYPE_NAME, T_IDENTIFIER,
155 T_LEFT_BRACE, T_LEFT_PAREN, T_LEFT_BRACKET,
159 static int tks2[] = {
160 T_RIGHT_BRACE, T_RIGHT_PAREN, T_RIGHT_BRACKET,
161 T_SEMICOLON, T_COLON, T_COMMA,
165 if (recoveryAttempts < 2)
170 for (
int *tptr = tks; *tptr; ++tptr) {
171 const int next = t_action(state, *tptr);
173 if (! yyrecovering && ! _recovered) {
175 error(line, QString::fromLatin1(
"Expected `%1'").arg(QLatin1String(spell[*tptr])));
179 if (*tptr == T_IDENTIFIER)
180 yyval = (
void *) _engine->identifier(QLatin1String(
"$identifier"));
181 else if (*tptr == T_NUMBER || *tptr == T_TYPE_NAME)
182 yyval = (
void *) _engine->identifier(QLatin1String(
"$0"));
186 _symStack[_tos].ptr = yyval;
187 _locationStack[_tos] = yyloc;
191 goto againAfterRecovery;
198 error(line, message);
209void Parser::reduce(
int ruleno)
216 ast(1) = makeAstNode<IdentifierExpressionAST>(string(1));
222 ast(1) = makeAstNode<LiteralExpressionAST>(string(1));
228 ast(1) = makeAstNode<LiteralExpressionAST>(_engine->identifier(
"true", 4));
234 ast(1) = makeAstNode<LiteralExpressionAST>(_engine->identifier(
"false", 5));
258 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_ArrayAccess, expression(1), expression(3));
270 ast(1) = makeAstNode<MemberAccessExpressionAST>(expression(1), string(3));
276 ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PostIncrement, expression(1));
282 ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PostDecrement, expression(1));
300 ast(1) = makeAstNode<FunctionCallExpressionAST>
301 (sym(1).function.id, sym(1).function.arguments);
307 ast(1) = makeAstNode<FunctionCallExpressionAST>
308 (expression(1), sym(3).function.id, sym(3).function.arguments);
326 sym(1).function.id = sym(1).function_identifier;
327 sym(1).function.arguments =
nullptr;
333 sym(1).function.id = sym(1).function_identifier;
334 sym(1).function.arguments =
nullptr;
340 sym(1).function.id = sym(1).function_identifier;
341 sym(1).function.arguments =
342 makeAstNode< List<ExpressionAST *> >(expression(2));
348 sym(1).function.arguments =
349 makeAstNode< List<ExpressionAST *> >
350 (sym(1).function.arguments, expression(3));
362 ast(1) = makeAstNode<FunctionIdentifierAST>(type(1));
368 ast(1) = makeAstNode<FunctionIdentifierAST>(string(1));
380 ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PreIncrement, expression(2));
386 ast(1) = makeAstNode<UnaryExpressionAST>(AST::Kind_PreDecrement, expression(2));
392 ast(1) = makeAstNode<UnaryExpressionAST>(sym(1).kind, expression(2));
398 sym(1).kind = AST::Kind_UnaryPlus;
404 sym(1).kind = AST::Kind_UnaryMinus;
410 sym(1).kind = AST::Kind_LogicalNot;
416 sym(1).kind = AST::Kind_BitwiseNot;
428 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Multiply, expression(1), expression(3));
434 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Divide, expression(1), expression(3));
440 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Modulus, expression(1), expression(3));
452 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Plus, expression(1), expression(3));
458 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Minus, expression(1), expression(3));
470 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_ShiftLeft, expression(1), expression(3));
476 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_ShiftRight, expression(1), expression(3));
488 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LessThan, expression(1), expression(3));
494 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_GreaterThan, expression(1), expression(3));
500 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LessEqual, expression(1), expression(3));
506 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_GreaterEqual, expression(1), expression(3));
518 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Equal, expression(1), expression(3));
524 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_NotEqual, expression(1), expression(3));
536 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_BitwiseAnd, expression(1), expression(3));
548 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_BitwiseXor, expression(1), expression(3));
560 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_BitwiseOr, expression(1), expression(3));
572 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LogicalAnd, expression(1), expression(3));
584 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LogicalXor, expression(1), expression(3));
596 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_LogicalOr, expression(1), expression(3));
608 ast(1) = makeAstNode<TernaryExpressionAST>(AST::Kind_Conditional, expression(1), expression(3), expression(5));
620 ast(1) = makeAstNode<AssignmentExpressionAST>(sym(2).kind, expression(1), expression(3));
626 sym(1).kind = AST::Kind_Assign;
632 sym(1).kind = AST::Kind_AssignMultiply;
638 sym(1).kind = AST::Kind_AssignDivide;
644 sym(1).kind = AST::Kind_AssignModulus;
650 sym(1).kind = AST::Kind_AssignPlus;
656 sym(1).kind = AST::Kind_AssignMinus;
662 sym(1).kind = AST::Kind_AssignShiftLeft;
668 sym(1).kind = AST::Kind_AssignShiftRight;
674 sym(1).kind = AST::Kind_AssignAnd;
680 sym(1).kind = AST::Kind_AssignXor;
686 sym(1).kind = AST::Kind_AssignOr;
698 ast(1) = makeAstNode<BinaryExpressionAST>(AST::Kind_Comma, expression(1), expression(3));
716 ast(1) = makeAstNode<InitDeclarationAST>(sym(1).declaration_list);
722 ast(1) = makeAstNode<PrecisionDeclarationAST>(sym(2).precision, type(3));
728 if (sym(1).type_qualifier.qualifier != QualifiedTypeAST::Struct) {
731 TypeAST *type = makeAstNode<StructTypeAST>(string(2), sym(4).field_list);
732 ast(1) = makeAstNode<TypeDeclarationAST>(type);
738 if ((sym(1).type_qualifier.qualifier & QualifiedTypeAST::Struct) == 0) {
741 TypeAST *type = makeAstNode<StructTypeAST>(string(2), sym(4).field_list);
742 TypeAST *qualtype = type;
743 if (sym(1).type_qualifier.qualifier != QualifiedTypeAST::Struct) {
744 qualtype = makeAstNode<QualifiedTypeAST>
745 (sym(1).type_qualifier.qualifier & ~QualifiedTypeAST::Struct, qualtype,
746 sym(1).type_qualifier.layout_list);
748 ast(1) = makeAstNode<TypeAndVariableDeclarationAST>
749 (makeAstNode<TypeDeclarationAST>(type),
750 makeAstNode<VariableDeclarationAST>(qualtype, string(6)));
756 if ((sym(1).type_qualifier.qualifier & QualifiedTypeAST::Struct) == 0) {
759 TypeAST *type = makeAstNode<StructTypeAST>(string(2), sym(4).field_list);
760 TypeAST *qualtype = type;
761 if (sym(1).type_qualifier.qualifier != QualifiedTypeAST::Struct) {
762 qualtype = makeAstNode<QualifiedTypeAST>
763 (sym(1).type_qualifier.qualifier & ~QualifiedTypeAST::Struct, qualtype,
764 sym(1).type_qualifier.layout_list);
766 ast(1) = makeAstNode<TypeAndVariableDeclarationAST>
767 (makeAstNode<TypeDeclarationAST>(type),
768 makeAstNode<VariableDeclarationAST>
769 (makeAstNode<ArrayTypeAST>(qualtype), string(6)));
775 if ((sym(1).type_qualifier.qualifier & QualifiedTypeAST::Struct) == 0) {
778 TypeAST *type = makeAstNode<StructTypeAST>(string(2), sym(4).field_list);
779 TypeAST *qualtype = type;
780 if (sym(1).type_qualifier.qualifier != QualifiedTypeAST::Struct) {
781 qualtype = makeAstNode<QualifiedTypeAST>
782 (sym(1).type_qualifier.qualifier & ~QualifiedTypeAST::Struct, qualtype,
783 sym(1).type_qualifier.layout_list);
785 ast(1) = makeAstNode<TypeAndVariableDeclarationAST>
786 (makeAstNode<TypeDeclarationAST>(type),
787 makeAstNode<VariableDeclarationAST>
788 (makeAstNode<ArrayTypeAST>(qualtype, expression(8)), string(6)));
794 TypeAST *type = makeAstNode<QualifiedTypeAST>
795 (sym(1).type_qualifier.qualifier, (TypeAST *)
nullptr,
796 sym(1).type_qualifier.layout_list);
797 ast(1) = makeAstNode<TypeDeclarationAST>(type);
803 function(1)->finishParams();
821 function(1)->params = makeAstNode< List<ParameterDeclarationAST *> >
822 (sym(2).param_declaration);
828 function(1)->params = makeAstNode< List<ParameterDeclarationAST *> >
829 (function(1)->params, sym(3).param_declaration);
835 function(1) = makeAstNode<FunctionDeclarationAST>(type(1), string(2));
841 sym(1).param_declarator.type = type(1);
842 sym(1).param_declarator.name = string(2);
848 sym(1).param_declarator.type = makeAstNode<ArrayTypeAST>(type(1), expression(4));
849 sym(1).param_declarator.name = string(2);
855 ast(1) = makeAstNode<ParameterDeclarationAST>
856 (makeAstNode<QualifiedTypeAST>
857 (sym(1).qualifier, sym(3).param_declarator.type,
858 (List<LayoutQualifierAST *> *)
nullptr),
859 ParameterDeclarationAST::Qualifier(sym(2).qualifier),
860 sym(3).param_declarator.name);
866 ast(1) = makeAstNode<ParameterDeclarationAST>
867 (sym(2).param_declarator.type,
868 ParameterDeclarationAST::Qualifier(sym(1).qualifier),
869 sym(2).param_declarator.name);
875 ast(1) = makeAstNode<ParameterDeclarationAST>
876 (makeAstNode<QualifiedTypeAST>
877 (sym(1).qualifier, type(3), (List<LayoutQualifierAST *> *)
nullptr),
878 ParameterDeclarationAST::Qualifier(sym(2).qualifier),
879 (
const QString *)
nullptr);
885 ast(1) = makeAstNode<ParameterDeclarationAST>
886 (type(2), ParameterDeclarationAST::Qualifier(sym(1).qualifier),
887 (
const QString *)
nullptr);
893 sym(1).qualifier = ParameterDeclarationAST::In;
899 sym(1).qualifier = ParameterDeclarationAST::In;
905 sym(1).qualifier = ParameterDeclarationAST::Out;
911 sym(1).qualifier = ParameterDeclarationAST::InOut;
923 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
924 (sym(1).declaration);
930 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
931 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>(type, string(3));
932 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
933 (sym(1).declaration_list, decl);
939 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
940 type = makeAstNode<ArrayTypeAST>(type);
941 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>(type, string(3));
942 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
943 (sym(1).declaration_list, decl);
949 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
950 type = makeAstNode<ArrayTypeAST>(type, expression(5));
951 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>(type, string(3));
952 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
953 (sym(1).declaration_list, decl);
959 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
960 type = makeAstNode<ArrayTypeAST>(type);
961 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>
962 (type, string(3), expression(7));
963 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
964 (sym(1).declaration_list, decl);
970 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
971 type = makeAstNode<ArrayTypeAST>(type, expression(5));
972 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>
973 (type, string(3), expression(8));
974 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
975 (sym(1).declaration_list, decl);
981 TypeAST *type = VariableDeclarationAST::declarationType(sym(1).declaration_list);
982 DeclarationAST *decl = makeAstNode<VariableDeclarationAST>
983 (type, string(3), expression(5));
984 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
985 (sym(1).declaration_list, decl);
991 ast(1) = makeAstNode<TypeDeclarationAST>(type(1));
997 ast(1) = makeAstNode<VariableDeclarationAST>(type(1), string(2));
1000#line 1568
"./glsl.g"
1003 ast(1) = makeAstNode<VariableDeclarationAST>
1004 (makeAstNode<ArrayTypeAST>(type(1)), string(2));
1007#line 1576
"./glsl.g"
1010 ast(1) = makeAstNode<VariableDeclarationAST>
1011 (makeAstNode<ArrayTypeAST>(type(1), expression(4)), string(2));
1014#line 1584
"./glsl.g"
1017 ast(1) = makeAstNode<VariableDeclarationAST>
1018 (makeAstNode<ArrayTypeAST>(type(1)), string(2), expression(6));
1021#line 1592
"./glsl.g"
1024 ast(1) = makeAstNode<VariableDeclarationAST>
1025 (makeAstNode<ArrayTypeAST>(type(1), expression(4)),
1026 string(2), expression(7));
1029#line 1601
"./glsl.g"
1032 ast(1) = makeAstNode<VariableDeclarationAST>
1033 (type(1), string(2), expression(4));
1036#line 1609
"./glsl.g"
1039 ast(1) = makeAstNode<InvariantDeclarationAST>(string(2));
1042#line 1616
"./glsl.g"
1045 ast(1) = makeAstNode<QualifiedTypeAST>(0, type(1), (List<LayoutQualifierAST *> *)
nullptr);
1048#line 1623
"./glsl.g"
1051 ast(1) = makeAstNode<QualifiedTypeAST>
1052 (sym(1).type_qualifier.qualifier, type(2),
1053 sym(1).type_qualifier.layout_list);
1056#line 1632
"./glsl.g"
1059 sym(1).qualifier = QualifiedTypeAST::Invariant;
1062#line 1639
"./glsl.g"
1065 sym(1).qualifier = QualifiedTypeAST::Smooth;
1068#line 1646
"./glsl.g"
1071 sym(1).qualifier = QualifiedTypeAST::Flat;
1074#line 1653
"./glsl.g"
1077 sym(1).qualifier = QualifiedTypeAST::NoPerspective;
1080#line 1660
"./glsl.g"
1086#line 1667
"./glsl.g"
1089 sym(1).layout_list = makeAstNode< List<LayoutQualifierAST *> >(sym(1).layout);
1092#line 1674
"./glsl.g"
1095 sym(1).layout_list = makeAstNode< List<LayoutQualifierAST *> >(sym(1).layout_list, sym(3).layout);
1098#line 1681
"./glsl.g"
1101 sym(1).layout = makeAstNode<LayoutQualifierAST>(string(1), (
const QString *)
nullptr);
1104#line 1688
"./glsl.g"
1107 sym(1).layout = makeAstNode<LayoutQualifierAST>(string(1), string(3));
1110#line 1695
"./glsl.g"
1113 sym(1).qualifier = QualifiedTypeAST::Const;
1116#line 1702
"./glsl.g"
1119 sym(1).type_qualifier.qualifier = sym(1).qualifier;
1120 sym(1).type_qualifier.layout_list =
nullptr;
1123#line 1710
"./glsl.g"
1126 sym(1).type_qualifier.layout_list = sym(1).layout_list;
1127 sym(1).type_qualifier.qualifier = 0;
1130#line 1718
"./glsl.g"
1133 sym(1).type_qualifier.layout_list = sym(1).layout_list;
1134 sym(1).type_qualifier.qualifier = sym(2).qualifier;
1137#line 1726
"./glsl.g"
1140 sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier;
1141 sym(1).type_qualifier.layout_list =
nullptr;
1144#line 1734
"./glsl.g"
1147 sym(1).type_qualifier.qualifier = sym(1).qualifier;
1148 sym(1).type_qualifier.layout_list =
nullptr;
1151#line 1742
"./glsl.g"
1154 sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier;
1155 sym(1).type_qualifier.layout_list =
nullptr;
1158#line 1750
"./glsl.g"
1161 sym(1).type_qualifier.qualifier = sym(1).qualifier | sym(2).qualifier | sym(3).qualifier;
1162 sym(1).type_qualifier.layout_list =
nullptr;
1165#line 1758
"./glsl.g"
1168 sym(1).type_qualifier.qualifier = QualifiedTypeAST::Invariant;
1169 sym(1).type_qualifier.layout_list =
nullptr;
1172#line 1766
"./glsl.g"
1175 sym(1).qualifier = QualifiedTypeAST::Const;
1178#line 1773
"./glsl.g"
1181 sym(1).qualifier = QualifiedTypeAST::Attribute;
1184#line 1780
"./glsl.g"
1187 sym(1).qualifier = QualifiedTypeAST::Varying;
1190#line 1787
"./glsl.g"
1193 sym(1).qualifier = QualifiedTypeAST::CentroidVarying;
1196#line 1794
"./glsl.g"
1199 sym(1).qualifier = QualifiedTypeAST::In;
1202#line 1801
"./glsl.g"
1205 sym(1).qualifier = QualifiedTypeAST::Out;
1208#line 1808
"./glsl.g"
1211 sym(1).qualifier = QualifiedTypeAST::CentroidIn;
1214#line 1815
"./glsl.g"
1217 sym(1).qualifier = QualifiedTypeAST::CentroidOut;
1220#line 1822
"./glsl.g"
1223 sym(1).qualifier = QualifiedTypeAST::PatchIn;
1226#line 1829
"./glsl.g"
1229 sym(1).qualifier = QualifiedTypeAST::PatchOut;
1232#line 1836
"./glsl.g"
1235 sym(1).qualifier = QualifiedTypeAST::SampleIn;
1238#line 1843
"./glsl.g"
1241 sym(1).qualifier = QualifiedTypeAST::SampleOut;
1244#line 1850
"./glsl.g"
1247 sym(1).qualifier = QualifiedTypeAST::Uniform;
1250#line 1857
"./glsl.g"
1256#line 1864
"./glsl.g"
1259 if (!type(2)->setPrecision(sym(1).precision)) {
1265#line 1874
"./glsl.g"
1271#line 1881
"./glsl.g"
1274 ast(1) = makeAstNode<ArrayTypeAST>(type(1));
1277#line 1888
"./glsl.g"
1280 ast(1) = makeAstNode<ArrayTypeAST>(type(1), expression(3));
1283#line 1895
"./glsl.g"
1286 ast(1) = makeBasicType(T_VOID);
1289#line 1902
"./glsl.g"
1292 ast(1) = makeBasicType(T_FLOAT);
1295#line 1909
"./glsl.g"
1298 ast(1) = makeBasicType(T_DOUBLE);
1301#line 1916
"./glsl.g"
1304 ast(1) = makeBasicType(T_INT);
1307#line 1923
"./glsl.g"
1310 ast(1) = makeBasicType(T_UINT);
1313#line 1930
"./glsl.g"
1316 ast(1) = makeBasicType(T_BOOL);
1319#line 1937
"./glsl.g"
1322 ast(1) = makeBasicType(T_VEC2);
1325#line 1944
"./glsl.g"
1328 ast(1) = makeBasicType(T_VEC3);
1331#line 1951
"./glsl.g"
1334 ast(1) = makeBasicType(T_VEC4);
1337#line 1958
"./glsl.g"
1340 ast(1) = makeBasicType(T_DVEC2);
1343#line 1965
"./glsl.g"
1346 ast(1) = makeBasicType(T_DVEC3);
1349#line 1972
"./glsl.g"
1352 ast(1) = makeBasicType(T_DVEC4);
1355#line 1979
"./glsl.g"
1358 ast(1) = makeBasicType(T_BVEC2);
1361#line 1986
"./glsl.g"
1364 ast(1) = makeBasicType(T_BVEC3);
1367#line 1993
"./glsl.g"
1370 ast(1) = makeBasicType(T_BVEC4);
1373#line 2000
"./glsl.g"
1376 ast(1) = makeBasicType(T_IVEC2);
1379#line 2007
"./glsl.g"
1382 ast(1) = makeBasicType(T_IVEC3);
1385#line 2014
"./glsl.g"
1388 ast(1) = makeBasicType(T_IVEC4);
1391#line 2021
"./glsl.g"
1394 ast(1) = makeBasicType(T_UVEC2);
1397#line 2028
"./glsl.g"
1400 ast(1) = makeBasicType(T_UVEC3);
1403#line 2035
"./glsl.g"
1406 ast(1) = makeBasicType(T_UVEC4);
1409#line 2042
"./glsl.g"
1412 ast(1) = makeBasicType(T_MAT2);
1415#line 2049
"./glsl.g"
1418 ast(1) = makeBasicType(T_MAT3);
1421#line 2056
"./glsl.g"
1424 ast(1) = makeBasicType(T_MAT4);
1427#line 2063
"./glsl.g"
1430 ast(1) = makeBasicType(T_MAT2);
1433#line 2070
"./glsl.g"
1436 ast(1) = makeBasicType(T_MAT2X3);
1439#line 2077
"./glsl.g"
1442 ast(1) = makeBasicType(T_MAT2X4);
1445#line 2084
"./glsl.g"
1448 ast(1) = makeBasicType(T_MAT3X2);
1451#line 2091
"./glsl.g"
1454 ast(1) = makeBasicType(T_MAT3);
1457#line 2098
"./glsl.g"
1460 ast(1) = makeBasicType(T_MAT3X4);
1463#line 2105
"./glsl.g"
1466 ast(1) = makeBasicType(T_MAT4X2);
1469#line 2112
"./glsl.g"
1472 ast(1) = makeBasicType(T_MAT4X3);
1475#line 2119
"./glsl.g"
1478 ast(1) = makeBasicType(T_MAT4);
1481#line 2126
"./glsl.g"
1484 ast(1) = makeBasicType(T_DMAT2);
1487#line 2133
"./glsl.g"
1490 ast(1) = makeBasicType(T_DMAT3);
1493#line 2140
"./glsl.g"
1496 ast(1) = makeBasicType(T_DMAT4);
1499#line 2147
"./glsl.g"
1502 ast(1) = makeBasicType(T_DMAT2);
1505#line 2154
"./glsl.g"
1508 ast(1) = makeBasicType(T_DMAT2X3);
1511#line 2161
"./glsl.g"
1514 ast(1) = makeBasicType(T_DMAT2X4);
1517#line 2168
"./glsl.g"
1520 ast(1) = makeBasicType(T_DMAT3X2);
1523#line 2175
"./glsl.g"
1526 ast(1) = makeBasicType(T_DMAT3);
1529#line 2182
"./glsl.g"
1532 ast(1) = makeBasicType(T_DMAT3X4);
1535#line 2189
"./glsl.g"
1538 ast(1) = makeBasicType(T_DMAT4X2);
1541#line 2196
"./glsl.g"
1544 ast(1) = makeBasicType(T_DMAT4X3);
1547#line 2203
"./glsl.g"
1550 ast(1) = makeBasicType(T_DMAT4);
1553#line 2210
"./glsl.g"
1556 ast(1) = makeBasicType(T_SAMPLER1D);
1559#line 2217
"./glsl.g"
1562 ast(1) = makeBasicType(T_SAMPLER2D);
1565#line 2224
"./glsl.g"
1568 ast(1) = makeBasicType(T_SAMPLER3D);
1571#line 2231
"./glsl.g"
1574 ast(1) = makeBasicType(T_SAMPLERCUBE);
1577#line 2238
"./glsl.g"
1580 ast(1) = makeBasicType(T_SAMPLER1DSHADOW);
1583#line 2245
"./glsl.g"
1586 ast(1) = makeBasicType(T_SAMPLER2DSHADOW);
1589#line 2252
"./glsl.g"
1592 ast(1) = makeBasicType(T_SAMPLERCUBESHADOW);
1595#line 2259
"./glsl.g"
1598 ast(1) = makeBasicType(T_SAMPLER1DARRAY);
1601#line 2266
"./glsl.g"
1604 ast(1) = makeBasicType(T_SAMPLER2DARRAY);
1607#line 2273
"./glsl.g"
1610 ast(1) = makeBasicType(T_SAMPLER1DARRAYSHADOW);
1613#line 2280
"./glsl.g"
1616 ast(1) = makeBasicType(T_SAMPLER2DARRAYSHADOW);
1619#line 2287
"./glsl.g"
1622 ast(1) = makeBasicType(T_SAMPLERCUBEARRAY);
1625#line 2294
"./glsl.g"
1628 ast(1) = makeBasicType(T_SAMPLERCUBEARRAYSHADOW);
1631#line 2301
"./glsl.g"
1634 ast(1) = makeBasicType(T_ISAMPLER1D);
1637#line 2308
"./glsl.g"
1640 ast(1) = makeBasicType(T_ISAMPLER2D);
1643#line 2315
"./glsl.g"
1646 ast(1) = makeBasicType(T_ISAMPLER3D);
1649#line 2322
"./glsl.g"
1652 ast(1) = makeBasicType(T_ISAMPLERCUBE);
1655#line 2329
"./glsl.g"
1658 ast(1) = makeBasicType(T_ISAMPLER1DARRAY);
1661#line 2336
"./glsl.g"
1664 ast(1) = makeBasicType(T_ISAMPLER2DARRAY);
1667#line 2343
"./glsl.g"
1670 ast(1) = makeBasicType(T_ISAMPLERCUBEARRAY);
1673#line 2350
"./glsl.g"
1676 ast(1) = makeBasicType(T_USAMPLER1D);
1679#line 2357
"./glsl.g"
1682 ast(1) = makeBasicType(T_USAMPLER2D);
1685#line 2364
"./glsl.g"
1688 ast(1) = makeBasicType(T_USAMPLER3D);
1691#line 2371
"./glsl.g"
1694 ast(1) = makeBasicType(T_USAMPLERCUBE);
1697#line 2378
"./glsl.g"
1700 ast(1) = makeBasicType(T_USAMPLER1DARRAY);
1703#line 2385
"./glsl.g"
1706 ast(1) = makeBasicType(T_USAMPLER2DARRAY);
1709#line 2392
"./glsl.g"
1712 ast(1) = makeBasicType(T_USAMPLERCUBEARRAY);
1715#line 2399
"./glsl.g"
1718 ast(1) = makeBasicType(T_SAMPLER2DRECT);
1721#line 2406
"./glsl.g"
1724 ast(1) = makeBasicType(T_SAMPLER2DRECTSHADOW);
1727#line 2413
"./glsl.g"
1730 ast(1) = makeBasicType(T_ISAMPLER2DRECT);
1733#line 2420
"./glsl.g"
1736 ast(1) = makeBasicType(T_USAMPLER2DRECT);
1739#line 2427
"./glsl.g"
1742 ast(1) = makeBasicType(T_SAMPLERBUFFER);
1745#line 2434
"./glsl.g"
1748 ast(1) = makeBasicType(T_ISAMPLERBUFFER);
1751#line 2441
"./glsl.g"
1754 ast(1) = makeBasicType(T_USAMPLERBUFFER);
1757#line 2448
"./glsl.g"
1760 ast(1) = makeBasicType(T_SAMPLER2DMS);
1763#line 2455
"./glsl.g"
1766 ast(1) = makeBasicType(T_ISAMPLER2DMS);
1769#line 2462
"./glsl.g"
1772 ast(1) = makeBasicType(T_USAMPLER2DMS);
1775#line 2469
"./glsl.g"
1778 ast(1) = makeBasicType(T_SAMPLER2DMSARRAY);
1781#line 2476
"./glsl.g"
1784 ast(1) = makeBasicType(T_ISAMPLER2DMSARRAY);
1787#line 2483
"./glsl.g"
1790 ast(1) = makeBasicType(T_USAMPLER2DMSARRAY);
1793#line 2490
"./glsl.g"
1799#line 2497
"./glsl.g"
1802 ast(1) = makeAstNode<NamedTypeAST>(string(1));
1805#line 2504
"./glsl.g"
1808 sym(1).precision = TypeAST::Highp;
1811#line 2511
"./glsl.g"
1814 sym(1).precision = TypeAST::Mediump;
1817#line 2518
"./glsl.g"
1820 sym(1).precision = TypeAST::Lowp;
1823#line 2525
"./glsl.g"
1826 ast(1) = makeAstNode<StructTypeAST>(string(2), sym(4).field_list);
1829#line 2532
"./glsl.g"
1832 ast(1) = makeAstNode<StructTypeAST>(sym(3).field_list);
1835#line 2539
"./glsl.g"
1841#line 2546
"./glsl.g"
1844 sym(1).field_list = appendLists(sym(1).field_list, sym(2).field_list);
1847#line 2553
"./glsl.g"
1850 sym(1).field_list = StructTypeAST::fixInnerTypes(type(1), sym(2).field_list);
1853#line 2560
"./glsl.g"
1856 sym(1).field_list = StructTypeAST::fixInnerTypes
1857 (makeAstNode<QualifiedTypeAST>
1858 (sym(1).type_qualifier.qualifier, type(2),
1859 sym(1).type_qualifier.layout_list), sym(3).field_list);
1862#line 2570
"./glsl.g"
1866 sym(1).field_list = makeAstNode< List<StructTypeAST::Field *> >(sym(1).field);
1869#line 2578
"./glsl.g"
1872 sym(1).field_list = makeAstNode< List<StructTypeAST::Field *> >(sym(1).field_list, sym(3).field);
1875#line 2585
"./glsl.g"
1878 sym(1).field = makeAstNode<StructTypeAST::Field>(string(1));
1881#line 2592
"./glsl.g"
1884 sym(1).field = makeAstNode<StructTypeAST::Field>
1885 (string(1), makeAstNode<ArrayTypeAST>((TypeAST *)
nullptr));
1888#line 2600
"./glsl.g"
1891 sym(1).field = makeAstNode<StructTypeAST::Field>
1892 (string(1), makeAstNode<ArrayTypeAST>((TypeAST *)
nullptr, expression(3)));
1895#line 2608
"./glsl.g"
1901#line 2615
"./glsl.g"
1904 ast(1) = makeAstNode<DeclarationStatementAST>(sym(1).declaration);
1907#line 2622
"./glsl.g"
1913#line 2629
"./glsl.g"
1919#line 2636
"./glsl.g"
1925#line 2643
"./glsl.g"
1931#line 2650
"./glsl.g"
1937#line 2657
"./glsl.g"
1943#line 2664
"./glsl.g"
1949#line 2671
"./glsl.g"
1955#line 2678
"./glsl.g"
1961#line 2685
"./glsl.g"
1964 CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>();
1965 stmt->start = tokenAt(location(1)).begin();
1966 stmt->end = tokenAt(location(2)).end();
1970#line 2695
"./glsl.g"
1973 CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>(sym(2).statement_list);
1974 stmt->start = tokenAt(location(1)).begin();
1975 stmt->end = tokenAt(location(3)).end();
1979#line 2705
"./glsl.g"
1985#line 2712
"./glsl.g"
1991#line 2719
"./glsl.g"
1994 CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>();
1995 stmt->start = tokenAt(location(1)).begin();
1996 stmt->end = tokenAt(location(2)).end();
2000#line 2729
"./glsl.g"
2003 CompoundStatementAST *stmt = makeAstNode<CompoundStatementAST>(sym(2).statement_list);
2004 stmt->start = tokenAt(location(1)).begin();
2005 stmt->end = tokenAt(location(3)).end();
2009#line 2739
"./glsl.g"
2012 sym(1).statement_list = makeAstNode< List<StatementAST *> >(sym(1).statement);
2015#line 2746
"./glsl.g"
2018 sym(1).statement_list = makeAstNode< List<StatementAST *> >(sym(1).statement_list, sym(2).statement);
2021#line 2753
"./glsl.g"
2024 ast(1) = makeAstNode<CompoundStatementAST>();
2027#line 2760
"./glsl.g"
2030 ast(1) = makeAstNode<ExpressionStatementAST>(expression(1));
2033#line 2767
"./glsl.g"
2036 ast(1) = makeAstNode<IfStatementAST>(expression(3), sym(5).ifstmt.thenClause, sym(5).ifstmt.elseClause);
2039#line 2774
"./glsl.g"
2042 sym(1).ifstmt.thenClause = statement(1);
2043 sym(1).ifstmt.elseClause = statement(3);
2046#line 2782
"./glsl.g"
2049 sym(1).ifstmt.thenClause = statement(1);
2050 sym(1).ifstmt.elseClause =
nullptr;
2053#line 2790
"./glsl.g"
2059#line 2797
"./glsl.g"
2062 ast(1) = makeAstNode<DeclarationExpressionAST>
2063 (type(1), string(2), expression(4));
2066#line 2805
"./glsl.g"
2069 ast(1) = makeAstNode<SwitchStatementAST>(expression(3), statement(6));
2072#line 2812
"./glsl.g"
2075 ast(1) = makeAstNode<CompoundStatementAST>();
2078#line 2819
"./glsl.g"
2081 ast(1) = makeAstNode<CompoundStatementAST>(sym(1).statement_list);
2084#line 2826
"./glsl.g"
2087 ast(1) = makeAstNode<CaseLabelStatementAST>(expression(2));
2090#line 2833
"./glsl.g"
2093 ast(1) = makeAstNode<CaseLabelStatementAST>();
2096#line 2840
"./glsl.g"
2099 ast(1) = makeAstNode<WhileStatementAST>(expression(3), statement(5));
2102#line 2847
"./glsl.g"
2105 ast(1) = makeAstNode<DoStatementAST>(statement(2), expression(5));
2108#line 2854
"./glsl.g"
2111 ast(1) = makeAstNode<ForStatementAST>(statement(3), sym(4).forstmt.condition, sym(4).forstmt.increment, statement(6));
2114#line 2861
"./glsl.g"
2120#line 2868
"./glsl.g"
2126#line 2875
"./glsl.g"
2132#line 2882
"./glsl.g"
2138#line 2889
"./glsl.g"
2141 sym(1).forstmt.condition = expression(1);
2142 sym(1).forstmt.increment =
nullptr;
2145#line 2897
"./glsl.g"
2148 sym(1).forstmt.condition = expression(1);
2149 sym(1).forstmt.increment = expression(3);
2152#line 2905
"./glsl.g"
2155 ast(1) = makeAstNode<JumpStatementAST>(AST::Kind_Continue);
2158#line 2912
"./glsl.g"
2161 ast(1) = makeAstNode<JumpStatementAST>(AST::Kind_Break);
2164#line 2919
"./glsl.g"
2167 ast(1) = makeAstNode<ReturnStatementAST>();
2170#line 2926
"./glsl.g"
2173 ast(1) = makeAstNode<ReturnStatementAST>(expression(2));
2176#line 2933
"./glsl.g"
2179 ast(1) = makeAstNode<JumpStatementAST>(AST::Kind_Discard);
2182#line 2940
"./glsl.g"
2185 ast(1) = makeAstNode<TranslationUnitAST>(sym(1).declaration_list);
2188#line 2947
"./glsl.g"
2191 if (sym(1).declaration) {
2192 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
2193 (sym(1).declaration);
2195 sym(1).declaration_list =
nullptr;
2199#line 2959
"./glsl.g"
2202 if (sym(1).declaration_list && sym(2).declaration) {
2203 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
2204 (sym(1).declaration_list, sym(2).declaration);
2205 }
else if (!sym(1).declaration_list) {
2206 if (sym(2).declaration) {
2207 sym(1).declaration_list = makeAstNode< List<DeclarationAST *> >
2208 (sym(2).declaration);
2210 sym(1).declaration_list =
nullptr;
2215#line 2976
"./glsl.g"
2221#line 2983
"./glsl.g"
2227#line 2990
"./glsl.g"
2233#line 2997
"./glsl.g"
2236 function(1)->body = statement(2);
2239#line 3004
"./glsl.g"
2245#line 3012
"./glsl.g"
2251#line 3019
"./glsl.g"
2257#line 3025
"./glsl.g"