OSDN Git Service

Adding unsized arrays to the glsl parser
authorAlexis Hetu <sugoi@google.com>
Thu, 18 Jun 2015 16:34:52 +0000 (12:34 -0400)
committerAlexis Hétu <sugoi@google.com>
Mon, 22 Jun 2015 17:41:25 +0000 (17:41 +0000)
Unsized arrays declare with an empty [] without
a specified size are now supported properly in
the glsl parser.

Also moved the construction code from the parser
into TParseContext.

Change-Id: Ic7b3efeee51da1a264e26af4d7908e7d2fccebd9
Reviewed-on: https://swiftshader-review.googlesource.com/3520
Tested-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
src/OpenGL/compiler/Android.mk
src/OpenGL/compiler/Compiler.vcxproj
src/OpenGL/compiler/Compiler.vcxproj.filters
src/OpenGL/compiler/Intermediate.cpp
src/OpenGL/compiler/ParseHelper.cpp
src/OpenGL/compiler/ParseHelper.h
src/OpenGL/compiler/ValidateGlobalInitializer.cpp [new file with mode: 0644]
src/OpenGL/compiler/ValidateGlobalInitializer.h [new file with mode: 0644]
src/OpenGL/compiler/glslang.y
src/OpenGL/compiler/glslang_tab.cpp
src/OpenGL/libGLESv2/libGLESv2.cbp

index b513db8..46a4298 100644 (file)
@@ -39,6 +39,7 @@ LOCAL_SRC_FILES += \
        SymbolTable.cpp \
        TranslatorASM.cpp \
        util.cpp \
+       ValidateGlobalInitializer.cpp \
        ValidateLimitations.cpp \
        ValidateSwitch.cpp \
 
index f28be0e..759be74 100644 (file)
     <ClCompile Include="SymbolTable.cpp" />\r
     <ClCompile Include="TranslatorASM.cpp" />\r
     <ClCompile Include="util.cpp" />\r
+    <ClCompile Include="ValidateGlobalInitializer.cpp" />\r
     <ClCompile Include="ValidateLimitations.cpp" />\r
     <ClCompile Include="glslang_lex.cpp" />\r
     <ClCompile Include="glslang_tab.cpp" />\r
     <ClInclude Include="TranslatorASM.h" />\r
     <ClInclude Include="Types.h" />\r
     <ClInclude Include="util.h" />\r
+    <ClInclude Include="ValidateGlobalInitializer.h" />\r
     <ClInclude Include="ValidateLimitations.h" />\r
     <ClInclude Include="glslang_tab.h" />\r
     <ClInclude Include="ValidateSwitch.h" />\r
index 91d0749..a4435bc 100644 (file)
@@ -86,6 +86,9 @@
     <ClCompile Include="ValidateSwitch.cpp">\r
       <Filter>Source Files</Filter>\r
     </ClCompile>\r
+    <ClCompile Include="ValidateGlobalInitializer.cpp">\r
+      <Filter>Source Files</Filter>\r
+    </ClCompile>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <ClInclude Include="BaseTypes.h">\r
     <ClInclude Include="ValidateSwitch.h">\r
       <Filter>Header Files</Filter>\r
     </ClInclude>\r
+    <ClInclude Include="ValidateGlobalInitializer.h">\r
+      <Filter>Header Files</Filter>\r
+    </ClInclude>\r
   </ItemGroup>\r
   <ItemGroup>\r
     <CustomBuild Include="glslang.l">\r
