Commit 205fef33 by kbr@chromium.org

Added support for GL_ARB_texture_rectangle to shader validator.

Parser was regenerated with the flex/bison shipped with Ubuntu 10.04. BUG=251 TEST=tested with new Core Animation plugin rendering path on Mac OS X Review URL: http://codereview.appspot.com/5432044 git-svn-id: https://angleproject.googlecode.com/svn/trunk@888 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent afaa0490
...@@ -76,7 +76,8 @@ typedef enum { ...@@ -76,7 +76,8 @@ typedef enum {
SH_FLOAT_MAT3 = 0x8B5B, SH_FLOAT_MAT3 = 0x8B5B,
SH_FLOAT_MAT4 = 0x8B5C, SH_FLOAT_MAT4 = 0x8B5C,
SH_SAMPLER_2D = 0x8B5E, SH_SAMPLER_2D = 0x8B5E,
SH_SAMPLER_CUBE = 0x8B60 SH_SAMPLER_CUBE = 0x8B60,
SH_SAMPLER_2D_RECT_ARB = 0x8B63
} ShDataType; } ShDataType;
typedef enum { typedef enum {
...@@ -137,6 +138,7 @@ typedef struct ...@@ -137,6 +138,7 @@ typedef struct
// Set to 1 to enable the extension, else 0. // Set to 1 to enable the extension, else 0.
int OES_standard_derivatives; int OES_standard_derivatives;
int OES_EGL_image_external; int OES_EGL_image_external;
int ARB_texture_rectangle;
} ShBuiltInResources; } ShBuiltInResources;
// //
......
#define MAJOR_VERSION 0 #define MAJOR_VERSION 0
#define MINOR_VERSION 0 #define MINOR_VERSION 0
#define BUILD_VERSION 0 #define BUILD_VERSION 0
#define BUILD_REVISION 885 #define BUILD_REVISION 888
#define STRINGIFY(x) #x #define STRINGIFY(x) #x
#define MACRO_STRINGIFY(x) STRINGIFY(x) #define MACRO_STRINGIFY(x) STRINGIFY(x)
......
...@@ -43,6 +43,7 @@ enum TBasicType ...@@ -43,6 +43,7 @@ enum TBasicType
EbtSampler2D, EbtSampler2D,
EbtSamplerCube, EbtSamplerCube,
EbtSamplerExternalOES, // Only valid if OES_EGL_image_external exists. EbtSamplerExternalOES, // Only valid if OES_EGL_image_external exists.
EbtSampler2DRect, // Only valid if GL_ARB_texture_rectangle exists.
EbtGuardSamplerEnd, // non type: see implementation of IsSampler() EbtGuardSamplerEnd, // non type: see implementation of IsSampler()
EbtStruct, EbtStruct,
EbtAddress, // should be deprecated?? EbtAddress, // should be deprecated??
...@@ -59,6 +60,7 @@ inline const char* getBasicString(TBasicType t) ...@@ -59,6 +60,7 @@ inline const char* getBasicString(TBasicType t)
case EbtSampler2D: return "sampler2D"; break; case EbtSampler2D: return "sampler2D"; break;
case EbtSamplerCube: return "samplerCube"; break; case EbtSamplerCube: return "samplerCube"; break;
case EbtSamplerExternalOES: return "samplerExternalOES"; break; case EbtSamplerExternalOES: return "samplerExternalOES"; break;
case EbtSampler2DRect: return "sampler2DRect"; break;
case EbtStruct: return "structure"; break; case EbtStruct: return "structure"; break;
default: return "unknown type"; default: return "unknown type";
} }
......
...@@ -19,7 +19,7 @@ ...@@ -19,7 +19,7 @@
// Prototypes for built-in functions seen by both vertex and fragment shaders. // Prototypes for built-in functions seen by both vertex and fragment shaders.
// //
//============================================================================ //============================================================================
static TString BuiltInFunctionsCommon() static TString BuiltInFunctionsCommon(const ShBuiltInResources& resources)
{ {
TString s; TString s;
...@@ -311,6 +311,26 @@ static TString BuiltInFunctionsCommon() ...@@ -311,6 +311,26 @@ static TString BuiltInFunctionsCommon()
s.append(TString("bvec4 not(bvec4 x);")); s.append(TString("bvec4 not(bvec4 x);"));
// //
// Texture Functions.
//
s.append(TString("vec4 texture2D(sampler2D sampler, vec2 coord);"));
s.append(TString("vec4 texture2DProj(sampler2D sampler, vec3 coord);"));
s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord);"));
s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord);"));
if (resources.OES_EGL_image_external) {
s.append(TString("vec4 texture2D(samplerExternalOES sampler, vec2 coord);"));
s.append(TString("vec4 texture2DProj(samplerExternalOES sampler, vec3 coord);"));
s.append(TString("vec4 texture2DProj(samplerExternalOES sampler, vec4 coord);"));
}
if (resources.ARB_texture_rectangle) {
s.append(TString("vec4 texture2DRect(sampler2DRect sampler, vec2 coord);"));
s.append(TString("vec4 texture2DRectProj(sampler2DRect sampler, vec3 coord);"));
s.append(TString("vec4 texture2DRectProj(sampler2DRect sampler, vec4 coord);"));
}
//
// Noise functions. // Noise functions.
// //
//s.append(TString("float noise1(float x);")); //s.append(TString("float noise1(float x);"));
...@@ -353,22 +373,11 @@ static TString BuiltInFunctionsVertex(const ShBuiltInResources& resources) ...@@ -353,22 +373,11 @@ static TString BuiltInFunctionsVertex(const ShBuiltInResources& resources)
// //
// Texture Functions. // Texture Functions.
// //
s.append(TString("vec4 texture2D(sampler2D sampler, vec2 coord);"));
s.append(TString("vec4 texture2DProj(sampler2D sampler, vec3 coord);"));
s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord);"));
s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord);"));
s.append(TString("vec4 texture2DLod(sampler2D sampler, vec2 coord, float lod);")); s.append(TString("vec4 texture2DLod(sampler2D sampler, vec2 coord, float lod);"));
s.append(TString("vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod);")); s.append(TString("vec4 texture2DProjLod(sampler2D sampler, vec3 coord, float lod);"));
s.append(TString("vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod);")); s.append(TString("vec4 texture2DProjLod(sampler2D sampler, vec4 coord, float lod);"));
s.append(TString("vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod);")); s.append(TString("vec4 textureCubeLod(samplerCube sampler, vec3 coord, float lod);"));
if (resources.OES_EGL_image_external) {
s.append(TString("vec4 texture2D(samplerExternalOES sampler, vec2 coord);"));
s.append(TString("vec4 texture2DProj(samplerExternalOES sampler, vec3 coord);"));
s.append(TString("vec4 texture2DProj(samplerExternalOES sampler, vec4 coord);"));
}
return s; return s;
} }
...@@ -384,22 +393,11 @@ static TString BuiltInFunctionsFragment(const ShBuiltInResources& resources) ...@@ -384,22 +393,11 @@ static TString BuiltInFunctionsFragment(const ShBuiltInResources& resources)
// //
// Texture Functions. // Texture Functions.
// //
s.append(TString("vec4 texture2D(sampler2D sampler, vec2 coord);"));
s.append(TString("vec4 texture2DProj(sampler2D sampler, vec3 coord);"));
s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord);"));
s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord);"));
s.append(TString("vec4 texture2D(sampler2D sampler, vec2 coord, float bias);")); s.append(TString("vec4 texture2D(sampler2D sampler, vec2 coord, float bias);"));
s.append(TString("vec4 texture2DProj(sampler2D sampler, vec3 coord, float bias);")); s.append(TString("vec4 texture2DProj(sampler2D sampler, vec3 coord, float bias);"));
s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias);")); s.append(TString("vec4 texture2DProj(sampler2D sampler, vec4 coord, float bias);"));
s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord, float bias);")); s.append(TString("vec4 textureCube(samplerCube sampler, vec3 coord, float bias);"));
if (resources.OES_EGL_image_external) {
s.append(TString("vec4 texture2D(samplerExternalOES sampler, vec2 coord);"));
s.append(TString("vec4 texture2DProj(samplerExternalOES sampler, vec3 coord);"));
s.append(TString("vec4 texture2DProj(samplerExternalOES sampler, vec4 coord);"));
}
if (resources.OES_standard_derivatives) { if (resources.OES_standard_derivatives) {
s.append(TString("float dFdx(float p);")); s.append(TString("float dFdx(float p);"));
s.append(TString("vec2 dFdx(vec2 p);")); s.append(TString("vec2 dFdx(vec2 p);"));
...@@ -500,14 +498,14 @@ void TBuiltIns::initialize(ShShaderType type, ShShaderSpec spec, ...@@ -500,14 +498,14 @@ void TBuiltIns::initialize(ShShaderType type, ShShaderSpec spec,
switch (type) { switch (type) {
case SH_FRAGMENT_SHADER: case SH_FRAGMENT_SHADER:
builtInStrings.push_back(DefaultPrecisionFragment()); builtInStrings.push_back(DefaultPrecisionFragment());
builtInStrings.push_back(BuiltInFunctionsCommon()); builtInStrings.push_back(BuiltInFunctionsCommon(resources));
builtInStrings.push_back(BuiltInFunctionsFragment(resources)); builtInStrings.push_back(BuiltInFunctionsFragment(resources));
builtInStrings.push_back(StandardUniforms()); builtInStrings.push_back(StandardUniforms());
break; break;
case SH_VERTEX_SHADER: case SH_VERTEX_SHADER:
builtInStrings.push_back(DefaultPrecisionVertex()); builtInStrings.push_back(DefaultPrecisionVertex());
builtInStrings.push_back(BuiltInFunctionsCommon()); builtInStrings.push_back(BuiltInFunctionsCommon(resources));
builtInStrings.push_back(BuiltInFunctionsVertex(resources)); builtInStrings.push_back(BuiltInFunctionsVertex(resources));
builtInStrings.push_back(StandardUniforms()); builtInStrings.push_back(StandardUniforms());
break; break;
...@@ -640,4 +638,6 @@ void InitExtensionBehavior(const ShBuiltInResources& resources, ...@@ -640,4 +638,6 @@ void InitExtensionBehavior(const ShBuiltInResources& resources,
extBehavior["GL_OES_standard_derivatives"] = EBhUndefined; extBehavior["GL_OES_standard_derivatives"] = EBhUndefined;
if (resources.OES_EGL_image_external) if (resources.OES_EGL_image_external)
extBehavior["GL_OES_EGL_image_external"] = EBhUndefined; extBehavior["GL_OES_EGL_image_external"] = EBhUndefined;
if (resources.ARB_texture_rectangle)
extBehavior["GL_ARB_texture_rectangle"] = EBhUndefined;
} }
...@@ -122,6 +122,7 @@ void ShInitBuiltInResources(ShBuiltInResources* resources) ...@@ -122,6 +122,7 @@ void ShInitBuiltInResources(ShBuiltInResources* resources)
// Extensions. // Extensions.
resources->OES_standard_derivatives = 0; resources->OES_standard_derivatives = 0;
resources->OES_EGL_image_external = 0; resources->OES_EGL_image_external = 0;
resources->ARB_texture_rectangle = 0;
} }
// //
......
...@@ -63,6 +63,7 @@ static ShDataType getVariableDataType(const TType& type) ...@@ -63,6 +63,7 @@ static ShDataType getVariableDataType(const TType& type)
} }
case EbtSampler2D: return SH_SAMPLER_2D; case EbtSampler2D: return SH_SAMPLER_2D;
case EbtSamplerCube: return SH_SAMPLER_CUBE; case EbtSamplerCube: return SH_SAMPLER_CUBE;
case EbtSampler2DRect: return SH_SAMPLER_2D_RECT_ARB;
default: UNREACHABLE(); default: UNREACHABLE();
} }
return SH_NONE; return SH_NONE;
......
...@@ -121,6 +121,7 @@ O [0-7] ...@@ -121,6 +121,7 @@ O [0-7]
"sampler2D" { context->lexAfterType = true; return SAMPLER2D; } "sampler2D" { context->lexAfterType = true; return SAMPLER2D; }
"samplerCube" { context->lexAfterType = true; return SAMPLERCUBE; } "samplerCube" { context->lexAfterType = true; return SAMPLERCUBE; }
"samplerExternalOES" { context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; } "samplerExternalOES" { context->lexAfterType = true; return SAMPLER_EXTERNAL_OES; }
"sampler2DRect" { context->lexAfterType = true; return SAMPLER2DRECT; }
"struct" { context->lexAfterType = true; return(STRUCT); } "struct" { context->lexAfterType = true; return(STRUCT); }
......
...@@ -98,7 +98,7 @@ extern void yyerror(TParseContext* context, const char* reason); ...@@ -98,7 +98,7 @@ extern void yyerror(TParseContext* context, const char* reason);
%token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4 %token <lex> BVEC2 BVEC3 BVEC4 IVEC2 IVEC3 IVEC4 VEC2 VEC3 VEC4
%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 VARYING
%token <lex> STRUCT VOID_TYPE WHILE %token <lex> STRUCT VOID_TYPE WHILE
%token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES %token <lex> SAMPLER2D SAMPLERCUBE SAMPLER_EXTERNAL_OES SAMPLER2DRECT
%token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT BOOLCONSTANT %token <lex> IDENTIFIER TYPE_NAME FLOATCONSTANT INTCONSTANT BOOLCONSTANT
%token <lex> FIELD_SELECTION %token <lex> FIELD_SELECTION
...@@ -1624,6 +1624,15 @@ type_specifier_nonarray ...@@ -1624,6 +1624,15 @@ type_specifier_nonarray
TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
$$.setBasic(EbtSamplerExternalOES, qual, $1.line); $$.setBasic(EbtSamplerExternalOES, qual, $1.line);
} }
| SAMPLER2DRECT {
if (!context->supportsExtension("GL_ARB_texture_rectangle")) {
context->error($1.line, "unsupported type", "sampler2DRect", "");
context->recover();
}
FRAG_VERT_ONLY("sampler2DRect", $1.line);
TQualifier qual = context->symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary;
$$.setBasic(EbtSampler2DRect, qual, $1.line);
}
| struct_specifier { | struct_specifier {
FRAG_VERT_ONLY("struct", $1.line); FRAG_VERT_ONLY("struct", $1.line);
$$ = $1; $$ = $1;
......
This source diff could not be displayed because it is too large. You can view the blob instead.
/* A Bison parser, made by GNU Bison 2.3. */
/* A Bison parser, made by GNU Bison 2.4.1. */
/* Skeleton interface for Bison's Yacc-like parsers in C /* Skeleton interface for Bison's Yacc-like parsers in C
Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
Free Software Foundation, Inc. Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option) the Free Software Foundation, either version 3 of the License, or
any later version. (at your option) any later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
...@@ -16,9 +17,7 @@ ...@@ -16,9 +17,7 @@
GNU General Public License for more details. GNU General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software along with this program. If not, see <http://www.gnu.org/licenses/>. */
Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
/* As a special exception, you may create a larger work that contains /* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work part or all of the Bison parser skeleton and distribute that work
...@@ -33,6 +32,7 @@ ...@@ -33,6 +32,7 @@
This special exception was added by the Free Software Foundation in This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */ version 2.2 of Bison. */
/* Tokens. */ /* Tokens. */
#ifndef YYTOKENTYPE #ifndef YYTOKENTYPE
# define YYTOKENTYPE # define YYTOKENTYPE
...@@ -80,160 +80,68 @@ ...@@ -80,160 +80,68 @@
SAMPLER2D = 296, SAMPLER2D = 296,
SAMPLERCUBE = 297, SAMPLERCUBE = 297,
SAMPLER_EXTERNAL_OES = 298, SAMPLER_EXTERNAL_OES = 298,
IDENTIFIER = 299, SAMPLER2DRECT = 299,
TYPE_NAME = 300, IDENTIFIER = 300,
FLOATCONSTANT = 301, TYPE_NAME = 301,
INTCONSTANT = 302, FLOATCONSTANT = 302,
BOOLCONSTANT = 303, INTCONSTANT = 303,
FIELD_SELECTION = 304, BOOLCONSTANT = 304,
LEFT_OP = 305, FIELD_SELECTION = 305,
RIGHT_OP = 306, LEFT_OP = 306,
INC_OP = 307, RIGHT_OP = 307,
DEC_OP = 308, INC_OP = 308,
LE_OP = 309, DEC_OP = 309,
GE_OP = 310, LE_OP = 310,
EQ_OP = 311, GE_OP = 311,
NE_OP = 312, EQ_OP = 312,
AND_OP = 313, NE_OP = 313,
OR_OP = 314, AND_OP = 314,
XOR_OP = 315, OR_OP = 315,
MUL_ASSIGN = 316, XOR_OP = 316,
DIV_ASSIGN = 317, MUL_ASSIGN = 317,
ADD_ASSIGN = 318, DIV_ASSIGN = 318,
MOD_ASSIGN = 319, ADD_ASSIGN = 319,
LEFT_ASSIGN = 320, MOD_ASSIGN = 320,
RIGHT_ASSIGN = 321, LEFT_ASSIGN = 321,
AND_ASSIGN = 322, RIGHT_ASSIGN = 322,
XOR_ASSIGN = 323, AND_ASSIGN = 323,
OR_ASSIGN = 324, XOR_ASSIGN = 324,
SUB_ASSIGN = 325, OR_ASSIGN = 325,
LEFT_PAREN = 326, SUB_ASSIGN = 326,
RIGHT_PAREN = 327, LEFT_PAREN = 327,
LEFT_BRACKET = 328, RIGHT_PAREN = 328,
RIGHT_BRACKET = 329, LEFT_BRACKET = 329,
LEFT_BRACE = 330, RIGHT_BRACKET = 330,
RIGHT_BRACE = 331, LEFT_BRACE = 331,
DOT = 332, RIGHT_BRACE = 332,
COMMA = 333, DOT = 333,
COLON = 334, COMMA = 334,
EQUAL = 335, COLON = 335,
SEMICOLON = 336, EQUAL = 336,
BANG = 337, SEMICOLON = 337,
DASH = 338, BANG = 338,
TILDE = 339, DASH = 339,
PLUS = 340, TILDE = 340,
STAR = 341, PLUS = 341,
SLASH = 342, STAR = 342,
PERCENT = 343, SLASH = 343,
LEFT_ANGLE = 344, PERCENT = 344,
RIGHT_ANGLE = 345, LEFT_ANGLE = 345,
VERTICAL_BAR = 346, RIGHT_ANGLE = 346,
CARET = 347, VERTICAL_BAR = 347,
AMPERSAND = 348, CARET = 348,
QUESTION = 349 AMPERSAND = 349,
QUESTION = 350
}; };
#endif #endif
/* Tokens. */
#define INVARIANT 258
#define HIGH_PRECISION 259
#define MEDIUM_PRECISION 260
#define LOW_PRECISION 261
#define PRECISION 262
#define ATTRIBUTE 263
#define CONST_QUAL 264
#define BOOL_TYPE 265
#define FLOAT_TYPE 266
#define INT_TYPE 267
#define BREAK 268
#define CONTINUE 269
#define DO 270
#define ELSE 271
#define FOR 272
#define IF 273
#define DISCARD 274
#define RETURN 275
#define BVEC2 276
#define BVEC3 277
#define BVEC4 278
#define IVEC2 279
#define IVEC3 280
#define IVEC4 281
#define VEC2 282
#define VEC3 283
#define VEC4 284
#define MATRIX2 285
#define MATRIX3 286
#define MATRIX4 287
#define IN_QUAL 288
#define OUT_QUAL 289
#define INOUT_QUAL 290
#define UNIFORM 291
#define VARYING 292
#define STRUCT 293
#define VOID_TYPE 294
#define WHILE 295
#define SAMPLER2D 296
#define SAMPLERCUBE 297
#define SAMPLER_EXTERNAL_OES 298
#define IDENTIFIER 299
#define TYPE_NAME 300
#define FLOATCONSTANT 301
#define INTCONSTANT 302
#define BOOLCONSTANT 303
#define FIELD_SELECTION 304
#define LEFT_OP 305
#define RIGHT_OP 306
#define INC_OP 307
#define DEC_OP 308
#define LE_OP 309
#define GE_OP 310
#define EQ_OP 311
#define NE_OP 312
#define AND_OP 313
#define OR_OP 314
#define XOR_OP 315
#define MUL_ASSIGN 316
#define DIV_ASSIGN 317
#define ADD_ASSIGN 318
#define MOD_ASSIGN 319
#define LEFT_ASSIGN 320
#define RIGHT_ASSIGN 321
#define AND_ASSIGN 322
#define XOR_ASSIGN 323
#define OR_ASSIGN 324
#define SUB_ASSIGN 325
#define LEFT_PAREN 326
#define RIGHT_PAREN 327
#define LEFT_BRACKET 328
#define RIGHT_BRACKET 329
#define LEFT_BRACE 330
#define RIGHT_BRACE 331
#define DOT 332
#define COMMA 333
#define COLON 334
#define EQUAL 335
#define SEMICOLON 336
#define BANG 337
#define DASH 338
#define TILDE 339
#define PLUS 340
#define STAR 341
#define SLASH 342
#define PERCENT 343
#define LEFT_ANGLE 344
#define RIGHT_ANGLE 345
#define VERTICAL_BAR 346
#define CARET 347
#define AMPERSAND 348
#define QUESTION 349
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
typedef union YYSTYPE typedef union YYSTYPE
{ {
struct { struct {
TSourceLoc line; TSourceLoc line;
union { union {
...@@ -263,14 +171,15 @@ typedef union YYSTYPE ...@@ -263,14 +171,15 @@ typedef union YYSTYPE
TTypeList* typeList; TTypeList* typeList;
}; };
} interm; } interm;
}
/* Line 1489 of yacc.c. */
YYSTYPE;
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1 # define YYSTYPE_IS_DECLARED 1
# define YYSTYPE_IS_TRIVIAL 1
#endif #endif
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