]> git.sur5r.net Git - i3/i3/commitdiff
use the new parser by default
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 8 Oct 2012 11:26:42 +0000 (13:26 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 8 Oct 2012 11:26:42 +0000 (13:26 +0200)
you can force the old parser with the command line flag
--force-old-config-parser-v4.4-only (which will be present in v4.4 only,
as the name suggests)

include/all.h
include/commands_parser.h
include/config.h
src/cfgparse.y
src/main.c

index 9ac6a54f16c68c58aeb3064cdd00ac92b6cfd3a5..c9c4bbbe8acc3b478cdb65ac148a42ae4e540500 100644 (file)
@@ -80,7 +80,7 @@
 #include "commands.h"
 #include "commands_parser.h"
 #include "config_directives.h"
-//#include "config_parser.h"
+#include "config_parser.h"
 #include "fake_outputs.h"
 #include "display_version.h"
 
index 6ff8d54ea81a1ccdff2567fb3d9cc16ebec19d8d..fcc14ff58881f3ffbfb1096d9ff7b02afa673061 100644 (file)
@@ -27,6 +27,11 @@ struct CommandResult {
 
     /* Whether the command requires calling tree_render. */
     bool needs_tree_render;
+
+    /* The next state to transition to. Passed to the function so that we can
+     * determine the next state as a result of a function call, like
+     * cfg_criteria_pop_state() does. */
+    int next_state;
 };
 
 struct CommandResult *parse_command(const char *input);
index 76fee94d9c97f716c5a984a9679dc208202f1988..fd9c73032ef2506372439c637792e7d2f56ffe27 100644 (file)
@@ -24,6 +24,8 @@ extern char *current_configpath;
 extern Config config;
 extern SLIST_HEAD(modes_head, Mode) modes;
 extern TAILQ_HEAD(barconfig_head, Barconfig) barconfigs;
+/* defined in src/cfgparse.y */
+extern bool force_old_config_parser;
 
 /**
  * Used during the config file lexing/parsing to keep the state of the lexer
index 8bc7990ea9c5512ddb8cd7653ca503e6c8fabfec..2a22aae4ef6bef8197ceb65121bff3dd43bb569b 100644 (file)
@@ -13,6 +13,8 @@
 
 #include "all.h"
 
+bool force_old_config_parser = false;
+
 static pid_t configerror_pid = -1;
 
 static Match current_match;
@@ -625,15 +627,20 @@ void parse_file(const char *f) {
         }
     }
 
-    /* now lex/parse it */
-    yy_scan_string(new);
 
     context = scalloc(sizeof(struct context));
     context->filename = f;
 
-    if (yyparse() != 0) {
-        fprintf(stderr, "Could not parse configfile\n");
-        exit(1);
+    if (force_old_config_parser) {
+        /* now lex/parse it */
+        yy_scan_string(new);
+        if (yyparse() != 0) {
+            fprintf(stderr, "Could not parse configfile\n");
+            exit(1);
+        }
+    } else {
+        struct ConfigResult *config_output = parse_config(new, context);
+        yajl_gen_free(config_output->json_gen);
     }
 
     check_for_duplicate_bindings(context);
@@ -669,7 +676,8 @@ void parse_file(const char *f) {
         start_configerror_nagbar(f);
     }
 
-    yylex_destroy();
+    if (force_old_config_parser)
+        yylex_destroy();
     FREE(context->line_copy);
     free(context);
     FREE(font_pattern);
@@ -1485,6 +1493,7 @@ new_float:
 border_style:
     TOK_NORMAL optional_border_width
     {
+        /* FIXME: the whole border_style thing actually screws up when new_float is used because it overwrites earlier values :-/ */
         config.default_border_width = $2;
         $$ = BS_NORMAL;
     }
index 3b29f7a8c5c05d3c7746ecedee0d7ab634936b78..6d0f80cb124c44cbd1956d89fb87da56db036eb6 100644 (file)
@@ -269,6 +269,7 @@ int main(int argc, char *argv[]) {
         {"get_socketpath", no_argument, 0, 0},
         {"fake_outputs", required_argument, 0, 0},
         {"fake-outputs", required_argument, 0, 0},
+        {"force-old-config-parser-v4.4-only", no_argument, 0, 0},
         {0, 0, 0, 0}
     };
     int option_index = 0, opt;
@@ -372,6 +373,10 @@ int main(int argc, char *argv[]) {
                     LOG("Initializing fake outputs: %s\n", optarg);
                     fake_outputs = sstrdup(optarg);
                     break;
+                } else if (strcmp(long_options[option_index].name, "force-old-config-parser-v4.4-only") == 0) {
+                    LOG("FORCING OLD CONFIG PARSER!\n");
+                    force_old_config_parser = true;
+                    break;
                 }
                 /* fall-through */
             default: