]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
Defined CF_ENUM.
authorMartin Mares <mj@ucw.cz>
Mon, 15 Nov 1999 11:35:41 +0000 (11:35 +0000)
committerMartin Mares <mj@ucw.cz>
Mon, 15 Nov 1999 11:35:41 +0000 (11:35 +0000)
conf/cf-lex.l
conf/confbase.Y
conf/gen_keywords.m4
conf/gen_parser.m4

index 797dbeac2910e530c7a52da49fa5114d3e60e17f..5959e70190a6d0210bdcea3b788f2a254b501d17 100644 (file)
@@ -9,14 +9,14 @@
 %{
 #undef REJECT     /* Avoid name clashes */
 
-#include "filter/filter.h"
-
 #include <errno.h>
 #include <stdlib.h>
 #include <string.h>
 #include <stdarg.h>
 
 #include "nest/bird.h"
+#include "nest/route.h"
+#include "filter/filter.h"
 #include "conf/conf.h"
 #include "conf/cf-parse.tab.h"
 
@@ -119,7 +119,15 @@ WHITE [ \t]
   while (k)
     {
       if (!strcmp(k->name, yytext))
-       return k->value;
+       {
+         if (k->value > 0)
+           return k->value;
+         else
+           {
+             cf_lval.i = -k->value;
+             return ENUM;
+           }
+       }
       k=k->next;
     }
   cf_lval.s = cf_find_sym(yytext, h);
index 0ec74538c4fe4bc58ea4bb29e2b5374c3e8e8802..bf4ed331174883b39a2cac2a72665a2dc9e72b59 100644 (file)
@@ -38,7 +38,7 @@ CF_DECLS
 }
 
 %token END CLI_MARKER
-%token <i> NUM
+%token <i> NUM ENUM
 %token <i32> RTRID
 %token <a> IPA
 %token <s> SYM
index 37b882b567be6c00f28df0c09949b5272a9d99db..1c77cd5c4584289e1cf73db74ad1095194e3099d 100644 (file)
@@ -22,6 +22,11 @@ m4_define(CF_KEYWORDS, `m4_define([[CF_toks]],[[]])CF_iterate([[CF_keywd]], [[$@
 m4_define(CF_CLI, `CF_KEYWORDS(m4_translit($1, [[ ]], [[,]]))
 ')
 
+# Enums are translated to C initializers: use CF_ENUM(typename, prefix, values)
+m4_define(CF_enum, `m4_divert(0){ "CF_enum_prefix[[]]$1", -((CF_enum_type<<16) | CF_enum_prefix[[]]$1) },
+m4_divert(-1)')
+m4_define(CF_ENUM, `m4_define([[CF_enum_type]],$1)m4_define([[CF_enum_prefix]],$2)CF_iterate([[CF_enum]], [[m4_shift(m4_shift($@))]])DNL')
+
 # As we are processing C source, we must access all M4 primitives via
 # m4_* and also set different quoting convention: `[[' and ']]'
 m4_changequote([[,]])
index 8441c83b3dd1a6113b804f8aba75d34b16d5eea5..d38df21ee4d9e60425769d6f6da6b929edb58c30 100644 (file)
@@ -44,6 +44,9 @@ m4_divert(2)CF_KEYWORDS(m4_translit($1, [[ ]], [[,]]))
 m4_divert(3)CF_ADDTO(cli_cmd, CF_cmd)
 CF_cmd: $1 ')
 
+# ENUM declarations are ignored
+m4_define(CF_ENUM, `')
+
 # After all configuration templates end, we finally generate the grammar file.
 m4_m4wrap(`
 m4_divert(0)DNL