You can now print enum.
This commit is contained in:
parent
4364b47e48
commit
346a12c210
3 changed files with 10 additions and 14 deletions
|
@ -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:
|
||||
|
@ -284,6 +279,7 @@ term:
|
|||
|
||||
| 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 ];
|
||||
|
||||
|
|
Loading…
Reference in a new issue