glsl/lexer: use the linear allocator
authorMarek Olšák <marek.olsak@amd.com>
Fri, 7 Oct 2016 15:37:04 +0000 (17:37 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Mon, 31 Oct 2016 10:53:38 +0000 (11:53 +0100)
Tested-by: Edmondo Tommasina <edmondo.tommasina@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
src/compiler/glsl/glsl_lexer.ll
src/compiler/glsl/glsl_parser_extras.cpp
src/compiler/glsl/glsl_parser_extras.h

index d5e5d4cb73b7e233212f30b644e6e7e3d28416cb..b473af7845c031e330330dccf3cc65ee233287ef 100644 (file)
@@ -80,8 +80,8 @@ static int classify_identifier(struct _mesa_glsl_parse_state *, const char *);
                          "illegal use of reserved word `%s'", yytext); \
         return ERROR_TOK;                                              \
       } else {                                                         \
-        void *mem_ctx = yyextra;                                       \
-        yylval->identifier = ralloc_strdup(mem_ctx, yytext);           \
+        void *mem_ctx = yyextra->linalloc;                                     \
+        yylval->identifier = linear_strdup(mem_ctx, yytext);           \
         return classify_identifier(yyextra, yytext);                   \
       }                                                                        \
    } while (0)
@@ -245,8 +245,8 @@ HASH                ^{SPC}#{SPC}
 <PP>[ \t\r]*                   { }
 <PP>:                          return COLON;
 <PP>[_a-zA-Z][_a-zA-Z0-9]*     {
-                                  void *mem_ctx = yyextra;
-                                  yylval->identifier = ralloc_strdup(mem_ctx, yytext);
+                                  void *mem_ctx = yyextra->linalloc;
+                                  yylval->identifier = linear_strdup(mem_ctx, yytext);
                                   return IDENTIFIER;
                                }
 <PP>[1-9][0-9]*                        {
@@ -429,8 +429,8 @@ layout              {
                       || yyextra->ARB_tessellation_shader_enable) {
                      return LAYOUT_TOK;
                   } else {
-                     void *mem_ctx = yyextra;
-                     yylval->identifier = ralloc_strdup(mem_ctx, yytext);
+                     void *mem_ctx = yyextra->linalloc;
+                     yylval->identifier = linear_strdup(mem_ctx, yytext);
                      return classify_identifier(yyextra, yytext);
                   }
                }
@@ -590,13 +590,13 @@ subroutine        KEYWORD_WITH_ALT(400, 300, 400, 0, yyextra->ARB_shader_subroutine_ena
 
 [_a-zA-Z][_a-zA-Z0-9]* {
                            struct _mesa_glsl_parse_state *state = yyextra;
-                           void *ctx = state;  
+                           void *ctx = state->linalloc;
                            if (state->es_shader && strlen(yytext) > 1024) {
                               _mesa_glsl_error(yylloc, state,
                                                "Identifier `%s' exceeds 1024 characters",
                                                yytext);
                            } else {
-                             yylval->identifier = ralloc_strdup(ctx, yytext);
+                             yylval->identifier = linear_strdup(ctx, yytext);
                            }
                            return classify_identifier(state, yytext);
                        }
index b351180a0fba18d354f1cc2946d22b51ca5315e3..48c90200005e1c84fae40b6d49a1f03686fcb3d0 100644 (file)
@@ -67,6 +67,8 @@ _mesa_glsl_parse_state::_mesa_glsl_parse_state(struct gl_context *_ctx,
    this->translation_unit.make_empty();
    this->symbols = new(mem_ctx) glsl_symbol_table;
 
+   this->linalloc = linear_alloc_parent(this, 0);
+
    this->info_log = ralloc_strdup(mem_ctx, "");
    this->error = false;
    this->loop_nesting_ast = NULL;
index e50d08ad38cb0d9cc318a1bedfffc3999a3303b6..53abbbc997fc486d312daa67e1ee7d8c8ef223fb 100644 (file)
@@ -333,6 +333,8 @@ struct _mesa_glsl_parse_state {
    exec_list translation_unit;
    glsl_symbol_table *symbols;
 
+   void *linalloc;
+
    unsigned num_supported_versions;
    struct {
       unsigned ver;