Commit 346a12c2 authored by Pavel Machek's avatar Pavel Machek
Browse files

You can now print enum.

parent 4364b47e
......@@ -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'; }
......
......@@ -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 );
......
......@@ -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 ];
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment