Add a helper function to the lexer to tokenize strings that can be identifiers…

Add a helper function to the lexer to tokenize strings that can be identifiers in ES2 and are keywords in ES3. For instance, uint, or the non-square matrix keywords. TRAC #23218 Signed-off-by: Geoff Lang Signed-off-by: Nicolas Capens Author: Jamie Madill git-svn-id: https://angleproject.googlecode.com/svn/branches/es3proto@2390 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 35f156d9
...@@ -56,6 +56,7 @@ static int check_type(yyscan_t yyscanner); ...@@ -56,6 +56,7 @@ static int check_type(yyscan_t yyscanner);
static int reserved_word(yyscan_t yyscanner); static int reserved_word(yyscan_t yyscanner);
static int ES2_reserved_ES3_keyword(TParseContext *context, int token); static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
static int ES2_keyword_ES3_reserved(TParseContext *context, int token); static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
static int ES2_ident_ES3_keyword(TParseContext *context, int token);
%} %}
%option noyywrap nounput never-interactive %option noyywrap nounput never-interactive
...@@ -406,6 +407,21 @@ int ES2_keyword_ES3_reserved(TParseContext *context, int token) ...@@ -406,6 +407,21 @@ int ES2_keyword_ES3_reserved(TParseContext *context, int token)
return token; return token;
} }
int ES2_ident_ES3_keyword(TParseContext *context, int token)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
yyscan_t yyscanner = (yyscan_t) context->scanner;
// not a reserved word in GLSL ES 1.00, so could be used as an identifier/type name
if (context->shaderVersion < 300)
{
yylval->lex.string = NewPoolTString(yytext);
return check_type(yyscanner);
}
return token;
}
void yyerror(TParseContext* context, const char* reason) { void yyerror(TParseContext* context, const char* reason) {
struct yyguts_t* yyg = (struct yyguts_t*) context->scanner; struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
......
...@@ -996,6 +996,7 @@ static int check_type(yyscan_t yyscanner); ...@@ -996,6 +996,7 @@ static int check_type(yyscan_t yyscanner);
static int reserved_word(yyscan_t yyscanner); static int reserved_word(yyscan_t yyscanner);
static int ES2_reserved_ES3_keyword(TParseContext *context, int token); static int ES2_reserved_ES3_keyword(TParseContext *context, int token);
static int ES2_keyword_ES3_reserved(TParseContext *context, int token); static int ES2_keyword_ES3_reserved(TParseContext *context, int token);
static int ES2_ident_ES3_keyword(TParseContext *context, int token);
#define INITIAL 0 #define INITIAL 0
#define COMMENT 1 #define COMMENT 1
...@@ -3140,6 +3141,21 @@ int ES2_keyword_ES3_reserved(TParseContext *context, int token) ...@@ -3140,6 +3141,21 @@ int ES2_keyword_ES3_reserved(TParseContext *context, int token)
return token; return token;
} }
int ES2_ident_ES3_keyword(TParseContext *context, int token)
{
struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
yyscan_t yyscanner = (yyscan_t) context->scanner;
// not a reserved word in GLSL ES 1.00, so could be used as an identifier/type name
if (context->shaderVersion < 300)
{
yylval->lex.string = NewPoolTString(yytext);
return check_type(yyscanner);
}
return token;
}
void yyerror(TParseContext* context, const char* reason) { void yyerror(TParseContext* context, const char* reason) {
struct yyguts_t* yyg = (struct yyguts_t*) context->scanner; struct yyguts_t* yyg = (struct yyguts_t*) context->scanner;
......
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