]> granicus.if.org Git - re2c/commitdiff
Skeleton: don't emit declarations for tags that are optimized out.
authorUlya Trofimovich <skvadrik@gmail.com>
Fri, 7 Apr 2017 16:19:09 +0000 (17:19 +0100)
committerUlya Trofimovich <skvadrik@gmail.com>
Fri, 7 Apr 2017 16:19:09 +0000 (17:19 +0100)
re2c/src/skeleton/generate_code.cc

index e76ee0cfbd542950bc331a446c2eddeba900b581..c4c5d9cd5ef794eeb6b3effd7fc4b865aab5824b 100644 (file)
@@ -366,9 +366,6 @@ void emit_start(OutputFile &o, size_t maxfill, const std::string &name,
        o.ws("\n");
        o.ws("\n").wind(1).ws("for (i = 0; status == 0 && cursor < eof && i < keys_count;) {");
        o.ws("\n").wind(2).ws("token = cursor;");
-       if (!taglistnames.empty()) {
-               o.ws("\n").wind(2).ws("yytaglistpool_clear(&yytlp);");
-       }
        if (backup) {
                o.ws("\n").wind(2).ws("const YYCTYPE *marker = NULL;");
        }
@@ -383,9 +380,6 @@ void emit_start(OutputFile &o, size_t maxfill, const std::string &name,
        // autogenerated tag variables
        ConfTags conf("\n" + indent(2, opts->indString) + "const YYCTYPE *@@ = NULL;", "");
        output_tags(o.stream(), 0, conf, tagnames, opts);
-       conf.format = "yytaglist_t *@@ = NULL;";
-       output_tags(o.stream(), 0, conf, taglistnames, opts);
-
        // user-defined tag variables
        std::set<std::string>::const_iterator
                var1 = tagvars.begin(),
@@ -397,14 +391,21 @@ void emit_start(OutputFile &o, size_t maxfill, const std::string &name,
                }
                o.ws(";");
        }
-       var1 = taglistvars.begin();
-       var2 = taglistvars.end();
-       if (var1 != var2) {
-               o.ws("\n").wind(2).ws("yytaglist_t *").wstring(*var1);
-               for (++var1; var1 != var2; ++var1) {
-                       o.ws(", *").wstring(*var1);
+       if (!taglistnames.empty()) {
+               o.ws("\n").wind(2).ws("yytaglistpool_clear(&yytlp);");
+               // autogenerated tag list variables
+               conf.format = "yytaglist_t *@@ = NULL;";
+               output_tags(o.stream(), 0, conf, taglistnames, opts);
+               // user-defined tag list variables
+               var1 = taglistvars.begin();
+               var2 = taglistvars.end();
+               if (var1 != var2) {
+                       o.ws("\n").wind(2).ws("yytaglist_t *").wstring(*var1);
+                       for (++var1; var1 != var2; ++var1) {
+                               o.ws(", *").wstring(*var1);
+                       }
+                       o.ws(";");
                }
-               o.ws(";");
        }
 
        o.ws("\n");