Commit bc58515e by Jiajia Qin Committed by Geoff Lang

ES31: Add 'buffer' qualifier support in shader

This change added 'buffer' qualifier support in shader which corresponds to ESSL 3.1 spec, session 4.3.7 'Buffer Variables'. BUG=angleproject:1951 TEST=angle_unittests:BufferVariablesTest Change-Id: I2ecb5317d5ea9d378a60b03f86bdae04dbd89e9f Reviewed-on: https://chromium-review.googlesource.com/534960Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent c5af8ba6
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
// Version number for shader translation API. // Version number for shader translation API.
// It is incremented every time the API changes. // It is incremented every time the API changes.
#define ANGLE_SH_VERSION 176 #define ANGLE_SH_VERSION 177
enum ShShaderSpec enum ShShaderSpec
{ {
...@@ -401,6 +401,9 @@ struct ShBuiltInResources ...@@ -401,6 +401,9 @@ struct ShBuiltInResources
// maximum number of uniform block bindings // maximum number of uniform block bindings
int MaxUniformBufferBindings; int MaxUniformBufferBindings;
// maximum number of shader storage buffer bindings
int MaxShaderStorageBufferBindings;
}; };
// //
......
...@@ -502,6 +502,7 @@ enum TQualifier ...@@ -502,6 +502,7 @@ enum TQualifier
EvqVaryingIn, // readonly, fragment shaders only EvqVaryingIn, // readonly, fragment shaders only
EvqVaryingOut, // vertex shaders only read/write EvqVaryingOut, // vertex shaders only read/write
EvqUniform, // Readonly, vertex and fragment EvqUniform, // Readonly, vertex and fragment
EvqBuffer, // read/write, vertex, fragment and compute shader
EvqVertexIn, // Vertex shader input EvqVertexIn, // Vertex shader input
EvqFragmentOut, // Fragment shader output EvqFragmentOut, // Fragment shader output
...@@ -753,6 +754,7 @@ inline const char *getQualifierString(TQualifier q) ...@@ -753,6 +754,7 @@ inline const char *getQualifierString(TQualifier q)
case EvqVaryingIn: return "varying"; case EvqVaryingIn: return "varying";
case EvqVaryingOut: return "varying"; case EvqVaryingOut: return "varying";
case EvqUniform: return "uniform"; case EvqUniform: return "uniform";
case EvqBuffer: return "buffer";
case EvqVertexIn: return "in"; case EvqVertexIn: return "in";
case EvqFragmentOut: return "out"; case EvqFragmentOut: return "out";
case EvqVertexOut: return "out"; case EvqVertexOut: return "out";
......
...@@ -143,8 +143,10 @@ TParseContext::TParseContext(TSymbolTable &symt, ...@@ -143,8 +143,10 @@ TParseContext::TParseContext(TSymbolTable &symt,
mFunctionReturnsValue(false), mFunctionReturnsValue(false),
mChecksPrecisionErrors(checksPrecErrors), mChecksPrecisionErrors(checksPrecErrors),
mFragmentPrecisionHighOnESSL1(false), mFragmentPrecisionHighOnESSL1(false),
mDefaultMatrixPacking(EmpColumnMajor), mDefaultUniformMatrixPacking(EmpColumnMajor),
mDefaultBlockStorage(sh::IsWebGLBasedSpec(spec) ? EbsStd140 : EbsShared), mDefaultUniformBlockStorage(sh::IsWebGLBasedSpec(spec) ? EbsStd140 : EbsShared),
mDefaultBufferMatrixPacking(EmpColumnMajor),
mDefaultBufferBlockStorage(sh::IsWebGLBasedSpec(spec) ? EbsStd140 : EbsShared),
mDiagnostics(diagnostics), mDiagnostics(diagnostics),
mDirectiveHandler(ext, mDirectiveHandler(ext,
*mDiagnostics, *mDiagnostics,
...@@ -167,6 +169,7 @@ TParseContext::TParseContext(TSymbolTable &symt, ...@@ -167,6 +169,7 @@ TParseContext::TParseContext(TSymbolTable &symt,
mMaxUniformLocations(resources.MaxUniformLocations), mMaxUniformLocations(resources.MaxUniformLocations),
mMaxUniformBufferBindings(resources.MaxUniformBufferBindings), mMaxUniformBufferBindings(resources.MaxUniformBufferBindings),
mMaxAtomicCounterBindings(resources.MaxAtomicCounterBindings), mMaxAtomicCounterBindings(resources.MaxAtomicCounterBindings),
mMaxShaderStorageBufferBindings(resources.MaxShaderStorageBufferBindings),
mDeclaringFunction(false) mDeclaringFunction(false)
{ {
mComputeShaderLocalSize.fill(-1); mComputeShaderLocalSize.fill(-1);
...@@ -492,6 +495,10 @@ bool TParseContext::checkCanBeLValue(const TSourceLoc &line, const char *op, TIn ...@@ -492,6 +495,10 @@ bool TParseContext::checkCanBeLValue(const TSourceLoc &line, const char *op, TIn
message = "can't modify a variable with type "; message = "can't modify a variable with type ";
message += getBasicString(node->getBasicType()); message += getBasicString(node->getBasicType());
} }
else if (node->getMemoryQualifier().readonly)
{
message = "can't modify a readonly variable";
}
} }
if (message.empty() && binaryNode == 0 && symNode == 0) if (message.empty() && binaryNode == 0 && symNode == 0)
...@@ -618,6 +625,11 @@ bool TParseContext::checkConstructorArguments(const TSourceLoc &line, ...@@ -618,6 +625,11 @@ bool TParseContext::checkConstructorArguments(const TSourceLoc &line,
error(line, reason.c_str(), "constructor"); error(line, reason.c_str(), "constructor");
return false; return false;
} }
else if (argTyped->getMemoryQualifier().writeonly)
{
error(line, "cannot convert a variable with writeonly", "constructor");
return false;
}
if (argTyped->getBasicType() == EbtVoid) if (argTyped->getBasicType() == EbtVoid)
{ {
error(line, "cannot convert a void", "constructor"); error(line, "cannot convert a void", "constructor");
...@@ -1207,7 +1219,16 @@ void TParseContext::nonEmptyDeclarationErrorCheck(const TPublicType &publicType, ...@@ -1207,7 +1219,16 @@ void TParseContext::nonEmptyDeclarationErrorCheck(const TPublicType &publicType,
getQualifierString(publicType.qualifier)); getQualifierString(publicType.qualifier));
return; return;
} }
break;
case EvqBuffer:
if (publicType.getBasicType() != EbtInterfaceBlock)
{
error(identifierLocation,
"cannot declare buffer variables at global scope(outside a block)",
getQualifierString(publicType.qualifier));
return;
}
break;
default: default:
break; break;
} }
...@@ -1429,13 +1450,28 @@ void TParseContext::checkSamplerBindingIsValid(const TSourceLoc &location, ...@@ -1429,13 +1450,28 @@ void TParseContext::checkSamplerBindingIsValid(const TSourceLoc &location,
} }
} }
void TParseContext::checkBlockBindingIsValid(const TSourceLoc &location, int binding, int arraySize) void TParseContext::checkBlockBindingIsValid(const TSourceLoc &location,
const TQualifier &qualifier,
int binding,
int arraySize)
{ {
int size = (arraySize == 0 ? 1 : arraySize); int size = (arraySize == 0 ? 1 : arraySize);
if (binding + size > mMaxUniformBufferBindings) if (qualifier == EvqUniform)
{ {
error(location, "interface block binding greater than MAX_UNIFORM_BUFFER_BINDINGS", if (binding + size > mMaxUniformBufferBindings)
"binding"); {
error(location, "uniform block binding greater than MAX_UNIFORM_BUFFER_BINDINGS",
"binding");
}
}
else if (qualifier == EvqBuffer)
{
if (binding + size > mMaxShaderStorageBufferBindings)
{
error(location,
"shader storage block binding greater than MAX_SHADER_STORAGE_BUFFER_BINDINGS",
"binding");
}
} }
} }
void TParseContext::checkAtomicCounterBindingIsValid(const TSourceLoc &location, int binding) void TParseContext::checkAtomicCounterBindingIsValid(const TSourceLoc &location, int binding)
...@@ -1466,15 +1502,26 @@ void TParseContext::checkYuvIsNotSpecified(const TSourceLoc &location, bool yuv) ...@@ -1466,15 +1502,26 @@ void TParseContext::checkYuvIsNotSpecified(const TSourceLoc &location, bool yuv)
} }
} }
void TParseContext::functionCallLValueErrorCheck(const TFunction *fnCandidate, void TParseContext::functionCallRValueLValueErrorCheck(const TFunction *fnCandidate,
TIntermAggregate *fnCall) TIntermAggregate *fnCall)
{ {
for (size_t i = 0; i < fnCandidate->getParamCount(); ++i) for (size_t i = 0; i < fnCandidate->getParamCount(); ++i)
{ {
TQualifier qual = fnCandidate->getParam(i).type->getQualifier(); TQualifier qual = fnCandidate->getParam(i).type->getQualifier();
TIntermTyped *argument = (*(fnCall->getSequence()))[i]->getAsTyped();
if (!IsImage(argument->getBasicType()) && (IsQualifierUnspecified(qual) || qual == EvqIn ||
qual == EvqInOut || qual == EvqConstReadOnly))
{
if (argument->getMemoryQualifier().writeonly)
{
error(argument->getLine(),
"Writeonly value cannot be passed for 'in' or 'inout' parameters.",
fnCall->getFunctionSymbolInfo()->getName().c_str());
return;
}
}
if (qual == EvqOut || qual == EvqInOut) if (qual == EvqOut || qual == EvqInOut)
{ {
TIntermTyped *argument = (*(fnCall->getSequence()))[i]->getAsTyped();
if (!checkCanBeLValue(argument->getLine(), "assign", argument)) if (!checkCanBeLValue(argument->getLine(), "assign", argument))
{ {
error(argument->getLine(), error(argument->getLine(),
...@@ -2103,25 +2150,28 @@ void TParseContext::checkLocalVariableConstStorageQualifier(const TQualifierWrap ...@@ -2103,25 +2150,28 @@ void TParseContext::checkLocalVariableConstStorageQualifier(const TQualifierWrap
void TParseContext::checkMemoryQualifierIsNotSpecified(const TMemoryQualifier &memoryQualifier, void TParseContext::checkMemoryQualifierIsNotSpecified(const TMemoryQualifier &memoryQualifier,
const TSourceLoc &location) const TSourceLoc &location)
{ {
const std::string reason(
"Only allowed with shader storage blocks, variables declared within shader storage blocks "
"and variables declared as image types.");
if (memoryQualifier.readonly) if (memoryQualifier.readonly)
{ {
error(location, "Only allowed with images.", "readonly"); error(location, reason.c_str(), "readonly");
} }
if (memoryQualifier.writeonly) if (memoryQualifier.writeonly)
{ {
error(location, "Only allowed with images.", "writeonly"); error(location, reason.c_str(), "writeonly");
} }
if (memoryQualifier.coherent) if (memoryQualifier.coherent)
{ {
error(location, "Only allowed with images.", "coherent"); error(location, reason.c_str(), "coherent");
} }
if (memoryQualifier.restrictQualifier) if (memoryQualifier.restrictQualifier)
{ {
error(location, "Only allowed with images.", "restrict"); error(location, reason.c_str(), "restrict");
} }
if (memoryQualifier.volatileQualifier) if (memoryQualifier.volatileQualifier)
{ {
error(location, "Only allowed with images.", "volatile"); error(location, reason.c_str(), "volatile");
} }
} }
...@@ -2711,9 +2761,9 @@ void TParseContext::parseGlobalLayoutQualifier(const TTypeQualifierBuilder &type ...@@ -2711,9 +2761,9 @@ void TParseContext::parseGlobalLayoutQualifier(const TTypeQualifierBuilder &type
return; return;
} }
if (typeQualifier.qualifier != EvqUniform) if (typeQualifier.qualifier != EvqUniform && typeQualifier.qualifier != EvqBuffer)
{ {
error(typeQualifier.line, "invalid qualifier: global layout must be uniform", error(typeQualifier.line, "invalid qualifier: global layout can only be set for blocks",
getQualifierString(typeQualifier.qualifier)); getQualifierString(typeQualifier.qualifier));
return; return;
} }
...@@ -2729,12 +2779,26 @@ void TParseContext::parseGlobalLayoutQualifier(const TTypeQualifierBuilder &type ...@@ -2729,12 +2779,26 @@ void TParseContext::parseGlobalLayoutQualifier(const TTypeQualifierBuilder &type
if (layoutQualifier.matrixPacking != EmpUnspecified) if (layoutQualifier.matrixPacking != EmpUnspecified)
{ {
mDefaultMatrixPacking = layoutQualifier.matrixPacking; if (typeQualifier.qualifier == EvqUniform)
{
mDefaultUniformMatrixPacking = layoutQualifier.matrixPacking;
}
else if (typeQualifier.qualifier == EvqBuffer)
{
mDefaultBufferMatrixPacking = layoutQualifier.matrixPacking;
}
} }
if (layoutQualifier.blockStorage != EbsUnspecified) if (layoutQualifier.blockStorage != EbsUnspecified)
{ {
mDefaultBlockStorage = layoutQualifier.blockStorage; if (typeQualifier.qualifier == EvqUniform)
{
mDefaultUniformBlockStorage = layoutQualifier.blockStorage;
}
else if (typeQualifier.qualifier == EvqBuffer)
{
mDefaultBufferBlockStorage = layoutQualifier.blockStorage;
}
} }
} }
} }
...@@ -3122,9 +3186,16 @@ TIntermDeclaration *TParseContext::addInterfaceBlock( ...@@ -3122,9 +3186,16 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
TTypeQualifier typeQualifier = typeQualifierBuilder.getVariableTypeQualifier(mDiagnostics); TTypeQualifier typeQualifier = typeQualifierBuilder.getVariableTypeQualifier(mDiagnostics);
if (typeQualifier.qualifier != EvqUniform) if (mShaderVersion < 310 && typeQualifier.qualifier != EvqUniform)
{
error(typeQualifier.line,
"invalid qualifier: interface blocks must be uniform in version lower than GLSL ES "
"3.10",
getQualifierString(typeQualifier.qualifier));
}
else if (typeQualifier.qualifier != EvqUniform && typeQualifier.qualifier != EvqBuffer)
{ {
error(typeQualifier.line, "invalid qualifier: interface blocks must be uniform", error(typeQualifier.line, "invalid qualifier: interface blocks must be uniform or buffer",
getQualifierString(typeQualifier.qualifier)); getQualifierString(typeQualifier.qualifier));
} }
...@@ -3133,7 +3204,10 @@ TIntermDeclaration *TParseContext::addInterfaceBlock( ...@@ -3133,7 +3204,10 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
error(typeQualifier.line, "invalid qualifier on interface block member", "invariant"); error(typeQualifier.line, "invalid qualifier on interface block member", "invariant");
} }
checkMemoryQualifierIsNotSpecified(typeQualifier.memoryQualifier, typeQualifier.line); if (typeQualifier.qualifier != EvqBuffer)
{
checkMemoryQualifierIsNotSpecified(typeQualifier.memoryQualifier, typeQualifier.line);
}
// add array index // add array index
unsigned int arraySize = 0; unsigned int arraySize = 0;
...@@ -3148,8 +3222,8 @@ TIntermDeclaration *TParseContext::addInterfaceBlock( ...@@ -3148,8 +3222,8 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
} }
else else
{ {
checkBlockBindingIsValid(typeQualifier.line, typeQualifier.layoutQualifier.binding, checkBlockBindingIsValid(typeQualifier.line, typeQualifier.qualifier,
arraySize); typeQualifier.layoutQualifier.binding, arraySize);
} }
checkYuvIsNotSpecified(typeQualifier.line, typeQualifier.layoutQualifier.yuv); checkYuvIsNotSpecified(typeQualifier.line, typeQualifier.layoutQualifier.yuv);
...@@ -3159,12 +3233,26 @@ TIntermDeclaration *TParseContext::addInterfaceBlock( ...@@ -3159,12 +3233,26 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
if (blockLayoutQualifier.matrixPacking == EmpUnspecified) if (blockLayoutQualifier.matrixPacking == EmpUnspecified)
{ {
blockLayoutQualifier.matrixPacking = mDefaultMatrixPacking; if (typeQualifier.qualifier == EvqUniform)
{
blockLayoutQualifier.matrixPacking = mDefaultUniformMatrixPacking;
}
else if (typeQualifier.qualifier == EvqBuffer)
{
blockLayoutQualifier.matrixPacking = mDefaultBufferMatrixPacking;
}
} }
if (blockLayoutQualifier.blockStorage == EbsUnspecified) if (blockLayoutQualifier.blockStorage == EbsUnspecified)
{ {
blockLayoutQualifier.blockStorage = mDefaultBlockStorage; if (typeQualifier.qualifier == EvqUniform)
{
blockLayoutQualifier.blockStorage = mDefaultUniformBlockStorage;
}
else if (typeQualifier.qualifier == EvqBuffer)
{
blockLayoutQualifier.blockStorage = mDefaultBufferBlockStorage;
}
} }
checkWorkGroupSizeIsNotSpecified(nameLine, blockLayoutQualifier); checkWorkGroupSizeIsNotSpecified(nameLine, blockLayoutQualifier);
...@@ -3194,7 +3282,20 @@ TIntermDeclaration *TParseContext::addInterfaceBlock( ...@@ -3194,7 +3282,20 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
switch (qualifier) switch (qualifier)
{ {
case EvqGlobal: case EvqGlobal:
break;
case EvqUniform: case EvqUniform:
if (typeQualifier.qualifier == EvqBuffer)
{
error(field->line(), "invalid qualifier on shader storage block member",
getQualifierString(qualifier));
}
break;
case EvqBuffer:
if (typeQualifier.qualifier == EvqUniform)
{
error(field->line(), "invalid qualifier on uniform block member",
getQualifierString(qualifier));
}
break; break;
default: default:
error(field->line(), "invalid qualifier on interface block member", error(field->line(), "invalid qualifier on interface block member",
...@@ -3230,6 +3331,24 @@ TIntermDeclaration *TParseContext::addInterfaceBlock( ...@@ -3230,6 +3331,24 @@ TIntermDeclaration *TParseContext::addInterfaceBlock(
} }
fieldType->setLayoutQualifier(fieldLayoutQualifier); fieldType->setLayoutQualifier(fieldLayoutQualifier);
if (typeQualifier.qualifier == EvqBuffer)
{
// set memory qualifiers
// GLSL ES 3.10 session 4.9 [Memory Access Qualifiers]. When a block declaration is
// qualified with a memory qualifier, it is as if all of its members were declared with
// the same memory qualifier.
const TMemoryQualifier &blockMemoryQualifier = typeQualifier.memoryQualifier;
TMemoryQualifier fieldMemoryQualifier = fieldType->getMemoryQualifier();
fieldMemoryQualifier.readonly |= blockMemoryQualifier.readonly;
fieldMemoryQualifier.writeonly |= blockMemoryQualifier.writeonly;
fieldMemoryQualifier.coherent |= blockMemoryQualifier.coherent;
fieldMemoryQualifier.restrictQualifier |= blockMemoryQualifier.restrictQualifier;
fieldMemoryQualifier.volatileQualifier |= blockMemoryQualifier.volatileQualifier;
// TODO(jiajia.qin@intel.com): Decide whether if readonly and writeonly buffer variable
// is legal. See bug https://github.com/KhronosGroup/OpenGL-API/issues/7
fieldType->setMemoryQualifier(fieldMemoryQualifier);
}
} }
TInterfaceBlock *interfaceBlock = TInterfaceBlock *interfaceBlock =
...@@ -4190,6 +4309,12 @@ TIntermTyped *TParseContext::createUnaryMath(TOperator op, ...@@ -4190,6 +4309,12 @@ TIntermTyped *TParseContext::createUnaryMath(TOperator op,
break; break;
} }
if (child->getMemoryQualifier().writeonly)
{
unaryOpError(loc, GetOperatorString(op), child->getCompleteString());
return nullptr;
}
TIntermUnary *node = new TIntermUnary(op, child); TIntermUnary *node = new TIntermUnary(op, child);
node->setLine(loc); node->setLine(loc);
...@@ -4239,6 +4364,29 @@ bool TParseContext::binaryOpCommonCheck(TOperator op, ...@@ -4239,6 +4364,29 @@ bool TParseContext::binaryOpCommonCheck(TOperator op,
} }
} }
if (right->getMemoryQualifier().writeonly)
{
error(loc, "Invalid operation for variables with writeonly", GetOperatorString(op));
return false;
}
if (left->getMemoryQualifier().writeonly)
{
switch (op)
{
case EOpAssign:
case EOpInitialize:
case EOpIndexDirect:
case EOpIndexIndirect:
case EOpIndexDirectStruct:
case EOpIndexDirectInterfaceBlock:
break;
default:
error(loc, "Invalid operation for variables with writeonly", GetOperatorString(op));
return false;
}
}
if (left->getType().getStruct() || right->getType().getStruct()) if (left->getType().getStruct() || right->getType().getStruct())
{ {
switch (op) switch (op)
...@@ -4966,7 +5114,7 @@ TIntermTyped *TParseContext::addNonConstructorFunctionCall(TFunction *fnCall, ...@@ -4966,7 +5114,7 @@ TIntermTyped *TParseContext::addNonConstructorFunctionCall(TFunction *fnCall,
callNode->setLine(loc); callNode->setLine(loc);
// Some built-in functions have out parameters too. // Some built-in functions have out parameters too.
functionCallLValueErrorCheck(fnCandidate, callNode); functionCallRValueLValueErrorCheck(fnCandidate, callNode);
if (TIntermAggregate::CanFoldAggregateBuiltInOp(callNode->getOp())) if (TIntermAggregate::CanFoldAggregateBuiltInOp(callNode->getOp()))
{ {
...@@ -5001,7 +5149,7 @@ TIntermTyped *TParseContext::addNonConstructorFunctionCall(TFunction *fnCall, ...@@ -5001,7 +5149,7 @@ TIntermTyped *TParseContext::addNonConstructorFunctionCall(TFunction *fnCall,
checkImageMemoryAccessForUserDefinedFunctions(fnCandidate, callNode); checkImageMemoryAccessForUserDefinedFunctions(fnCandidate, callNode);
} }
functionCallLValueErrorCheck(fnCandidate, callNode); functionCallRValueLValueErrorCheck(fnCandidate, callNode);
callNode->setLine(loc); callNode->setLine(loc);
...@@ -5045,6 +5193,13 @@ TIntermTyped *TParseContext::addTernarySelection(TIntermTyped *cond, ...@@ -5045,6 +5193,13 @@ TIntermTyped *TParseContext::addTernarySelection(TIntermTyped *cond,
return falseExpression; return falseExpression;
} }
if (cond->getMemoryQualifier().writeonly || trueExpression->getMemoryQualifier().writeonly ||
falseExpression->getMemoryQualifier().writeonly)
{
error(loc, "ternary operator is not allowed for variables with writeonly", "?:");
return falseExpression;
}
// ESSL 1.00.17 sections 5.2 and 5.7: // ESSL 1.00.17 sections 5.2 and 5.7:
// Ternary operator is not among the operators allowed for structures/arrays. // Ternary operator is not among the operators allowed for structures/arrays.
// ESSL 3.00.6 section 5.7: // ESSL 3.00.6 section 5.7:
......
...@@ -155,7 +155,7 @@ class TParseContext : angle::NonCopyable ...@@ -155,7 +155,7 @@ class TParseContext : angle::NonCopyable
int versionRequired); int versionRequired);
bool checkWorkGroupSizeIsNotSpecified(const TSourceLoc &location, bool checkWorkGroupSizeIsNotSpecified(const TSourceLoc &location,
const TLayoutQualifier &layoutQualifier); const TLayoutQualifier &layoutQualifier);
void functionCallLValueErrorCheck(const TFunction *fnCandidate, TIntermAggregate *fnCall); void functionCallRValueLValueErrorCheck(const TFunction *fnCandidate, TIntermAggregate *fnCall);
void checkInvariantVariableQualifier(bool invariant, void checkInvariantVariableQualifier(bool invariant,
const TQualifier qualifier, const TQualifier qualifier,
const TSourceLoc &invariantLocation); const TSourceLoc &invariantLocation);
...@@ -464,7 +464,10 @@ class TParseContext : angle::NonCopyable ...@@ -464,7 +464,10 @@ class TParseContext : angle::NonCopyable
void checkOffsetIsNotSpecified(const TSourceLoc &location, int offset); void checkOffsetIsNotSpecified(const TSourceLoc &location, int offset);
void checkImageBindingIsValid(const TSourceLoc &location, int binding, int arraySize); void checkImageBindingIsValid(const TSourceLoc &location, int binding, int arraySize);
void checkSamplerBindingIsValid(const TSourceLoc &location, int binding, int arraySize); void checkSamplerBindingIsValid(const TSourceLoc &location, int binding, int arraySize);
void checkBlockBindingIsValid(const TSourceLoc &location, int binding, int arraySize); void checkBlockBindingIsValid(const TSourceLoc &location,
const TQualifier &qualifier,
int binding,
int arraySize);
void checkAtomicCounterBindingIsValid(const TSourceLoc &location, int binding); void checkAtomicCounterBindingIsValid(const TSourceLoc &location, int binding);
void checkUniformLocationInRange(const TSourceLoc &location, void checkUniformLocationInRange(const TSourceLoc &location,
...@@ -527,8 +530,10 @@ class TParseContext : angle::NonCopyable ...@@ -527,8 +530,10 @@ class TParseContext : angle::NonCopyable
// without precision, explicit or implicit. // without precision, explicit or implicit.
bool mFragmentPrecisionHighOnESSL1; // true if highp precision is supported when compiling bool mFragmentPrecisionHighOnESSL1; // true if highp precision is supported when compiling
// ESSL1. // ESSL1.
TLayoutMatrixPacking mDefaultMatrixPacking; TLayoutMatrixPacking mDefaultUniformMatrixPacking;
TLayoutBlockStorage mDefaultBlockStorage; TLayoutBlockStorage mDefaultUniformBlockStorage;
TLayoutMatrixPacking mDefaultBufferMatrixPacking;
TLayoutBlockStorage mDefaultBufferBlockStorage;
TString mHashErrMsg; TString mHashErrMsg;
TDiagnostics *mDiagnostics; TDiagnostics *mDiagnostics;
TDirectiveHandler mDirectiveHandler; TDirectiveHandler mDirectiveHandler;
...@@ -554,6 +559,7 @@ class TParseContext : angle::NonCopyable ...@@ -554,6 +559,7 @@ class TParseContext : angle::NonCopyable
int mMaxUniformLocations; int mMaxUniformLocations;
int mMaxUniformBufferBindings; int mMaxUniformBufferBindings;
int mMaxAtomicCounterBindings; int mMaxAtomicCounterBindings;
int mMaxShaderStorageBufferBindings;
// keeps track whether we are declaring / defining a function // keeps track whether we are declaring / defining a function
bool mDeclaringFunction; bool mDeclaringFunction;
......
...@@ -581,7 +581,13 @@ bool CollectVariablesTraverser::visitDeclaration(Visit, TIntermDeclaration *node ...@@ -581,7 +581,13 @@ bool CollectVariablesTraverser::visitDeclaration(Visit, TIntermDeclaration *node
const TIntermSymbol &variable = *variableNode->getAsSymbolNode(); const TIntermSymbol &variable = *variableNode->getAsSymbolNode();
if (typedNode.getBasicType() == EbtInterfaceBlock) if (typedNode.getBasicType() == EbtInterfaceBlock)
{ {
mInterfaceBlocks->push_back(recordInterfaceBlock(variable)); // TODO(jiajia.qin@intel.com): In order not to affect the old set of mInterfaceBlocks,
// only uniform blocks are added into mInterfaceBlocks. Refactor it to gather
// uniformBlocks and shaderStorageBlocks separately.
if (qualifier == EvqUniform)
{
mInterfaceBlocks->push_back(recordInterfaceBlock(variable));
}
} }
else else
{ {
...@@ -622,12 +628,15 @@ bool CollectVariablesTraverser::visitBinary(Visit, TIntermBinary *binaryNode) ...@@ -622,12 +628,15 @@ bool CollectVariablesTraverser::visitBinary(Visit, TIntermBinary *binaryNode)
const TInterfaceBlock *interfaceBlock = blockNode->getType().getInterfaceBlock(); const TInterfaceBlock *interfaceBlock = blockNode->getType().getInterfaceBlock();
InterfaceBlock *namedBlock = FindVariable(interfaceBlock->name(), mInterfaceBlocks); InterfaceBlock *namedBlock = FindVariable(interfaceBlock->name(), mInterfaceBlocks);
ASSERT(namedBlock); // TODO(jiajia.qin@intel.com): Currently, only uniform blocks are added into
namedBlock->staticUse = true; // mInterfaceBlocks.
if (namedBlock)
unsigned int fieldIndex = static_cast<unsigned int>(constantUnion->getIConst(0)); {
ASSERT(fieldIndex < namedBlock->fields.size()); namedBlock->staticUse = true;
namedBlock->fields[fieldIndex].staticUse = true; unsigned int fieldIndex = static_cast<unsigned int>(constantUnion->getIConst(0));
ASSERT(fieldIndex < namedBlock->fields.size());
namedBlock->fields[fieldIndex].staticUse = true;
}
return false; return false;
} }
......
...@@ -114,6 +114,7 @@ O [0-7] ...@@ -114,6 +114,7 @@ O [0-7]
"attribute" { return ES2_keyword_ES3_reserved(context, ATTRIBUTE); } "attribute" { return ES2_keyword_ES3_reserved(context, ATTRIBUTE); }
"const" { return CONST_QUAL; } "const" { return CONST_QUAL; }
"uniform" { return UNIFORM; } "uniform" { return UNIFORM; }
"buffer" { return ES2_and_ES3_ident_ES3_1_keyword(context, BUFFER); }
"varying" { return ES2_keyword_ES3_reserved(context, VARYING); } "varying" { return ES2_keyword_ES3_reserved(context, VARYING); }
"break" { return BREAK; } "break" { return BREAK; }
......
...@@ -162,7 +162,7 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, void *scanner, cons ...@@ -162,7 +162,7 @@ extern void yyerror(YYLTYPE* yylloc, TParseContext* context, void *scanner, cons
%token <lex> ATTRIBUTE CONST_QUAL BOOL_TYPE FLOAT_TYPE INT_TYPE UINT_TYPE %token <lex> ATTRIBUTE CONST_QUAL BOOL_TYPE FLOAT_TYPE INT_TYPE UINT_TYPE
%token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT %token <lex> BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT
%token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4 UVEC2 UVEC3 UVEC4 %token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4 UVEC2 UVEC3 UVEC4
%token <lex> MATRIX2 MATRIX3 MATRIX4 IN_QUAL OUT_QUAL INOUT_QUAL UNIFORM VARYING %token <lex> MATRIX2 MATRIX3 MATRIX4 IN_QUAL OUT_QUAL INOUT_QUAL UNIFORM BUFFER VARYING
%token <lex> MATRIX2x3 MATRIX3x2 MATRIX2x4 MATRIX4x2 MATRIX3x4 MATRIX4x3 %token <lex> MATRIX2x3 MATRIX3x2 MATRIX2x4 MATRIX4x2 MATRIX3x4 MATRIX4x3
%token <lex> CENTROID FLAT SMOOTH %token <lex> CENTROID FLAT SMOOTH
%token <lex> READONLY WRITEONLY COHERENT RESTRICT VOLATILE SHARED %token <lex> READONLY WRITEONLY COHERENT RESTRICT VOLATILE SHARED
...@@ -857,6 +857,10 @@ storage_qualifier ...@@ -857,6 +857,10 @@ storage_qualifier
| UNIFORM { | UNIFORM {
$$ = context->parseGlobalStorageQualifier(EvqUniform, @1); $$ = context->parseGlobalStorageQualifier(EvqUniform, @1);
} }
| BUFFER {
ES3_1_ONLY("buffer", @1, "storage qualifier");
$$ = context->parseGlobalStorageQualifier(EvqBuffer, @1);
}
| READONLY { | READONLY {
$$ = new TMemoryQualifierWrapper(EvqReadOnly, @1); $$ = new TMemoryQualifierWrapper(EvqReadOnly, @1);
} }
......
...@@ -63,37 +63,13 @@ ...@@ -63,37 +63,13 @@
#define yyget_lval yyget_lval
#ifdef yyget_lval #define yyset_lval yyset_lval
#define yyget_lval_ALREADY_DEFINED
#else
#define yyget_lval yyget_lval
#endif
#ifdef yyset_lval
#define yyset_lval_ALREADY_DEFINED
#else
#define yyset_lval yyset_lval
#endif
#define yyget_lloc yyget_lloc
#define yyset_lloc yyset_lloc
#ifdef yyget_lloc
#define yyget_lloc_ALREADY_DEFINED
#else
#define yyget_lloc yyget_lloc
#endif
#ifdef yyset_lloc
#define yyset_lloc_ALREADY_DEFINED
#else
#define yyset_lloc yyset_lloc
#endif
...@@ -514,8 +490,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); ...@@ -514,8 +490,8 @@ static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner );
yyg->yy_hold_char = *yy_cp; \ yyg->yy_hold_char = *yy_cp; \
*yy_cp = '\0'; \ *yy_cp = '\0'; \
yyg->yy_c_buf_p = yy_cp; yyg->yy_c_buf_p = yy_cp;
#define YY_NUM_RULES 246 #define YY_NUM_RULES 247
#define YY_END_OF_BUFFER 247 #define YY_END_OF_BUFFER 248
/* This struct is not used in this scanner, /* This struct is not used in this scanner,
but its presence is necessary. */ but its presence is necessary. */
struct yy_trans_info struct yy_trans_info
...@@ -523,105 +499,105 @@ struct yy_trans_info ...@@ -523,105 +499,105 @@ struct yy_trans_info
flex_int32_t yy_verify; flex_int32_t yy_verify;
flex_int32_t yy_nxt; flex_int32_t yy_nxt;
}; };
static const flex_int16_t yy_accept[886] = static const flex_int16_t yy_accept[891] =
{ 0, { 0,
0, 0, 0, 0, 247, 245, 244, 244, 228, 234, 0, 0, 0, 0, 248, 246, 245, 245, 229, 235,
239, 223, 224, 232, 231, 220, 229, 227, 233, 186, 240, 224, 225, 233, 232, 221, 230, 228, 234, 187,
186, 221, 217, 235, 222, 236, 240, 183, 225, 226, 187, 222, 218, 236, 223, 237, 241, 184, 226, 227,
238, 183, 183, 183, 183, 183, 183, 183, 183, 183, 239, 184, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 218, 237, 219, 230, 243, 242, 246, 184, 184, 184, 219, 238, 220, 231, 244, 243, 247,
241, 214, 200, 219, 208, 203, 198, 206, 196, 207, 242, 215, 201, 220, 209, 204, 199, 207, 197, 208,
197, 192, 199, 191, 185, 186, 0, 189, 0, 226, 198, 193, 200, 192, 186, 187, 0, 190, 0, 227,
218, 225, 215, 211, 213, 212, 216, 183, 204, 210, 219, 226, 216, 212, 214, 213, 217, 184, 205, 211,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 12, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 13, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 183, 15, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 16, 184,
23, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 24, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 205, 209, 241, 0, 184, 184, 184, 184, 184, 184, 184, 206, 210, 242,
195, 191, 0, 194, 188, 0, 190, 184, 201, 202, 0, 196, 192, 0, 195, 189, 0, 191, 185, 202,
183, 183, 143, 183, 183, 183, 183, 183, 183, 183, 203, 184, 184, 144, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 13, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 14, 184,
183, 183, 183, 183, 183, 183, 183, 28, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 29,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
24, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 25, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 183, 0, 192, 0, 184, 184, 184, 184, 184, 184, 184, 184, 184, 0,
191, 193, 187, 183, 183, 183, 183, 31, 183, 183, 193, 0, 192, 194, 188, 184, 184, 184, 184, 32,
18, 180, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 19, 181, 184, 184, 184, 184, 184,
183, 183, 16, 146, 183, 183, 183, 183, 21, 183, 184, 184, 184, 184, 184, 17, 147, 184, 184, 184,
183, 150, 161, 183, 183, 183, 183, 183, 183, 183, 184, 22, 184, 184, 151, 162, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 158, 4, 36, 37, 184, 184, 184, 184, 184, 184, 184, 184, 184, 159,
38, 183, 183, 183, 183, 183, 183, 183, 183, 183, 4, 37, 38, 39, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 149, 32, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 150,
29, 183, 183, 183, 183, 183, 183, 183, 48, 49, 33, 184, 184, 30, 184, 184, 184, 184, 184, 184,
50, 30, 183, 183, 183, 183, 183, 183, 183, 183, 184, 49, 50, 51, 31, 184, 184, 184, 184, 184,
10, 54, 55, 56, 183, 144, 183, 183, 7, 183, 184, 184, 184, 11, 184, 55, 56, 57, 184, 145,
183, 183, 183, 170, 171, 172, 183, 33, 183, 162, 184, 184, 7, 184, 184, 184, 184, 171, 172, 173,
27, 173, 174, 175, 2, 167, 168, 169, 183, 183, 184, 34, 184, 163, 28, 174, 175, 176, 2, 168,
183, 25, 165, 183, 183, 183, 183, 183, 51, 52, 169, 170, 184, 184, 184, 26, 166, 184, 184, 184,
53, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 52, 53, 54, 184, 184, 184, 184, 184,
183, 183, 108, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 109, 184, 184, 184,
183, 159, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 160, 184, 184, 184, 184,
183, 183, 183, 145, 183, 183, 182, 57, 58, 59, 184, 184, 184, 184, 184, 184, 184, 146, 184, 184,
183, 183, 14, 183, 183, 183, 113, 183, 183, 183, 183, 58, 59, 60, 184, 184, 15, 184, 184, 184,
183, 111, 183, 183, 183, 160, 155, 114, 183, 183, 114, 184, 184, 9, 184, 184, 112, 184, 184, 184,
183, 183, 183, 183, 151, 183, 183, 183, 183, 183, 161, 156, 115, 184, 184, 184, 184, 184, 184, 152,
83, 39, 42, 44, 43, 40, 46, 45, 47, 41, 184, 184, 184, 184, 184, 84, 40, 43, 45, 44,
183, 183, 183, 183, 166, 142, 183, 183, 153, 183, 41, 47, 46, 48, 42, 184, 184, 184, 184, 167,
183, 183, 35, 109, 26, 179, 22, 154, 82, 183, 143, 184, 184, 154, 184, 184, 184, 36, 110, 27,
164, 17, 183, 183, 183, 183, 183, 183, 183, 183, 180, 23, 155, 83, 184, 165, 18, 184, 184, 184,
183, 183, 183, 183, 183, 183, 183, 183, 19, 34, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 183, 115, 88, 94, 183, 184, 184, 184, 20, 35, 184, 184, 184, 184, 184,
183, 183, 183, 183, 85, 87, 3, 183, 183, 183, 184, 116, 89, 95, 184, 184, 184, 184, 184, 86,
183, 183, 183, 183, 183, 183, 183, 183, 147, 183, 88, 3, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 8, 183, 183, 9, 183, 183, 184, 184, 184, 148, 184, 184, 184, 184, 184, 8,
183, 183, 183, 183, 20, 102, 11, 156, 116, 89, 184, 184, 10, 184, 184, 184, 184, 184, 184, 21,
96, 183, 183, 183, 183, 183, 183, 183, 183, 183, 103, 12, 157, 117, 90, 97, 184, 184, 184, 184,
183, 183, 183, 183, 152, 183, 183, 183, 100, 106, 184, 184, 184, 184, 184, 184, 184, 184, 184, 153,
103, 183, 183, 183, 183, 183, 183, 183, 148, 117, 184, 184, 184, 101, 107, 104, 184, 184, 184, 184,
90, 95, 183, 183, 163, 183, 104, 183, 183, 183, 184, 184, 184, 149, 118, 91, 96, 184, 184, 164,
183, 6, 183, 183, 183, 183, 183, 183, 183, 183, 184, 105, 184, 184, 184, 184, 6, 184, 184, 184,
183, 99, 157, 1, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 100, 158, 1, 184,
181, 183, 112, 5, 176, 60, 63, 183, 183, 183, 184, 184, 184, 184, 184, 182, 184, 113, 5, 177,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 61, 64, 184, 184, 184, 184, 184, 184, 184, 184,
101, 183, 183, 183, 183, 183, 183, 97, 183, 183, 184, 184, 184, 184, 184, 102, 184, 184, 184, 184,
183, 183, 183, 130, 68, 69, 183, 183, 183, 183, 184, 184, 98, 184, 184, 184, 184, 184, 131, 69,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 70, 184, 184, 184, 184, 184, 184, 184, 184, 184,
110, 183, 183, 183, 98, 132, 73, 74, 183, 183, 184, 184, 184, 184, 184, 111, 184, 184, 184, 99,
183, 183, 105, 183, 183, 183, 183, 183, 183, 183, 133, 74, 75, 184, 184, 184, 184, 106, 184, 184,
125, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 184, 184, 184, 126, 184, 184, 184, 184,
183, 183, 67, 183, 183, 183, 183, 61, 183, 183, 184, 184, 184, 184, 184, 184, 184, 68, 184, 184,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 184, 184, 62, 184, 184, 184, 184, 184, 184, 184,
183, 183, 126, 118, 183, 91, 183, 183, 183, 72, 184, 184, 184, 184, 184, 184, 184, 127, 119, 184,
183, 183, 70, 183, 183, 183, 183, 183, 183, 183, 92, 184, 184, 184, 73, 184, 184, 71, 184, 184,
183, 183, 183, 183, 183, 183, 183, 127, 183, 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
77, 183, 183, 75, 183, 183, 119, 92, 183, 121, 184, 184, 128, 184, 184, 78, 184, 184, 76, 184,
183, 122, 183, 183, 183, 183, 183, 183, 107, 183, 184, 120, 93, 184, 122, 184, 123, 184, 184, 184,
183, 183, 183, 65, 183, 64, 136, 183, 183, 120, 184, 184, 184, 108, 184, 184, 184, 184, 66, 184,
93, 183, 183, 183, 183, 183, 183, 183, 183, 183, 65, 137, 184, 184, 121, 94, 184, 184, 184, 184,
183, 183, 183, 134, 137, 183, 128, 183, 66, 183, 184, 184, 184, 184, 184, 184, 184, 184, 135, 138,
183, 183, 183, 183, 183, 183, 183, 135, 138, 183, 184, 129, 184, 67, 184, 184, 184, 184, 184, 184,
183, 183, 183, 131, 71, 183, 183, 183, 177, 183, 184, 184, 136, 139, 184, 184, 184, 184, 132, 72,
183, 183, 78, 183, 183, 133, 76, 183, 183, 183, 184, 184, 184, 178, 184, 184, 184, 79, 184, 184,
183, 183, 183, 183, 183, 183, 139, 183, 183, 183, 134, 77, 184, 184, 184, 184, 184, 184, 184, 184,
183, 183, 183, 183, 183, 140, 183, 183, 183, 183, 184, 140, 184, 184, 184, 184, 184, 184, 184, 184,
79, 183, 141, 84, 183, 123, 124, 86, 183, 183, 141, 184, 184, 184, 184, 80, 184, 142, 85, 184,
183, 62, 183, 183, 183, 178, 183, 129, 80, 183, 124, 125, 87, 184, 184, 184, 63, 184, 184, 184,
183, 183, 183, 81, 0 179, 184, 130, 81, 184, 184, 184, 184, 82, 0
} ; } ;
static const YY_CHAR yy_ec[256] = static const YY_CHAR yy_ec[256] =
...@@ -668,213 +644,213 @@ static const YY_CHAR yy_meta[78] = ...@@ -668,213 +644,213 @@ static const YY_CHAR yy_meta[78] =
8, 8, 8, 1, 1, 1, 1 8, 8, 8, 1, 1, 1, 1
} ; } ;
static const flex_int16_t yy_base[895] = static const flex_int16_t yy_base[900] =
{ 0, { 0,
0, 0, 77, 0, 1089, 1090, 1090, 1090, 1060, 127, 0, 0, 77, 0, 1094, 1095, 1095, 1095, 1065, 127,
151, 1090, 1090, 1059, 148, 1090, 147, 145, 1058, 167, 151, 1095, 1095, 1064, 148, 1095, 147, 145, 1063, 167,
158, 1056, 1090, 167, 1056, 145, 1090, 0, 1090, 1090, 158, 1061, 1095, 167, 1061, 145, 1095, 0, 1095, 1095,
149, 1034, 147, 135, 155, 162, 146, 174, 1019, 172, 149, 1039, 147, 135, 155, 162, 146, 174, 1024, 172,
178, 179, 153, 196, 1013, 198, 1026, 200, 197, 213, 178, 179, 169, 196, 1018, 198, 1031, 200, 197, 213,
202, 113, 1011, 1090, 153, 1090, 1090, 1090, 1090, 1090, 202, 113, 1016, 1095, 153, 1095, 1095, 1095, 1095, 1095,
0, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 1090, 0, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095, 1095,
1090, 237, 1090, 241, 237, 271, 243, 1090, 0, 1090, 1095, 237, 1095, 241, 237, 271, 243, 1095, 0, 1095,
1090, 1090, 1050, 1090, 1090, 1090, 1049, 0, 1090, 1090, 1095, 1095, 1055, 1095, 1095, 1095, 1054, 0, 1095, 1095,
1010, 1008, 1013, 156, 1010, 1018, 1017, 1004, 1007, 1018, 1015, 1013, 1018, 197, 1015, 1023, 1021, 1021, 1008, 1011,
226, 1012, 1000, 997, 1010, 997, 994, 994, 1000, 189, 1022, 226, 1016, 1004, 1001, 1014, 1001, 998, 998, 1004,
235, 994, 1004, 990, 996, 999, 1000, 0, 992, 1002, 136, 235, 998, 1008, 994, 1000, 1003, 1004, 0, 996,
230, 1001, 982, 995, 976, 216, 980, 993, 984, 243, 1006, 230, 1005, 986, 999, 980, 216, 984, 997, 988,
977, 237, 989, 991, 250, 980, 259, 967, 976, 253, 243, 981, 237, 993, 995, 250, 984, 259, 971, 980,
259, 980, 976, 978, 967, 970, 250, 255, 269, 979, 253, 259, 984, 980, 982, 971, 974, 250, 255, 269,
967, 979, 266, 972, 971, 959, 1090, 1090, 0, 318, 983, 971, 983, 266, 976, 975, 963, 1095, 1095, 0,
1090, 296, 323, 1090, 1090, 325, 324, 286, 1090, 1090, 318, 1095, 296, 323, 1095, 1095, 325, 324, 206, 1095,
977, 968, 0, 964, 959, 963, 972, 969, 298, 953, 1095, 981, 972, 0, 968, 963, 967, 976, 970, 972,
953, 964, 956, 271, 966, 963, 963, 961, 958, 950, 298, 956, 956, 967, 959, 271, 969, 966, 966, 964,
956, 943, 941, 953, 939, 955, 0, 952, 940, 947, 961, 953, 959, 946, 944, 956, 942, 958, 0, 955,
944, 948, 949, 942, 939, 928, 927, 940, 943, 931, 943, 950, 947, 951, 952, 945, 942, 931, 930, 943,
942, 938, 926, 932, 923, 338, 928, 931, 922, 929, 946, 934, 945, 941, 929, 935, 926, 336, 931, 934,
918, 922, 913, 927, 926, 917, 923, 295, 907, 910, 925, 932, 921, 925, 916, 930, 929, 920, 926, 294,
908, 907, 917, 907, 902, 900, 902, 912, 898, 900, 910, 913, 911, 910, 920, 910, 905, 903, 905, 915,
897, 908, 907, 910, 892, 298, 900, 896, 894, 903, 901, 903, 900, 911, 910, 913, 895, 301, 903, 899,
882, 349, 900, 902, 891, 883, 916, 354, 370, 368, 897, 906, 885, 349, 903, 905, 894, 886, 919, 354,
383, 1090, 1090, 887, 878, 888, 887, 0, 885, 379, 370, 368, 383, 1095, 1095, 890, 881, 891, 890, 0,
0, 0, 878, 876, 876, 877, 872, 880, 869, 886, 888, 892, 379, 0, 0, 880, 878, 878, 879, 874,
875, 382, 0, 0, 869, 879, 878, 878, 0, 863, 882, 871, 888, 877, 382, 0, 0, 871, 881, 880,
385, 0, 0, 865, 390, 872, 873, 864, 858, 857, 880, 0, 865, 385, 0, 0, 867, 390, 874, 875,
858, 857, 857, 342, 393, 852, 0, 0, 848, 847, 866, 860, 859, 860, 859, 859, 337, 393, 854, 0,
846, 848, 849, 854, 848, 844, 857, 852, 852, 850, 0, 850, 849, 848, 850, 851, 856, 850, 846, 859,
849, 843, 837, 839, 838, 842, 847, 833, 836, 831, 854, 854, 852, 851, 845, 839, 841, 840, 844, 849,
839, 844, 832, 829, 841, 832, 0, 0, 838, 834, 835, 838, 833, 841, 846, 834, 831, 843, 834, 0,
0, 826, 826, 831, 822, 829, 396, 826, 0, 0, 0, 840, 836, 0, 828, 828, 833, 824, 831, 396,
0, 0, 816, 828, 827, 814, 815, 824, 825, 825, 828, 0, 0, 0, 0, 818, 830, 829, 816, 817,
0, 0, 0, 0, 812, 0, 820, 811, 0, 810, 826, 827, 827, 0, 812, 0, 0, 0, 813, 0,
811, 805, 815, 0, 0, 0, 806, 0, 802, 0, 821, 812, 0, 811, 812, 806, 816, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 812, 400, 807, 0, 803, 0, 0, 0, 0, 0, 0, 0,
811, 0, 0, 809, 805, 802, 846, 845, 0, 0, 0, 0, 813, 400, 812, 0, 0, 810, 806, 803,
0, 792, 403, 409, 412, 797, 793, 798, 789, 787, 847, 846, 0, 0, 0, 793, 403, 409, 412, 798,
800, 785, 0, 785, 798, 787, 783, 789, 784, 791, 794, 799, 790, 788, 801, 786, 0, 786, 799, 788,
791, 0, 788, 785, 789, 773, 771, 774, 780, 786, 784, 790, 785, 792, 792, 0, 789, 786, 790, 774,
781, 780, 768, 0, 770, 771, 0, 0, 0, 0, 772, 775, 781, 787, 782, 781, 769, 0, 771, 772,
768, 771, 0, 765, 775, 766, 0, 776, 756, 765, 0, 0, 0, 0, 769, 772, 0, 766, 776, 767,
760, 0, 753, 753, 766, 0, 768, 0, 418, 783, 0, 777, 757, 0, 766, 761, 0, 754, 754, 767,
782, 781, 746, 745, 0, 762, 761, 756, 793, 784, 0, 769, 0, 418, 784, 783, 782, 747, 746, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 763, 762, 757, 794, 785, 0, 0, 0, 0, 0,
743, 756, 743, 740, 0, 0, 745, 744, 0, 741, 0, 0, 0, 0, 0, 744, 757, 744, 741, 0,
748, 747, 0, 733, 0, 0, 0, 0, 0, 730, 0, 746, 745, 0, 742, 749, 748, 0, 734, 0,
0, 0, 729, 740, 423, 733, 739, 738, 735, 730, 0, 0, 0, 0, 731, 0, 0, 730, 741, 423,
727, 747, 733, 718, 718, 731, 716, 728, 0, 0, 734, 740, 739, 736, 731, 728, 748, 734, 719, 719,
721, 746, 745, 744, 709, 708, 233, 406, 0, 720, 732, 717, 729, 0, 0, 722, 747, 746, 745, 710,
723, 721, 710, 706, 721, 0, 0, 717, 714, 713, 709, 406, 411, 0, 721, 724, 722, 711, 707, 722,
703, 702, 692, 709, 695, 426, 703, 706, 0, 725, 0, 0, 718, 715, 714, 704, 703, 693, 710, 696,
724, 723, 688, 687, 0, 701, 688, 0, 698, 691, 427, 704, 707, 0, 726, 725, 724, 689, 688, 0,
683, 684, 690, 693, 0, 0, 0, 0, 715, 714, 702, 689, 0, 699, 692, 684, 685, 691, 694, 0,
0, 689, 692, 677, 684, 675, 682, 683, 683, 682, 0, 0, 0, 716, 715, 0, 690, 693, 678, 685,
668, 436, 679, 679, 0, 680, 669, 668, 0, 0, 676, 683, 684, 684, 683, 669, 447, 680, 680, 0,
0, 695, 694, 693, 658, 657, 653, 661, 0, 691, 681, 670, 669, 0, 0, 0, 696, 695, 694, 659,
690, 0, 665, 668, 0, 446, 0, 646, 667, 681, 658, 654, 662, 0, 692, 691, 0, 666, 669, 0,
653, 0, 649, 648, 657, 657, 645, 659, 643, 657, 450, 0, 647, 668, 682, 654, 0, 650, 649, 658,
652, 0, 0, 0, 671, 670, 669, 634, 633, 632, 658, 646, 660, 644, 658, 653, 0, 0, 0, 672,
0, 632, 0, 0, 426, 434, 658, 642, 645, 628, 671, 670, 635, 634, 633, 0, 633, 0, 0, 417,
640, 628, 627, 636, 636, 655, 654, 653, 618, 617, 446, 659, 643, 646, 629, 641, 629, 628, 637, 637,
0, 622, 612, 615, 616, 615, 625, 0, 628, 624, 656, 655, 654, 619, 618, 0, 623, 613, 616, 617,
626, 622, 609, 642, 442, 0, 617, 620, 610, 611, 616, 626, 0, 629, 625, 627, 623, 610, 643, 438,
603, 610, 601, 624, 610, 606, 608, 606, 606, 605, 0, 618, 621, 611, 612, 604, 611, 602, 625, 611,
0, 593, 592, 602, 0, 624, 445, 0, 599, 602, 607, 609, 607, 607, 606, 0, 594, 593, 603, 0,
599, 584, 0, 600, 599, 583, 575, 583, 573, 581, 625, 450, 0, 600, 603, 600, 585, 0, 601, 600,
0, 578, 577, 600, 586, 584, 584, 577, 567, 570, 584, 576, 584, 574, 582, 0, 579, 578, 601, 587,
584, 568, 601, 579, 580, 577, 574, 586, 561, 575, 585, 585, 578, 568, 571, 585, 569, 602, 580, 581,
574, 558, 557, 556, 579, 565, 563, 563, 566, 561, 578, 575, 587, 562, 576, 575, 559, 558, 557, 580,
542, 541, 0, 571, 541, 569, 539, 543, 542, 575, 566, 564, 564, 567, 562, 543, 542, 0, 572, 542,
553, 550, 0, 554, 548, 551, 547, 549, 532, 527, 570, 540, 544, 543, 576, 554, 551, 0, 555, 548,
534, 516, 514, 507, 501, 489, 124, 0, 162, 250, 549, 539, 538, 519, 502, 515, 499, 162, 258, 258,
289, 307, 327, 0, 329, 340, 0, 0, 366, 0, 257, 290, 0, 298, 316, 363, 353, 369, 0, 359,
367, 0, 395, 396, 383, 382, 395, 401, 0, 398, 381, 0, 0, 392, 0, 396, 0, 404, 407, 396,
408, 405, 416, 443, 423, 0, 0, 437, 438, 0, 403, 406, 407, 0, 401, 411, 403, 420, 448, 428,
0, 439, 440, 426, 425, 428, 441, 433, 446, 447, 0, 0, 442, 443, 0, 0, 444, 445, 431, 430,
426, 427, 435, 0, 0, 451, 461, 433, 463, 455, 433, 446, 438, 451, 452, 431, 432, 440, 0, 0,
449, 437, 455, 449, 438, 439, 447, 0, 0, 478, 456, 466, 438, 468, 460, 454, 442, 460, 454, 443,
464, 462, 463, 0, 0, 467, 456, 462, 0, 463, 444, 452, 0, 0, 483, 469, 467, 468, 0, 0,
449, 472, 0, 460, 485, 0, 0, 475, 482, 467, 472, 461, 467, 0, 468, 454, 477, 0, 465, 490,
465, 466, 458, 475, 482, 483, 0, 481, 465, 501, 0, 0, 480, 487, 472, 470, 471, 463, 480, 487,
465, 496, 522, 470, 471, 0, 488, 490, 491, 482, 488, 0, 486, 470, 506, 470, 501, 527, 475, 476,
0, 505, 0, 0, 513, 0, 0, 0, 485, 486, 0, 493, 495, 496, 487, 0, 510, 0, 0, 518,
480, 0, 506, 482, 483, 0, 537, 0, 0, 510, 0, 0, 0, 490, 491, 485, 0, 511, 487, 488,
521, 513, 516, 0, 1090, 556, 562, 568, 574, 578, 0, 542, 0, 0, 515, 526, 518, 521, 0, 1095,
584, 585, 591, 594 561, 567, 573, 579, 583, 589, 590, 596, 599
} ; } ;
static const flex_int16_t yy_def[895] = static const flex_int16_t yy_def[900] =
{ 0, { 0,
885, 1, 885, 3, 885, 885, 885, 885, 885, 885, 890, 1, 890, 3, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
886, 885, 885, 885, 885, 885, 885, 887, 885, 885, 891, 890, 890, 890, 890, 890, 890, 892, 890, 890,
885, 887, 887, 887, 887, 887, 887, 887, 887, 887, 890, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 885, 885, 885, 885, 885, 885, 885, 892, 892, 892, 890, 890, 890, 890, 890, 890, 890,
888, 885, 885, 885, 885, 885, 885, 885, 885, 885, 893, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 889, 885, 890, 20, 886, 891, 885, 892, 885, 890, 894, 890, 895, 20, 891, 896, 890, 897, 890,
885, 885, 885, 885, 885, 885, 885, 887, 885, 885, 890, 890, 890, 890, 890, 890, 890, 892, 890, 890,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 885, 885, 888, 893, 892, 892, 892, 892, 892, 892, 892, 890, 890, 893,
885, 890, 894, 885, 885, 885, 891, 892, 885, 885, 898, 890, 895, 899, 890, 890, 890, 896, 897, 890,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 890, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 885, 893, 885, 892, 892, 892, 892, 892, 892, 892, 892, 892, 890,
894, 885, 885, 887, 887, 887, 887, 887, 887, 887, 898, 890, 899, 890, 890, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 887, 887, 887, 887, 887, 887, 892, 892, 892, 892, 892, 892, 892, 892, 892, 892,
887, 887, 887, 887, 0, 885, 885, 885, 885, 885, 892, 892, 892, 892, 892, 892, 892, 892, 892, 0,
885, 885, 885, 885 890, 890, 890, 890, 890, 890, 890, 890, 890
} ; } ;
static const flex_int16_t yy_nxt[1168] = static const flex_int16_t yy_nxt[1173] =
{ 0, { 0,
6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 21, 21, 21, 21, 16, 17, 18, 19, 20, 21, 21, 21, 21, 21,
...@@ -893,42 +869,42 @@ static const flex_int16_t yy_nxt[1168] = ...@@ -893,42 +869,42 @@ static const flex_int16_t yy_nxt[1168] =
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
58, 58, 58, 58, 63, 64, 65, 68, 70, 72, 58, 58, 58, 58, 63, 64, 65, 68, 70, 72,
72, 72, 72, 72, 72, 72, 72, 72, 72, 154, 72, 72, 72, 72, 72, 72, 72, 72, 72, 155,
74, 81, 86, 87, 71, 69, 89, 155, 66, 74, 74, 81, 86, 87, 71, 69, 89, 156, 66, 74,
157, 75, 75, 75, 75, 75, 75, 75, 75, 76, 158, 75, 75, 75, 75, 75, 75, 75, 75, 76,
76, 82, 77, 83, 84, 791, 90, 95, 92, 96, 76, 82, 77, 83, 84, 195, 90, 95, 92, 96,
78, 77, 127, 97, 98, 106, 128, 107, 99, 78, 78, 77, 97, 98, 99, 107, 196, 108, 100, 78,
79, 77, 93, 94, 100, 102, 108, 101, 174, 103, 79, 77, 93, 94, 101, 103, 109, 102, 128, 104,
77, 115, 175, 109, 104, 78, 792, 158, 125, 116, 77, 116, 129, 110, 105, 78, 792, 159, 126, 117,
105, 110, 118, 111, 78, 119, 112, 79, 120, 121, 106, 111, 119, 112, 78, 120, 113, 79, 121, 122,
117, 126, 113, 122, 123, 129, 124, 132, 193, 136, 118, 127, 114, 123, 124, 130, 125, 133, 265, 137,
143, 151, 166, 144, 166, 152, 137, 138, 130, 194, 144, 152, 167, 145, 167, 153, 138, 139, 131, 175,
139, 145, 133, 574, 153, 134, 140, 141, 146, 142, 140, 146, 134, 176, 154, 135, 141, 142, 147, 143,
147, 160, 161, 575, 148, 163, 164, 214, 149, 165, 148, 161, 162, 265, 149, 164, 165, 216, 150, 166,
885, 150, 182, 74, 195, 215, 183, 184, 222, 205, 890, 151, 184, 74, 197, 217, 185, 186, 224, 207,
160, 161, 206, 207, 163, 164, 208, 196, 209, 227, 161, 162, 208, 209, 164, 165, 210, 198, 211, 229,
219, 223, 235, 224, 165, 77, 220, 885, 231, 237, 221, 225, 237, 226, 166, 77, 222, 890, 233, 239,
244, 245, 246, 78, 793, 228, 229, 236, 248, 794, 246, 247, 248, 78, 793, 230, 231, 238, 250, 794,
247, 232, 238, 253, 77, 254, 249, 258, 263, 258, 249, 234, 240, 255, 77, 256, 251, 260, 795, 260,
163, 164, 260, 885, 260, 885, 277, 278, 78, 167, 164, 165, 262, 890, 262, 890, 280, 281, 78, 168,
167, 167, 167, 167, 167, 167, 167, 167, 167, 163, 168, 168, 168, 168, 168, 168, 168, 168, 168, 164,
164, 271, 342, 263, 309, 310, 311, 323, 795, 262, 165, 274, 312, 313, 314, 345, 326, 401, 402, 264,
343, 324, 397, 398, 272, 349, 350, 351, 259, 259, 327, 796, 797, 346, 275, 352, 353, 354, 261, 261,
259, 259, 259, 259, 259, 259, 259, 259, 262, 885, 261, 261, 261, 261, 261, 261, 261, 261, 264, 890,
796, 885, 261, 261, 261, 261, 261, 261, 261, 261, 798, 890, 263, 263, 263, 263, 263, 263, 263, 263,
261, 261, 885, 797, 885, 362, 363, 364, 374, 375, 263, 263, 890, 799, 890, 366, 367, 368, 378, 379,
376, 382, 383, 384, 798, 161, 386, 387, 388, 399, 380, 386, 387, 388, 800, 162, 390, 391, 392, 403,
400, 401, 438, 439, 440, 460, 461, 462, 164, 472, 404, 405, 442, 443, 444, 465, 466, 467, 165, 477,
473, 474, 799, 800, 161, 475, 476, 477, 478, 479, 478, 479, 801, 802, 162, 480, 481, 482, 483, 484,
480, 463, 464, 522, 523, 524, 576, 164, 550, 551, 485, 468, 469, 527, 528, 529, 579, 165, 555, 556,
552, 592, 593, 594, 801, 802, 577, 803, 804, 525, 557, 581, 597, 598, 599, 803, 580, 676, 804, 530,
526, 625, 626, 627, 553, 554, 671, 595, 596, 805, 531, 582, 805, 806, 558, 559, 807, 677, 600, 601,
597, 646, 647, 648, 673, 806, 672, 628, 629, 807, 808, 602, 630, 631, 632, 651, 652, 653, 708, 809,
808, 674, 703, 675, 676, 724, 809, 649, 650, 704, 810, 811, 812, 813, 814, 709, 678, 710, 633, 634,
810, 705, 725, 811, 726, 812, 813, 814, 815, 816, 729, 654, 655, 679, 815, 680, 681, 730, 816, 731,
817, 818, 819, 820, 821, 822, 823, 824, 825, 826, 817, 818, 819, 820, 821, 822, 823, 824, 825, 826,
827, 828, 829, 830, 831, 832, 833, 834, 835, 836, 827, 828, 829, 830, 831, 832, 833, 834, 835, 836,
...@@ -936,77 +912,78 @@ static const flex_int16_t yy_nxt[1168] = ...@@ -936,77 +912,78 @@ static const flex_int16_t yy_nxt[1168] =
847, 848, 849, 850, 851, 852, 853, 854, 855, 856, 847, 848, 849, 850, 851, 852, 853, 854, 855, 856,
857, 858, 859, 860, 861, 862, 863, 864, 865, 866, 857, 858, 859, 860, 861, 862, 863, 864, 865, 866,
867, 868, 869, 870, 871, 872, 873, 874, 875, 876, 867, 868, 869, 870, 871, 872, 873, 874, 875, 876,
877, 878, 879, 880, 881, 882, 883, 884, 76, 76, 877, 878, 879, 880, 881, 882, 883, 884, 885, 886,
790, 76, 789, 788, 76, 88, 88, 88, 88, 88, 887, 888, 889, 76, 76, 791, 76, 790, 789, 76,
88, 159, 159, 159, 159, 159, 159, 72, 787, 72, 88, 88, 88, 88, 88, 88, 160, 160, 160, 160,
72, 162, 786, 162, 162, 167, 785, 167, 168, 168, 160, 160, 72, 788, 72, 72, 163, 787, 163, 163,
168, 168, 259, 784, 259, 261, 783, 261, 782, 781, 168, 786, 168, 169, 169, 169, 169, 261, 785, 261,
780, 779, 778, 777, 776, 775, 774, 773, 772, 771, 263, 784, 263, 783, 782, 781, 780, 779, 778, 777,
770, 769, 768, 767, 766, 765, 764, 763, 762, 761, 776, 775, 774, 773, 772, 771, 770, 769, 768, 767,
760, 759, 758, 757, 756, 755, 754, 753, 752, 751, 766, 765, 764, 763, 762, 761, 760, 759, 758, 757,
750, 749, 748, 747, 746, 745, 744, 743, 742, 741, 756, 755, 754, 753, 752, 751, 750, 749, 748, 747,
740, 739, 738, 737, 736, 735, 734, 733, 732, 731, 746, 745, 744, 743, 742, 741, 740, 739, 738, 737,
730, 729, 728, 727, 723, 722, 721, 720, 719, 718, 736, 735, 734, 733, 732, 728, 727, 726, 725, 724,
717, 716, 715, 714, 713, 712, 711, 710, 709, 708, 723, 722, 721, 720, 719, 718, 717, 716, 715, 714,
707, 706, 702, 701, 700, 699, 698, 697, 696, 695, 713, 712, 711, 707, 706, 705, 704, 703, 702, 701,
694, 693, 692, 691, 690, 689, 688, 687, 686, 685, 700, 699, 698, 697, 696, 695, 694, 693, 692, 691,
684, 683, 682, 681, 680, 679, 678, 677, 670, 669, 690, 689, 688, 687, 686, 685, 684, 683, 682, 675,
668, 667, 666, 665, 664, 663, 662, 661, 660, 659, 674, 673, 672, 671, 670, 669, 668, 667, 666, 665,
658, 657, 656, 655, 654, 653, 652, 651, 645, 644, 664, 663, 662, 661, 660, 659, 658, 657, 656, 650,
643, 642, 641, 640, 639, 638, 637, 636, 635, 634, 649, 648, 647, 646, 645, 644, 643, 642, 641, 640,
633, 632, 631, 630, 624, 623, 622, 621, 620, 619, 639, 638, 637, 636, 635, 629, 628, 627, 626, 625,
618, 617, 616, 615, 614, 613, 612, 611, 610, 609, 624, 623, 622, 621, 620, 619, 618, 617, 616, 615,
608, 607, 606, 605, 604, 603, 602, 601, 600, 599, 614, 613, 612, 611, 610, 609, 608, 607, 606, 605,
598, 591, 590, 589, 588, 587, 586, 585, 584, 583, 604, 603, 596, 595, 594, 593, 592, 591, 590, 589,
582, 581, 580, 579, 578, 573, 572, 571, 570, 569, 588, 587, 586, 585, 584, 583, 578, 577, 576, 575,
568, 567, 566, 565, 564, 563, 562, 561, 560, 559, 574, 573, 572, 571, 570, 569, 568, 567, 566, 565,
558, 557, 556, 555, 549, 548, 547, 546, 545, 544, 564, 563, 562, 561, 560, 554, 553, 552, 551, 550,
543, 542, 541, 540, 539, 538, 537, 536, 535, 534, 549, 548, 547, 546, 545, 544, 543, 542, 541, 540,
533, 532, 531, 530, 529, 528, 527, 521, 520, 519, 539, 538, 537, 536, 535, 534, 533, 532, 526, 525,
518, 517, 516, 515, 514, 513, 512, 511, 510, 509, 524, 523, 522, 521, 520, 519, 518, 517, 516, 515,
508, 507, 506, 505, 504, 503, 502, 501, 500, 499, 514, 513, 512, 511, 510, 509, 508, 507, 506, 505,
498, 497, 496, 495, 494, 493, 492, 491, 490, 489, 504, 503, 502, 501, 500, 499, 498, 497, 496, 495,
488, 487, 486, 485, 484, 483, 482, 481, 471, 470, 494, 493, 492, 491, 490, 489, 488, 487, 486, 476,
469, 468, 467, 466, 465, 459, 458, 457, 456, 455, 475, 474, 473, 472, 471, 470, 464, 463, 462, 461,
454, 453, 452, 451, 450, 449, 448, 447, 446, 445, 460, 459, 458, 457, 456, 455, 454, 453, 452, 451,
444, 443, 442, 441, 437, 436, 435, 434, 433, 432, 450, 449, 448, 447, 446, 445, 441, 440, 439, 438,
431, 430, 429, 428, 427, 426, 425, 424, 423, 422, 437, 436, 435, 434, 433, 432, 431, 430, 429, 428,
421, 420, 419, 418, 417, 416, 415, 414, 413, 412, 427, 426, 425, 424, 423, 422, 421, 420, 419, 418,
411, 410, 409, 408, 407, 406, 405, 404, 403, 402, 417, 416, 415, 414, 413, 412, 411, 410, 409, 408,
396, 395, 394, 393, 392, 391, 390, 389, 385, 381, 407, 406, 400, 399, 398, 397, 396, 395, 394, 393,
380, 379, 378, 377, 373, 372, 371, 370, 369, 368, 389, 385, 384, 383, 382, 381, 377, 376, 375, 374,
367, 366, 365, 361, 360, 359, 358, 357, 356, 355, 373, 372, 371, 370, 369, 365, 364, 363, 362, 361,
354, 353, 352, 348, 347, 346, 345, 344, 341, 340, 360, 359, 358, 357, 356, 355, 351, 350, 349, 348,
339, 338, 337, 336, 335, 334, 333, 332, 331, 330, 347, 344, 343, 342, 341, 340, 339, 338, 337, 336,
329, 328, 327, 326, 325, 322, 321, 320, 319, 318, 335, 334, 333, 332, 331, 330, 329, 328, 325, 324,
317, 316, 315, 314, 313, 312, 308, 307, 306, 305, 323, 322, 321, 320, 319, 318, 317, 316, 315, 311,
304, 303, 302, 301, 300, 299, 298, 297, 296, 295, 310, 309, 308, 307, 306, 305, 304, 303, 302, 301,
294, 293, 292, 291, 290, 289, 288, 287, 286, 285, 300, 299, 298, 297, 296, 295, 294, 293, 292, 291,
284, 283, 282, 281, 280, 279, 276, 275, 274, 273, 290, 289, 288, 287, 286, 285, 284, 283, 282, 279,
270, 269, 268, 267, 266, 265, 264, 257, 256, 255, 278, 277, 276, 273, 272, 271, 270, 269, 268, 267,
252, 251, 250, 243, 242, 241, 240, 239, 234, 233, 266, 259, 258, 257, 254, 253, 252, 245, 244, 243,
230, 226, 225, 221, 218, 217, 216, 213, 212, 211, 242, 241, 236, 235, 232, 228, 227, 223, 220, 219,
210, 204, 203, 202, 201, 200, 199, 198, 197, 192, 218, 215, 214, 213, 212, 206, 205, 204, 203, 202,
191, 190, 189, 188, 187, 186, 185, 181, 180, 179, 201, 200, 199, 194, 193, 192, 191, 190, 189, 188,
178, 177, 176, 173, 172, 171, 170, 169, 156, 135, 187, 183, 182, 181, 180, 179, 178, 177, 174, 173,
131, 114, 91, 85, 80, 73, 67, 62, 885, 5, 172, 171, 170, 157, 136, 132, 115, 91, 85, 80,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 73, 67, 62, 890, 5, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
890, 890
} ; } ;
static const flex_int16_t yy_chk[1168] = static const flex_int16_t yy_chk[1173] =
{ 0, { 0,
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,
...@@ -1028,119 +1005,120 @@ static const flex_int16_t yy_chk[1168] = ...@@ -1028,119 +1005,120 @@ static const flex_int16_t yy_chk[1168] =
18, 18, 18, 18, 18, 18, 18, 18, 18, 52, 18, 18, 18, 18, 18, 18, 18, 18, 18, 52,
21, 24, 26, 26, 17, 15, 31, 52, 11, 20, 21, 24, 26, 26, 17, 15, 31, 52, 11, 20,
55, 20, 20, 20, 20, 20, 20, 20, 20, 20, 55, 20, 20, 20, 20, 20, 20, 20, 20, 20,
20, 24, 21, 24, 24, 757, 31, 34, 33, 34, 20, 24, 21, 24, 24, 111, 31, 34, 33, 34,
21, 20, 43, 34, 35, 37, 43, 37, 35, 20, 21, 20, 34, 34, 35, 37, 111, 37, 35, 20,
20, 21, 33, 33, 35, 36, 37, 35, 94, 36, 20, 21, 33, 33, 35, 36, 37, 35, 43, 36,
20, 40, 94, 38, 36, 21, 759, 55, 42, 40, 20, 40, 43, 38, 36, 21, 758, 55, 42, 40,
36, 38, 41, 38, 20, 41, 38, 20, 41, 41, 36, 38, 41, 38, 20, 41, 38, 20, 41, 41,
40, 42, 38, 41, 41, 44, 41, 46, 110, 48, 40, 42, 38, 41, 41, 44, 41, 46, 169, 48,
49, 51, 77, 49, 77, 51, 48, 48, 44, 110, 49, 51, 77, 49, 77, 51, 48, 48, 44, 94,
48, 49, 46, 527, 51, 46, 48, 48, 49, 48, 48, 49, 46, 94, 51, 46, 48, 48, 49, 48,
50, 72, 72, 527, 50, 74, 74, 126, 50, 75, 50, 72, 72, 169, 50, 74, 74, 127, 50, 75,
75, 50, 101, 76, 111, 126, 101, 101, 132, 121, 75, 50, 102, 76, 112, 127, 102, 102, 133, 122,
72, 72, 121, 121, 74, 74, 121, 111, 121, 135, 72, 72, 122, 122, 74, 74, 122, 112, 122, 136,
130, 132, 140, 132, 75, 76, 130, 75, 137, 141, 131, 133, 141, 133, 75, 76, 131, 75, 138, 142,
147, 147, 148, 76, 760, 135, 135, 140, 149, 761, 148, 148, 149, 76, 759, 136, 136, 141, 150, 760,
148, 137, 141, 153, 76, 153, 149, 160, 168, 160, 149, 138, 142, 154, 76, 154, 150, 161, 761, 161,
162, 162, 163, 167, 163, 167, 184, 184, 76, 166, 163, 163, 164, 168, 164, 168, 186, 186, 76, 167,
166, 166, 166, 166, 166, 166, 166, 166, 166, 162, 167, 167, 167, 167, 167, 167, 167, 167, 167, 163,
162, 179, 246, 168, 216, 216, 216, 228, 762, 167, 163, 181, 218, 218, 218, 248, 230, 307, 307, 168,
246, 228, 304, 304, 179, 252, 252, 252, 258, 258, 230, 762, 764, 248, 181, 254, 254, 254, 260, 260,
258, 258, 258, 258, 258, 258, 258, 258, 167, 259, 260, 260, 260, 260, 260, 260, 260, 260, 168, 261,
763, 259, 260, 260, 260, 260, 260, 260, 260, 260, 765, 261, 262, 262, 262, 262, 262, 262, 262, 262,
260, 260, 261, 765, 261, 270, 270, 270, 282, 282, 262, 262, 263, 766, 263, 273, 273, 273, 285, 285,
282, 291, 291, 291, 766, 259, 295, 295, 295, 305, 285, 294, 294, 294, 767, 261, 298, 298, 298, 308,
305, 305, 347, 347, 347, 390, 390, 390, 261, 403, 308, 308, 350, 350, 350, 394, 394, 394, 263, 407,
403, 403, 769, 771, 259, 404, 404, 404, 405, 405, 407, 407, 768, 770, 261, 408, 408, 408, 409, 409,
405, 390, 390, 459, 459, 459, 528, 261, 505, 505, 409, 394, 394, 464, 464, 464, 532, 263, 510, 510,
505, 546, 546, 546, 773, 774, 528, 775, 776, 459, 510, 533, 551, 551, 551, 771, 532, 640, 774, 464,
459, 582, 582, 582, 505, 505, 635, 546, 546, 777, 464, 533, 776, 778, 510, 510, 779, 640, 551, 551,
546, 606, 606, 606, 636, 778, 635, 582, 582, 780, 780, 551, 587, 587, 587, 611, 611, 611, 670, 781,
781, 636, 665, 636, 636, 687, 782, 606, 606, 665, 782, 783, 785, 786, 787, 670, 641, 670, 587, 587,
783, 665, 687, 784, 687, 785, 788, 789, 792, 793, 692, 611, 611, 641, 788, 641, 641, 692, 789, 692,
794, 795, 796, 797, 798, 799, 800, 801, 802, 803, 790, 793, 794, 797, 798, 799, 800, 801, 802, 803,
806, 807, 808, 809, 810, 811, 812, 813, 814, 815, 804, 805, 806, 807, 808, 811, 812, 813, 814, 815,
816, 817, 820, 821, 822, 823, 826, 827, 828, 830, 816, 817, 818, 819, 820, 821, 822, 825, 826, 827,
831, 832, 834, 835, 838, 839, 840, 841, 842, 843, 828, 831, 832, 833, 835, 836, 837, 839, 840, 843,
844, 845, 846, 848, 849, 850, 851, 852, 853, 854, 844, 845, 846, 847, 848, 849, 850, 851, 853, 854,
855, 857, 858, 859, 860, 862, 865, 869, 870, 871, 855, 856, 857, 858, 859, 860, 862, 863, 864, 865,
873, 874, 875, 877, 880, 881, 882, 883, 886, 886, 867, 870, 874, 875, 876, 878, 879, 880, 882, 885,
756, 886, 755, 754, 886, 887, 887, 887, 887, 887, 886, 887, 888, 891, 891, 757, 891, 756, 755, 891,
887, 888, 888, 888, 888, 888, 888, 889, 753, 889, 892, 892, 892, 892, 892, 892, 893, 893, 893, 893,
889, 890, 752, 890, 890, 891, 751, 891, 892, 892, 893, 893, 894, 754, 894, 894, 895, 753, 895, 895,
892, 892, 893, 750, 893, 894, 749, 894, 748, 747, 896, 752, 896, 897, 897, 897, 897, 898, 751, 898,
746, 745, 744, 742, 741, 740, 739, 738, 737, 736, 899, 750, 899, 749, 747, 746, 745, 744, 743, 742,
735, 734, 732, 731, 730, 729, 728, 727, 726, 725, 741, 740, 739, 737, 736, 735, 734, 733, 732, 731,
724, 723, 722, 721, 720, 719, 718, 717, 716, 715, 730, 729, 728, 727, 726, 725, 724, 723, 722, 721,
714, 713, 712, 711, 710, 709, 708, 707, 706, 705, 720, 719, 718, 717, 716, 715, 714, 713, 712, 711,
704, 703, 702, 700, 699, 698, 697, 696, 695, 694, 710, 709, 708, 707, 705, 704, 703, 702, 701, 700,
692, 691, 690, 689, 686, 684, 683, 682, 680, 679, 699, 697, 696, 695, 694, 691, 689, 688, 687, 685,
678, 677, 676, 675, 674, 673, 672, 671, 670, 669, 684, 683, 682, 681, 680, 679, 678, 677, 676, 675,
668, 667, 664, 663, 662, 661, 660, 659, 657, 656, 674, 673, 672, 669, 668, 667, 666, 665, 664, 662,
655, 654, 653, 652, 650, 649, 648, 647, 646, 645, 661, 660, 659, 658, 657, 655, 654, 653, 652, 651,
644, 643, 642, 641, 640, 639, 638, 637, 632, 630, 650, 649, 648, 647, 646, 645, 644, 643, 642, 637,
629, 628, 627, 626, 625, 621, 620, 619, 618, 617, 635, 634, 633, 632, 631, 630, 626, 625, 624, 623,
616, 615, 614, 613, 611, 610, 609, 608, 604, 603, 622, 621, 620, 619, 618, 616, 615, 614, 613, 609,
601, 600, 598, 597, 596, 595, 594, 593, 592, 588, 608, 606, 605, 603, 602, 601, 600, 599, 598, 597,
587, 586, 584, 583, 581, 580, 579, 578, 577, 576, 593, 592, 591, 589, 588, 586, 585, 584, 583, 582,
575, 574, 573, 572, 570, 569, 564, 563, 562, 561, 581, 580, 579, 578, 577, 575, 574, 569, 568, 567,
560, 559, 557, 556, 554, 553, 552, 551, 550, 548, 566, 565, 564, 562, 561, 559, 558, 557, 556, 555,
547, 545, 544, 543, 542, 541, 540, 539, 538, 535, 553, 552, 550, 549, 548, 547, 546, 545, 544, 543,
534, 533, 532, 531, 530, 526, 525, 524, 523, 522, 540, 539, 538, 537, 536, 535, 531, 530, 529, 528,
521, 518, 517, 516, 515, 514, 513, 512, 511, 510, 527, 526, 523, 522, 521, 520, 519, 518, 517, 516,
509, 508, 507, 506, 504, 503, 500, 494, 492, 491, 515, 514, 513, 512, 511, 509, 508, 505, 499, 497,
490, 488, 487, 484, 483, 482, 481, 470, 469, 468, 496, 495, 493, 492, 489, 488, 487, 486, 475, 474,
467, 466, 464, 463, 462, 461, 460, 457, 455, 454, 473, 472, 471, 469, 468, 467, 466, 465, 462, 460,
453, 451, 450, 449, 448, 446, 445, 444, 442, 441, 459, 458, 456, 455, 453, 452, 450, 449, 448, 446,
436, 435, 433, 432, 431, 430, 429, 428, 427, 426, 445, 440, 439, 437, 436, 435, 434, 433, 432, 431,
425, 424, 423, 421, 420, 419, 418, 417, 416, 415, 430, 429, 428, 427, 425, 424, 423, 422, 421, 420,
414, 412, 411, 410, 409, 408, 407, 406, 402, 398, 419, 418, 416, 415, 414, 413, 412, 411, 410, 406,
397, 396, 395, 394, 391, 389, 379, 377, 373, 372, 402, 401, 400, 399, 398, 395, 393, 383, 381, 377,
371, 370, 368, 367, 365, 360, 359, 358, 357, 356, 376, 375, 374, 372, 371, 369, 365, 363, 362, 361,
355, 354, 353, 348, 346, 345, 344, 343, 342, 340, 360, 359, 358, 357, 356, 351, 349, 348, 347, 346,
339, 336, 335, 334, 333, 332, 331, 330, 329, 328, 345, 343, 342, 339, 338, 337, 336, 335, 334, 333,
327, 326, 325, 324, 323, 322, 321, 320, 319, 318, 332, 331, 330, 329, 328, 327, 326, 325, 324, 323,
317, 316, 315, 314, 313, 312, 311, 310, 309, 306, 322, 321, 320, 319, 318, 317, 316, 315, 314, 313,
303, 302, 301, 300, 299, 298, 297, 296, 294, 290, 312, 309, 306, 305, 304, 303, 302, 301, 300, 299,
288, 287, 286, 285, 281, 280, 279, 278, 277, 276, 297, 293, 291, 290, 289, 288, 284, 283, 282, 281,
275, 274, 273, 269, 267, 266, 265, 264, 257, 256, 280, 279, 278, 277, 276, 272, 271, 269, 268, 267,
255, 254, 253, 251, 250, 249, 248, 247, 245, 244, 266, 259, 258, 257, 256, 255, 253, 252, 251, 250,
243, 242, 241, 240, 239, 238, 237, 236, 235, 234, 249, 247, 246, 245, 244, 243, 242, 241, 240, 239,
233, 232, 231, 230, 229, 227, 226, 225, 224, 223, 238, 237, 236, 235, 234, 233, 232, 231, 229, 228,
222, 221, 220, 219, 218, 217, 215, 214, 213, 212, 227, 226, 225, 224, 223, 222, 221, 220, 219, 217,
211, 210, 209, 208, 207, 206, 205, 204, 203, 202, 216, 215, 214, 213, 212, 211, 210, 209, 208, 207,
201, 200, 199, 198, 196, 195, 194, 193, 192, 191, 206, 205, 204, 203, 202, 201, 200, 198, 197, 196,
190, 189, 188, 187, 186, 185, 183, 182, 181, 180, 195, 194, 193, 192, 191, 190, 189, 188, 187, 185,
178, 177, 176, 175, 174, 172, 171, 156, 155, 154, 184, 183, 182, 180, 179, 178, 177, 176, 175, 173,
152, 151, 150, 146, 145, 144, 143, 142, 139, 138, 172, 157, 156, 155, 153, 152, 151, 147, 146, 145,
136, 134, 133, 131, 129, 128, 127, 125, 124, 123, 144, 143, 140, 139, 137, 135, 134, 132, 130, 129,
122, 120, 119, 117, 116, 115, 114, 113, 112, 109, 128, 126, 125, 124, 123, 121, 120, 118, 117, 116,
108, 107, 106, 105, 104, 103, 102, 100, 99, 98, 115, 114, 113, 110, 109, 108, 107, 106, 105, 104,
97, 96, 95, 93, 92, 91, 87, 83, 53, 47, 103, 101, 100, 99, 98, 97, 96, 95, 93, 92,
45, 39, 32, 25, 22, 19, 14, 9, 5, 885, 91, 87, 83, 53, 47, 45, 39, 32, 25, 22,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 19, 14, 9, 5, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885, 885, 885, 885, 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
885, 885, 885, 885, 885, 885, 885 890, 890, 890, 890, 890, 890, 890, 890, 890, 890,
890, 890
} ; } ;
/* Table of booleans, true if rule could match eol. */ /* Table of booleans, true if rule could match eol. */
static const flex_int32_t yy_rule_can_match_eol[247] = static const flex_int32_t yy_rule_can_match_eol[248] =
{ 0, { 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
...@@ -1154,7 +1132,7 @@ static const flex_int32_t yy_rule_can_match_eol[247] = ...@@ -1154,7 +1132,7 @@ static const flex_int32_t yy_rule_can_match_eol[247] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 1, 0, 0, }; 0, 0, 0, 0, 0, 1, 0, 0, };
/* The intent behind this definition is that it'll catch /* The intent behind this definition is that it'll catch
* any uses of REJECT which flex missed. * any uses of REJECT which flex missed.
...@@ -1650,13 +1628,13 @@ yy_match: ...@@ -1650,13 +1628,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 886 ) if ( yy_current_state >= 891 )
yy_c = yy_meta[yy_c]; yy_c = yy_meta[yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp; ++yy_cp;
} }
while ( yy_current_state != 885 ); while ( yy_current_state != 890 );
yy_cp = yyg->yy_last_accepting_cpos; yy_cp = yyg->yy_last_accepting_cpos;
yy_current_state = yyg->yy_last_accepting_state; yy_current_state = yyg->yy_last_accepting_state;
...@@ -1725,311 +1703,311 @@ YY_RULE_SETUP ...@@ -1725,311 +1703,311 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 9: case 9:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_keyword_ES3_reserved(context, VARYING); } { return ES2_and_ES3_ident_ES3_1_keyword(context, BUFFER); }
YY_BREAK YY_BREAK
case 10: case 10:
YY_RULE_SETUP YY_RULE_SETUP
{ return BREAK; } { return ES2_keyword_ES3_reserved(context, VARYING); }
YY_BREAK YY_BREAK
case 11: case 11:
YY_RULE_SETUP YY_RULE_SETUP
{ return CONTINUE; } { return BREAK; }
YY_BREAK YY_BREAK
case 12: case 12:
YY_RULE_SETUP YY_RULE_SETUP
{ return DO; } { return CONTINUE; }
YY_BREAK YY_BREAK
case 13: case 13:
YY_RULE_SETUP YY_RULE_SETUP
{ return FOR; } { return DO; }
YY_BREAK YY_BREAK
case 14: case 14:
YY_RULE_SETUP YY_RULE_SETUP
{ return WHILE; } { return FOR; }
YY_BREAK YY_BREAK
case 15: case 15:
YY_RULE_SETUP YY_RULE_SETUP
{ return IF; } { return WHILE; }
YY_BREAK YY_BREAK
case 16: case 16:
YY_RULE_SETUP YY_RULE_SETUP
{ return ELSE; } { return IF; }
YY_BREAK YY_BREAK
case 17: case 17:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_reserved_ES3_keyword(context, SWITCH); } { return ELSE; }
YY_BREAK YY_BREAK
case 18: case 18:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, CASE); } { return ES2_reserved_ES3_keyword(context, SWITCH); }
YY_BREAK YY_BREAK
case 19: case 19:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_reserved_ES3_keyword(context, DEFAULT); } { return ES2_ident_ES3_keyword(context, CASE); }
YY_BREAK YY_BREAK
case 20: case 20:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, CENTROID); } { return ES2_reserved_ES3_keyword(context, DEFAULT); }
YY_BREAK YY_BREAK
case 21: case 21:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_reserved_ES3_keyword(context, FLAT); } { return ES2_ident_ES3_keyword(context, CENTROID); }
YY_BREAK YY_BREAK
case 22: case 22:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, SMOOTH); } { return ES2_reserved_ES3_keyword(context, FLAT); }
YY_BREAK YY_BREAK
case 23: case 23:
YY_RULE_SETUP YY_RULE_SETUP
{ return IN_QUAL; } { return ES2_ident_ES3_keyword(context, SMOOTH); }
YY_BREAK YY_BREAK
case 24: case 24:
YY_RULE_SETUP YY_RULE_SETUP
{ return OUT_QUAL; } { return IN_QUAL; }
YY_BREAK YY_BREAK
case 25: case 25:
YY_RULE_SETUP YY_RULE_SETUP
{ return INOUT_QUAL; } { return OUT_QUAL; }
YY_BREAK YY_BREAK
case 26: case 26:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_and_ES3_ident_ES3_1_keyword(context, SHARED); } { return INOUT_QUAL; }
YY_BREAK YY_BREAK
case 27: case 27:
YY_RULE_SETUP YY_RULE_SETUP
{ return FLOAT_TYPE; } { return ES2_and_ES3_ident_ES3_1_keyword(context, SHARED); }
YY_BREAK YY_BREAK
case 28: case 28:
YY_RULE_SETUP YY_RULE_SETUP
{ return INT_TYPE; } { return FLOAT_TYPE; }
YY_BREAK YY_BREAK
case 29: case 29:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, UINT_TYPE); } { return INT_TYPE; }
YY_BREAK YY_BREAK
case 30: case 30:
YY_RULE_SETUP YY_RULE_SETUP
{ return VOID_TYPE; } { return ES2_ident_ES3_keyword(context, UINT_TYPE); }
YY_BREAK YY_BREAK
case 31: case 31:
YY_RULE_SETUP YY_RULE_SETUP
{ return BOOL_TYPE; } { return VOID_TYPE; }
YY_BREAK YY_BREAK
case 32: case 32:
YY_RULE_SETUP YY_RULE_SETUP
{ yylval->lex.b = true; return BOOLCONSTANT; } { return BOOL_TYPE; }
YY_BREAK YY_BREAK
case 33: case 33:
YY_RULE_SETUP YY_RULE_SETUP
{ yylval->lex.b = false; return BOOLCONSTANT; } { yylval->lex.b = true; return BOOLCONSTANT; }
YY_BREAK YY_BREAK
case 34: case 34:
YY_RULE_SETUP YY_RULE_SETUP
{ return DISCARD; } { yylval->lex.b = false; return BOOLCONSTANT; }
YY_BREAK YY_BREAK
case 35: case 35:
YY_RULE_SETUP YY_RULE_SETUP
{ return RETURN; } { return DISCARD; }
YY_BREAK YY_BREAK
case 36: case 36:
YY_RULE_SETUP YY_RULE_SETUP
{ return MATRIX2; } { return RETURN; }
YY_BREAK YY_BREAK
case 37: case 37:
YY_RULE_SETUP YY_RULE_SETUP
{ return MATRIX3; } { return MATRIX2; }
YY_BREAK YY_BREAK
case 38: case 38:
YY_RULE_SETUP YY_RULE_SETUP
{ return MATRIX4; } { return MATRIX3; }
YY_BREAK YY_BREAK
case 39: case 39:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, MATRIX2); } { return MATRIX4; }
YY_BREAK YY_BREAK
case 40: case 40:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, MATRIX3); } { return ES2_ident_ES3_keyword(context, MATRIX2); }
YY_BREAK YY_BREAK
case 41: case 41:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, MATRIX4); } { return ES2_ident_ES3_keyword(context, MATRIX3); }
YY_BREAK YY_BREAK
case 42: case 42:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, MATRIX2x3); } { return ES2_ident_ES3_keyword(context, MATRIX4); }
YY_BREAK YY_BREAK
case 43: case 43:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, MATRIX3x2); } { return ES2_ident_ES3_keyword(context, MATRIX2x3); }
YY_BREAK YY_BREAK
case 44: case 44:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, MATRIX2x4); } { return ES2_ident_ES3_keyword(context, MATRIX3x2); }
YY_BREAK YY_BREAK
case 45: case 45:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, MATRIX4x2); } { return ES2_ident_ES3_keyword(context, MATRIX2x4); }
YY_BREAK YY_BREAK
case 46: case 46:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, MATRIX3x4); } { return ES2_ident_ES3_keyword(context, MATRIX4x2); }
YY_BREAK YY_BREAK
case 47: case 47:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, MATRIX4x3); } { return ES2_ident_ES3_keyword(context, MATRIX3x4); }
YY_BREAK YY_BREAK
case 48: case 48:
YY_RULE_SETUP YY_RULE_SETUP
{ return VEC2; } { return ES2_ident_ES3_keyword(context, MATRIX4x3); }
YY_BREAK YY_BREAK
case 49: case 49:
YY_RULE_SETUP YY_RULE_SETUP
{ return VEC3; } { return VEC2; }
YY_BREAK YY_BREAK
case 50: case 50:
YY_RULE_SETUP YY_RULE_SETUP
{ return VEC4; } { return VEC3; }
YY_BREAK YY_BREAK
case 51: case 51:
YY_RULE_SETUP YY_RULE_SETUP
{ return IVEC2; } { return VEC4; }
YY_BREAK YY_BREAK
case 52: case 52:
YY_RULE_SETUP YY_RULE_SETUP
{ return IVEC3; } { return IVEC2; }
YY_BREAK YY_BREAK
case 53: case 53:
YY_RULE_SETUP YY_RULE_SETUP
{ return IVEC4; } { return IVEC3; }
YY_BREAK YY_BREAK
case 54: case 54:
YY_RULE_SETUP YY_RULE_SETUP
{ return BVEC2; } { return IVEC4; }
YY_BREAK YY_BREAK
case 55: case 55:
YY_RULE_SETUP YY_RULE_SETUP
{ return BVEC3; } { return BVEC2; }
YY_BREAK YY_BREAK
case 56: case 56:
YY_RULE_SETUP YY_RULE_SETUP
{ return BVEC4; } { return BVEC3; }
YY_BREAK YY_BREAK
case 57: case 57:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, UVEC2); } { return BVEC4; }
YY_BREAK YY_BREAK
case 58: case 58:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, UVEC3); } { return ES2_ident_ES3_keyword(context, UVEC2); }
YY_BREAK YY_BREAK
case 59: case 59:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, UVEC4); } { return ES2_ident_ES3_keyword(context, UVEC3); }
YY_BREAK YY_BREAK
case 60: case 60:
YY_RULE_SETUP YY_RULE_SETUP
{ return SAMPLER2D; } { return ES2_ident_ES3_keyword(context, UVEC4); }
YY_BREAK YY_BREAK
case 61: case 61:
YY_RULE_SETUP YY_RULE_SETUP
{ return SAMPLERCUBE; } { return SAMPLER2D; }
YY_BREAK YY_BREAK
case 62: case 62:
YY_RULE_SETUP YY_RULE_SETUP
{ return SAMPLER_EXTERNAL_OES; } { return SAMPLERCUBE; }
YY_BREAK YY_BREAK
case 63: case 63:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_reserved_ES3_keyword(context, SAMPLER3D); } { return SAMPLER_EXTERNAL_OES; }
YY_BREAK YY_BREAK
case 64: case 64:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); } { return ES2_reserved_ES3_keyword(context, SAMPLER3D); }
YY_BREAK YY_BREAK
case 65: case 65:
YY_RULE_SETUP YY_RULE_SETUP
{ return SAMPLER2DRECT; } { return ES2_reserved_ES3_keyword(context, SAMPLER3DRECT); }
YY_BREAK YY_BREAK
case 66: case 66:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, SAMPLER2DARRAY); } { return SAMPLER2DRECT; }
YY_BREAK YY_BREAK
case 67: case 67:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, SAMPLER2DMS); } { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAY); }
YY_BREAK YY_BREAK
case 68: case 68:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, ISAMPLER2D); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, SAMPLER2DMS); }
YY_BREAK YY_BREAK
case 69: case 69:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, ISAMPLER3D); } { return ES2_ident_ES3_keyword(context, ISAMPLER2D); }
YY_BREAK YY_BREAK
case 70: case 70:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, ISAMPLERCUBE); } { return ES2_ident_ES3_keyword(context, ISAMPLER3D); }
YY_BREAK YY_BREAK
case 71: case 71:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, ISAMPLER2DARRAY); } { return ES2_ident_ES3_keyword(context, ISAMPLERCUBE); }
YY_BREAK YY_BREAK
case 72: case 72:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, ISAMPLER2DMS); } { return ES2_ident_ES3_keyword(context, ISAMPLER2DARRAY); }
YY_BREAK YY_BREAK
case 73: case 73:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, USAMPLER2D); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, ISAMPLER2DMS); }
YY_BREAK YY_BREAK
case 74: case 74:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, USAMPLER3D); } { return ES2_ident_ES3_keyword(context, USAMPLER2D); }
YY_BREAK YY_BREAK
case 75: case 75:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, USAMPLERCUBE); } { return ES2_ident_ES3_keyword(context, USAMPLER3D); }
YY_BREAK YY_BREAK
case 76: case 76:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, USAMPLER2DARRAY); } { return ES2_ident_ES3_keyword(context, USAMPLERCUBE); }
YY_BREAK YY_BREAK
case 77: case 77:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, USAMPLER2DMS); } { return ES2_ident_ES3_keyword(context, USAMPLER2DARRAY); }
YY_BREAK YY_BREAK
case 78: case 78:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, USAMPLER2DMS); }
YY_BREAK YY_BREAK
case 79: case 79:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); } { return ES2_reserved_ES3_keyword(context, SAMPLER2DSHADOW); }
YY_BREAK YY_BREAK
case 80: case 80:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); } { return ES2_ident_ES3_keyword(context, SAMPLERCUBESHADOW); }
YY_BREAK YY_BREAK
case 81: case 81:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", SAMPLEREXTERNAL2DY2YEXT); } { return ES2_ident_ES3_keyword(context, SAMPLER2DARRAYSHADOW); }
YY_BREAK YY_BREAK
case 82: case 82:
YY_RULE_SETUP YY_RULE_SETUP
{ return STRUCT; } { return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", SAMPLEREXTERNAL2DY2YEXT); }
YY_BREAK YY_BREAK
case 83: case 83:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_keyword_multiview_keyword(context, LAYOUT); } { return STRUCT; }
YY_BREAK YY_BREAK
case 84: case 84:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", YUVCSCSTANDARDEXT); } { return ES2_ident_ES3_keyword_multiview_keyword(context, LAYOUT); }
YY_BREAK YY_BREAK
case 85: case 85:
YY_RULE_SETUP YY_RULE_SETUP
{ return yuvcscstandardext_constant(context); } { return ES3_extension_keyword_else_ident(context, "GL_EXT_YUV_target", YUVCSCSTANDARDEXT); }
YY_BREAK YY_BREAK
case 86: case 86:
YY_RULE_SETUP YY_RULE_SETUP
...@@ -2041,78 +2019,81 @@ YY_RULE_SETUP ...@@ -2041,78 +2019,81 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 88: case 88:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); } { return yuvcscstandardext_constant(context); }
YY_BREAK YY_BREAK
case 89: case 89:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2D); }
YY_BREAK YY_BREAK
case 90: case 90:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2D); }
YY_BREAK YY_BREAK
case 91: case 91:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2D); }
YY_BREAK YY_BREAK
case 92: case 92:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE2DARRAY); }
YY_BREAK YY_BREAK
case 93: case 93:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE2DARRAY); }
YY_BREAK YY_BREAK
case 94: case 94:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE2DARRAY); }
YY_BREAK YY_BREAK
case 95: case 95:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGE3D); }
YY_BREAK YY_BREAK
case 96: case 96:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGE3D); }
YY_BREAK YY_BREAK
case 97: case 97:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGE3D); }
YY_BREAK YY_BREAK
case 98: case 98:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IIMAGECUBE); }
YY_BREAK YY_BREAK
case 99: case 99:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, UIMAGECUBE); }
YY_BREAK YY_BREAK
case 100: case 100:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, IMAGECUBE); }
YY_BREAK YY_BREAK
case 101: case 101:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, READONLY); }
YY_BREAK YY_BREAK
case 102: case 102:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, WRITEONLY); }
YY_BREAK YY_BREAK
case 103: case 103:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, COHERENT); }
YY_BREAK YY_BREAK
case 104: case 104:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_and_ES3_reserved_ES3_1_keyword(context, VOLATILE); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, RESTRICT); }
YY_BREAK YY_BREAK
case 105: case 105:
YY_RULE_SETUP YY_RULE_SETUP
{ return ES2_and_ES3_reserved_ES3_1_keyword(context, VOLATILE); }
YY_BREAK
case 106:
YY_RULE_SETUP
{ return ES2_ident_ES3_reserved_ES3_1_keyword(context, ATOMICUINT); } { return ES2_ident_ES3_reserved_ES3_1_keyword(context, ATOMICUINT); }
YY_BREAK YY_BREAK
/* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */ /* Reserved keywords for GLSL ES 3.00 that are not reserved for GLSL ES 1.00 */
case 106:
case 107: case 107:
case 108: case 108:
case 109: case 109:
...@@ -2148,6 +2129,7 @@ case 138: ...@@ -2148,6 +2129,7 @@ case 138:
case 139: case 139:
case 140: case 140:
case 141: case 141:
case 142:
YY_RULE_SETUP YY_RULE_SETUP
{ {
if (context->getShaderVersion() < 300) { if (context->getShaderVersion() < 300) {
...@@ -2158,7 +2140,7 @@ YY_RULE_SETUP ...@@ -2158,7 +2140,7 @@ YY_RULE_SETUP
} }
YY_BREAK YY_BREAK
/* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */ /* Reserved keywords in GLSL ES 1.00 that are not reserved in GLSL ES 3.00 */
case 142: case 143:
YY_RULE_SETUP YY_RULE_SETUP
{ {
if (context->getShaderVersion() >= 300) if (context->getShaderVersion() >= 300)
...@@ -2171,7 +2153,6 @@ YY_RULE_SETUP ...@@ -2171,7 +2153,6 @@ YY_RULE_SETUP
} }
YY_BREAK YY_BREAK
/* Reserved keywords */ /* Reserved keywords */
case 143:
case 144: case 144:
case 145: case 145:
case 146: case 146:
...@@ -2211,20 +2192,17 @@ case 179: ...@@ -2211,20 +2192,17 @@ case 179:
case 180: case 180:
case 181: case 181:
case 182: case 182:
case 183:
YY_RULE_SETUP YY_RULE_SETUP
{ return reserved_word(yyscanner); } { return reserved_word(yyscanner); }
YY_BREAK YY_BREAK
case 183: case 184:
YY_RULE_SETUP YY_RULE_SETUP
{ {
yylval->lex.string = NewPoolTString(yytext); yylval->lex.string = NewPoolTString(yytext);
return check_type(yyscanner); return check_type(yyscanner);
} }
YY_BREAK YY_BREAK
case 184:
YY_RULE_SETUP
{ return int_constant(context); }
YY_BREAK
case 185: case 185:
YY_RULE_SETUP YY_RULE_SETUP
{ return int_constant(context); } { return int_constant(context); }
...@@ -2235,7 +2213,7 @@ YY_RULE_SETUP ...@@ -2235,7 +2213,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 187: case 187:
YY_RULE_SETUP YY_RULE_SETUP
{ return uint_constant(context); } { return int_constant(context); }
YY_BREAK YY_BREAK
case 188: case 188:
YY_RULE_SETUP YY_RULE_SETUP
...@@ -2247,7 +2225,7 @@ YY_RULE_SETUP ...@@ -2247,7 +2225,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 190: case 190:
YY_RULE_SETUP YY_RULE_SETUP
{ return float_constant(yyscanner); } { return uint_constant(context); }
YY_BREAK YY_BREAK
case 191: case 191:
YY_RULE_SETUP YY_RULE_SETUP
...@@ -2259,7 +2237,7 @@ YY_RULE_SETUP ...@@ -2259,7 +2237,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 193: case 193:
YY_RULE_SETUP YY_RULE_SETUP
{ return floatsuffix_check(context); } { return float_constant(yyscanner); }
YY_BREAK YY_BREAK
case 194: case 194:
YY_RULE_SETUP YY_RULE_SETUP
...@@ -2271,205 +2249,209 @@ YY_RULE_SETUP ...@@ -2271,205 +2249,209 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 196: case 196:
YY_RULE_SETUP YY_RULE_SETUP
{ return ADD_ASSIGN; } { return floatsuffix_check(context); }
YY_BREAK YY_BREAK
case 197: case 197:
YY_RULE_SETUP YY_RULE_SETUP
{ return SUB_ASSIGN; } { return ADD_ASSIGN; }
YY_BREAK YY_BREAK
case 198: case 198:
YY_RULE_SETUP YY_RULE_SETUP
{ return MUL_ASSIGN; } { return SUB_ASSIGN; }
YY_BREAK YY_BREAK
case 199: case 199:
YY_RULE_SETUP YY_RULE_SETUP
{ return DIV_ASSIGN; } { return MUL_ASSIGN; }
YY_BREAK YY_BREAK
case 200: case 200:
YY_RULE_SETUP YY_RULE_SETUP
{ return MOD_ASSIGN; } { return DIV_ASSIGN; }
YY_BREAK YY_BREAK
case 201: case 201:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_ASSIGN; } { return MOD_ASSIGN; }
YY_BREAK YY_BREAK
case 202: case 202:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_ASSIGN; } { return LEFT_ASSIGN; }
YY_BREAK YY_BREAK
case 203: case 203:
YY_RULE_SETUP YY_RULE_SETUP
{ return AND_ASSIGN; } { return RIGHT_ASSIGN; }
YY_BREAK YY_BREAK
case 204: case 204:
YY_RULE_SETUP YY_RULE_SETUP
{ return XOR_ASSIGN; } { return AND_ASSIGN; }
YY_BREAK YY_BREAK
case 205: case 205:
YY_RULE_SETUP YY_RULE_SETUP
{ return OR_ASSIGN; } { return XOR_ASSIGN; }
YY_BREAK YY_BREAK
case 206: case 206:
YY_RULE_SETUP YY_RULE_SETUP
{ return INC_OP; } { return OR_ASSIGN; }
YY_BREAK YY_BREAK
case 207: case 207:
YY_RULE_SETUP YY_RULE_SETUP
{ return DEC_OP; } { return INC_OP; }
YY_BREAK YY_BREAK
case 208: case 208:
YY_RULE_SETUP YY_RULE_SETUP
{ return AND_OP; } { return DEC_OP; }
YY_BREAK YY_BREAK
case 209: case 209:
YY_RULE_SETUP YY_RULE_SETUP
{ return OR_OP; } { return AND_OP; }
YY_BREAK YY_BREAK
case 210: case 210:
YY_RULE_SETUP YY_RULE_SETUP
{ return XOR_OP; } { return OR_OP; }
YY_BREAK YY_BREAK
case 211: case 211:
YY_RULE_SETUP YY_RULE_SETUP
{ return LE_OP; } { return XOR_OP; }
YY_BREAK YY_BREAK
case 212: case 212:
YY_RULE_SETUP YY_RULE_SETUP
{ return GE_OP; } { return LE_OP; }
YY_BREAK YY_BREAK
case 213: case 213:
YY_RULE_SETUP YY_RULE_SETUP
{ return EQ_OP; } { return GE_OP; }
YY_BREAK YY_BREAK
case 214: case 214:
YY_RULE_SETUP YY_RULE_SETUP
{ return NE_OP; } { return EQ_OP; }
YY_BREAK YY_BREAK
case 215: case 215:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_OP; } { return NE_OP; }
YY_BREAK YY_BREAK
case 216: case 216:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_OP; } { return LEFT_OP; }
YY_BREAK YY_BREAK
case 217: case 217:
YY_RULE_SETUP YY_RULE_SETUP
{ return SEMICOLON; } { return RIGHT_OP; }
YY_BREAK YY_BREAK
case 218: case 218:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_BRACE; } { return SEMICOLON; }
YY_BREAK YY_BREAK
case 219: case 219:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_BRACE; } { return LEFT_BRACE; }
YY_BREAK YY_BREAK
case 220: case 220:
YY_RULE_SETUP YY_RULE_SETUP
{ return COMMA; } { return RIGHT_BRACE; }
YY_BREAK YY_BREAK
case 221: case 221:
YY_RULE_SETUP YY_RULE_SETUP
{ return COLON; } { return COMMA; }
YY_BREAK YY_BREAK
case 222: case 222:
YY_RULE_SETUP YY_RULE_SETUP
{ return EQUAL; } { return COLON; }
YY_BREAK YY_BREAK
case 223: case 223:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_PAREN; } { return EQUAL; }
YY_BREAK YY_BREAK
case 224: case 224:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_PAREN; } { return LEFT_PAREN; }
YY_BREAK YY_BREAK
case 225: case 225:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_BRACKET; } { return RIGHT_PAREN; }
YY_BREAK YY_BREAK
case 226: case 226:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_BRACKET; } { return LEFT_BRACKET; }
YY_BREAK YY_BREAK
case 227: case 227:
YY_RULE_SETUP YY_RULE_SETUP
{ BEGIN(FIELDS); return DOT; } { return RIGHT_BRACKET; }
YY_BREAK YY_BREAK
case 228: case 228:
YY_RULE_SETUP YY_RULE_SETUP
{ return BANG; } { BEGIN(FIELDS); return DOT; }
YY_BREAK YY_BREAK
case 229: case 229:
YY_RULE_SETUP YY_RULE_SETUP
{ return DASH; } { return BANG; }
YY_BREAK YY_BREAK
case 230: case 230:
YY_RULE_SETUP YY_RULE_SETUP
{ return TILDE; } { return DASH; }
YY_BREAK YY_BREAK
case 231: case 231:
YY_RULE_SETUP YY_RULE_SETUP
{ return PLUS; } { return TILDE; }
YY_BREAK YY_BREAK
case 232: case 232:
YY_RULE_SETUP YY_RULE_SETUP
{ return STAR; } { return PLUS; }
YY_BREAK YY_BREAK
case 233: case 233:
YY_RULE_SETUP YY_RULE_SETUP
{ return SLASH; } { return STAR; }
YY_BREAK YY_BREAK
case 234: case 234:
YY_RULE_SETUP YY_RULE_SETUP
{ return PERCENT; } { return SLASH; }
YY_BREAK YY_BREAK
case 235: case 235:
YY_RULE_SETUP YY_RULE_SETUP
{ return LEFT_ANGLE; } { return PERCENT; }
YY_BREAK YY_BREAK
case 236: case 236:
YY_RULE_SETUP YY_RULE_SETUP
{ return RIGHT_ANGLE; } { return LEFT_ANGLE; }
YY_BREAK YY_BREAK
case 237: case 237:
YY_RULE_SETUP YY_RULE_SETUP
{ return VERTICAL_BAR; } { return RIGHT_ANGLE; }
YY_BREAK YY_BREAK
case 238: case 238:
YY_RULE_SETUP YY_RULE_SETUP
{ return CARET; } { return VERTICAL_BAR; }
YY_BREAK YY_BREAK
case 239: case 239:
YY_RULE_SETUP YY_RULE_SETUP
{ return AMPERSAND; } { return CARET; }
YY_BREAK YY_BREAK
case 240: case 240:
YY_RULE_SETUP YY_RULE_SETUP
{ return QUESTION; } { return AMPERSAND; }
YY_BREAK YY_BREAK
case 241: case 241:
YY_RULE_SETUP YY_RULE_SETUP
{ return QUESTION; }
YY_BREAK
case 242:
YY_RULE_SETUP
{ {
BEGIN(INITIAL); BEGIN(INITIAL);
yylval->lex.string = NewPoolTString(yytext); yylval->lex.string = NewPoolTString(yytext);
return FIELD_SELECTION; return FIELD_SELECTION;
} }
YY_BREAK YY_BREAK
case 242: case 243:
YY_RULE_SETUP YY_RULE_SETUP
{} {}
YY_BREAK YY_BREAK
case 243: case 244:
YY_RULE_SETUP YY_RULE_SETUP
{ {
yyextra->error(*yylloc, "Illegal character at fieldname start", yytext); yyextra->error(*yylloc, "Illegal character at fieldname start", yytext);
return 0; return 0;
} }
YY_BREAK YY_BREAK
case 244: case 245:
/* rule 244 can match eol */ /* rule 245 can match eol */
YY_RULE_SETUP YY_RULE_SETUP
{ } { }
YY_BREAK YY_BREAK
...@@ -2477,11 +2459,11 @@ case YY_STATE_EOF(INITIAL): ...@@ -2477,11 +2459,11 @@ case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(FIELDS): case YY_STATE_EOF(FIELDS):
{ yyterminate(); } { yyterminate(); }
YY_BREAK YY_BREAK
case 245: case 246:
YY_RULE_SETUP YY_RULE_SETUP
{ assert(false); return 0; } { assert(false); return 0; }
YY_BREAK YY_BREAK
case 246: case 247:
YY_RULE_SETUP YY_RULE_SETUP
ECHO; ECHO;
YY_BREAK YY_BREAK
...@@ -2754,8 +2736,6 @@ static int yy_get_next_buffer (yyscan_t yyscanner) ...@@ -2754,8 +2736,6 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
(void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner );
if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
/* "- 2" to take care of EOB's */
YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2);
} }
yyg->yy_n_chars += number_to_move; yyg->yy_n_chars += number_to_move;
...@@ -2789,7 +2769,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner) ...@@ -2789,7 +2769,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 886 ) if ( yy_current_state >= 891 )
yy_c = yy_meta[yy_c]; yy_c = yy_meta[yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
...@@ -2819,11 +2799,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner) ...@@ -2819,11 +2799,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 886 ) if ( yy_current_state >= 891 )
yy_c = yy_meta[yy_c]; yy_c = yy_meta[yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
yy_is_jam = (yy_current_state == 885); yy_is_jam = (yy_current_state == 890);
(void)yyg; (void)yyg;
return yy_is_jam ? 0 : yy_current_state; return yy_is_jam ? 0 : yy_current_state;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -93,115 +93,116 @@ enum yytokentype ...@@ -93,115 +93,116 @@ enum yytokentype
OUT_QUAL = 296, OUT_QUAL = 296,
INOUT_QUAL = 297, INOUT_QUAL = 297,
UNIFORM = 298, UNIFORM = 298,
VARYING = 299, BUFFER = 299,
MATRIX2x3 = 300, VARYING = 300,
MATRIX3x2 = 301, MATRIX2x3 = 301,
MATRIX2x4 = 302, MATRIX3x2 = 302,
MATRIX4x2 = 303, MATRIX2x4 = 303,
MATRIX3x4 = 304, MATRIX4x2 = 304,
MATRIX4x3 = 305, MATRIX3x4 = 305,
CENTROID = 306, MATRIX4x3 = 306,
FLAT = 307, CENTROID = 307,
SMOOTH = 308, FLAT = 308,
READONLY = 309, SMOOTH = 309,
WRITEONLY = 310, READONLY = 310,
COHERENT = 311, WRITEONLY = 311,
RESTRICT = 312, COHERENT = 312,
VOLATILE = 313, RESTRICT = 313,
SHARED = 314, VOLATILE = 314,
STRUCT = 315, SHARED = 315,
VOID_TYPE = 316, STRUCT = 316,
WHILE = 317, VOID_TYPE = 317,
SAMPLER2D = 318, WHILE = 318,
SAMPLERCUBE = 319, SAMPLER2D = 319,
SAMPLER_EXTERNAL_OES = 320, SAMPLERCUBE = 320,
SAMPLER2DRECT = 321, SAMPLER_EXTERNAL_OES = 321,
SAMPLER2DARRAY = 322, SAMPLER2DRECT = 322,
ISAMPLER2D = 323, SAMPLER2DARRAY = 323,
ISAMPLER3D = 324, ISAMPLER2D = 324,
ISAMPLERCUBE = 325, ISAMPLER3D = 325,
ISAMPLER2DARRAY = 326, ISAMPLERCUBE = 326,
USAMPLER2D = 327, ISAMPLER2DARRAY = 327,
USAMPLER3D = 328, USAMPLER2D = 328,
USAMPLERCUBE = 329, USAMPLER3D = 329,
USAMPLER2DARRAY = 330, USAMPLERCUBE = 330,
SAMPLER2DMS = 331, USAMPLER2DARRAY = 331,
ISAMPLER2DMS = 332, SAMPLER2DMS = 332,
USAMPLER2DMS = 333, ISAMPLER2DMS = 333,
SAMPLER3D = 334, USAMPLER2DMS = 334,
SAMPLER3DRECT = 335, SAMPLER3D = 335,
SAMPLER2DSHADOW = 336, SAMPLER3DRECT = 336,
SAMPLERCUBESHADOW = 337, SAMPLER2DSHADOW = 337,
SAMPLER2DARRAYSHADOW = 338, SAMPLERCUBESHADOW = 338,
SAMPLEREXTERNAL2DY2YEXT = 339, SAMPLER2DARRAYSHADOW = 339,
IMAGE2D = 340, SAMPLEREXTERNAL2DY2YEXT = 340,
IIMAGE2D = 341, IMAGE2D = 341,
UIMAGE2D = 342, IIMAGE2D = 342,
IMAGE3D = 343, UIMAGE2D = 343,
IIMAGE3D = 344, IMAGE3D = 344,
UIMAGE3D = 345, IIMAGE3D = 345,
IMAGE2DARRAY = 346, UIMAGE3D = 346,
IIMAGE2DARRAY = 347, IMAGE2DARRAY = 347,
UIMAGE2DARRAY = 348, IIMAGE2DARRAY = 348,
IMAGECUBE = 349, UIMAGE2DARRAY = 349,
IIMAGECUBE = 350, IMAGECUBE = 350,
UIMAGECUBE = 351, IIMAGECUBE = 351,
ATOMICUINT = 352, UIMAGECUBE = 352,
LAYOUT = 353, ATOMICUINT = 353,
YUVCSCSTANDARDEXT = 354, LAYOUT = 354,
YUVCSCSTANDARDEXTCONSTANT = 355, YUVCSCSTANDARDEXT = 355,
IDENTIFIER = 356, YUVCSCSTANDARDEXTCONSTANT = 356,
TYPE_NAME = 357, IDENTIFIER = 357,
FLOATCONSTANT = 358, TYPE_NAME = 358,
INTCONSTANT = 359, FLOATCONSTANT = 359,
UINTCONSTANT = 360, INTCONSTANT = 360,
BOOLCONSTANT = 361, UINTCONSTANT = 361,
FIELD_SELECTION = 362, BOOLCONSTANT = 362,
LEFT_OP = 363, FIELD_SELECTION = 363,
RIGHT_OP = 364, LEFT_OP = 364,
INC_OP = 365, RIGHT_OP = 365,
DEC_OP = 366, INC_OP = 366,
LE_OP = 367, DEC_OP = 367,
GE_OP = 368, LE_OP = 368,
EQ_OP = 369, GE_OP = 369,
NE_OP = 370, EQ_OP = 370,
AND_OP = 371, NE_OP = 371,
OR_OP = 372, AND_OP = 372,
XOR_OP = 373, OR_OP = 373,
MUL_ASSIGN = 374, XOR_OP = 374,
DIV_ASSIGN = 375, MUL_ASSIGN = 375,
ADD_ASSIGN = 376, DIV_ASSIGN = 376,
MOD_ASSIGN = 377, ADD_ASSIGN = 377,
LEFT_ASSIGN = 378, MOD_ASSIGN = 378,
RIGHT_ASSIGN = 379, LEFT_ASSIGN = 379,
AND_ASSIGN = 380, RIGHT_ASSIGN = 380,
XOR_ASSIGN = 381, AND_ASSIGN = 381,
OR_ASSIGN = 382, XOR_ASSIGN = 382,
SUB_ASSIGN = 383, OR_ASSIGN = 383,
LEFT_PAREN = 384, SUB_ASSIGN = 384,
RIGHT_PAREN = 385, LEFT_PAREN = 385,
LEFT_BRACKET = 386, RIGHT_PAREN = 386,
RIGHT_BRACKET = 387, LEFT_BRACKET = 387,
LEFT_BRACE = 388, RIGHT_BRACKET = 388,
RIGHT_BRACE = 389, LEFT_BRACE = 389,
DOT = 390, RIGHT_BRACE = 390,
COMMA = 391, DOT = 391,
COLON = 392, COMMA = 392,
EQUAL = 393, COLON = 393,
SEMICOLON = 394, EQUAL = 394,
BANG = 395, SEMICOLON = 395,
DASH = 396, BANG = 396,
TILDE = 397, DASH = 397,
PLUS = 398, TILDE = 398,
STAR = 399, PLUS = 399,
SLASH = 400, STAR = 400,
PERCENT = 401, SLASH = 401,
LEFT_ANGLE = 402, PERCENT = 402,
RIGHT_ANGLE = 403, LEFT_ANGLE = 403,
VERTICAL_BAR = 404, RIGHT_ANGLE = 404,
CARET = 405, VERTICAL_BAR = 405,
AMPERSAND = 406, CARET = 406,
QUESTION = 407 AMPERSAND = 407,
QUESTION = 408
}; };
#endif #endif
......
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
'<(angle_path)/src/tests/compiler_tests/API_test.cpp', '<(angle_path)/src/tests/compiler_tests/API_test.cpp',
'<(angle_path)/src/tests/compiler_tests/AppendixALimitations_test.cpp', '<(angle_path)/src/tests/compiler_tests/AppendixALimitations_test.cpp',
'<(angle_path)/src/tests/compiler_tests/AtomicCounter_test.cpp', '<(angle_path)/src/tests/compiler_tests/AtomicCounter_test.cpp',
'<(angle_path)/src/tests/compiler_tests/BufferVariables_test.cpp',
'<(angle_path)/src/tests/compiler_tests/CollectVariables_test.cpp', '<(angle_path)/src/tests/compiler_tests/CollectVariables_test.cpp',
'<(angle_path)/src/tests/compiler_tests/ConstantFolding_test.cpp', '<(angle_path)/src/tests/compiler_tests/ConstantFolding_test.cpp',
'<(angle_path)/src/tests/compiler_tests/ConstantFoldingNaN_test.cpp', '<(angle_path)/src/tests/compiler_tests/ConstantFoldingNaN_test.cpp',
......
//
// Copyright (c) 2017 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// BufferVariables_test.cpp:
// Tests for buffer variables in GLSL ES 3.10 section 4.3.7.
//
#include "gtest/gtest.h"
#include "GLSLANG/ShaderLang.h"
#include "angle_gl.h"
#include "gtest/gtest.h"
#include "tests/test_utils/ShaderCompileTreeTest.h"
using namespace sh;
class BufferVariablesTest : public ShaderCompileTreeTest
{
public:
BufferVariablesTest() {}
protected:
::GLenum getShaderType() const override { return GL_VERTEX_SHADER; }
ShShaderSpec getShaderSpec() const override { return SH_GLES3_1_SPEC; }
void initResources(ShBuiltInResources *resources) override
{
resources->MaxShaderStorageBufferBindings = 8;
}
};
// Test that the buffer qualifier described in GLSL ES 3.10 section 4.3.7 can be successfully
// compiled.
TEST_F(BufferVariablesTest, BasicShaderStorageBlockDeclaration)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" int b1;\n"
" buffer int b2;\n"
"};\n"
"void main()\n"
"{\n"
"}\n";
if (!compile(source))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
}
// Test that shader storage block layout qualifiers can be declared for global scope.
TEST_F(BufferVariablesTest, LayoutQualifiersDeclaredInGlobal)
{
const std::string &source =
"#version 310 es\n"
"layout(shared, column_major) buffer;\n"
"void main()\n"
"{\n"
"}\n";
if (!compile(source))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
}
// Test that shader storage block can be used with one or more memory qualifiers.
TEST_F(BufferVariablesTest, ShaderStorageBlockWithMemoryQualifier)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) writeonly buffer buf {\n"
" int b1;\n"
" buffer int b2;\n"
"};\n"
"void main()\n"
"{\n"
"}\n";
if (!compile(source))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
}
// Test that buffer variables can be used with one or more memory qualifiers.
TEST_F(BufferVariablesTest, BufferVariablesWithMemoryQualifier)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" writeonly int b1;\n"
" writeonly buffer int b2;\n"
"};\n"
"void main()\n"
"{\n"
"}\n";
if (!compile(source))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
}
// Test that it is a compile-time error to declare buffer variables at global scope (outside a
// block).
TEST_F(BufferVariablesTest, DeclareBufferVariableAtGlobal)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer int a;\n"
"void main()\n"
"{\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that the buffer variable can't be opaque type.
TEST_F(BufferVariablesTest, BufferVariableWithOpaqueType)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" int b1;\n"
" atomic_uint b2;\n"
"};\n"
"void main()\n"
"{\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that the uniform variable can't be in shader storage block.
TEST_F(BufferVariablesTest, UniformVariableInShaderStorageBlock)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" uniform int a;\n"
"};\n"
"void main()\n"
"{\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that buffer qualifier is not supported in verson lower than GLSL ES 3.10.
TEST_F(BufferVariablesTest, BufferQualifierInESSL3)
{
const std::string &source =
"#version 300 es\n"
"layout(binding = 3) buffer buf {\n"
" int b1;\n"
" buffer int b2;\n"
"};\n"
"void main()\n"
"{\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that can't assign to a readonly buffer variable.
TEST_F(BufferVariablesTest, AssignToReadonlyBufferVariable)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" readonly int b1;\n"
"};\n"
"void main()\n"
"{\n"
" b1 = 5;\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that can't assign to a buffer variable declared within shader storage block with readonly.
TEST_F(BufferVariablesTest, AssignToBufferVariableWithinReadonlyBlock)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) readonly buffer buf {\n"
" int b1;\n"
"};\n"
"void main()\n"
"{\n"
" b1 = 5;\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that a readonly and writeonly buffer variable should neither read or write.
TEST_F(BufferVariablesTest, AccessReadonlyWriteonlyBufferVariable)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" readonly writeonly int b1;\n"
"};\n"
"void main()\n"
"{\n"
" b1 = 5;\n"
" int test = b1;\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that accessing a writeonly buffer variable should be error.
TEST_F(BufferVariablesTest, AccessWriteonlyBufferVariable)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" writeonly int b1;\n"
"};\n"
"void main()\n"
"{\n"
" int test = b1;\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that accessing a buffer variable through an instance name is ok.
TEST_F(BufferVariablesTest, AccessReadonlyBufferVariableByInstanceName)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" readonly float f;\n"
"} instanceBuffer;\n"
"void main()\n"
"{\n"
" float test = instanceBuffer.f;\n"
"}\n";
if (!compile(source))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
}
// Test that accessing a buffer variable through an instance name inherits the writeonly qualifier
// and generates errors.
TEST_F(BufferVariablesTest, AccessWriteonlyBufferVariableByInstanceName)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) writeonly buffer buf {\n"
" float f;\n"
"} instanceBuffer;\n"
"void main()\n"
"{\n"
" float test = instanceBuffer.f;\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that writeonly buffer variable as the argument of a unary operator should be error.
TEST_F(BufferVariablesTest, UnaryOperatorWithWriteonlyBufferVariable)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" writeonly int b1;\n"
"};\n"
"void main()\n"
"{\n"
" ++b1;\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that writeonly buffer variable on the left-hand side of compound assignment should be error.
TEST_F(BufferVariablesTest, CompoundAssignmentToWriteonlyBufferVariable)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" writeonly int b1;\n"
"};\n"
"void main()\n"
"{\n"
" b1 += 5;\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that writeonly buffer variable as ternary op argument should be error.
TEST_F(BufferVariablesTest, TernarySelectionWithWriteonlyBufferVariable)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" writeonly bool b1;\n"
"};\n"
"void main()\n"
"{\n"
" int test = b1 ? 1 : 0;\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that writeonly buffer variable as array constructor argument should be error.
TEST_F(BufferVariablesTest, ArrayConstructorWithWriteonlyBufferVariable)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" writeonly float f;\n"
"};\n"
"void main()\n"
"{\n"
" float a[3] = float[3](f, f, f);\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that writeonly buffer variable as structure constructor argument should be error.
TEST_F(BufferVariablesTest, StructureConstructorWithWriteonlyBufferVariable)
{
const std::string &source =
"#version 310 es\n"
"struct S {\n"
" int a;\n"
"};\n"
"struct T {\n"
" S b;\n"
"};\n"
"layout(binding = 3) buffer buf {\n"
" writeonly S c;\n"
"};\n"
"void main()\n"
"{\n"
" T t = T(c);\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that writeonly buffer variable as built-in function argument should be error.
TEST_F(BufferVariablesTest, BuildInFunctionWithWriteonlyBufferVariable)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" writeonly int a;\n"
"};\n"
"void main()\n"
"{\n"
" int test = min(a, 1);\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that readonly buffer variable as user-defined function in argument should be ok.
TEST_F(BufferVariablesTest, UserDefinedFunctionWithReadonlyBufferVariableInArgument)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" readonly float f;\n"
"};\n"
"void foo(float a) {}\n"
"void main()\n"
"{\n"
" foo(f);\n"
"}\n";
if (!compile(source))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
}
// Test that writeonly buffer variable as user-defined function in argument should be error.
TEST_F(BufferVariablesTest, UserDefinedFunctionWithWriteonlyBufferVariableInArgument)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" writeonly float f;\n"
"};\n"
"void foo(float a) {}\n"
"void main()\n"
"{\n"
" foo(f);\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that writeonly buffer variable as user-defined function out argument should be ok.
TEST_F(BufferVariablesTest, UserDefinedFunctionWithWriteonlyBufferVariableOutArgument)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" writeonly float f;\n"
"};\n"
"void foo(out float a) {}\n"
"void main()\n"
"{\n"
" foo(f);\n"
"}\n";
if (!compile(source))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
}
// Test that readonly buffer variable as user-defined function out argument should be error.
TEST_F(BufferVariablesTest, UserDefinedFunctionWithReadonlyBufferVariableOutArgument)
{
const std::string &source =
"#version 310 es\n"
"layout(binding = 3) buffer buf {\n"
" readonly float f;\n"
"};\n"
"void foo(out float a) {}\n"
"void main()\n"
"{\n"
" foo(f);\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
// Test that buffer qualifier can't modify a function parameter.
TEST_F(BufferVariablesTest, BufferQualifierOnFunctionParameter)
{
const std::string &source =
"#version 310 es\n"
"void foo(buffer float a) {}\n"
"void main()\n"
"{\n"
"}\n";
if (compile(source))
{
FAIL() << "Shader compilation succeeded, expecting failure:\n" << mInfoLog;
}
}
...@@ -3885,6 +3885,23 @@ TEST_F(FragmentShaderValidationTest, InvalidInterfaceBlockTernaryExpression) ...@@ -3885,6 +3885,23 @@ TEST_F(FragmentShaderValidationTest, InvalidInterfaceBlockTernaryExpression)
} }
} }
// Test that "buffer" and "shared" are valid identifiers in version lower than GLSL ES 3.10.
TEST_F(FragmentShaderValidationTest, BufferAndSharedAsIdentifierOnES3)
{
const std::string &shaderString =
"#version 300 es\n"
"void main()\n"
"{\n"
" int buffer;\n"
" int shared;\n"
"}\n";
if (!compile(shaderString))
{
FAIL() << "Shader compilation failed, expecting success:\n" << mInfoLog;
}
}
// Test that a struct can not be used as a constructor argument for a scalar. // Test that a struct can not be used as a constructor argument for a scalar.
TEST_F(FragmentShaderValidationTest, StructAsBoolConstructorArgument) TEST_F(FragmentShaderValidationTest, StructAsBoolConstructorArgument)
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment