]> git.ipfire.org Git - thirdparty/bird.git/commitdiff
You can now print enum.
authorPavel Machek <pavel@ucw.cz>
Thu, 18 Nov 1999 13:21:52 +0000 (13:21 +0000)
committerPavel Machek <pavel@ucw.cz>
Thu, 18 Nov 1999 13:21:52 +0000 (13:21 +0000)
filter/config.Y
filter/filter.c
filter/test.conf

index 5d84b9248a252d0546561a49231952663f036319..540a85d0791988ad04727e7c81d35821478e916b 100644 (file)
@@ -9,6 +9,8 @@
        FIXME: whole system of paths, path ~ string, path.prepend(), path.originate
        FIXME: create community lists
        FIXME: write access to dynamic attributes.
+       FIXME: '! =' should not be permitted. Ze `!=' by nemelo byt totez jako `! =' Nadefinujes si pres %token novy token a do cf-lex.l pridas nove pravidlo, ktere jej rozpoznava. Napriklad !=      return NEQ;
+
  */
 
 CF_HDR
@@ -29,7 +31,7 @@ CF_KEYWORDS(FUNCTION, PRINT, PRINTN, CONST,
        INT, BOOL, IP, PREFIX, PAIR, SET, STRING,
        IF, THEN, ELSE, CASE,
        TRUE, FALSE,
-       RTA, FROM, GW, NET, MASK, RIP_METRIC, RIP_TAG,
+       RTA, FROM, GW, NET, MASK, RIP_METRIC, RIP_TAG, SOURCE,
        LEN,
        DEFINED,
        IMPOSSIBLE,
@@ -261,13 +263,6 @@ term:
  | SYM {
      $$ = f_new_inst();
      switch ($1->class) {
-       case 0:         /* This should better be an enum */
-         $$->code = 'c';
-         $$->a1.i = $1->aux;
-         if (($$->a1.i < T_ENUM_LO) || ($$->a1.i > T_ENUM_HI))
-           cf_error("You used symbol and it was not enum.\n");
-         $$->a2.i = (int) $1->aux2;
-         break;
        case SYM_VARIABLE | T_INT:
        case SYM_VARIABLE | T_PAIR:
        case SYM_VARIABLE | T_PREFIX:
@@ -280,10 +275,11 @@ term:
      }
    }
 
- | RTA '.' FROM { $$ = f_new_inst(); $$->code = 'a'; $$->a1.i = T_IP; $$->a2.i = OFFSETOF(struct rta, from); }
+ | RTA '.' FROM    { $$ = f_new_inst(); $$->code = 'a'; $$->a1.i = T_IP; $$->a2.i = OFFSETOF(struct rta, from); }
 
- | RTA '.' GW { $$ = f_new_inst(); $$->code = 'a'; $$->a1.i = T_IP; $$->a2.i = OFFSETOF(struct rta, gw); }
- | RTA '.' NET { $$ = f_new_inst(); $$->code = 'a'; $$->a1.i = T_PREFIX; $$->a2.i = 0x12345678; }
+ | RTA '.' GW      { $$ = f_new_inst(); $$->code = 'a'; $$->a1.i = T_IP; $$->a2.i = OFFSETOF(struct rta, gw); }
+ | RTA '.' NET     { $$ = f_new_inst(); $$->code = 'a'; $$->a1.i = T_PREFIX; $$->a2.i = 0x12345678; }
+ | RTA '.' SOURCE  { $$ = f_new_inst(); $$->code = 'a'; $$->a1.i = T_ENUM_RTS; $$->a2.i = OFFSETOF(struct rta, gw); }
 
  | RTA '.' any_dynamic { $$ = $3; $$->code = 'ea'; }
 
index 0dc4b2131463f243db92a44fac1bfb649f7431ad..a26b9e6f68960c9484ba98bc39201afb375027a6 100644 (file)
@@ -152,6 +152,7 @@ val_print(struct f_val v)
   case T_PREFIX: PRINTF( "%I/%d", v.val.px.ip, v.val.px.len ); break;
   case T_PAIR: PRINTF( "(%d,%d)", v.val.i >> 16, v.val.i & 0xffff ); break;
   case T_SET: tree_print( v.val.t ); PRINTF( "\n" ); break;
+  case T_ENUM: PRINTF( "(enum %x)%d", v.type, v.val.i ); break;
   default: PRINTF( "[unknown type %x]", v.type );
   }
   printf( buf );
index 6f102a89827e3e3a70797568fc9b0958bda8c5f6..97aaf8f9e0d8098b010a53dee509de686b477c8a 100644 (file)
@@ -13,8 +13,7 @@ int local1;
 int local2;
 int i;
 {
-       print "Ok";
-       print "Function callme called arguments " arg1 " and " arg2;
+       printn "Function callme called arguments " arg1 " and " arg2 ":";
        i = arg2;
 
        case arg1 {
@@ -47,7 +46,7 @@ ip p;
        p = 127.1.2.3;
        print "Testing mask : 127.0.0.0 = " p.mask(8);
        print "Testing pairs: (1,2) = " (1,2);
-#
+       print "Testing enums: " RTS_DUMMY " " RTS_STATIC;
 
        print "What will this do? " [ 1, 2, 1, 1, 1, 3, 4, 1, 1, 1, 5 ];