You can now print enum.

This commit is contained in:
Pavel Machek 1999-11-18 13:21:52 +00:00
parent 4364b47e48
commit 346a12c210
3 changed files with 10 additions and 14 deletions

View file

@ -9,6 +9,8 @@
FIXME: whole system of paths, path ~ string, path.prepend(), path.originate FIXME: whole system of paths, path ~ string, path.prepend(), path.originate
FIXME: create community lists FIXME: create community lists
FIXME: write access to dynamic attributes. 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 CF_HDR
@ -29,7 +31,7 @@ CF_KEYWORDS(FUNCTION, PRINT, PRINTN, CONST,
INT, BOOL, IP, PREFIX, PAIR, SET, STRING, INT, BOOL, IP, PREFIX, PAIR, SET, STRING,
IF, THEN, ELSE, CASE, IF, THEN, ELSE, CASE,
TRUE, FALSE, TRUE, FALSE,
RTA, FROM, GW, NET, MASK, RIP_METRIC, RIP_TAG, RTA, FROM, GW, NET, MASK, RIP_METRIC, RIP_TAG, SOURCE,
LEN, LEN,
DEFINED, DEFINED,
IMPOSSIBLE, IMPOSSIBLE,
@ -261,13 +263,6 @@ term:
| SYM { | SYM {
$$ = f_new_inst(); $$ = f_new_inst();
switch ($1->class) { 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_INT:
case SYM_VARIABLE | T_PAIR: case SYM_VARIABLE | T_PAIR:
case SYM_VARIABLE | T_PREFIX: case SYM_VARIABLE | T_PREFIX:
@ -284,6 +279,7 @@ term:
| RTA '.' GW { $$ = f_new_inst(); $$->code = 'a'; $$->a1.i = T_IP; $$->a2.i = OFFSETOF(struct rta, gw); } | 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 '.' 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'; } | RTA '.' any_dynamic { $$ = $3; $$->code = 'ea'; }

View 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_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_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_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 ); default: PRINTF( "[unknown type %x]", v.type );
} }
printf( buf ); printf( buf );

View file

@ -13,8 +13,7 @@ int local1;
int local2; int local2;
int i; int i;
{ {
print "Ok"; printn "Function callme called arguments " arg1 " and " arg2 ":";
print "Function callme called arguments " arg1 " and " arg2;
i = arg2; i = arg2;
case arg1 { case arg1 {
@ -47,7 +46,7 @@ ip p;
p = 127.1.2.3; p = 127.1.2.3;
print "Testing mask : 127.0.0.0 = " p.mask(8); print "Testing mask : 127.0.0.0 = " p.mask(8);
print "Testing pairs: (1,2) = " (1,2); 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 ]; print "What will this do? " [ 1, 2, 1, 1, 1, 3, 4, 1, 1, 1, 5 ];