index 40be9be..0579deb 100644 (file)
@@ -780,11 +780,7 @@ bool TIntermUnary::promote(TInfoSink&)
 //
 bool TIntermBinary::promote(TInfoSink& infoSink)
 {
-    // This function only handles scalars, vectors, and matrices.
-    if (left->isArray() || right->isArray()) {
-        infoSink.info.message(EPrefixInternalError, "Invalid operation for arrays", getLine());
-        return false;
-    }
+       ASSERT(left->isArray() == right->isArray());
 
     // GLSL ES 2.0 does not support implicit type casting.
     // So the basic type should always match.
index efc01c3..e8b7f49 100644 (file)
@@ -11,6 +11,7 @@
 
 #include "glslang.h"
 #include "preprocessor/SourceLocation.h"
+#include "ValidateGlobalInitializer.h"
 #include "ValidateSwitch.h"
 
 ///////////////////////////////////////////////////////////////////////
@@ -462,7 +463,13 @@ bool TParseContext::constructorErrorCheck(const TSourceLoc &line, TIntermNode* n
     bool constructingMatrix = false;
     switch(op) {
     case EOpConstructMat2:
+    case EOpConstructMat2x3:
+    case EOpConstructMat2x4:
+    case EOpConstructMat3x2:
     case EOpConstructMat3:
+    case EOpConstructMat3x4:
+    case EOpConstructMat4x2:
+    case EOpConstructMat4x3:
     case EOpConstructMat4:
         constructingMatrix = true;
         break;
@@ -501,9 +508,13 @@ bool TParseContext::constructorErrorCheck(const TSourceLoc &line, TIntermNode* n
     if (constType)
         type->setQualifier(EvqConstExpr);
 
-    if (type->isArray() && type->getArraySize() != function.getParamCount()) {
-        error(line, "array constructor needs one argument per array element", "constructor");
-        return true;
+    if(type->isArray()) {
+        if(type->getArraySize() == 0) {
+            type->setArraySize(function.getParamCount());
+        } else if(type->getArraySize() != function.getParamCount()) {
+            error(line, "array constructor needs one argument per array element", "constructor");
+            return true;
+        }
     }
 
     if (arrayArg && op != EOpConstructStruct) {
@@ -833,79 +844,6 @@ bool TParseContext::arrayTypeErrorCheck(const TSourceLoc &line, TPublicType type
     return false;
 }
 
-//
-// Do all the semantic checking for declaring an array, with and
-// without a size, and make the right changes to the symbol table.
-//
-// size == 0 means no specified size.
-//
-// Returns true if there was an error.
-//
-bool TParseContext::arrayErrorCheck(const TSourceLoc &line, TString& identifier, TPublicType type, TVariable*& variable)
-{
-    //
-    // Don't check for reserved word use until after we know it's not in the symbol table,
-    // because reserved arrays can be redeclared.
-    //
-
-    bool builtIn = false;
-    bool sameScope = false;
-    TSymbol* symbol = symbolTable.find(identifier, shaderVersion, &builtIn, &sameScope);
-    if (symbol == 0 || !sameScope) {
-        if (reservedErrorCheck(line, identifier))
-            return true;
-
-        variable = new TVariable(&identifier, TType(type));
-
-        if (type.arraySize)
-            variable->getType().setArraySize(type.arraySize);
-
-        if (! symbolTable.declare(*variable)) {
-            delete variable;
-            error(line, "INTERNAL ERROR inserting new symbol", identifier.c_str());
-            return true;
-        }
-    } else {
-        if (! symbol->isVariable()) {
-            error(line, "variable expected", identifier.c_str());
-            return true;
-        }
-
-        variable = static_cast<TVariable*>(symbol);
-        if (! variable->getType().isArray()) {
-            error(line, "redeclaring non-array as array", identifier.c_str());
-            return true;
-        }
-        if (variable->getType().getArraySize() > 0) {
-            error(line, "redeclaration of array with size", identifier.c_str());
-            return true;
-        }
-
-        if (! variable->getType().sameElementType(TType(type))) {
-            error(line, "redeclaration of array with a different type", identifier.c_str());
-            return true;
-        }
-
-        TType* t = variable->getArrayInformationType();
-        while (t != 0) {
-            if (t->getMaxArraySize() > type.arraySize) {
-                error(line, "higher index value already used for the array", identifier.c_str());
-                return true;
-            }
-            t->setArraySize(type.arraySize);
-            t = t->getArrayInformationType();
-        }
-
-        if (type.arraySize)
-            variable->getType().setArraySize(type.arraySize);
-    }
-
-    if (voidErrorCheck(line, identifier, type.type))
-        return true;
-
-    return false;
-}
-
 bool TParseContext::arraySetMaxSize(TIntermSymbol *node, TType* type, int size, bool updateFlag, const TSourceLoc &line)
 {
     bool builtIn = false;
@@ -1234,27 +1172,33 @@ const TFunction* TParseContext::findFunction(const TSourceLoc &line, TFunction*
 // code to handle them here.
 //
 bool TParseContext::executeInitializer(const TSourceLoc& line, const TString& identifier, const TPublicType& pType,
-                                       TIntermTyped* initializer, TIntermNode*& intermNode, TVariable* variable)
+                                       TIntermTyped *initializer, TIntermNode **intermNode)
 {
-    TType type = TType(pType);
+       ASSERT(intermNode != nullptr);
+       TType type = TType(pType);
 
-    if (variable == 0) {
-        if (reservedErrorCheck(line, identifier))
-            return true;
-
-        if (voidErrorCheck(line, identifier, pType.type))
-            return true;
+       TVariable *variable = nullptr;
+       if(type.isArray() && (type.getArraySize() == 0))
+       {
+               type.setArraySize(initializer->getArraySize());
+       }
+       if(!declareVariable(line, identifier, type, &variable))
+       {
+               return true;
+       }
 
-        //
-        // add variable to symbol table
-        //
-        variable = new TVariable(&identifier, type);
-        if (! symbolTable.declare(*variable)) {
-            error(line, "redefinition", variable->getName().c_str());
-            return true;
-            // don't delete variable, it's used by error recovery, and the pool
-            // pop will take care of the memory
-        }
+       bool globalInitWarning = false;
+       if(symbolTable.atGlobalLevel() && !ValidateGlobalInitializer(initializer, this, &globalInitWarning))
+       {
+               // Error message does not completely match behavior with ESSL 1.00, but
+               // we want to steer developers towards only using constant expressions.
+               error(line, "global variable initializers must be constant expressions", "=");
+               return true;
+       }
+       if(globalInitWarning)
+       {
+               warning(line, "global variable initializers should be constant expressions "
+                       "(uniforms and globals are allowed in global initializers for legacy compatibility)", "=");
     }
 
     //
@@ -1285,15 +1229,9 @@ bool TParseContext::executeInitializer(const TSourceLoc& line, const TString& id
             return true;
         }
         if (initializer->getAsConstantUnion()) {
-            ConstantUnion* unionArray = variable->getConstPointer();
-
-            if (type.getObjectSize() == 1 && type.getBasicType() != EbtStruct) {
-                *unionArray = (initializer->getAsConstantUnion()->getUnionArrayPointer())[0];
-            } else {
-                variable->shareConstPointer(initializer->getAsConstantUnion()->getUnionArrayPointer());
-            }
+            variable->shareConstPointer(initializer->getAsConstantUnion()->getUnionArrayPointer());
         } else if (initializer->getAsSymbolNode()) {
-            const TSymbol* symbol = symbolTable.find(initializer->getAsSymbolNode()->getSymbol(), shaderVersion);
+            const TSymbol* symbol = symbolTable.find(initializer->getAsSymbolNode()->getSymbol(), 0);
             const TVariable* tVar = static_cast<const TVariable*>(symbol);
 
             ConstantUnion* constArray = tVar->getConstPointer();
@@ -1310,13 +1248,13 @@ bool TParseContext::executeInitializer(const TSourceLoc& line, const TString& id
 
     if (qualifier != EvqConstExpr) {
         TIntermSymbol* intermSymbol = intermediate.addSymbol(variable->getUniqueId(), variable->getName(), variable->getType(), line);
-        intermNode = intermediate.addAssign(EOpInitialize, intermSymbol, initializer, line);
-        if (intermNode == 0) {
+        *intermNode = createAssign(EOpInitialize, intermSymbol, initializer, line);
+        if(*intermNode == nullptr) {
             assignError(line, "=", intermSymbol->getCompleteString(), initializer->getCompleteString());
             return true;
         }
     } else
-        intermNode = 0;
+        *intermNode = nullptr;
 
     return false;
 }
@@ -1500,7 +1438,7 @@ TIntermAggregate *TParseContext::parseSingleInitDeclaration(const TPublicType &p
                recover();
 
        TIntermNode *intermNode = nullptr;
-       if(!executeInitializer(identifierLocation, identifier, publicType, initializer, intermNode))
+       if(!executeInitializer(identifierLocation, identifier, publicType, initializer, &intermNode))
        {
                //
                // Build intermediate representation
@@ -1546,7 +1484,7 @@ TIntermAggregate *TParseContext::parseSingleArrayInitDeclaration(TPublicType &pu
 
        // initNode will correspond to the whole of "type b[n] = initializer".
        TIntermNode *initNode = nullptr;
-       if(!executeInitializer(identifierLocation, identifier, arrayType, initializer, initNode))
+       if(!executeInitializer(identifierLocation, identifier, arrayType, initializer, &initNode))
        {
                return initNode ? intermediate.makeAggregate(initNode, initLocation) : nullptr;
        }
@@ -1686,7 +1624,7 @@ TIntermAggregate *TParseContext::parseInitDeclarator(const TPublicType &publicTy
                recover();
 
        TIntermNode *intermNode = nullptr;
-       if(!executeInitializer(identifierLocation, identifier, publicType, initializer, intermNode))
+       if(!executeInitializer(identifierLocation, identifier, publicType, initializer, &intermNode))
        {
                //
                // build the intermediate representation
@@ -1745,7 +1683,7 @@ TIntermAggregate *TParseContext::parseArrayInitDeclarator(const TPublicType &pub
 
        // initNode will correspond to the whole of "b[n] = initializer".
        TIntermNode *initNode = nullptr;
-       if(!executeInitializer(identifierLocation, identifier, arrayType, initializer, initNode))
+       if(!executeInitializer(identifierLocation, identifier, arrayType, initializer, &initNode))
        {
                if(initNode)
                {
@@ -1799,6 +1737,108 @@ void TParseContext::parseGlobalLayoutQualifier(const TPublicType &typeQualifier)
        }
 }
 
+TFunction *TParseContext::addConstructorFunc(const TPublicType &publicTypeIn)
+{
+       TPublicType publicType = publicTypeIn;
+       TOperator op = EOpNull;
+       if(publicType.userDef)
+       {
+               op = EOpConstructStruct;
+       }
+       else
+       {
+               switch(publicType.type)
+               {
+               case EbtFloat:\r
+                       if(publicType.isMatrix())\r
+                       {\r
+                               switch(publicType.getCols())\r
+                               {\r
+                               case 2:\r
+                                       switch(publicType.getRows())\r
+                                       {\r
+                                       case 2: op = EOpConstructMat2;  break;\r
+                                       case 3: op = EOpConstructMat2x3;  break;\r
+                                       case 4: op = EOpConstructMat2x4;  break;\r
+                                       }\r
+                                       break;\r
+                               case 3:\r
+                                       switch(publicType.getRows())\r
+                                       {\r
+                                       case 2: op = EOpConstructMat3x2;  break;\r
+                                       case 3: op = EOpConstructMat3;  break;\r
+                                       case 4: op = EOpConstructMat3x4;  break;\r
+                                       }\r
+                                       break;\r
+                               case 4:\r
+                                       switch(publicType.getRows())\r
+                                       {\r
+                                       case 2: op = EOpConstructMat4x2;  break;\r
+                                       case 3: op = EOpConstructMat4x3;  break;\r
+                                       case 4: op = EOpConstructMat4;  break;\r
+                                       }\r
+                                       break;\r
+                               }\r
+                       }\r
+                       else\r
+                       {\r
+                               switch(publicType.getNominalSize())\r
+                               {\r
+                               case 1: op = EOpConstructFloat; break;\r
+                               case 2: op = EOpConstructVec2;  break;\r
+                               case 3: op = EOpConstructVec3;  break;\r
+                               case 4: op = EOpConstructVec4;  break;\r
+                               }\r
+                       }\r
+                       break;
+
+               case EbtInt:
+                       switch(publicType.getNominalSize())
+                       {
+                       case 1: op = EOpConstructInt;   break;
+                       case 2: op = EOpConstructIVec2; break;
+                       case 3: op = EOpConstructIVec3; break;
+                       case 4: op = EOpConstructIVec4; break;
+                       }
+                       break;
+
+               case EbtUInt:
+                       switch(publicType.getNominalSize())
+                       {
+                       case 1: op = EOpConstructUInt;  break;
+                       case 2: op = EOpConstructUVec2; break;
+                       case 3: op = EOpConstructUVec3; break;
+                       case 4: op = EOpConstructUVec4; break;
+                       }
+                       break;
+
+               case EbtBool:
+                       switch(publicType.getNominalSize())
+                       {
+                       case 1: op = EOpConstructBool;  break;
+                       case 2: op = EOpConstructBVec2; break;
+                       case 3: op = EOpConstructBVec3; break;
+                       case 4: op = EOpConstructBVec4; break;
+                       }
+                       break;
+
+               default: break;
+               }
+
+               if(op == EOpNull)
+               {
+                       error(publicType.line, "cannot construct this type", getBasicString(publicType.type));
+                       recover();
+                       publicType.type = EbtFloat;
+                       op = EOpConstructFloat;
+               }
+       }
+
+       TString tempString;
+       TType type(publicType);
+       return new TFunction(&tempString, type, op);
+}
+
 // This function is used to test for the correctness of the parameters passed to various constructor functions
 // and also convert them to the right datatype if it is allowed and required.
 //
@@ -3054,6 +3094,26 @@ TIntermCase *TParseContext::addDefault(const TSourceLoc &loc)
        }
        return node;
 }
+TIntermTyped *TParseContext::createAssign(TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &loc)
+{
+       if(binaryOpCommonCheck(op, left, right, loc))
+       {
+               return intermediate.addAssign(op, left, right, loc);
+       }
+       return nullptr;
+}
+
+TIntermTyped *TParseContext::addAssign(TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &loc)
+{
+       TIntermTyped *node = createAssign(op, left, right, loc);
+       if(node == nullptr)
+       {
+               assignError(loc, "assign", left->getCompleteString(), right->getCompleteString());
+               recover();
+               return left;
+       }
+       return node;
+}
 
 TIntermTyped *TParseContext::addBinaryMathInternal(TOperator op, TIntermTyped *left, TIntermTyped *right,
        const TSourceLoc &loc)
index fbbfdd0..ece1d8e 100644 (file)
@@ -106,7 +106,6 @@ struct TParseContext {
     bool arraySizeErrorCheck(const TSourceLoc &line, TIntermTyped* expr, int& size);
     bool arrayQualifierErrorCheck(const TSourceLoc &line, TPublicType type);
     bool arrayTypeErrorCheck(const TSourceLoc &line, TPublicType type);
-    bool arrayErrorCheck(const TSourceLoc &line, TString& identifier, TPublicType type, TVariable*& variable);
     bool voidErrorCheck(const TSourceLoc&, const TString&, const TBasicType&);
     bool boolErrorCheck(const TSourceLoc&, const TIntermTyped*);
     bool boolErrorCheck(const TSourceLoc&, const TPublicType&);
@@ -132,8 +131,8 @@ struct TParseContext {
     bool containsSampler(TType& type);
     bool areAllChildConst(TIntermAggregate* aggrNode);
     const TFunction* findFunction(const TSourceLoc &line, TFunction* pfnCall, bool *builtIn = 0);
-    bool executeInitializer(const TSourceLoc &line, const TString& identifier, const TPublicType& pType,
-                            TIntermTyped* initializer, TIntermNode*& intermNode, TVariable* variable = 0);
+    bool executeInitializer(const TSourceLoc &line, const TString &identifier, const TPublicType &pType,
+                            TIntermTyped *initializer, TIntermNode **intermNode);
 
     TPublicType addFullySpecifiedType(TQualifier qualifier, bool invariant, TLayoutQualifier layoutQualifier, const TPublicType &typeSpecifier);
     bool arraySetMaxSize(TIntermSymbol*, TType*, int, bool, const TSourceLoc&);
@@ -166,6 +165,7 @@ struct TParseContext {
                                                const TSourceLoc &initLocation, TIntermTyped *initializer);
 
     void parseGlobalLayoutQualifier(const TPublicType &typeQualifier);
+       TFunction *addConstructorFunc(const TPublicType &publicType);
     TIntermTyped* addConstructor(TIntermNode*, const TType*, TOperator, TFunction*, const TSourceLoc&);
     TIntermTyped* foldConstConstructor(TIntermAggregate* aggrNode, const TType& type);
     TIntermTyped* addConstVectorNode(TVectorFields&, TIntermTyped*, const TSourceLoc&);
@@ -203,6 +203,8 @@ struct TParseContext {
        TIntermTyped *addBinaryMath(TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &loc);
        TIntermTyped *addBinaryMathBooleanResult(TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &loc);
 
+       TIntermTyped *addAssign(TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &loc);
+
        TIntermBranch *addBranch(TOperator op, const TSourceLoc &loc);
        TIntermBranch *addBranch(TOperator op, TIntermTyped *returnValue, const TSourceLoc &loc);
 
@@ -210,6 +212,7 @@ private:
        bool declareVariable(const TSourceLoc &line, const TString &identifier, const TType &type, TVariable **variable);
 
        TIntermTyped *addBinaryMathInternal(TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &loc);
+       TIntermTyped *createAssign(TOperator op, TIntermTyped *left, TIntermTyped *right, const TSourceLoc &loc);
 
        // The funcReturnType parameter is expected to be non-null when the operation is a built-in function.
        // It is expected to be null for other unary operators.
diff --git a/src/OpenGL/compiler/ValidateGlobalInitializer.cpp b/src/OpenGL/compiler/ValidateGlobalInitializer.cpp
new file mode 100644 (file)
index 0000000..af2c6d3
--- /dev/null
@@ -0,0 +1,80 @@
+//\r
+// Copyright (c) 2002-2015 The ANGLE Project Authors. All rights reserved.\r
+// Use of this source code is governed by a BSD-style license that can be\r
+// found in the LICENSE file.\r
+//\r
+\r
+#include "ValidateGlobalInitializer.h"\r
+\r
+#include "ParseHelper.h"\r
+\r
+namespace\r
+{\r
+\r
+class ValidateGlobalInitializerTraverser : public TIntermTraverser\r
+{\r
+  public:\r
+    ValidateGlobalInitializerTraverser(const TParseContext *context);\r
+\r
+    void visitSymbol(TIntermSymbol *node) override;\r
+\r
+    bool isValid() const { return mIsValid; }\r
+    bool issueWarning() const { return mIssueWarning; }\r
+\r
+  private:\r
+    const TParseContext *mContext;\r
+    bool mIsValid;\r
+    bool mIssueWarning;\r
+};\r
+\r
+void ValidateGlobalInitializerTraverser::visitSymbol(TIntermSymbol *node)\r
+{\r
+    const TSymbol *sym = mContext->symbolTable.find(node->getSymbol(), mContext->getShaderVersion());\r
+    if (sym->isVariable())\r
+    {\r
+        // ESSL 1.00 section 4.3 (or ESSL 3.00 section 4.3):\r
+        // Global initializers must be constant expressions.\r
+        const TVariable *var = static_cast<const TVariable *>(sym);\r
+        switch (var->getType().getQualifier())\r
+        {\r
+          case EvqConstExpr:\r
+            break;\r
+          case EvqGlobal:\r
+          case EvqTemporary:\r
+          case EvqUniform:\r
+            // We allow these cases to be compatible with legacy ESSL 1.00 content.\r
+            // Implement stricter rules for ESSL 3.00 since there's no legacy content to deal with.\r
+            if (mContext->getShaderVersion() >= 300)\r
+            {\r
+                mIsValid = false;\r
+            }\r
+            else\r
+            {\r
+                mIssueWarning = true;\r
+            }\r
+            break;\r
+          default:\r
+            mIsValid = false;\r
+        }\r
+    }\r
+}\r
+\r
+ValidateGlobalInitializerTraverser::ValidateGlobalInitializerTraverser(const TParseContext *context)\r
+    : TIntermTraverser(true, false, false),\r
+      mContext(context),\r
+      mIsValid(true),\r
+      mIssueWarning(false)\r
+{\r
+}\r
+\r
+} // namespace\r
+\r
+bool ValidateGlobalInitializer(TIntermTyped *initializer, const TParseContext *context, bool *warning)\r
+{\r
+    ValidateGlobalInitializerTraverser validate(context);\r
+    initializer->traverse(&validate);\r
+    ASSERT(warning != nullptr);\r
+    *warning = validate.issueWarning();\r
+    return validate.isValid();\r
+}\r
+\r
diff --git a/src/OpenGL/compiler/ValidateGlobalInitializer.h b/src/OpenGL/compiler/ValidateGlobalInitializer.h
new file mode 100644 (file)
index 0000000..83e2403
--- /dev/null
@@ -0,0 +1,16 @@
+//\r
+// Copyright (c) 2002-2015 The ANGLE Project Authors. All rights reserved.\r
+// Use of this source code is governed by a BSD-style license that can be\r
+// found in the LICENSE file.\r
+//\r
+\r
+#ifndef COMPILER_TRANSLATOR_VALIDATEGLOBALINITIALIZER_H_\r
+#define COMPILER_TRANSLATOR_VALIDATEGLOBALINITIALIZER_H_\r
+\r
+class TIntermTyped;\r
+struct TParseContext;\r
+\r
+// Returns true if the initializer is valid.\r
+bool ValidateGlobalInitializer(TIntermTyped *initializer, const TParseContext *context, bool *warning);\r
+\r
+#endif // COMPILER_TRANSLATOR_VALIDATEGLOBALINITIALIZER_H_\r
index 6846dbb..23d58dc 100644 (file)
@@ -448,82 +448,11 @@ function_call_header
 // Grammar Note:  Constructors look like functions, but are recognized as types.
 
 function_identifier
-    : type_specifier_nonarray {
-        //
-        // Constructor
-        //
-        TOperator op = EOpNull;
-        if ($1.userDef) {
-            op = EOpConstructStruct;
-        } else {
-            switch ($1.type) {
-            case EbtFloat:
-                switch($1.primarySize) {
-                case 1:
-                    op = EOpConstructFloat; break;
-                case 2:
-                    switch($1.secondarySize) {
-                                       case 1:                                 op = EOpConstructVec2;    break;
-                    case 2:                                 op = EOpConstructMat2;    break;
-                    case 3:                                 op = EOpConstructMat2x3;  break;
-                    case 4:                                 op = EOpConstructMat2x4;  break;
-                    }
-                    break;
-                case 3:
-                    switch($1.secondarySize) {
-                                       case 1:                                 op = EOpConstructVec3;    break;
-                    case 2:                                 op = EOpConstructMat3x2;  break;
-                    case 3:                                 op = EOpConstructMat3;    break;
-                    case 4:                                 op = EOpConstructMat3x4;  break;
-                    }
-                    break;
-                case 4:
-                    switch($1.secondarySize) {
-                                       case 1:                                 op = EOpConstructVec4;    break;
-                    case 2:                                 op = EOpConstructMat4x2;  break;
-                    case 3:                                 op = EOpConstructMat4x3;  break;
-                    case 4:                                 op = EOpConstructMat4;    break;
-                    }
-                    break;
-                }
-                break;
-            case EbtInt:
-                switch($1.primarySize) {
-                case 1:                                         op = EOpConstructInt;   break;
-                case 2:       FRAG_VERT_ONLY("ivec2", @1); op = EOpConstructIVec2; break;
-                case 3:       FRAG_VERT_ONLY("ivec3", @1); op = EOpConstructIVec3; break;
-                case 4:       FRAG_VERT_ONLY("ivec4", @1); op = EOpConstructIVec4; break;
-                }
-                break;
-            case EbtUInt:
-                switch($1.primarySize) {
-                case 1:                                         op = EOpConstructUInt;  break;
-                case 2:       FRAG_VERT_ONLY("uvec2", @1); op = EOpConstructUVec2; break;
-                case 3:       FRAG_VERT_ONLY("uvec3", @1); op = EOpConstructUVec3; break;
-                case 4:       FRAG_VERT_ONLY("uvec4", @1); op = EOpConstructUVec4; break;
-                }
-                break;
-            case EbtBool:
-                switch($1.primarySize) {
-                case 1:                                         op = EOpConstructBool;  break;
-                case 2:       FRAG_VERT_ONLY("bvec2", @1); op = EOpConstructBVec2; break;
-                case 3:       FRAG_VERT_ONLY("bvec3", @1); op = EOpConstructBVec3; break;
-                case 4:       FRAG_VERT_ONLY("bvec4", @1); op = EOpConstructBVec4; break;
-                }
-                break;
-            default: break;
-            }
-            if (op == EOpNull) {
-                context->error(@1, "cannot construct this type", getBasicString($1.type));
-                context->recover();
-                $1.type = EbtFloat;
-                op = EOpConstructFloat;
-            }
+    : type_specifier_no_prec {
+        if ($1.array) {
+            ES3_ONLY("[]", @1);
         }
-        TString tempString;
-        TType type($1);
-        TFunction *function = new TFunction(&tempString, type, op);
-        $$ = function;
+        $$ = context->addConstructorFunc($1);
     }
     | IDENTIFIER {
         if (context->reservedErrorCheck(@1, *$1.string))
@@ -730,12 +659,7 @@ assignment_expression
     | unary_expression assignment_operator assignment_expression {
         if (context->lValueErrorCheck(@2, "assign", $1))
             context->recover();
-        $$ = context->intermediate.addAssign($2.op, $1, $3, @2);
-        if ($$ == 0) {
-            context->assignError(@2, "assign", $1->getCompleteString(), $3->getCompleteString());
-            context->recover();
-            $$ = $1;
-        }
+        $$ = context->addAssign($2.op, $1, $3, @2);
     }
     ;
 
@@ -783,7 +707,7 @@ constant_expression
 
 enter_struct
     : IDENTIFIER LEFT_BRACE {
-        if (context->enterStructDeclaration($1.line, *$1.string))
+        if (context->enterStructDeclaration(@1, *$1.string))
             context->recover();
         $$ = $1;
     }
@@ -831,16 +755,16 @@ declaration
         $$ = 0;
     }
     | type_qualifier enter_struct struct_declaration_list RIGHT_BRACE SEMICOLON {
-        ES3_ONLY(getQualifierString($1.qualifier), $1.line);
-        $$ = context->addInterfaceBlock($1, $2.line, *$2.string, $3, NULL, $1.line, NULL, $1.line);
+        ES3_ONLY(getQualifierString($1.qualifier), @1);
+        $$ = context->addInterfaceBlock($1, @2, *$2.string, $3, NULL, @1, NULL, @1);
     }
     | type_qualifier enter_struct struct_declaration_list RIGHT_BRACE IDENTIFIER SEMICOLON {
-        ES3_ONLY(getQualifierString($1.qualifier), $1.line);
-        $$ = context->addInterfaceBlock($1, $2.line, *$2.string, $3, $5.string, $5.line, NULL, $1.line);
+        ES3_ONLY(getQualifierString($1.qualifier), @1);
+        $$ = context->addInterfaceBlock($1, @2, *$2.string, $3, $5.string, @5, NULL, @1);
     }
     | type_qualifier enter_struct struct_declaration_list RIGHT_BRACE IDENTIFIER LEFT_BRACKET constant_expression RIGHT_BRACKET SEMICOLON {
-        ES3_ONLY(getQualifierString($1.qualifier), $1.line);
-        $$ = context->addInterfaceBlock($1, $2.line, *$2.string, $3, $5.string, $5.line, $7, $6.line);
+        ES3_ONLY(getQualifierString($1.qualifier), @1);
+        $$ = context->addInterfaceBlock($1, @2, *$2.string, $3, $5.string, @5, $7, @6);
     }
     | type_qualifier SEMICOLON {
         context->parseGlobalLayoutQualifier($1);
@@ -1352,6 +1276,11 @@ type_specifier_no_prec
     : type_specifier_nonarray {
         $$ = $1;
     }
+    | type_specifier_nonarray LEFT_BRACKET RIGHT_BRACKET {
+        ES3_ONLY("[]", @2);
+        $$ = $1;
+        $$.setArray(true, 0);
+    }
     | type_specifier_nonarray LEFT_BRACKET constant_expression RIGHT_BRACKET {
         $$ = $1;
 
@@ -1769,17 +1698,17 @@ selection_rest_statement
 
 switch_statement
     : SWITCH LEFT_PAREN expression RIGHT_PAREN { context->incrSwitchNestingLevel(); } compound_statement {
-        $$ = context->addSwitch($3, $6, $1.line);
+        $$ = context->addSwitch($3, $6, @1);
         context->decrSwitchNestingLevel();
     }
     ;
 
 case_label
     : CASE constant_expression COLON {
-        $$ = context->addCase($2, $1.line);
+        $$ = context->addCase($2, @1);
     }
     | DEFAULT COLON {
-        $$ = context->addDefault($1.line);
+        $$ = context->addDefault(@1);
     }
     ;
 
@@ -1799,7 +1728,7 @@ condition
         if (context->boolErrorCheck(@2, $1))
             context->recover();
 
-        if (!context->executeInitializer(@2, *$2.string, $1, $4, intermNode))
+        if (!context->executeInitializer(@2, *$2.string, $1, $4, &intermNode))
             $$ = $4;
         else {
             context->recover();
index 7541572..6b96978 100644 (file)
@@ -582,16 +582,16 @@ union yyalloc
 /* YYFINAL -- State number of the termination state.  */
 #define YYFINAL  110
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   2412
+#define YYLAST   2519
 
 /* YYNTOKENS -- Number of terminals.  */
 #define YYNTOKENS  128
 /* YYNNTS -- Number of nonterminals.  */
 #define YYNNTS  93
 /* YYNRULES -- Number of rules.  */
-#define YYNRULES  269
+#define YYNRULES  270
 /* YYNRULES -- Number of states.  */
-#define YYNSTATES  409
+#define YYNSTATES  410
 
 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
@@ -664,18 +664,19 @@ static const yytype_uint16 yyprhs[] =
      380,   388,   393,   396,   398,   401,   403,   405,   407,   409,
      411,   414,   416,   419,   421,   423,   426,   428,   430,   432,
      435,   438,   440,   442,   445,   447,   449,   451,   456,   458,
-     462,   464,   468,   472,   474,   479,   481,   483,   485,   487,
-     489,   491,   493,   495,   497,   499,   501,   503,   505,   507,
-     509,   511,   513,   515,   517,   519,   521,   523,   525,   527,
-     529,   531,   533,   535,   537,   539,   541,   543,   545,   547,
-     549,   551,   553,   555,   557,   559,   561,   563,   565,   567,
-     568,   575,   576,   582,   584,   587,   591,   596,   598,   602,
-     604,   609,   611,   613,   615,   617,   619,   621,   623,   625,
-     627,   629,   631,   634,   635,   636,   642,   644,   646,   647,
-     650,   651,   654,   657,   661,   663,   666,   668,   671,   677,
-     681,   683,   684,   691,   695,   698,   700,   705,   706,   713,
-     714,   723,   724,   732,   734,   736,   738,   739,   742,   746,
-     749,   752,   755,   759,   762,   764,   767,   769,   771,   772
+     462,   464,   468,   472,   474,   478,   483,   485,   487,   489,
+     491,   493,   495,   497,   499,   501,   503,   505,   507,   509,
+     511,   513,   515,   517,   519,   521,   523,   525,   527,   529,
+     531,   533,   535,   537,   539,   541,   543,   545,   547,   549,
+     551,   553,   555,   557,   559,   561,   563,   565,   567,   569,
+     571,   572,   579,   580,   586,   588,   591,   595,   600,   602,
+     606,   608,   613,   615,   617,   619,   621,   623,   625,   627,
+     629,   631,   633,   635,   638,   639,   640,   646,   648,   650,
+     651,   654,   655,   658,   661,   665,   667,   670,   672,   675,
+     681,   685,   687,   688,   695,   699,   702,   704,   709,   710,
+     717,   718,   727,   728,   736,   738,   740,   742,   743,   746,
+     750,   753,   756,   759,   763,   766,   768,   771,   773,   775,
+     776
 };
 
 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
@@ -687,7 +688,7 @@ static const yytype_int16 yyrhs[] =
       82,    -1,   131,    85,    -1,   131,    86,    -1,   156,    -1,
      134,    -1,   135,    -1,   131,   110,   135,    -1,   137,   105,
       -1,   136,   105,    -1,   138,    55,    -1,   138,    -1,   138,
-     154,    -1,   137,   111,   154,    -1,   139,   104,    -1,   181,
+     154,    -1,   137,   111,   154,    -1,   139,   104,    -1,   180,
       -1,    76,    -1,    82,    -1,   131,    -1,    85,   140,    -1,
       86,   140,    -1,   141,   140,    -1,   118,    -1,   116,    -1,
      115,    -1,   117,    -1,   140,    -1,   142,   119,   140,    -1,
@@ -728,37 +729,37 @@ static const yytype_int16 yyrhs[] =
      180,    -1,   176,   180,    -1,     4,    -1,     5,    -1,     6,
       -1,    75,   104,   178,   105,    -1,   179,    -1,   178,   111,
      179,    -1,    76,    -1,    76,   113,    79,    -1,    76,   113,
-      80,    -1,   181,    -1,   181,   106,   157,   107,    -1,    55,
-      -1,    11,    -1,    12,    -1,    13,    -1,    10,    -1,    31,
-      -1,    32,    -1,    33,    -1,    25,    -1,    26,    -1,    27,
-      -1,    28,    -1,    29,    -1,    30,    -1,    34,    -1,    35,
-      -1,    36,    -1,    37,    -1,    38,    -1,    39,    -1,    45,
-      -1,    46,    -1,    47,    -1,    48,    -1,    49,    -1,    50,
-      -1,    57,    -1,    58,    -1,    59,    -1,    70,    -1,    61,
-      -1,    62,    -1,    63,    -1,    64,    -1,    65,    -1,    66,
-      -1,    67,    -1,    68,    -1,    69,    -1,    72,    -1,    73,
-      -1,    74,    -1,   182,    -1,    77,    -1,    -1,    54,    76,
-     108,   183,   185,   109,    -1,    -1,    54,   108,   184,   185,
-     109,    -1,   186,    -1,   185,   186,    -1,   175,   187,   114,
-      -1,   173,   175,   187,   114,    -1,   188,    -1,   187,   111,
-     188,    -1,    76,    -1,    76,   106,   157,   107,    -1,   154,
-      -1,   159,    -1,   193,    -1,   192,    -1,   190,    -1,   202,
-      -1,   203,    -1,   205,    -1,   207,    -1,   209,    -1,   216,
-      -1,   108,   109,    -1,    -1,    -1,   108,   194,   201,   195,
-     109,    -1,   200,    -1,   192,    -1,    -1,   198,   200,    -1,
-      -1,   199,   192,    -1,   108,   109,    -1,   108,   201,   109,
-      -1,   191,    -1,   201,   191,    -1,   114,    -1,   156,   114,
-      -1,    19,   104,   156,   105,   204,    -1,   197,    17,   197,
-      -1,   197,    -1,    -1,    22,   104,   156,   105,   206,   193,
-      -1,    23,   157,   112,    -1,    24,   112,    -1,   156,    -1,
-     170,    76,   113,   189,    -1,    -1,    56,   104,   210,   208,
-     105,   196,    -1,    -1,    16,   211,   197,    56,   104,   156,
-     105,   114,    -1,    -1,    18,   104,   212,   213,   215,   105,
-     196,    -1,   202,    -1,   190,    -1,   208,    -1,    -1,   214,
-     114,    -1,   214,   114,   156,    -1,    15,   114,    -1,    14,
-     114,    -1,    21,   114,    -1,    21,   156,   114,    -1,    20,
-     114,    -1,   218,    -1,   217,   218,    -1,   219,    -1,   159,
-      -1,    -1,   160,   220,   200,    -1
+      80,    -1,   181,    -1,   181,   106,   107,    -1,   181,   106,
+     157,   107,    -1,    55,    -1,    11,    -1,    12,    -1,    13,
+      -1,    10,    -1,    31,    -1,    32,    -1,    33,    -1,    25,
+      -1,    26,    -1,    27,    -1,    28,    -1,    29,    -1,    30,
+      -1,    34,    -1,    35,    -1,    36,    -1,    37,    -1,    38,
+      -1,    39,    -1,    45,    -1,    46,    -1,    47,    -1,    48,
+      -1,    49,    -1,    50,    -1,    57,    -1,    58,    -1,    59,
+      -1,    70,    -1,    61,    -1,    62,    -1,    63,    -1,    64,
+      -1,    65,    -1,    66,    -1,    67,    -1,    68,    -1,    69,
+      -1,    72,    -1,    73,    -1,    74,    -1,   182,    -1,    77,
+      -1,    -1,    54,    76,   108,   183,   185,   109,    -1,    -1,
+      54,   108,   184,   185,   109,    -1,   186,    -1,   185,   186,
+      -1,   175,   187,   114,    -1,   173,   175,   187,   114,    -1,
+     188,    -1,   187,   111,   188,    -1,    76,    -1,    76,   106,
+     157,   107,    -1,   154,    -1,   159,    -1,   193,    -1,   192,
+      -1,   190,    -1,   202,    -1,   203,    -1,   205,    -1,   207,
+      -1,   209,    -1,   216,    -1,   108,   109,    -1,    -1,    -1,
+     108,   194,   201,   195,   109,    -1,   200,    -1,   192,    -1,
+      -1,   198,   200,    -1,    -1,   199,   192,    -1,   108,   109,
+      -1,   108,   201,   109,    -1,   191,    -1,   201,   191,    -1,
+     114,    -1,   156,   114,    -1,    19,   104,   156,   105,   204,
+      -1,   197,    17,   197,    -1,   197,    -1,    -1,    22,   104,
+     156,   105,   206,   193,    -1,    23,   157,   112,    -1,    24,
+     112,    -1,   156,    -1,   170,    76,   113,   189,    -1,    -1,
+      56,   104,   210,   208,   105,   196,    -1,    -1,    16,   211,
+     197,    56,   104,   156,   105,   114,    -1,    -1,    18,   104,
+     212,   213,   215,   105,   196,    -1,   202,    -1,   190,    -1,
+     208,    -1,    -1,   214,   114,    -1,   214,   114,   156,    -1,
+      15,   114,    -1,    14,   114,    -1,    21,   114,    -1,    21,
+     156,   114,    -1,    20,   114,    -1,   218,    -1,   217,   218,
+      -1,   219,    -1,   159,    -1,    -1,   160,   220,   200,    -1
 };
 
 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
@@ -766,31 +767,32 @@ static const yytype_uint16 yyrline[] =
 {
        0,   202,   202,   237,   240,   245,   250,   255,   260,   266,
      269,   272,   275,   278,   281,   287,   295,   395,   398,   406,
-     410,   417,   421,   428,   434,   443,   451,   528,   535,   545,
-     548,   558,   568,   590,   591,   592,   593,   601,   602,   606,
-     610,   618,   619,   622,   628,   629,   633,   640,   641,   644,
-     647,   650,   656,   657,   660,   666,   667,   674,   675,   682,
-     683,   690,   691,   697,   698,   704,   705,   711,   712,   729,
-     730,   743,   744,   745,   746,   748,   749,   750,   752,   754,
-     756,   758,   763,   766,   777,   785,   793,   820,   826,   833,
-     837,   841,   845,   852,   890,   893,   900,   908,   929,   950,
-     961,   990,   995,  1005,  1010,  1020,  1023,  1026,  1029,  1035,
-    1042,  1045,  1049,  1053,  1058,  1063,  1070,  1074,  1078,  1082,
-    1087,  1092,  1096,  1172,  1182,  1188,  1191,  1197,  1203,  1210,
-    1219,  1228,  1231,  1234,  1241,  1245,  1252,  1256,  1261,  1266,
-    1276,  1286,  1295,  1305,  1312,  1315,  1318,  1324,  1331,  1334,
-    1340,  1343,  1346,  1352,  1355,  1370,  1374,  1378,  1382,  1386,
-    1390,  1395,  1400,  1405,  1410,  1415,  1420,  1425,  1430,  1435,
-    1440,  1445,  1450,  1456,  1462,  1468,  1474,  1480,  1486,  1492,
-    1498,  1504,  1509,  1514,  1523,  1528,  1533,  1538,  1543,  1548,
-    1553,  1558,  1563,  1568,  1573,  1578,  1583,  1588,  1593,  1606,
-    1606,  1609,  1609,  1615,  1618,  1634,  1637,  1646,  1650,  1656,
-    1663,  1678,  1682,  1686,  1687,  1693,  1694,  1695,  1696,  1697,
-    1698,  1699,  1703,  1704,  1704,  1704,  1714,  1715,  1719,  1719,
-    1720,  1720,  1725,  1728,  1738,  1741,  1747,  1748,  1752,  1760,
-    1764,  1771,  1771,  1778,  1781,  1790,  1795,  1812,  1812,  1817,
-    1817,  1824,  1824,  1832,  1835,  1841,  1844,  1850,  1854,  1861,
-    1864,  1867,  1870,  1873,  1882,  1886,  1893,  1896,  1902,  1902
+     410,   417,   421,   428,   434,   443,   451,   457,   464,   474,
+     477,   487,   497,   519,   520,   521,   522,   530,   531,   535,
+     539,   547,   548,   551,   557,   558,   562,   569,   570,   573,
+     576,   579,   585,   586,   589,   595,   596,   603,   604,   611,
+     612,   619,   620,   626,   627,   633,   634,   640,   641,   658,
+     659,   667,   668,   669,   670,   672,   673,   674,   676,   678,
+     680,   682,   687,   690,   701,   709,   717,   744,   750,   757,
+     761,   765,   769,   776,   814,   817,   824,   832,   853,   874,
+     885,   914,   919,   929,   934,   944,   947,   950,   953,   959,
+     966,   969,   973,   977,   982,   987,   994,   998,  1002,  1006,
+    1011,  1016,  1020,  1096,  1106,  1112,  1115,  1121,  1127,  1134,
+    1143,  1152,  1155,  1158,  1165,  1169,  1176,  1180,  1185,  1190,
+    1200,  1210,  1219,  1229,  1236,  1239,  1242,  1248,  1255,  1258,
+    1264,  1267,  1270,  1276,  1279,  1284,  1299,  1303,  1307,  1311,
+    1315,  1319,  1324,  1329,  1334,  1339,  1344,  1349,  1354,  1359,
+    1364,  1369,  1374,  1379,  1385,  1391,  1397,  1403,  1409,  1415,
+    1421,  1427,  1433,  1438,  1443,  1452,  1457,  1462,  1467,  1472,
+    1477,  1482,  1487,  1492,  1497,  1502,  1507,  1512,  1517,  1522,
+    1535,  1535,  1538,  1538,  1544,  1547,  1563,  1566,  1575,  1579,
+    1585,  1592,  1607,  1611,  1615,  1616,  1622,  1623,  1624,  1625,
+    1626,  1627,  1628,  1632,  1633,  1633,  1633,  1643,  1644,  1648,
+    1648,  1649,  1649,  1654,  1657,  1667,  1670,  1676,  1677,  1681,
+    1689,  1693,  1700,  1700,  1707,  1710,  1719,  1724,  1741,  1741,
+    1746,  1746,  1753,  1753,  1761,  1764,  1770,  1773,  1779,  1783,
+    1790,  1793,  1796,  1799,  1802,  1811,  1815,  1822,  1825,  1831,
+    1831
 };
 #endif
 
@@ -897,18 +899,19 @@ static const yytype_uint8 yyr1[] =
      169,   169,   169,   170,   170,   171,   171,   172,   173,   173,
      173,   173,   173,   173,   173,   173,   174,   174,   174,   174,
      174,   174,   175,   175,   176,   176,   176,   177,   178,   178,
-     179,   179,   179,   180,   180,   181,   181,   181,   181,   181,
+     179,   179,   179,   180,   180,   180,   181,   181,   181,   181,
      181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
      181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
      181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
-     181,   181,   181,   181,   181,   181,   181,   181,   181,   183,
-     182,   184,   182,   185,   185,   186,   186,   187,   187,   188,
-     188,   189,   190,   191,   191,   192,   192,   192,   192,   192,
-     192,   192,   193,   194,   195,   193,   196,   196,   198,   197,
-     199,   197,   200,   200,   201,   201,   202,   202,   203,   204,
-     204,   206,   205,   207,   207,   208,   208,   210,   209,   211,
-     209,   212,   209,   213,   213,   214,   214,   215,   215,   216,
-     216,   216,   216,   216,   217,   217,   218,   218,   220,   219
+     181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
+     183,   182,   184,   182,   185,   185,   186,   186,   187,   187,
+     188,   188,   189,   190,   191,   191,   192,   192,   192,   192,
+     192,   192,   192,   193,   194,   195,   193,   196,   196,   198,
+     197,   199,   197,   200,   200,   201,   201,   202,   202,   203,
+     204,   204,   206,   205,   207,   207,   208,   208,   210,   209,
+     211,   209,   212,   209,   213,   213,   214,   214,   215,   215,
+     216,   216,   216,   216,   216,   217,   217,   218,   218,   220,
+     219
 };
 
 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
@@ -929,18 +932,19 @@ static const yytype_uint8 yyr2[] =
        7,     4,     2,     1,     2,     1,     1,     1,     1,     1,
        2,     1,     2,     1,     1,     2,     1,     1,     1,     2,
        2,     1,     1,     2,     1,     1,     1,     4,     1,     3,
-       1,     3,     3,     1,     4,     1,     1,     1,     1,     1,
+       1,     3,     3,     1,     3,     4,     1,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
-       6,     0,     5,     1,     2,     3,     4,     1,     3,     1,
-       4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     2,     0,     0,     5,     1,     1,     0,     2,
-       0,     2,     2,     3,     1,     2,     1,     2,     5,     3,
-       1,     0,     6,     3,     2,     1,     4,     0,     6,     0,
-       8,     0,     7,     1,     1,     1,     0,     2,     3,     2,
-       2,     2,     3,     2,     1,     2,     1,     1,     0,     3
+       0,     6,     0,     5,     1,     2,     3,     4,     1,     3,
+       1,     4,     1,     1,     1,     1,     1,     1,     1,     1,
+       1,     1,     1,     2,     0,     0,     5,     1,     1,     0,
+       2,     0,     2,     2,     3,     1,     2,     1,     2,     5,
+       3,     1,     0,     6,     3,     2,     1,     4,     0,     6,
+       0,     8,     0,     7,     1,     1,     1,     0,     2,     3,
+       2,     2,     2,     3,     2,     1,     2,     1,     1,     0,
+       3
 };
 
 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
@@ -948,270 +952,300 @@ static const yytype_uint8 yyr2[] =
    means the default is an error.  */
 static const yytype_uint16 yydefact[] =
 {
-       0,     0,   144,   145,   146,     0,   128,   136,   159,   156,
-     157,   158,   163,   164,   165,   166,   167,   168,   160,   161,
-     162,   169,   170,   171,   172,   173,   174,   137,   138,   141,
-     129,   175,   176,   177,   178,   179,   180,     0,   126,   125,
-       0,   155,   181,   182,   183,   185,   186,   187,   188,   189,
-     190,   191,   192,   193,   184,   194,   195,   196,     0,   198,
-     267,   268,     0,    95,   105,     0,   110,   116,   133,     0,
-     131,   123,     0,   134,   142,   153,   197,     0,   264,   266,
-     130,   122,     0,   139,   140,     0,   201,     0,    86,     0,
+       0,     0,   144,   145,   146,     0,   128,   136,   160,   157,
+     158,   159,   164,   165,   166,   167,   168,   169,   161,   162,
+     163,   170,   171,   172,   173,   174,   175,   137,   138,   141,
+     129,   176,   177,   178,   179,   180,   181,     0,   126,   125,
+       0,   156,   182,   183,   184,   186,   187,   188,   189,   190,
+     191,   192,   193,   194,   185,   195,   196,   197,     0,   199,
+     268,   269,     0,    95,   105,     0,   110,   116,   133,     0,
+     131,   123,     0,   134,   142,   153,   198,     0,   265,   267,
+     130,   122,     0,   139,   140,     0,   202,     0,    86,     0,
       93,   105,   127,   106,   107,   108,    96,     0,   105,     0,
       87,   117,   132,     0,    92,     0,   124,   143,   135,     0,
-       1,   265,     0,   199,     0,   150,     0,   148,     0,   269,
+       1,   266,     0,   200,     0,   150,     0,   148,     0,   270,
       97,   102,   104,   109,     0,   111,    98,     0,     0,    85,
-       0,     0,     0,     0,   203,     2,     6,     4,     5,     7,
-      28,     0,     0,     0,    35,    34,    36,    33,     3,     9,
-      29,    11,    16,    17,     0,     0,    22,     0,    37,     0,
-      41,    44,    47,    52,    55,    57,    59,    61,    63,    65,
-      67,    84,     0,    26,    88,     0,     0,     0,   147,     0,
-       0,     0,   249,     0,     0,     0,     0,     0,     0,     0,
-       0,   223,   232,   236,    37,    69,    82,     0,   212,     0,
-     153,   215,   234,   214,   213,     0,   216,   217,   218,   219,
-     220,   221,    99,   101,   103,     0,     0,     0,     0,   211,
-     121,     0,   209,     0,   207,     0,   204,    30,    31,     0,
-      13,    14,     0,     0,    20,    19,     0,    21,    23,    25,
-      32,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   204,     2,     6,     4,     5,     7,
+      28,     0,     0,     0,   154,    35,    34,    36,    33,     3,
+       9,    29,    11,    16,    17,     0,     0,    22,     0,    37,
+       0,    41,    44,    47,    52,    55,    57,    59,    61,    63,
+      65,    67,    84,     0,    26,    88,     0,     0,     0,   147,
+       0,     0,     0,   250,     0,     0,     0,     0,     0,     0,
+       0,     0,   224,   233,   237,    37,    69,    82,     0,   213,
+       0,   142,   216,   235,   215,   214,     0,   217,   218,   219,
+     220,   221,   222,    99,   101,   103,     0,     0,     0,     0,
+     212,   121,     0,   210,     0,   208,     0,   205,    30,    31,
+       0,    13,    14,     0,     0,    20,    19,     0,   156,    23,
+      25,    32,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   154,     0,   202,   151,   152,   149,   260,   259,   230,
-     251,     0,   263,   261,     0,     0,     0,   244,   247,   222,
-       0,    72,    73,    75,    74,    77,    78,    79,    80,    81,
-      76,    71,     0,     0,   237,   233,   235,     0,     0,     0,
-     115,     0,   118,     0,     0,     0,   205,     0,    89,     8,
-       0,    15,    27,    12,    18,    24,    38,    39,    40,    43,
-      42,    45,    46,    50,    51,    48,    49,    53,    54,    56,
-      58,    60,    62,    64,    66,     0,   200,     0,     0,     0,
-       0,     0,   262,     0,   243,     0,   224,    70,    83,     0,
-       0,   112,   119,     0,   206,     0,   208,     0,    90,    10,
-       0,     0,   229,   231,   254,   253,   256,   230,   241,   245,
-       0,     0,     0,     0,   100,   113,     0,   120,   210,     0,
-      68,     0,   255,     0,     0,   240,   238,     0,     0,     0,
-     225,   114,     0,     0,   257,     0,   230,   242,     0,   227,
-     248,   226,    91,     0,   258,   252,   239,   246,   250
+       0,     0,   155,     0,   203,   151,   152,   149,   261,   260,
+     231,   252,     0,   264,   262,     0,     0,     0,   245,   248,
+     223,     0,    72,    73,    75,    74,    77,    78,    79,    80,
+      81,    76,    71,     0,     0,   238,   234,   236,     0,     0,
+       0,   115,     0,   118,     0,     0,     0,   206,     0,    89,
+       8,     0,    15,    27,    12,    18,    24,    38,    39,    40,
+      43,    42,    45,    46,    50,    51,    48,    49,    53,    54,
+      56,    58,    60,    62,    64,    66,     0,   201,     0,     0,
+       0,     0,     0,   263,     0,   244,     0,   225,    70,    83,
+       0,     0,   112,   119,     0,   207,     0,   209,     0,    90,
+      10,     0,     0,   230,   232,   255,   254,   257,   231,   242,
+     246,     0,     0,     0,     0,   100,   113,     0,   120,   211,
+       0,    68,     0,   256,     0,     0,   241,   239,     0,     0,
+       0,   226,   114,     0,     0,   258,     0,   231,   243,     0,
+     228,   249,   227,    91,     0,   259,   253,   240,   247,   251
 };
 
 /* YYDEFGOTO[NTERM-NUM].  */
 static const yytype_int16 yydefgoto[] =
 {
-      -1,   148,   149,   150,   310,   151,   152,   153,   154,   155,
-     156,   157,   194,   159,   160,   161,   162,   163,   164,   165,
-     166,   167,   168,   169,   170,   195,   196,   292,   197,   172,
-     105,   198,   199,    62,    63,    64,   121,    96,    97,   122,
+      -1,   149,   150,   151,   311,   152,   153,   154,   155,   156,
+     157,   158,   195,   160,   161,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,   196,   197,   293,   198,   173,
+     105,   199,   200,    62,    63,    64,   121,    96,    97,   122,
       65,    66,    67,    68,    98,    69,    70,    71,    72,    73,
-     116,   117,    74,   173,    76,   175,   114,   133,   134,   223,
-     224,   220,   201,   202,   203,   204,   280,   373,   400,   337,
-     338,   339,   401,   205,   206,   207,   386,   208,   387,   209,
-     372,   210,   345,   269,   340,   366,   383,   384,   211,    77,
+     116,   117,   174,    75,    76,   176,   114,   133,   134,   224,
+     225,   221,   202,   203,   204,   205,   281,   374,   401,   338,
+     339,   340,   402,   206,   207,   208,   387,   209,   388,   210,
+     373,   211,   346,   270,   341,   367,   384,   385,   212,    77,
       78,    79,    89
 };
 
 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
    STATE-NUM.  */
-#define YYPACT_NINF -333
+#define YYPACT_NINF -331
 static const yytype_int16 yypact[] =
 {
-    2050,   -21,  -333,  -333,  -333,    21,  -333,  -333,  -333,  -333,
-    -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,
-    -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,
-    -333,  -333,  -333,  -333,  -333,  -333,  -333,    26,  -333,  -333,
-     -46,  -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,
-    -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,   -25,  -333,
-    -333,   -78,   -16,   -15,    -1,   -43,  -333,    34,     7,  1167,
-    -333,  -333,  2335,     7,  -333,    31,  -333,  1975,  -333,  -333,
-    -333,  -333,  2335,  -333,  -333,     5,  -333,    47,  -333,    54,
-    -333,    19,  -333,  -333,  -333,  -333,  -333,  2199,   114,    49,
-    -333,   -23,  -333,    58,  -333,  2125,  -333,  -333,  -333,  1528,
-    -333,  -333,    13,  -333,  2125,    33,   -12,  -333,   395,  -333,
-    -333,  -333,  -333,   104,  2199,   -26,  -333,  1237,  1528,  -333,
-     139,  2199,   113,  1720,  -333,    86,  -333,  -333,  -333,  -333,
-    -333,  1528,  1528,  1528,  -333,  -333,  -333,  -333,  -333,  -333,
-      30,  -333,  -333,  -333,    88,    -5,  1623,    91,  -333,  1528,
-      38,    45,     1,   -69,    75,    70,    72,    74,   109,   108,
-     -70,  -333,    95,  -333,  -333,  2125,  1805,    92,  -333,    47,
-      93,    94,  -333,   102,   105,   107,  1335,   118,  1528,   111,
-     120,   122,  -333,  -333,   117,  -333,  -333,   -13,  -333,   -78,
-      39,  -333,  -333,  -333,  -333,   511,  -333,  -333,  -333,  -333,
-    -333,  -333,   121,  -333,  -333,  1430,  1528,   119,   126,  -333,
-    -333,   113,   128,    18,  -333,   -63,  -333,  -333,  -333,    -2,
-    -333,  -333,  1528,  2267,  -333,  -333,  1528,   131,  -333,  -333,
-    -333,  1528,  1528,  1528,  1528,  1528,  1528,  1528,  1528,  1528,
-    1528,  1528,  1528,  1528,  1528,  1528,  1528,  1528,  1528,  1528,
-    1528,  -333,  1890,  -333,  -333,  -333,  -333,  -333,  -333,   129,
-    -333,  1528,  -333,  -333,    27,  1528,   127,  -333,  -333,  -333,
-     627,  -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,
-    -333,  -333,  1528,  1528,  -333,  -333,  -333,  1528,   125,   134,
-    -333,  1528,   132,    28,  1528,   113,  -333,   -62,  -333,  -333,
-     135,   136,  -333,   142,  -333,  -333,  -333,  -333,  -333,    38,
-      38,    45,    45,     1,     1,     1,     1,   -69,   -69,    75,
-      70,    72,    74,   109,   108,    62,  -333,   192,    54,   859,
-     975,     6,  -333,    15,  -333,  1072,   627,  -333,  -333,   143,
-    1528,   138,  -333,  1528,  -333,   149,  -333,  1528,  -333,  -333,
-    1528,   145,  -333,  -333,  -333,  -333,  1072,   129,  -333,   136,
-     181,  2199,   153,   150,  -333,  -333,  1528,  -333,  -333,   154,
-    -333,  1528,  -333,   146,   160,   249,  -333,   159,   155,   743,
-    -333,  -333,   156,    17,  1528,   743,   129,  -333,  1528,  -333,
-    -333,  -333,  -333,   157,   136,  -333,  -333,  -333,  -333
+    2157,   -28,  -331,  -331,  -331,   141,  -331,  -331,  -331,  -331,
+    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,  -331,  -331,  -331,  -331,  -331,     4,  -331,  -331,
+     -44,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,   -78,  -331,
+    -331,   -31,   -35,   -24,    10,   -71,  -331,    45,    38,  1176,
+    -331,  -331,  2442,    38,  -331,     1,  -331,  2082,  -331,  -331,
+    -331,  -331,  2442,  -331,  -331,    49,  -331,    72,  -331,    51,
+    -331,    19,  -331,  -331,  -331,  -331,  -331,  2306,   110,    92,
+    -331,   -79,  -331,    67,  -331,  2232,  -331,  -331,  -331,  1246,
+    -331,  -331,    25,  -331,  2232,    58,   -70,  -331,   404,  -331,
+    -331,  -331,  -331,   103,  2306,   -89,  -331,  1344,  1635,  -331,
+     136,  2306,   105,  1827,  -331,    78,  -331,  -331,  -331,  -331,
+    -331,  1635,  1635,  1635,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,    16,  -331,  -331,  -331,    79,   -21,  1730,    83,  -331,
+    1635,    34,    40,    28,   -65,    47,    57,    61,    64,   100,
+     101,   -72,  -331,    86,  -331,  -331,  2232,  1912,    82,  -331,
+      72,    84,    85,  -331,    93,    96,    87,  1442,    98,  1635,
+      91,   106,   102,  -331,  -331,   188,  -331,  -331,   -15,  -331,
+     -31,   108,  -331,  -331,  -331,  -331,   520,  -331,  -331,  -331,
+    -331,  -331,  -331,    90,  -331,  -331,  1537,  1635,   104,   109,
+    -331,  -331,   105,   107,     5,  -331,   -61,  -331,  -331,  -331,
+     -20,  -331,  -331,  1635,  2374,  -331,  -331,  1635,   113,  -331,
+    -331,  -331,  1635,  1635,  1635,  1635,  1635,  1635,  1635,  1635,
+    1635,  1635,  1635,  1635,  1635,  1635,  1635,  1635,  1635,  1635,
+    1635,  1635,  -331,  1997,  -331,  -331,  -331,  -331,  -331,  -331,
+     111,  -331,  1635,  -331,  -331,     6,  1635,    97,  -331,  -331,
+    -331,   636,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
+    -331,  -331,  -331,  1635,  1635,  -331,  -331,  -331,  1635,   112,
+     114,  -331,  1635,   115,    21,  1635,   105,  -331,   -75,  -331,
+    -331,   117,   120,  -331,   116,  -331,  -331,  -331,  -331,  -331,
+      34,    34,    40,    40,    28,    28,    28,    28,   -65,   -65,
+      47,    57,    61,    64,   100,   101,    31,  -331,   159,    51,
+     868,   984,   -17,  -331,    -5,  -331,  1081,   636,  -331,  -331,
+     119,  1635,   121,  -331,  1635,  -331,   125,  -331,  1635,  -331,
+    -331,  1635,   118,  -331,  -331,  -331,  -331,  1081,   111,  -331,
+     120,   157,  2306,   130,   127,  -331,  -331,  1635,  -331,  -331,
+     131,  -331,  1635,  -331,   126,   134,   224,  -331,   138,   129,
+     752,  -331,  -331,   133,    -1,  1635,   752,   111,  -331,  1635,
+    -331,  -331,  -331,  -331,   135,   120,  -331,  -331,  -331,  -331
 };
 
 /* YYPGOTO[NTERM-NUM].  */
 static const yytype_int16 yypgoto[] =
 {
-    -333,  -333,  -333,  -333,  -333,  -333,  -333,    36,  -333,  -333,
-    -333,  -333,    40,  -333,   -66,   -61,   -98,   -65,    22,    20,
-      16,    43,    44,    14,  -333,   -94,  -124,  -333,  -141,  -113,
-    -333,     9,    11,  -333,  -333,  -333,   177,   186,   180,   182,
-    -333,  -333,  -324,  -333,  -333,  -102,   -30,   -68,   274,  -333,
-    -333,   130,   -48,     0,  -333,  -333,  -333,   -97,  -127,    83,
-       2,  -206,   -35,  -198,  -319,   -79,  -333,  -333,   -85,  -332,
-    -333,  -333,   -84,    32,   -29,  -333,  -333,  -333,  -333,  -333,
-     -53,  -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,  -333,
-     237,  -333,  -333
+    -331,  -331,  -331,  -331,  -331,  -331,  -331,    14,  -331,  -331,
+    -331,  -331,    63,  -331,   -82,   -74,  -122,   -88,    -4,    -6,
+      -3,     2,     7,     8,  -331,   -91,  -124,  -331,  -138,  -113,
+    -331,     3,     9,  -331,  -331,  -331,   137,   164,   160,   145,
+    -331,  -331,  -325,  -331,  -331,  -103,    -2,   -68,   254,  -331,
+    -331,    94,     0,  -331,  -331,  -331,  -331,  -101,  -123,    43,
+     -36,  -210,   -69,  -198,  -328,  -126,  -331,  -331,  -125,  -330,
+    -331,  -331,   -83,    -8,   -64,  -331,  -331,  -331,  -331,  -331,
+     -87,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,  -331,
+     199,  -331,  -331
 };
 
 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
    positive, shift that token.  If negative, reduce the rule which
    number is the opposite.  If zero, do what YYDEFACT says.
    If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -229
+#define YYTABLE_NINF -230
 static const yytype_int16 yytable[] =
 {
-      75,   106,   229,   131,   219,   119,   226,   296,    92,    60,
-     300,    61,   131,   307,   218,   171,     7,   176,   248,   249,
-     363,   370,   259,    80,   107,     2,     3,     4,    92,   123,
-      85,   131,   238,   171,   112,   385,    88,   132,   102,    93,
-      94,    95,   370,   108,   357,   274,   132,    27,    28,   226,
-      29,   308,   358,   250,   251,    81,   123,   260,    37,    93,
-      94,    95,    86,   221,   406,   132,    83,    84,    99,    75,
-     399,   100,    75,   131,   131,   276,   399,    75,   262,    87,
-     215,   126,    75,   127,   246,   247,    60,   216,    61,    90,
-     128,   311,   219,   178,   171,   352,    91,    75,   293,   179,
-     235,   294,   299,   309,   -94,    75,   236,   132,   132,   293,
-     101,   367,   315,   113,    75,   230,   231,   293,   200,   335,
-     368,   171,   403,   115,    75,   125,   293,   174,   293,   305,
-     341,    75,   306,    75,   343,   226,   232,   109,   293,   305,
-     233,   342,   354,   -26,   375,   109,   177,   377,   296,   158,
-     323,   324,   325,   326,    93,    94,    95,   241,   242,   243,
-     131,   244,   118,   245,   252,   253,   129,   158,   347,   348,
-     391,   264,   265,   293,   360,    75,    75,   219,   319,   320,
-     212,   227,   228,    80,   349,   321,   322,   327,   328,   222,
-     -27,   355,   407,   234,   132,   239,   254,   255,   256,   240,
-     257,   258,   261,   171,   369,   200,   270,   267,   268,   271,
-     171,   281,   282,   283,   284,   285,   286,   287,   288,   289,
-     290,   272,   275,   277,   278,   369,   219,   297,   158,   219,
-     291,   279,   301,   302,   304,  -155,   380,  -228,   350,   344,
-     393,   351,   359,   371,   379,   353,   -28,   293,   361,   381,
-     374,   376,   219,   404,   362,   158,   378,   388,   389,   390,
-     394,   392,    75,   171,   371,   395,   396,   191,   398,   314,
-     402,   408,   331,   334,   219,   330,   329,   120,   124,    82,
-     200,   316,   317,   318,   158,   158,   158,   158,   158,   158,
-     158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
-     332,   213,   333,   106,   303,   364,   214,   356,   397,   266,
-     405,   365,   346,   382,   111,     0,     0,     0,     0,     0,
+      74,   106,   131,    60,   220,   230,   119,   301,   297,    61,
+     227,   131,   364,   177,   219,   308,    80,   216,   172,    92,
+     260,   371,   249,   250,   217,   126,    87,   127,    92,   123,
+     131,   358,    85,   239,   128,   179,   172,   132,   386,   359,
+      99,   180,   371,   100,    83,    84,   132,     7,    81,   275,
+      93,    94,    95,   309,   227,   261,   123,   251,   252,    93,
+      94,    95,   400,   222,    86,   132,   102,   407,   400,    74,
+      90,   108,   107,   131,   131,   263,   277,    74,    27,    28,
+      60,    29,   112,    88,   236,   310,    61,    91,   368,    37,
+     237,   294,   353,   220,   294,   312,   294,    74,   172,   295,
+     369,   231,   232,   300,   404,    74,   294,   109,   132,   132,
+     294,   247,   248,   316,    74,   -94,   306,   294,   201,   307,
+     343,   101,   233,   336,    74,   172,   234,   324,   325,   326,
+     327,    74,   306,    74,   342,   355,   253,   254,   344,   175,
+     227,   376,   294,   361,   378,     2,     3,     4,   115,   297,
+      93,    94,    95,   242,   243,   244,   245,   113,   246,   118,
+     131,   265,   266,   320,   321,   328,   329,   392,   125,   348,
+     349,   178,   159,   322,   323,   129,    74,    74,   220,   213,
+      80,   223,   -27,   255,   235,   350,   256,   240,   257,   408,
+     159,   258,   356,   262,   259,   132,   298,   271,   268,   269,
+     272,   273,   276,   278,   228,   229,   201,   172,   370,   345,
+     279,   280,   -26,   305,   172,   362,   303,   302,   -21,  -229,
+     -28,   352,   382,   241,   360,   351,   375,   220,   354,   370,
+     220,   294,   379,   389,   377,   390,   391,   381,   393,   396,
+     395,   397,   399,   372,   394,   380,   192,   403,   315,   409,
+     331,   330,   159,   220,   332,   120,   363,   405,   124,    82,
+     333,   214,   398,    74,   372,   304,   334,   172,   335,   215,
+     357,   406,   365,   347,   267,   220,   111,   366,     0,   159,
+     383,   201,   282,   283,   284,   285,   286,   287,   288,   289,
+     290,   291,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   292,     0,     0,   106,   317,   318,   319,   159,   159,
+     159,   159,   159,   159,   159,   159,   159,   159,   159,   159,
+     159,   159,   159,   159,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   158,     0,   200,
-     200,     0,     0,     0,   158,   200,   200,     0,     0,     0,
+     201,   201,     0,     0,     0,     0,   201,   201,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,   200,     0,     0,     0,
-       0,    75,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   200,
-       0,     0,     0,     0,     0,   200,     0,   158,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,   180,
-     181,   182,     0,   183,   184,   185,   186,   187,   188,   189,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,   190,    42,    43,    44,     0,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-      58,   135,    59,   136,   137,   138,   139,   140,     0,     0,
-     141,   142,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   143,
-       0,     0,     0,   191,   192,     0,     0,     0,     0,   193,
-     144,   145,   146,   147,     1,     2,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,   180,   181,   182,     0,   183,
-     184,   185,   186,   187,   188,   189,    12,    13,    14,    15,
+       0,   159,     0,     0,     0,     0,     0,   201,   159,     0,
+       0,     0,    74,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     201,     0,     0,     0,     0,     0,   201,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,   181,   182,
+     183,   159,   184,   185,   186,   187,   188,   189,   190,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+     191,    42,    43,    44,     0,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,     0,    55,    56,    57,    58,
+     135,    59,   136,   137,   138,   139,   140,     0,     0,   141,
+     142,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   143,     0,
+       0,     0,   192,   193,     0,     0,     0,     0,   194,   145,
+     146,   147,   148,     1,     2,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,   181,   182,   183,     0,   184,   185,
+     186,   187,   188,   189,   190,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
+      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,   191,    42,    43,    44,
+       0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,     0,    55,    56,    57,    58,   135,    59,   136,   137,
+     138,   139,   140,     0,     0,   141,   142,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   143,     0,     0,     0,   192,   296,
+       0,     0,     0,     0,   194,   145,   146,   147,   148,     1,
+       2,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+     181,   182,   183,     0,   184,   185,   186,   187,   188,   189,
+     190,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,    27,    28,     0,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,   191,    42,    43,    44,     0,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
+      57,    58,   135,    59,   136,   137,   138,   139,   140,     0,
+       0,   141,   142,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+     143,     0,     0,     0,   192,     0,     0,     0,     0,     0,
+     194,   145,   146,   147,   148,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,   181,   182,   183,     0,
+     184,   185,   186,   187,   188,   189,   190,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,   191,    42,
+      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,     0,    55,    56,    57,    58,   135,    59,
+     136,   137,   138,   139,   140,     0,     0,   141,   142,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   143,     0,     0,     0,
+     118,     0,     0,     0,     0,     0,   194,   145,   146,   147,
+     148,     1,     2,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,   181,   182,   183,     0,   184,   185,   186,   187,
+     188,   189,   190,    12,    13,    14,    15,    16,    17,    18,
+      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+       0,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,   191,    42,    43,    44,     0,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
+      55,    56,    57,    58,   135,    59,   136,   137,   138,   139,
+     140,     0,     0,   141,   142,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   143,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   194,   145,   146,   147,   148,     1,     2,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,    27,    28,     0,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+       0,    42,    43,    44,     0,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,     0,    55,    56,    57,    58,
+     135,    59,   136,   137,   138,   139,   140,     0,     0,   141,
+     142,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   130,     2,     3,     4,   143,     6,
+       7,     8,     9,    10,    11,     0,     0,     0,   194,   145,
+     146,   147,   148,     0,     0,     0,    12,    13,    14,    15,
       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
       26,    27,    28,     0,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,   190,    42,    43,
+      35,    36,    37,    38,    39,    40,    41,     0,    42,    43,
       44,     0,    45,    46,    47,    48,    49,    50,    51,    52,
       53,    54,     0,    55,    56,    57,    58,   135,    59,   136,
      137,   138,   139,   140,     0,     0,   141,   142,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   143,     0,     0,     0,   191,
-     295,     0,     0,     0,     0,   193,   144,   145,   146,   147,
-       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,   180,   181,   182,     0,   183,   184,   185,   186,   187,
-     188,   189,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
-      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
-      39,    40,    41,   190,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,    58,   135,    59,   136,   137,   138,   139,   140,
-       0,     0,   141,   142,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   143,     0,     0,     0,   191,     0,     0,     0,     0,
-       0,   193,   144,   145,   146,   147,     1,     2,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,   180,   181,   182,
-       0,   183,   184,   185,   186,   187,   188,   189,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,    27,    28,     0,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,   190,
-      42,    43,    44,     0,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,     0,    55,    56,    57,    58,   135,
-      59,   136,   137,   138,   139,   140,     0,     0,   141,   142,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   143,     0,     0,
-       0,   118,     0,     0,     0,     0,     0,   193,   144,   145,
-     146,   147,     1,     2,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,   180,   181,   182,     0,   183,   184,   185,
-     186,   187,   188,   189,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
-      28,     0,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,   190,    42,    43,    44,     0,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-       0,    55,    56,    57,    58,   135,    59,   136,   137,   138,
-     139,   140,     0,     0,   141,   142,     0,     0,     0,     0,
+       2,     3,     4,     0,     0,   143,     8,     9,    10,    11,
+       0,     0,     0,     0,     0,     0,   145,   146,   147,   148,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
+       0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
+      40,    41,     0,    42,    43,    44,     0,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
+      57,     0,   103,    59,     0,     0,     8,     9,    10,    11,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   143,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   193,   144,   145,   146,   147,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,     0,
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
+     104,    31,    32,    33,    34,    35,    36,     0,     0,     0,
+      40,    41,     0,    42,    43,    44,     0,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
+      57,     0,   135,    59,   136,   137,   138,   139,   140,     0,
+       0,   141,   142,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-      58,   135,    59,   136,   137,   138,   139,   140,     0,     0,
-     141,   142,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   130,     2,     3,     4,   143,
-       6,     7,     8,     9,    10,    11,     0,     0,     0,   193,
-     144,   145,   146,   147,     0,     0,     0,    12,    13,    14,
+     143,     0,     0,   144,     8,     9,    10,    11,     0,     0,
+       0,   145,   146,   147,   148,     0,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
+      32,    33,    34,    35,    36,     0,     0,     0,    40,    41,
+       0,    42,    43,    44,     0,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,     0,    55,    56,    57,     0,
+     135,    59,   136,   137,   138,   139,   140,     0,     0,   141,
+     142,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   143,     0,
+       0,   218,     8,     9,    10,    11,     0,     0,     0,   145,
+     146,   147,   148,     0,     0,     0,     0,    12,    13,    14,
       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
-      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
+      25,    26,     0,     0,     0,     0,     0,    31,    32,    33,
+      34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
       43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
-      52,    53,    54,     0,    55,    56,    57,    58,   135,    59,
+      52,    53,    54,     0,    55,    56,    57,     0,   135,    59,
      136,   137,   138,   139,   140,     0,     0,   141,   142,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     2,     3,     4,     0,     0,   143,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,     0,   144,   145,   146,
-     147,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+       0,     0,     0,     0,     0,     0,   143,     8,     9,    10,
+      11,     0,     0,     0,     0,     0,   274,   145,   146,   147,
+     148,     0,    12,    13,    14,    15,    16,    17,    18,    19,
       20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
        0,     0,    31,    32,    33,    34,    35,    36,     0,     0,
        0,    40,    41,     0,    42,    43,    44,     0,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,     0,   103,    59,     0,     0,     8,     9,    10,
-      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
-       0,   104,    31,    32,    33,    34,    35,    36,     0,     0,
-       0,    40,    41,     0,    42,    43,    44,     0,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
       56,    57,     0,   135,    59,   136,   137,   138,   139,   140,
        0,     0,   141,   142,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   143,     0,     0,   217,     8,     9,    10,    11,     0,
-       0,     0,   144,   145,   146,   147,     0,     0,     0,     0,
+       0,   143,     0,     0,   299,     8,     9,    10,    11,     0,
+       0,     0,   145,   146,   147,   148,     0,     0,     0,     0,
       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
       22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
       31,    32,    33,    34,    35,    36,     0,     0,     0,    40,
@@ -1220,239 +1254,249 @@ static const yytype_int16 yytable[] =
        0,   135,    59,   136,   137,   138,   139,   140,     0,     0,
      141,   142,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,   143,
-       8,     9,    10,    11,     0,     0,     0,     0,     0,   273,
-     144,   145,   146,   147,     0,    12,    13,    14,    15,    16,
+       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
+     145,   146,   147,   148,     0,    12,    13,    14,    15,    16,
       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
        0,     0,     0,     0,     0,    31,    32,    33,    34,    35,
-      36,     0,     0,     0,    40,    41,     0,    42,    43,    44,
+      36,     0,     0,     0,    40,   238,     0,    42,    43,    44,
        0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
       54,     0,    55,    56,    57,     0,   135,    59,   136,   137,
      138,   139,   140,     0,     0,   141,   142,     0,     0,     0,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   143,     0,     0,   298,     8,     9,
-      10,    11,     0,     0,     0,   144,   145,   146,   147,     0,
-       0,     0,     0,    12,    13,    14,    15,    16,    17,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,     0,     0,
-       0,     0,     0,    31,    32,    33,    34,    35,    36,     0,
-       0,     0,    40,    41,     0,    42,    43,    44,     0,    45,
-      46,    47,    48,    49,    50,    51,    52,    53,    54,     0,
-      55,    56,    57,     0,   135,    59,   136,   137,   138,   139,
-     140,     0,     0,   141,   142,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   143,     8,     9,    10,    11,     0,     0,     0,
-       0,     0,     0,   144,   145,   146,   147,     0,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
-      24,    25,    26,     0,     0,     0,     0,     0,    31,    32,
-      33,    34,    35,    36,     0,     0,     0,    40,   237,     0,
-      42,    43,    44,     0,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,     0,    55,    56,    57,     0,   135,
-      59,   136,   137,   138,   139,   140,     0,     0,   141,   142,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   130,     2,     3,     4,   143,     6,     7,
-       8,     9,    10,    11,     0,     0,     0,     0,   144,   145,
-     146,   147,     0,     0,     0,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,     0,    42,    43,    44,
-       0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,     0,    55,    56,    57,    58,     0,    59,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   130,     2,
-       3,     4,     0,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   225,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-      58,     0,    59,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   130,     2,     3,     4,     0,     6,     7,
-       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   263,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,     0,    42,    43,    44,
-       0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,     0,    55,    56,    57,    58,     0,    59,     0,     0,
-       0,     0,     0,     0,     0,   110,     0,     0,     1,     2,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   336,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-      58,     0,    59,     1,     2,     3,     4,     5,     6,     7,
-       8,     9,    10,    11,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    12,    13,    14,    15,    16,
-      17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,     0,    29,    30,    31,    32,    33,    34,    35,
-      36,    37,    38,    39,    40,    41,     0,    42,    43,    44,
-       0,    45,    46,    47,    48,    49,    50,    51,    52,    53,
-      54,     0,    55,    56,    57,    58,     0,    59,   130,     2,
-       3,     4,     0,     6,     7,     8,     9,    10,    11,     0,
+     130,     2,     3,     4,   143,     6,     7,     8,     9,    10,
+      11,     0,     0,     0,     0,   145,   146,   147,   148,     0,
+       0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,     0,    42,    43,    44,     0,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
+      56,    57,    58,     0,    59,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,   130,     2,     3,     4,     0,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   226,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
+      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,     0,    55,    56,    57,    58,     0,    59,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,    27,    28,     0,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-      58,     0,    59,     2,     3,     4,     0,     0,     0,     8,
-       9,    10,    11,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,    12,    13,    14,    15,    16,    17,
-      18,    19,    20,    21,    22,    23,    24,    25,    26,     0,
-       0,     0,     0,     0,    31,    32,    33,    34,    35,    36,
-       0,     0,     0,    40,    41,     0,    42,    43,    44,     0,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-       0,    55,    56,    57,     0,     0,    59,     8,     9,    10,
+     130,     2,     3,     4,     0,     6,     7,     8,     9,    10,
+      11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   264,    12,    13,    14,    15,    16,    17,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,     0,    42,    43,    44,     0,    45,    46,
+      47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
+      56,    57,    58,     0,    59,     0,     0,     0,     0,     0,
+       0,     0,   110,     0,     0,     1,     2,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   337,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
+      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,     0,    55,    56,    57,    58,     0,    59,
+       1,     2,     3,     4,     5,     6,     7,     8,     9,    10,
       11,     0,     0,     0,     0,     0,     0,     0,     0,     0,
        0,     0,    12,    13,    14,    15,    16,    17,    18,    19,
-      20,    21,    22,    23,    24,    25,    26,     0,     0,     0,
-       0,     0,    31,    32,    33,    34,    35,    36,     0,     0,
-       0,    40,    41,     0,    42,    43,    44,     0,    45,    46,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,     0,
+      29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+      39,    40,    41,     0,    42,    43,    44,     0,    45,    46,
       47,    48,    49,    50,    51,    52,    53,    54,     0,    55,
-      56,    57,     0,   312,    59,     8,     9,    10,    11,   313,
+      56,    57,    58,     0,    59,   130,     2,     3,     4,     0,
+       6,     7,     8,     9,    10,    11,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,    27,    28,     0,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,     0,    42,
+      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,     0,    55,    56,    57,    58,     0,    59,
+       2,     3,     4,     0,     0,     0,     8,     9,    10,    11,
        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    23,    24,    25,    26,     0,     0,     0,     0,     0,
-      31,    32,    33,    34,    35,    36,     0,     0,     0,    40,
-      41,     0,    42,    43,    44,     0,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,     0,    55,    56,    57,
-       0,     0,    59
+       0,    12,    13,    14,    15,    16,    17,    18,    19,    20,
+      21,    22,    23,    24,    25,    26,     0,     0,     0,     0,
+       0,    31,    32,    33,    34,    35,    36,     0,     0,     0,
+      40,    41,     0,    42,    43,    44,     0,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,     0,    55,    56,
+      57,     0,     0,    59,     8,     9,    10,    11,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      23,    24,    25,    26,     0,     0,     0,     0,     0,    31,
+      32,    33,    34,    35,    36,     0,     0,     0,    40,    41,
+       0,    42,    43,    44,     0,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,     0,    55,    56,    57,     0,
+     313,    59,     8,     9,    10,    11,   314,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    12,    13,    14,
+      15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+      25,    26,     0,     0,     0,     0,     0,    31,    32,    33,
+      34,    35,    36,     0,     0,     0,    40,    41,     0,    42,
+      43,    44,     0,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,     0,    55,    56,    57,     0,     0,    59
 };
 
 static const yytype_int16 yycheck[] =
 {
-       0,    69,   143,   105,   128,    89,   133,   205,     9,     0,
-     216,     0,   114,    76,   127,   109,     9,   114,    87,    88,
-     339,   345,    92,    44,    72,     4,     5,     6,     9,    97,
-      76,   133,   156,   127,    82,   367,   114,   105,    68,    40,
-      41,    42,   366,    73,   106,   186,   114,    40,    41,   176,
-      43,   114,   114,   122,   123,    76,   124,   127,    51,    40,
-      41,    42,   108,   131,   396,   133,    40,    41,   111,    69,
-     389,   114,    72,   175,   176,   188,   395,    77,   175,   104,
-     106,   104,    82,   106,    83,    84,    77,   113,    77,   105,
-     113,   232,   216,   105,   188,   301,   111,    97,   111,   111,
-     105,   114,   215,   105,   105,   105,   111,   175,   176,   111,
-      76,   105,   236,   108,   114,    85,    86,   111,   118,   260,
-     105,   215,   105,    76,   124,    76,   111,   114,   111,   111,
-     271,   131,   114,   133,   275,   262,   106,   106,   111,   111,
-     110,   114,   114,   104,   350,   106,   113,   353,   346,   109,
-     248,   249,   250,   251,    40,    41,    42,   119,   120,   121,
-     262,   116,   108,   118,    89,    90,   108,   127,   292,   293,
-     376,    79,    80,   111,   112,   175,   176,   301,   244,   245,
-      76,   141,   142,    44,   297,   246,   247,   252,   253,    76,
-     104,   304,   398,   105,   262,   104,   126,   125,   124,   159,
-      91,    93,   107,   297,   345,   205,   104,   114,   114,   104,
-     304,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   114,   104,   112,   104,   366,   350,   106,   188,   353,
-     113,   109,   113,   107,   106,   104,   360,   108,   113,   112,
-     381,   107,   107,   345,   357,   113,   104,   111,    56,   104,
-     107,   113,   376,   394,   338,   215,   107,    76,   105,   109,
-     114,   107,   262,   357,   366,   105,    17,   108,   113,   233,
-     114,   114,   256,   259,   398,   255,   254,    91,    98,     5,
-     280,   241,   242,   243,   244,   245,   246,   247,   248,   249,
-     250,   251,   252,   253,   254,   255,   256,   257,   258,   259,
-     257,   124,   258,   371,   221,   340,   124,   305,   387,   179,
-     395,   340,   280,   366,    77,    -1,    -1,    -1,    -1,    -1,
+       0,    69,   105,     0,   128,   143,    89,   217,   206,     0,
+     133,   114,   340,   114,   127,    76,    44,   106,   109,     9,
+      92,   346,    87,    88,   113,   104,   104,   106,     9,    97,
+     133,   106,    76,   157,   113,   105,   127,   105,   368,   114,
+     111,   111,   367,   114,    40,    41,   114,     9,    76,   187,
+      40,    41,    42,   114,   177,   127,   124,   122,   123,    40,
+      41,    42,   390,   131,   108,   133,    68,   397,   396,    69,
+     105,    73,    72,   176,   177,   176,   189,    77,    40,    41,
+      77,    43,    82,   114,   105,   105,    77,   111,   105,    51,
+     111,   111,   302,   217,   111,   233,   111,    97,   189,   114,
+     105,    85,    86,   216,   105,   105,   111,   106,   176,   177,
+     111,    83,    84,   237,   114,   105,   111,   111,   118,   114,
+     114,    76,   106,   261,   124,   216,   110,   249,   250,   251,
+     252,   131,   111,   133,   272,   114,    89,    90,   276,   114,
+     263,   351,   111,   112,   354,     4,     5,     6,    76,   347,
+      40,    41,    42,   119,   120,   121,   116,   108,   118,   108,
+     263,    79,    80,   245,   246,   253,   254,   377,    76,   293,
+     294,   113,   109,   247,   248,   108,   176,   177,   302,    76,
+      44,    76,   104,   126,   105,   298,   125,   104,   124,   399,
+     127,    91,   305,   107,    93,   263,   106,   104,   114,   114,
+     104,   114,   104,   112,   141,   142,   206,   298,   346,   112,
+     104,   109,   104,   106,   305,    56,   107,   113,   105,   108,
+     104,   107,   104,   160,   107,   113,   107,   351,   113,   367,
+     354,   111,   107,    76,   113,   105,   109,   361,   107,   105,
+     114,    17,   113,   346,   382,   358,   108,   114,   234,   114,
+     256,   255,   189,   377,   257,    91,   339,   395,    98,     5,
+     258,   124,   388,   263,   367,   222,   259,   358,   260,   124,
+     306,   396,   341,   281,   180,   399,    77,   341,    -1,   216,
+     367,   281,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   113,    -1,    -1,   372,   242,   243,   244,   245,   246,
+     247,   248,   249,   250,   251,   252,   253,   254,   255,   256,
+     257,   258,   259,   260,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   297,    -1,   339,
-     340,    -1,    -1,    -1,   304,   345,   346,    -1,    -1,    -1,
+     340,   341,    -1,    -1,    -1,    -1,   346,   347,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   366,    -1,    -1,    -1,
-      -1,   371,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   389,
-      -1,    -1,    -1,    -1,    -1,   395,    -1,   357,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    56,    57,    58,    59,    -1,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
-      -1,    -1,    -1,   108,   109,    -1,    -1,    -1,    -1,   114,
-     115,   116,   117,   118,     3,     4,     5,     6,     7,     8,
-       9,    10,    11,    12,    13,    14,    15,    16,    -1,    18,
-      19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+      -1,   298,    -1,    -1,    -1,    -1,    -1,   367,   305,    -1,
+      -1,    -1,   372,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     390,    -1,    -1,    -1,    -1,    -1,   396,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,   358,    18,    19,    20,    21,    22,    23,    24,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      56,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,
+      -1,    -1,   108,   109,    -1,    -1,    -1,    -1,   114,   115,
+     116,   117,   118,     3,     4,     5,     6,     7,     8,     9,
+      10,    11,    12,    13,    14,    15,    16,    -1,    18,    19,
+      20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
+      50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+      -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
+      70,    -1,    72,    73,    74,    75,    76,    77,    78,    79,
+      80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,   108,   109,
+      -1,    -1,    -1,    -1,   114,   115,   116,   117,   118,     3,
+       4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
+      14,    15,    16,    -1,    18,    19,    20,    21,    22,    23,
+      24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    40,    41,    -1,    43,
+      44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+      54,    55,    56,    57,    58,    59,    -1,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
+      74,    75,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+     104,    -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,
+     114,   115,   116,   117,   118,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    14,    15,    16,    -1,
+      18,    19,    20,    21,    22,    23,    24,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+      58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    72,    73,    74,    75,    76,    77,
+      78,    79,    80,    81,    82,    -1,    -1,    85,    86,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,
+     108,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,   117,
+     118,     3,     4,     5,     6,     7,     8,     9,    10,    11,
+      12,    13,    14,    15,    16,    -1,    18,    19,    20,    21,
+      22,    23,    24,    25,    26,    27,    28,    29,    30,    31,
+      32,    33,    34,    35,    36,    37,    38,    39,    40,    41,
+      -1,    43,    44,    45,    46,    47,    48,    49,    50,    51,
+      52,    53,    54,    55,    56,    57,    58,    59,    -1,    61,
+      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    81,
+      82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   104,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,   114,   115,   116,   117,   118,     3,     4,     5,
+       6,     7,     8,     9,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    40,    41,    -1,    43,    44,    45,
+      46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
+      -1,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,     3,     4,     5,     6,   104,     8,
+       9,    10,    11,    12,    13,    -1,    -1,    -1,   114,   115,
+     116,   117,   118,    -1,    -1,    -1,    25,    26,    27,    28,
       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
       39,    40,    41,    -1,    43,    44,    45,    46,    47,    48,
-      49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+      49,    50,    51,    52,    53,    54,    55,    -1,    57,    58,
       59,    -1,    61,    62,    63,    64,    65,    66,    67,    68,
       69,    70,    -1,    72,    73,    74,    75,    76,    77,    78,
       79,    80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,    -1,   108,
-     109,    -1,    -1,    -1,    -1,   114,   115,   116,   117,   118,
-       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    -1,    18,    19,    20,    21,    22,
-      23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
-      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
-      53,    54,    55,    56,    57,    58,    59,    -1,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
-      -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   104,    -1,    -1,    -1,   108,    -1,    -1,    -1,    -1,
-      -1,   114,   115,   116,   117,   118,     3,     4,     5,     6,
-       7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
-      -1,    18,    19,    20,    21,    22,    23,    24,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    40,    41,    -1,    43,    44,    45,    46,
-      47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
-      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    -1,    72,    73,    74,    75,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
+       4,     5,     6,    -1,    -1,   104,    10,    11,    12,    13,
+      -1,    -1,    -1,    -1,    -1,    -1,   115,   116,   117,   118,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      54,    55,    -1,    57,    58,    59,    -1,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
+      74,    -1,    76,    77,    -1,    -1,    10,    11,    12,    13,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,    -1,
-      -1,   108,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,
-     117,   118,     3,     4,     5,     6,     7,     8,     9,    10,
-      11,    12,    13,    14,    15,    16,    -1,    18,    19,    20,
-      21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
-      41,    -1,    43,    44,    45,    46,    47,    48,    49,    50,
-      51,    52,    53,    54,    55,    56,    57,    58,    59,    -1,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      -1,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+     114,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      54,    55,    -1,    57,    58,    59,    -1,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
+      74,    -1,    76,    77,    78,    79,    80,    81,    82,    -1,
+      -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   104,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   114,   115,   116,   117,   118,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    57,    58,    59,    -1,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
-      85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,   104,
-       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,   114,
-     115,   116,   117,   118,    -1,    -1,    -1,    25,    26,    27,
+     104,    -1,    -1,   107,    10,    11,    12,    13,    -1,    -1,
+      -1,   115,   116,   117,   118,    -1,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
+      -1,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    72,    73,    74,    -1,
+      76,    77,    78,    79,    80,    81,    82,    -1,    -1,    85,
+      86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,    -1,
+      -1,   107,    10,    11,    12,    13,    -1,    -1,    -1,   115,
+     116,   117,   118,    -1,    -1,    -1,    -1,    25,    26,    27,
       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
-      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
-      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,
       58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
-      68,    69,    70,    -1,    72,    73,    74,    75,    76,    77,
+      68,    69,    70,    -1,    72,    73,    74,    -1,    76,    77,
       78,    79,    80,    81,    82,    -1,    -1,    85,    86,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     4,     5,     6,    -1,    -1,   104,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,    -1,   115,   116,   117,
+      -1,    -1,    -1,    -1,    -1,    -1,   104,    10,    11,    12,
+      13,    -1,    -1,    -1,    -1,    -1,   114,   115,   116,   117,
      118,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
       33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
       -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
       -1,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    -1,    76,    77,    -1,    -1,    10,    11,    12,
-      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
-      -1,   114,    45,    46,    47,    48,    49,    50,    -1,    -1,
-      -1,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
-      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
       73,    74,    -1,    76,    77,    78,    79,    80,    81,    82,
       -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
@@ -1466,7 +1510,7 @@ static const yytype_int16 yycheck[] =
       -1,    76,    77,    78,    79,    80,    81,    82,    -1,    -1,
       85,    86,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   104,
-      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,   114,
+      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
      115,   116,   117,   118,    -1,    25,    26,    27,    28,    29,
       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
       -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
@@ -1475,95 +1519,75 @@ static const yytype_int16 yycheck[] =
       70,    -1,    72,    73,    74,    -1,    76,    77,    78,    79,
       80,    81,    82,    -1,    -1,    85,    86,    -1,    -1,    -1,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   104,    -1,    -1,   107,    10,    11,
-      12,    13,    -1,    -1,    -1,   115,   116,   117,   118,    -1,
-      -1,    -1,    -1,    25,    26,    27,    28,    29,    30,    31,
-      32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
-      -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    -1,
-      -1,    -1,    54,    55,    -1,    57,    58,    59,    -1,    61,
-      62,    63,    64,    65,    66,    67,    68,    69,    70,    -1,
-      72,    73,    74,    -1,    76,    77,    78,    79,    80,    81,
-      82,    -1,    -1,    85,    86,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   104,    10,    11,    12,    13,    -1,    -1,    -1,
-      -1,    -1,    -1,   115,   116,   117,   118,    -1,    25,    26,
-      27,    28,    29,    30,    31,    32,    33,    34,    35,    36,
-      37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
-      47,    48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,
-      57,    58,    59,    -1,    61,    62,    63,    64,    65,    66,
-      67,    68,    69,    70,    -1,    72,    73,    74,    -1,    76,
-      77,    78,    79,    80,    81,    82,    -1,    -1,    85,    86,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     3,     4,     5,     6,   104,     8,     9,
-      10,    11,    12,    13,    -1,    -1,    -1,    -1,   115,   116,
-     117,   118,    -1,    -1,    -1,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
-      -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    72,    73,    74,    75,    -1,    77,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
-       5,     6,    -1,     8,     9,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    57,    58,    59,    -1,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
-      75,    -1,    77,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,     3,     4,     5,     6,    -1,     8,     9,
-      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   109,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
-      -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    72,    73,    74,    75,    -1,    77,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,     0,    -1,    -1,     3,     4,
-       5,     6,     7,     8,     9,    10,    11,    12,    13,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   109,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    57,    58,    59,    -1,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
-      75,    -1,    77,     3,     4,     5,     6,     7,     8,     9,
-      10,    11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,
-      30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
-      40,    41,    -1,    43,    44,    45,    46,    47,    48,    49,
-      50,    51,    52,    53,    54,    55,    -1,    57,    58,    59,
-      -1,    61,    62,    63,    64,    65,    66,    67,    68,    69,
-      70,    -1,    72,    73,    74,    75,    -1,    77,     3,     4,
-       5,     6,    -1,     8,     9,    10,    11,    12,    13,    -1,
+       3,     4,     5,     6,   104,     8,     9,    10,    11,    12,
+      13,    -1,    -1,    -1,    -1,   115,   116,   117,   118,    -1,
+      -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      73,    74,    75,    -1,    77,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,    -1,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    72,    73,    74,    75,    -1,    77,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    40,    41,    -1,    43,    44,
-      45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
-      55,    -1,    57,    58,    59,    -1,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
-      75,    -1,    77,     4,     5,     6,    -1,    -1,    -1,    10,
-      11,    12,    13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    25,    26,    27,    28,    29,    30,
-      31,    32,    33,    34,    35,    36,    37,    38,    39,    -1,
-      -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
-      -1,    -1,    -1,    54,    55,    -1,    57,    58,    59,    -1,
-      61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
-      -1,    72,    73,    74,    -1,    -1,    77,    10,    11,    12,
+       3,     4,     5,     6,    -1,     8,     9,    10,    11,    12,
+      13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,   109,    25,    26,    27,    28,    29,    30,    31,    32,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
+      63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
+      73,    74,    75,    -1,    77,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,     0,    -1,    -1,     3,     4,     5,     6,     7,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   109,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    72,    73,    74,    75,    -1,    77,
+       3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
       13,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
       -1,    -1,    25,    26,    27,    28,    29,    30,    31,    32,
-      33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
-      -1,    -1,    45,    46,    47,    48,    49,    50,    -1,    -1,
-      -1,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
+      33,    34,    35,    36,    37,    38,    39,    40,    41,    -1,
+      43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+      53,    54,    55,    -1,    57,    58,    59,    -1,    61,    62,
       63,    64,    65,    66,    67,    68,    69,    70,    -1,    72,
-      73,    74,    -1,    76,    77,    10,    11,    12,    13,    82,
+      73,    74,    75,    -1,    77,     3,     4,     5,     6,    -1,
+       8,     9,    10,    11,    12,    13,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    40,    41,    -1,    43,    44,    45,    46,    47,
+      48,    49,    50,    51,    52,    53,    54,    55,    -1,    57,
+      58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    72,    73,    74,    75,    -1,    77,
+       4,     5,     6,    -1,    -1,    -1,    10,    11,    12,    13,
       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
-      35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
-      45,    46,    47,    48,    49,    50,    -1,    -1,    -1,    54,
-      55,    -1,    57,    58,    59,    -1,    61,    62,    63,    64,
-      65,    66,    67,    68,    69,    70,    -1,    72,    73,    74,
-      -1,    -1,    77
+      -1,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+      34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
+      -1,    45,    46,    47,    48,    49,    50,    -1,    -1,    -1,
+      54,    55,    -1,    57,    58,    59,    -1,    61,    62,    63,
+      64,    65,    66,    67,    68,    69,    70,    -1,    72,    73,
+      74,    -1,    -1,    77,    10,    11,    12,    13,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,
+      26,    27,    28,    29,    30,    31,    32,    33,    34,    35,
+      36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
+      46,    47,    48,    49,    50,    -1,    -1,    -1,    54,    55,
+      -1,    57,    58,    59,    -1,    61,    62,    63,    64,    65,
+      66,    67,    68,    69,    70,    -1,    72,    73,    74,    -1,
+      76,    77,    10,    11,    12,    13,    82,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    25,    26,    27,
+      28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+      38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
+      48,    49,    50,    -1,    -1,    -1,    54,    55,    -1,    57,
+      58,    59,    -1,    61,    62,    63,    64,    65,    66,    67,
+      68,    69,    70,    -1,    72,    73,    74,    -1,    -1,    77
 };
 
 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -1584,33 +1608,33 @@ static const yytype_uint8 yystos[] =
        0,   218,   180,   108,   184,    76,   178,   179,   108,   200,
      165,   164,   167,   175,   166,    76,   104,   106,   113,   108,
        3,   173,   175,   185,   186,    76,    78,    79,    80,    81,
-      82,    85,    86,   104,   115,   116,   117,   118,   129,   130,
-     131,   133,   134,   135,   136,   137,   138,   139,   140,   141,
-     142,   143,   144,   145,   146,   147,   148,   149,   150,   151,
-     152,   153,   157,   181,   114,   183,   185,   113,   105,   111,
-      14,    15,    16,    18,    19,    20,    21,    22,    23,    24,
-      56,   108,   109,   114,   140,   153,   154,   156,   159,   160,
-     181,   190,   191,   192,   193,   201,   202,   203,   205,   207,
-     209,   216,    76,   164,   167,   106,   113,   107,   157,   154,
-     189,   175,    76,   187,   188,   109,   186,   140,   140,   156,
-      85,    86,   106,   110,   105,   105,   111,    55,   154,   104,
-     140,   119,   120,   121,   116,   118,    83,    84,    87,    88,
-     122,   123,    89,    90,   126,   125,   124,    91,    93,    92,
-     127,   107,   185,   109,    79,    80,   179,   114,   114,   211,
-     104,   104,   114,   114,   156,   104,   157,   112,   104,   109,
-     194,    94,    95,    96,    97,    98,    99,   100,   101,   102,
-     103,   113,   155,   111,   114,   109,   191,   106,   107,   157,
-     189,   113,   107,   187,   106,   111,   114,    76,   114,   105,
-     132,   156,    76,    82,   135,   154,   140,   140,   140,   142,
-     142,   143,   143,   144,   144,   144,   144,   145,   145,   146,
-     147,   148,   149,   150,   151,   156,   109,   197,   198,   199,
-     212,   156,   114,   156,   112,   210,   201,   154,   154,   157,
-     113,   107,   189,   113,   114,   157,   188,   106,   114,   107,
-     112,    56,   200,   192,   190,   202,   213,   105,   105,   156,
-     170,   173,   208,   195,   107,   189,   113,   189,   107,   157,
-     154,   104,   208,   214,   215,   197,   204,   206,    76,   105,
-     109,   189,   107,   156,   114,   105,    17,   193,   113,   192,
-     196,   200,   114,   105,   156,   196,   197,   189,   114
+      82,    85,    86,   104,   107,   115,   116,   117,   118,   129,
+     130,   131,   133,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   152,   153,   157,   180,   114,   183,   185,   113,   105,
+     111,    14,    15,    16,    18,    19,    20,    21,    22,    23,
+      24,    56,   108,   109,   114,   140,   153,   154,   156,   159,
+     160,   180,   190,   191,   192,   193,   201,   202,   203,   205,
+     207,   209,   216,    76,   164,   167,   106,   113,   107,   157,
+     154,   189,   175,    76,   187,   188,   109,   186,   140,   140,
+     156,    85,    86,   106,   110,   105,   105,   111,    55,   154,
+     104,   140,   119,   120,   121,   116,   118,    83,    84,    87,
+      88,   122,   123,    89,    90,   126,   125,   124,    91,    93,
+      92,   127,   107,   185,   109,    79,    80,   179,   114,   114,
+     211,   104,   104,   114,   114,   156,   104,   157,   112,   104,
+     109,   194,    94,    95,    96,    97,    98,    99,   100,   101,
+     102,   103,   113,   155,   111,   114,   109,   191,   106,   107,
+     157,   189,   113,   107,   187,   106,   111,   114,    76,   114,
+     105,   132,   156,    76,    82,   135,   154,   140,   140,   140,
+     142,   142,   143,   143,   144,   144,   144,   144,   145,   145,
+     146,   147,   148,   149,   150,   151,   156,   109,   197,   198,
+     199,   212,   156,   114,   156,   112,   210,   201,   154,   154,
+     157,   113,   107,   189,   113,   114,   157,   188,   106,   114,
+     107,   112,    56,   200,   192,   190,   202,   213,   105,   105,
+     156,   170,   173,   208,   195,   107,   189,   113,   189,   107,
+     157,   154,   104,   208,   214,   215,   197,   204,   206,    76,
+     105,   109,   189,   107,   156,   114,   105,    17,   193,   113,
+     192,   196,   200,   114,   105,   156,   196,   197,   189,   114
 };
 
 #define yyerrok                (yyerrstatus = 0)
@@ -2777,81 +2801,10 @@ yyreduce:
   case 26:
 
     {
-        //
-        // Constructor
-        //
-        TOperator op = EOpNull;
-        if ((yyvsp[(1) - (1)].interm.type).userDef) {
-            op = EOpConstructStruct;
-        } else {
-            switch ((yyvsp[(1) - (1)].interm.type).type) {
-            case EbtFloat:
-                switch((yyvsp[(1) - (1)].interm.type).primarySize) {
-                case 1:
-                    op = EOpConstructFloat; break;
-                case 2:
-                    switch((yyvsp[(1) - (1)].interm.type).secondarySize) {
-                                       case 1:                                 op = EOpConstructVec2;    break;
-                    case 2:                                 op = EOpConstructMat2;    break;
-                    case 3:                                 op = EOpConstructMat2x3;  break;
-                    case 4:                                 op = EOpConstructMat2x4;  break;
-                    }
-                    break;
-                case 3:
-                    switch((yyvsp[(1) - (1)].interm.type).secondarySize) {
-                                       case 1:                                 op = EOpConstructVec3;    break;
-                    case 2:                                 op = EOpConstructMat3x2;  break;
-                    case 3:                                 op = EOpConstructMat3;    break;
-                    case 4:                                 op = EOpConstructMat3x4;  break;
-                    }
-                    break;
-                case 4:
-                    switch((yyvsp[(1) - (1)].interm.type).secondarySize) {
-                                       case 1:                                 op = EOpConstructVec4;    break;
-                    case 2:                                 op = EOpConstructMat4x2;  break;
-                    case 3:                                 op = EOpConstructMat4x3;  break;
-                    case 4:                                 op = EOpConstructMat4;    break;
-                    }
-                    break;
-                }
-                break;
-            case EbtInt:
-                switch((yyvsp[(1) - (1)].interm.type).primarySize) {
-                case 1:                                         op = EOpConstructInt;   break;
-                case 2:       FRAG_VERT_ONLY("ivec2", (yylsp[(1) - (1)])); op = EOpConstructIVec2; break;
-                case 3:       FRAG_VERT_ONLY("ivec3", (yylsp[(1) - (1)])); op = EOpConstructIVec3; break;
-                case 4:       FRAG_VERT_ONLY("ivec4", (yylsp[(1) - (1)])); op = EOpConstructIVec4; break;
-                }
-                break;
-            case EbtUInt:
-                switch((yyvsp[(1) - (1)].interm.type).primarySize) {
-                case 1:                                         op = EOpConstructUInt;  break;
-                case 2:       FRAG_VERT_ONLY("uvec2", (yylsp[(1) - (1)])); op = EOpConstructUVec2; break;
-                case 3:       FRAG_VERT_ONLY("uvec3", (yylsp[(1) - (1)])); op = EOpConstructUVec3; break;
-                case 4:       FRAG_VERT_ONLY("uvec4", (yylsp[(1) - (1)])); op = EOpConstructUVec4; break;
-                }
-                break;
-            case EbtBool:
-                switch((yyvsp[(1) - (1)].interm.type).primarySize) {
-                case 1:                                         op = EOpConstructBool;  break;
-                case 2:       FRAG_VERT_ONLY("bvec2", (yylsp[(1) - (1)])); op = EOpConstructBVec2; break;
-                case 3:       FRAG_VERT_ONLY("bvec3", (yylsp[(1) - (1)])); op = EOpConstructBVec3; break;
-                case 4:       FRAG_VERT_ONLY("bvec4", (yylsp[(1) - (1)])); op = EOpConstructBVec4; break;
-                }
-                break;
-            default: break;
-            }
-            if (op == EOpNull) {
-                context->error((yylsp[(1) - (1)]), "cannot construct this type", getBasicString((yyvsp[(1) - (1)].interm.type).type));
-                context->recover();
-                (yyvsp[(1) - (1)].interm.type).type = EbtFloat;
-                op = EOpConstructFloat;
-            }
+        if ((yyvsp[(1) - (1)].interm.type).array) {
+            ES3_ONLY("[]", (yylsp[(1) - (1)]));
         }
-        TString tempString;
-        TType type((yyvsp[(1) - (1)].interm.type));
-        TFunction *function = new TFunction(&tempString, type, op);
-        (yyval.interm.function) = function;
+        (yyval.interm.function) = context->addConstructorFunc((yyvsp[(1) - (1)].interm.type));
     }
     break;
 
@@ -3187,12 +3140,7 @@ yyreduce:
     {
         if (context->lValueErrorCheck((yylsp[(2) - (3)]), "assign", (yyvsp[(1) - (3)].interm.intermTypedNode)))
             context->recover();
-        (yyval.interm.intermTypedNode) = context->intermediate.addAssign((yyvsp[(2) - (3)].interm).op, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]));
-        if ((yyval.interm.intermTypedNode) == 0) {
-            context->assignError((yylsp[(2) - (3)]), "assign", (yyvsp[(1) - (3)].interm.intermTypedNode)->getCompleteString(), (yyvsp[(3) - (3)].interm.intermTypedNode)->getCompleteString());
-            context->recover();
-            (yyval.interm.intermTypedNode) = (yyvsp[(1) - (3)].interm.intermTypedNode);
-        }
+        (yyval.interm.intermTypedNode) = context->addAssign((yyvsp[(2) - (3)].interm).op, (yyvsp[(1) - (3)].interm.intermTypedNode), (yyvsp[(3) - (3)].interm.intermTypedNode), (yylsp[(2) - (3)]));
     }
     break;
 
@@ -3288,7 +3236,7 @@ yyreduce:
   case 85:
 
     {
-        if (context->enterStructDeclaration((yyvsp[(1) - (2)].lex).line, *(yyvsp[(1) - (2)].lex).string))
+        if (context->enterStructDeclaration((yylsp[(1) - (2)]), *(yyvsp[(1) - (2)].lex).string))
             context->recover();
         (yyval.lex) = (yyvsp[(1) - (2)].lex);
     }
@@ -3349,24 +3297,24 @@ yyreduce:
   case 89:
 
     {
-        ES3_ONLY(getQualifierString((yyvsp[(1) - (5)].interm.type).qualifier), (yyvsp[(1) - (5)].interm.type).line);
-        (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[(1) - (5)].interm.type), (yyvsp[(2) - (5)].lex).line, *(yyvsp[(2) - (5)].lex).string, (yyvsp[(3) - (5)].interm.fieldList), NULL, (yyvsp[(1) - (5)].interm.type).line, NULL, (yyvsp[(1) - (5)].interm.type).line);
+        ES3_ONLY(getQualifierString((yyvsp[(1) - (5)].interm.type).qualifier), (yylsp[(1) - (5)]));
+        (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[(1) - (5)].interm.type), (yylsp[(2) - (5)]), *(yyvsp[(2) - (5)].lex).string, (yyvsp[(3) - (5)].interm.fieldList), NULL, (yylsp[(1) - (5)]), NULL, (yylsp[(1) - (5)]));
     }
     break;
 
   case 90:
 
     {
-        ES3_ONLY(getQualifierString((yyvsp[(1) - (6)].interm.type).qualifier), (yyvsp[(1) - (6)].interm.type).line);
-        (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[(1) - (6)].interm.type), (yyvsp[(2) - (6)].lex).line, *(yyvsp[(2) - (6)].lex).string, (yyvsp[(3) - (6)].interm.fieldList), (yyvsp[(5) - (6)].lex).string, (yyvsp[(5) - (6)].lex).line, NULL, (yyvsp[(1) - (6)].interm.type).line);
+        ES3_ONLY(getQualifierString((yyvsp[(1) - (6)].interm.type).qualifier), (yylsp[(1) - (6)]));
+        (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[(1) - (6)].interm.type), (yylsp[(2) - (6)]), *(yyvsp[(2) - (6)].lex).string, (yyvsp[(3) - (6)].interm.fieldList), (yyvsp[(5) - (6)].lex).string, (yylsp[(5) - (6)]), NULL, (yylsp[(1) - (6)]));
     }
     break;
 
   case 91:
 
     {
-        ES3_ONLY(getQualifierString((yyvsp[(1) - (9)].interm.type).qualifier), (yyvsp[(1) - (9)].interm.type).line);
-        (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[(1) - (9)].interm.type), (yyvsp[(2) - (9)].lex).line, *(yyvsp[(2) - (9)].lex).string, (yyvsp[(3) - (9)].interm.fieldList), (yyvsp[(5) - (9)].lex).string, (yyvsp[(5) - (9)].lex).line, (yyvsp[(7) - (9)].interm.intermTypedNode), (yyvsp[(6) - (9)].lex).line);
+        ES3_ONLY(getQualifierString((yyvsp[(1) - (9)].interm.type).qualifier), (yylsp[(1) - (9)]));
+        (yyval.interm.intermNode) = context->addInterfaceBlock((yyvsp[(1) - (9)].interm.type), (yylsp[(2) - (9)]), *(yyvsp[(2) - (9)].lex).string, (yyvsp[(3) - (9)].interm.fieldList), (yyvsp[(5) - (9)].lex).string, (yylsp[(5) - (9)]), (yyvsp[(7) - (9)].interm.intermTypedNode), (yylsp[(6) - (9)]));
     }
     break;
 
@@ -3986,6 +3934,15 @@ yyreduce:
   case 154:
 
     {
+        ES3_ONLY("[]", (yylsp[(2) - (3)]));
+        (yyval.interm.type) = (yyvsp[(1) - (3)].interm.type);
+        (yyval.interm.type).setArray(true, 0);
+    }
+    break;
+
+  case 155:
+
+    {
         (yyval.interm.type) = (yyvsp[(1) - (4)].interm.type);
 
         if (context->arrayTypeErrorCheck((yylsp[(2) - (4)]), (yyvsp[(1) - (4)].interm.type)))
@@ -3999,7 +3956,7 @@ yyreduce:
     }
     break;
 
-  case 155:
+  case 156:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4007,7 +3964,7 @@ yyreduce:
     }
     break;
 
-  case 156:
+  case 157:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4015,7 +3972,7 @@ yyreduce:
     }
     break;
 
-  case 157:
+  case 158:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4023,7 +3980,7 @@ yyreduce:
     }
     break;
 
-  case 158:
+  case 159:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4031,7 +3988,7 @@ yyreduce:
     }
     break;
 
-  case 159:
+  case 160:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4039,7 +3996,7 @@ yyreduce:
     }
     break;
 
-  case 160:
+  case 161:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4048,7 +4005,7 @@ yyreduce:
     }
     break;
 
-  case 161:
+  case 162:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4057,7 +4014,7 @@ yyreduce:
     }
     break;
 
-  case 162:
+  case 163:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4066,7 +4023,7 @@ yyreduce:
     }
     break;
 
-  case 163:
+  case 164:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4075,7 +4032,7 @@ yyreduce:
     }
     break;
 
-  case 164:
+  case 165:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4084,7 +4041,7 @@ yyreduce:
     }
     break;
 
-  case 165:
+  case 166:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4093,7 +4050,7 @@ yyreduce:
     }
     break;
 
-  case 166:
+  case 167:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4102,7 +4059,7 @@ yyreduce:
     }
     break;
 
