diff options
| -rw-r--r-- | parse.c | 33 | ||||
| -rw-r--r-- | symbol.c | 1 |
2 files changed, 28 insertions, 6 deletions
@@ -78,7 +78,33 @@ void show_statement(struct statement *stmt) break; case STMT_BREAK: - printf("break"); + printf("\tbreak"); + break; + + case STMT_WHILE: + printf("\twhile ("); + show_expression(stmt->e1); + printf(")\n"); + show_statement(stmt->iterate); + break; + + case STMT_DO: + printf("\tdo"); + show_statement(stmt->iterate); + printf("\nwhile ("); + show_expression(stmt->e1); + printf(")\n"); + break; + + case STMT_FOR: + printf("\tfor (" ); + show_expression(stmt->e1); + printf(" ; "); + show_expression(stmt->e2); + printf(" ; "); + show_expression(stmt->e3); + printf(")\n"); + show_statement(stmt->iterate); break; default: @@ -218,11 +244,8 @@ static struct token *primary_expression(struct token *token, struct expression * break; case TOKEN_IDENT: { - struct symbol *sym = lookup_symbol(token->ident, NS_SYMBOL); - if (!sym) - warn(token, "undefined identifier '%s'", token->ident->name); expr = alloc_expression(token, EXPR_SYMBOL); - expr->symbol = sym; + expr->symbol = lookup_symbol(token->ident, NS_SYMBOL); token = token->next; break; } @@ -95,7 +95,6 @@ void show_type(struct symbol *sym) return; } - printf("[%04lx:%08lx]", ctype->modifiers, (unsigned long) ctype->base_type); printf("%s", modifier_string(sym->ctype.modifiers)); switch (sym->type) { |
