Index: trunk/src_plugins/order/const_gram.c =================================================================== --- trunk/src_plugins/order/const_gram.c (revision 36862) +++ trunk/src_plugins/order/const_gram.c (revision 36863) @@ -218,6 +218,13 @@ return n; } +static pcb_ordc_node_t *var2node(char *s) +{ + pcb_ordc_node_t *n = new_node(PCB_ORDC_VAR); + n->val.s = s; + return n; +} + static pcb_ordc_node_t *int2node(long l) { pcb_ordc_node_t *n = new_node(PCB_ORDC_CINT); @@ -241,7 +248,7 @@ parent->ch_first = newch; } -#line 257 "../src_plugins/order/const_gram.c" +#line 264 "../src_plugins/order/const_gram.c" #if pcb_ordc_DEBUG #include /* needed for printf */ @@ -516,27 +523,27 @@ break; case 19: #line 110 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = NULL; } + { yyctx->val.un.tree = float2node(yyctx->stack.l_mark[0].un.d); } break; case 20: #line 111 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = NULL; } + { yyctx->val.un.tree = qstr2node(yyctx->stack.l_mark[0].un.s); } break; case 21: #line 112 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = NULL; } + { yyctx->val.un.tree = var2node(yyctx->stack.l_mark[0].un.s); } break; case 22: #line 114 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = NULL; } + { yyctx->val.un.tree = unop(PCB_ORDC_INT, yyctx->stack.l_mark[-1].un.tree); } break; case 23: #line 115 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = NULL; } + { yyctx->val.un.tree = unop(PCB_ORDC_STRING, yyctx->stack.l_mark[-1].un.tree); } break; case 24: #line 116 "../src_plugins/order/const_gram.y" - { yyctx->val.un.tree = NULL; } + { yyctx->val.un.tree = unop(PCB_ORDC_FLOAT, yyctx->stack.l_mark[-1].un.tree); } break; case 25: #line 121 "../src_plugins/order/const_gram.y" @@ -550,7 +557,7 @@ #line 128 "../src_plugins/order/const_gram.y" { yyctx->val.un.tree = binop(PCB_ORDC_ERROR, id2node(yyctx->stack.l_mark[-4].un.s), qstr2node(yyctx->stack.l_mark[-2].un.s)); } break; -#line 566 "../src_plugins/order/const_gram.c" +#line 573 "../src_plugins/order/const_gram.c" } yyctx->stack.s_mark -= yyctx->yym; yyctx->state = *yyctx->stack.s_mark; Index: trunk/src_plugins/order/const_gram.y =================================================================== --- trunk/src_plugins/order/const_gram.y (revision 36862) +++ trunk/src_plugins/order/const_gram.y (revision 36863) @@ -107,13 +107,13 @@ | expr '-' expr { $$ = binop(PCB_ORDC_SUB, $1, $3); } | T_CINT { $$ = int2node($1); } - | T_CFLOAT { $$ = NULL; } - | T_QSTR { $$ = NULL; } - | '$' T_ID { $$ = NULL; } + | T_CFLOAT { $$ = float2node($1); } + | T_QSTR { $$ = qstr2node($1); } + | '$' T_ID { $$ = var2node($2); } - | T_INT '(' expr ')' { $$ = NULL; } - | T_STRING '(' expr ')' { $$ = NULL; } - | T_FLOAT '(' expr ')' { $$ = NULL; } + | T_INT '(' expr ')' { $$ = unop(PCB_ORDC_INT, $3); } + | T_STRING '(' expr ')' { $$ = unop(PCB_ORDC_STRING, $3); } + | T_FLOAT '(' expr ')' { $$ = unop(PCB_ORDC_FLOAT, $3); } ; /*** statements ***/ @@ -168,6 +168,13 @@ return n; } +static pcb_ordc_node_t *var2node(char *s) +{ + pcb_ordc_node_t *n = new_node(PCB_ORDC_VAR); + n->val.s = s; + return n; +} + static pcb_ordc_node_t *int2node(long l) { pcb_ordc_node_t *n = new_node(PCB_ORDC_CINT);