-  case 167:
+  case 168:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4111,7 +4068,7 @@ yyreduce:
     }
     break;
 
-  case 168:
+  case 169:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4120,7 +4077,7 @@ yyreduce:
     }
     break;
 
-  case 169:
+  case 170:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4129,7 +4086,7 @@ yyreduce:
     }
     break;
 
-  case 170:
+  case 171:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4138,7 +4095,7 @@ yyreduce:
     }
     break;
 
-  case 171:
+  case 172:
 
     {
         TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
@@ -4147,7 +4104,7 @@ yyreduce:
     }
     break;
 
-  case 172:
+  case 173:
 
     {
         FRAG_VERT_ONLY("mat2", (yylsp[(1) - (1)]));
@@ -4157,7 +4114,7 @@ yyreduce:
     }
     break;
 
-  case 173:
+  case 174:
 
     {
         FRAG_VERT_ONLY("mat3", (yylsp[(1) - (1)]));
@@ -4167,7 +4124,7 @@ yyreduce:
     }
     break;
 
-  case 174:
+  case 175:
 
     {
         FRAG_VERT_ONLY("mat4", (yylsp[(1) - (1)]));
@@ -4177,7 +4134,7 @@ yyreduce:
     }
     break;
 
-  case 175:
+  case 176:
 
     {
         FRAG_VERT_ONLY("mat2x3", (yylsp[(1) - (1)]));
@@ -4187,7 +4144,7 @@ yyreduce:
     }
     break;
 
-  case 176:
+  case 177:
 
     {
         FRAG_VERT_ONLY("mat3x2", (yylsp[(1) - (1)]));
@@ -4197,7 +4154,7 @@ yyreduce:
     }
     break;
 
-  case 177:
+  case 178:
 
     {
         FRAG_VERT_ONLY("mat2x4", (yylsp[(1) - (1)]));
@@ -4207,7 +4164,7 @@ yyreduce:
     }
     break;
 
-  case 178:
+  case 179:
 
     {
         FRAG_VERT_ONLY("mat4x2", (yylsp[(1) - (1)]));
@@ -4217,7 +4174,7 @@ yyreduce:
     }
     break;
 
-  case 179:
+  case 180:
 
     {
         FRAG_VERT_ONLY("mat3x4", (yylsp[(1) - (1)]));
@@ -4227,7 +4184,7 @@ yyreduce:
     }
     break;
 
-  case 180:
+  case 181:
 
     {
         FRAG_VERT_ONLY("mat4x3", (yylsp[(1) - (1)]));
@@ -4237,7 +4194,7 @@ yyreduce:
     }
     break;
 
-  case 181:
+  case 182:
 
     {
         FRAG_VERT_ONLY("sampler2D", (yylsp[(1) - (1)]));
@@ -4246,7 +4203,7 @@ yyreduce:
     }
     break;
 
