summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--editors/awk.c167
1 files changed, 83 insertions, 84 deletions
diff --git a/editors/awk.c b/editors/awk.c
index 3d1c04a..34bcc17 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -1579,98 +1579,97 @@ static void chain_group(void)
chain_expr(OC_EXEC | Vx);
return;
}
- {
- /* TS_STATEMNT */
- debug_printf_parse("%s: TS_STATEMNT(?)\n", __func__);
- switch (t_info & OPCLSMASK) {
- case ST_IF:
- debug_printf_parse("%s: ST_IF\n", __func__);
- n = chain_node(OC_BR | Vx);
- n->l.n = parse_lrparen_list();
+
+ /* TS_STATEMNT */
+ debug_printf_parse("%s: TS_STATEMNT(?)\n", __func__);
+ switch (t_info & OPCLSMASK) {
+ case ST_IF:
+ debug_printf_parse("%s: ST_IF\n", __func__);
+ n = chain_node(OC_BR | Vx);
+ n->l.n = parse_lrparen_list();
+ chain_group();
+ n2 = chain_node(OC_EXEC);
+ n->r.n = seq->last;
+ if (next_token(TS_GRPSEQ | TC_GRPTERM | TC_ELSE) == TC_ELSE) {
chain_group();
- n2 = chain_node(OC_EXEC);
- n->r.n = seq->last;
- if (next_token(TS_GRPSEQ | TC_GRPTERM | TC_ELSE) == TC_ELSE) {
- chain_group();
- n2->a.n = seq->last;
- } else {
- rollback_token();
- }
- break;
+ n2->a.n = seq->last;
+ } else {
+ rollback_token();
+ }
+ break;
- case ST_WHILE:
- debug_printf_parse("%s: ST_WHILE\n", __func__);
- n2 = parse_lrparen_list();
- n = chain_loop(NULL);
- n->l.n = n2;
- break;
+ case ST_WHILE:
+ debug_printf_parse("%s: ST_WHILE\n", __func__);
+ n2 = parse_lrparen_list();
+ n = chain_loop(NULL);
+ n->l.n = n2;
+ break;
- case ST_DO:
- debug_printf_parse("%s: ST_DO\n", __func__);
- n2 = chain_node(OC_EXEC);
- n = chain_loop(NULL);
- n2->a.n = n->a.n;
- next_token(TC_WHILE);
- n->l.n = parse_lrparen_list();
- break;
+ case ST_DO:
+ debug_printf_parse("%s: ST_DO\n", __func__);
+ n2 = chain_node(OC_EXEC);
+ n = chain_loop(NULL);
+ n2->a.n = n->a.n;
+ next_token(TC_WHILE);
+ n->l.n = parse_lrparen_list();
+ break;
- case ST_FOR:
- debug_printf_parse("%s: ST_FOR\n", __func__);
- next_token(TC_LPAREN);
- n2 = parse_expr(TC_SEMICOL | TC_RPAREN);
- if (t_tclass & TC_RPAREN) { /* for-in */
- if (!n2 || (n2->info & OPCLSMASK) != OC_IN)
- syntax_error(EMSG_UNEXP_TOKEN);
- n = chain_node(OC_WALKINIT | VV);
- n->l.n = n2->l.n;
- n->r.n = n2->r.n;
- n = chain_loop(NULL);
- n->info = OC_WALKNEXT | Vx;
- n->l.n = n2->l.n;
- } else { /* for (;;) */
- n = chain_node(OC_EXEC | Vx);
- n->l.n = n2;
- n2 = parse_expr(TC_SEMICOL);
- n3 = parse_expr(TC_RPAREN);
- n = chain_loop(n3);
- n->l.n = n2;
- if (!n2)
- n->info = OC_EXEC;
- }
- break;
+ case ST_FOR:
+ debug_printf_parse("%s: ST_FOR\n", __func__);
+ next_token(TC_LPAREN);
+ n2 = parse_expr(TC_SEMICOL | TC_RPAREN);
+ if (t_tclass & TC_RPAREN) { /* for-in */
+ if (!n2 || (n2->info & OPCLSMASK) != OC_IN)
+ syntax_error(EMSG_UNEXP_TOKEN);
+ n = chain_node(OC_WALKINIT | VV);
+ n->l.n = n2->l.n;
+ n->r.n = n2->r.n;
+ n = chain_loop(NULL);
+ n->info = OC_WALKNEXT | Vx;
+ n->l.n = n2->l.n;
+ } else { /* for (;;) */
+ n = chain_node(OC_EXEC | Vx);
+ n->l.n = n2;
+ n2 = parse_expr(TC_SEMICOL);
+ n3 = parse_expr(TC_RPAREN);
+ n = chain_loop(n3);
+ n->l.n = n2;
+ if (!n2)
+ n->info = OC_EXEC;
+ }
+ break;
- case OC_PRINT:
- case OC_PRINTF:
- debug_printf_parse("%s: OC_PRINT[F]\n", __func__);
- n = chain_node(t_info);
- n->l.n = parse_expr(TS_OPTERM | TC_OUTRDR | TC_GRPTERM);
- if (t_tclass & TC_OUTRDR) {
- n->info |= t_info;
- n->r.n = parse_expr(TS_OPTERM | TC_GRPTERM);
- }
- if (t_tclass & TC_GRPTERM)
- rollback_token();
- break;
+ case OC_PRINT:
+ case OC_PRINTF:
+ debug_printf_parse("%s: OC_PRINT[F]\n", __func__);
+ n = chain_node(t_info);
+ n->l.n = parse_expr(TS_OPTERM | TC_OUTRDR | TC_GRPTERM);
+ if (t_tclass & TC_OUTRDR) {
+ n->info |= t_info;
+ n->r.n = parse_expr(TS_OPTERM | TC_GRPTERM);
+ }
+ if (t_tclass & TC_GRPTERM)
+ rollback_token();
+ break;
- case OC_BREAK:
- debug_printf_parse("%s: OC_BREAK\n", __func__);
- n = chain_node(OC_EXEC);
- n->a.n = break_ptr;
- chain_expr(t_info);
- break;
+ case OC_BREAK:
+ debug_printf_parse("%s: OC_BREAK\n", __func__);
+ n = chain_node(OC_EXEC);
+ n->a.n = break_ptr;
+ chain_expr(t_info);
+ break;
- case OC_CONTINUE:
- debug_printf_parse("%s: OC_CONTINUE\n", __func__);
- n = chain_node(OC_EXEC);
- n->a.n = continue_ptr;
- chain_expr(t_info);
- break;
+ case OC_CONTINUE:
+ debug_printf_parse("%s: OC_CONTINUE\n", __func__);
+ n = chain_node(OC_EXEC);
+ n->a.n = continue_ptr;
+ chain_expr(t_info);
+ break;
- /* delete, next, nextfile, return, exit */
- default:
- debug_printf_parse("%s: default\n", __func__);
- chain_expr(t_info);
- }
+ /* delete, next, nextfile, return, exit */
+ default:
+ debug_printf_parse("%s: default\n", __func__);
+ chain_expr(t_info);
}
}