-  case 182:
+  case 183:
 
     {
         FRAG_VERT_ONLY("samplerCube", (yylsp[(1) - (1)]));
@@ -4255,7 +4212,7 @@ yyreduce:
     }
     break;
 
-  case 183:
+  case 184:
 
     {
         if (!context->supportsExtension("GL_OES_EGL_image_external")) {
@@ -4268,7 +4225,7 @@ yyreduce:
     }
     break;
 
-  case 184:
+  case 185:
 
     {
         FRAG_VERT_ONLY("sampler3D", (yylsp[(1) - (1)]));
@@ -4277,7 +4234,7 @@ yyreduce:
     }
     break;
 
-  case 185:
+  case 186:
 
     {
         FRAG_VERT_ONLY("sampler2DArray", (yylsp[(1) - (1)]));
@@ -4286,7 +4243,7 @@ yyreduce:
     }
     break;
 
-  case 186:
+  case 187:
 
     {
         FRAG_VERT_ONLY("isampler2D", (yylsp[(1) - (1)]));
@@ -4295,7 +4252,7 @@ yyreduce:
     }
     break;
 
-  case 187:
+  case 188:
 
     {
         FRAG_VERT_ONLY("isampler3D", (yylsp[(1) - (1)]));
@@ -4304,7 +4261,7 @@ yyreduce:
     }
     break;
 
-  case 188:
+  case 189:
 
     {
         FRAG_VERT_ONLY("isamplerCube", (yylsp[(1) - (1)]));
@@ -4313,7 +4270,7 @@ yyreduce:
     }
     break;
 
-  case 189:
+  case 190:
 
     {
         FRAG_VERT_ONLY("isampler2DArray", (yylsp[(1) - (1)]));
@@ -4322,7 +4279,7 @@ yyreduce:
     }
     break;
 
-  case 190:
+  case 191:
 
     {
         FRAG_VERT_ONLY("usampler2D", (yylsp[(1) - (1)]));
@@ -4331,7 +4288,7 @@ yyreduce:
     }
     break;
 
-  case 191:
+  case 192:
 
     {
         FRAG_VERT_ONLY("usampler3D", (yylsp[(1) - (1)]));
@@ -4340,7 +4297,7 @@ yyreduce:
     }
     break;
 
-  case 192:
+  case 193:
 
     {
         FRAG_VERT_ONLY("usamplerCube", (yylsp[(1) - (1)]));
@@ -4349,7 +4306,7 @@ yyreduce:
     }
     break;
 
-  case 193:
+  case 194:
 
     {
         FRAG_VERT_ONLY("usampler2DArray", (yylsp[(1) - (1)]));
@@ -4358,7 +4315,7 @@ yyreduce:
     }
     break;
 
-  case 194:
+  case 195:
 
     {
         FRAG_VERT_ONLY("sampler2DShadow", (yylsp[(1) - (1)]));
@@ -4367,7 +4324,7 @@ yyreduce:
     }
     break;
 
-  case 195:
+  case 196:
 
     {
         FRAG_VERT_ONLY("samplerCubeShadow", (yylsp[(1) - (1)]));
@@ -4376,7 +4333,7 @@ yyreduce:
     }
     break;
 
-  case 196:
+  case 197:
 
     {
         FRAG_VERT_ONLY("sampler2DArrayShadow", (yylsp[(1) - (1)]));
@@ -4385,7 +4342,7 @@ yyreduce:
     }
     break;
 
-  case 197:
+  case 198:
 
     {
         FRAG_VERT_ONLY("struct", (yylsp[(1) - (1)]));
@@ -4394,7 +4351,7 @@ yyreduce:
     }
     break;
 
-  case 198:
+  case 199:
 
     {
         //
@@ -4408,38 +4365,38 @@ yyreduce:
     }
     break;
 
-  case 199:
+  case 200:
 
     { if (context->enterStructDeclaration((yylsp[(2) - (3)]), *(yyvsp[(2) - (3)].lex).string)) context->recover(); }
     break;
 
-  case 200:
+  case 201:
 
     {
         (yyval.interm.type) = context->addStructure((yylsp[(1) - (6)]), (yylsp[(2) - (6)]), (yyvsp[(2) - (6)].lex).string, (yyvsp[(5) - (6)].interm.fieldList));
     }
     break;
 
-  case 201:
+  case 202:
 
     { if (context->enterStructDeclaration((yylsp[(2) - (2)]), *(yyvsp[(2) - (2)].lex).string)) context->recover(); }
     break;
 
-  case 202:
+  case 203:
 
     {
         (yyval.interm.type) = context->addStructure((yylsp[(1) - (5)]), (yylsp[(1) - (5)]), NewPoolTString(""), (yyvsp[(4) - (5)].interm.fieldList));
     }
     break;
 
-  case 203:
+  case 204:
 
     {
         (yyval.interm.fieldList) = (yyvsp[(1) - (1)].interm.fieldList);
     }
     break;
 
-  case 204:
+  case 205:
 
     {
         (yyval.interm.fieldList) = (yyvsp[(1) - (2)].interm.fieldList);
@@ -4456,14 +4413,14 @@ yyreduce:
     }
     break;
 
-  case 205:
+  case 206:
 
     {
         (yyval.interm.fieldList) = context->addStructDeclaratorList((yyvsp[(1) - (3)].interm.type), (yyvsp[(2) - (3)].interm.fieldList));
     }
     break;
 
-  case 206:
+  case 207:
 
     {
         // ES3 Only, but errors should be handled elsewhere
@@ -4473,7 +4430,7 @@ yyreduce:
     }
     break;
 
-  case 207:
+  case 208:
 
     {
         (yyval.interm.fieldList) = NewPoolTFieldList();
@@ -4481,14 +4438,14 @@ yyreduce:
     }
     break;
 
-  case 208:
+  case 209:
 
     {
         (yyval.interm.fieldList)->push_back((yyvsp[(3) - (3)].interm.field));
     }
     break;
 
-  case 209:
+  case 210:
 
     {
         if (context->reservedErrorCheck((yylsp[(1) - (1)]), *(yyvsp[(1) - (1)].lex).string))
@@ -4499,7 +4456,7 @@ yyreduce:
     }
     break;
 
-  case 210:
+  case 211:
 
     {
         if (context->reservedErrorCheck((yylsp[(1) - (4)]), *(yyvsp[(1) - (4)].lex).string))
@@ -4515,24 +4472,19 @@ yyreduce:
     }
     break;
 
-  case 211:
-
-    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
-    break;
-
   case 212:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode); }
     break;
 
   case 213:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 214:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermAggregate); }
     break;
 
   case 215:
@@ -4552,17 +4504,17 @@ yyreduce:
 
   case 218:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermSwitch); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 219:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermCase); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermSwitch); }
     break;
 
   case 220:
 
-    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermCase); }
     break;
 
   case 221:
@@ -4572,21 +4524,26 @@ yyreduce:
 
   case 222:
 
-    { (yyval.interm.intermAggregate) = 0; }
+    { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
   case 223:
 
-    { context->symbolTable.push(); }
+    { (yyval.interm.intermAggregate) = 0; }
     break;
 
   case 224:
 
-    { context->symbolTable.pop(); }
+    { context->symbolTable.push(); }
     break;
 
   case 225:
 
+    { context->symbolTable.pop(); }
+    break;
+
+  case 226:
+
     {
         if ((yyvsp[(3) - (5)].interm.intermAggregate) != 0) {
             (yyvsp[(3) - (5)].interm.intermAggregate)->setOp(EOpSequence);
@@ -4596,44 +4553,44 @@ yyreduce:
     }
     break;
 
-  case 226:
+  case 227:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 227:
+  case 228:
 
     { (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode); }
     break;
 
-  case 228:
+  case 229:
 
     { context->symbolTable.push(); }
     break;
 
-  case 229:
+  case 230:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 230:
+  case 231:
 
     { context->symbolTable.push(); }
     break;
 
-  case 231:
+  case 232:
 
     { context->symbolTable.pop(); (yyval.interm.intermNode) = (yyvsp[(2) - (2)].interm.intermNode); }
     break;
 
-  case 232:
+  case 233:
 
     {
         (yyval.interm.intermNode) = 0;
     }
     break;
 
-  case 233:
+  case 234:
 
     {
         if ((yyvsp[(2) - (3)].interm.intermAggregate)) {
@@ -4644,31 +4601,31 @@ yyreduce:
     }
     break;
 
-  case 234:
+  case 235:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.makeAggregate((yyvsp[(1) - (1)].interm.intermNode), 0);
     }
     break;
 
-  case 235:
+  case 236:
 
     {
         (yyval.interm.intermAggregate) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermAggregate), (yyvsp[(2) - (2)].interm.intermNode), 0);
     }
     break;
 
-  case 236:
+  case 237:
 
     { (yyval.interm.intermNode) = 0; }
     break;
 
-  case 237:
+  case 238:
 
     { (yyval.interm.intermNode) = static_cast<TIntermNode*>((yyvsp[(1) - (2)].interm.intermTypedNode)); }
     break;
 
-  case 238:
+  case 239:
 
     {
         if (context->boolErrorCheck((yylsp[(1) - (5)]), (yyvsp[(3) - (5)].interm.intermTypedNode)))
@@ -4677,7 +4634,7 @@ yyreduce:
     }
     break;
 
-  case 239:
+  case 240:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermNode);
@@ -4685,7 +4642,7 @@ yyreduce:
     }
     break;
 
-  case 240:
+  case 241:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4693,34 +4650,34 @@ yyreduce:
     }
     break;
 
-  case 241:
+  case 242:
 
     { context->incrSwitchNestingLevel(); }
     break;
 
-  case 242:
+  case 243:
 
     {
-        (yyval.interm.intermSwitch) = context->addSwitch((yyvsp[(3) - (6)].interm.intermTypedNode), (yyvsp[(6) - (6)].interm.intermAggregate), (yyvsp[(1) - (6)].lex).line);
+        (yyval.interm.intermSwitch) = context->addSwitch((yyvsp[(3) - (6)].interm.intermTypedNode), (yyvsp[(6) - (6)].interm.intermAggregate), (yylsp[(1) - (6)]));
         context->decrSwitchNestingLevel();
     }
     break;
 
-  case 243:
+  case 244:
 
     {
-        (yyval.interm.intermCase) = context->addCase((yyvsp[(2) - (3)].interm.intermTypedNode), (yyvsp[(1) - (3)].lex).line);
+        (yyval.interm.intermCase) = context->addCase((yyvsp[(2) - (3)].interm.intermTypedNode), (yylsp[(1) - (3)]));
     }
     break;
 
-  case 244:
+  case 245:
 
     {
-        (yyval.interm.intermCase) = context->addDefault((yyvsp[(1) - (2)].lex).line);
+        (yyval.interm.intermCase) = context->addDefault((yylsp[(1) - (2)]));
     }
     break;
 
-  case 245:
+  case 246:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
@@ -4729,7 +4686,7 @@ yyreduce:
     }
     break;
 
-  case 246:
+  case 247:
 
     {
         TIntermNode* intermNode;
@@ -4738,7 +4695,7 @@ yyreduce:
         if (context->boolErrorCheck((yylsp[(2) - (4)]), (yyvsp[(1) - (4)].interm.type)))
             context->recover();
 
-        if (!context->executeInitializer((yylsp[(2) - (4)]), *(yyvsp[(2) - (4)].lex).string, (yyvsp[(1) - (4)].interm.type), (yyvsp[(4) - (4)].interm.intermTypedNode), intermNode))
+        if (!context->executeInitializer((yylsp[(2) - (4)]), *(yyvsp[(2) - (4)].lex).string, (yyvsp[(1) - (4)].interm.type), (yyvsp[(4) - (4)].interm.intermTypedNode), &intermNode))
             (yyval.interm.intermTypedNode) = (yyvsp[(4) - (4)].interm.intermTypedNode);
         else {
             context->recover();
@@ -4747,12 +4704,12 @@ yyreduce:
     }
     break;
 
-  case 247:
+  case 248:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 248:
+  case 249:
 
     {
         context->symbolTable.pop();
@@ -4761,12 +4718,12 @@ yyreduce:
     }
     break;
 
-  case 249:
+  case 250:
 
     { ++context->loopNestingLevel; }
     break;
 
-  case 250:
+  case 251:
 
     {
         if (context->boolErrorCheck((yylsp[(8) - (8)]), (yyvsp[(6) - (8)].interm.intermTypedNode)))
@@ -4777,12 +4734,12 @@ yyreduce:
     }
     break;
 
-  case 251:
+  case 252:
 
     { context->symbolTable.push(); ++context->loopNestingLevel; }
     break;
 
-  case 252:
+  case 253:
 
     {
         context->symbolTable.pop();
@@ -4791,35 +4748,35 @@ yyreduce:
     }
     break;
 
-  case 253:
+  case 254:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 254:
+  case 255:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 255:
+  case 256:
 
     {
         (yyval.interm.intermTypedNode) = (yyvsp[(1) - (1)].interm.intermTypedNode);
     }
     break;
 
-  case 256:
+  case 257:
 
     {
         (yyval.interm.intermTypedNode) = 0;
     }
     break;
 
-  case 257:
+  case 258:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (2)].interm.intermTypedNode);
@@ -4827,7 +4784,7 @@ yyreduce:
     }
     break;
 
-  case 258:
+  case 259:
 
     {
         (yyval.interm.nodePair).node1 = (yyvsp[(1) - (3)].interm.intermTypedNode);
@@ -4835,35 +4792,35 @@ yyreduce:
     }
     break;
 
-  case 259:
+  case 260:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpContinue, (yylsp[(1) - (2)]));
     }
     break;
 
-  case 260:
+  case 261:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpBreak, (yylsp[(1) - (2)]));
     }
     break;
 
-  case 261:
+  case 262:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yylsp[(1) - (2)]));
     }
     break;
 
-  case 262:
+  case 263:
 
     {
         (yyval.interm.intermNode) = context->addBranch(EOpReturn, (yyvsp[(2) - (3)].interm.intermTypedNode), (yylsp[(1) - (3)]));
     }
     break;
 
-  case 263:
+  case 264:
 
     {
         FRAG_ONLY("discard", (yylsp[(1) - (2)]));
@@ -4871,7 +4828,7 @@ yyreduce:
     }
     break;
 
-  case 264:
+  case 265:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
@@ -4879,7 +4836,7 @@ yyreduce:
     }
     break;
 
-  case 265:
+  case 266:
 
     {
         (yyval.interm.intermNode) = context->intermediate.growAggregate((yyvsp[(1) - (2)].interm.intermNode), (yyvsp[(2) - (2)].interm.intermNode), 0);
@@ -4887,21 +4844,21 @@ yyreduce:
     }
     break;
 
-  case 266:
+  case 267:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 267:
+  case 268:
 
     {
         (yyval.interm.intermNode) = (yyvsp[(1) - (1)].interm.intermNode);
     }
     break;
 
-  case 268:
+  case 269:
 
     {
         TFunction* function = (yyvsp[(1) - (1)].interm).function;
@@ -4990,7 +4947,7 @@ yyreduce:
     }
     break;
 
-  case 269:
+  case 270:
 
     {
         //?? Check that all paths return a value if return type != void ?
index 292b625..b4dbcb1 100644 (file)
                <Unit filename="../compiler/TranslatorASM.cpp" />
                <Unit filename="../compiler/TranslatorASM.h" />
                <Unit filename="../compiler/Types.h" />
+               <Unit filename="../compiler/ValidateGlobalInitializer.cpp" />
+               <Unit filename="../compiler/ValidateGlobalInitializer.h" />
                <Unit filename="../compiler/ValidateLimitations.cpp" />
                <Unit filename="../compiler/ValidateLimitations.h" />
                <Unit filename="../compiler/ValidateSwitch.cpp" />