diff options
Diffstat (limited to 'parse.c')
| -rw-r--r-- | parse.c | 155 |
1 files changed, 0 insertions, 155 deletions
@@ -25,161 +25,6 @@ typedef int __builtin_va_list; #include "scope.h" #include "expression.h" -void show_statement(struct statement *stmt) -{ - if (!stmt) { - printf("\t<nostatement>"); - return; - } - switch (stmt->type) { - case STMT_RETURN: - printf("\treturn "); - show_expression(stmt->expression); - break; - case STMT_COMPOUND: - printf("{\n"); - if (stmt->syms) { - printf("\t"); - show_symbol_list(stmt->syms, "\n\t"); - printf("\n\n"); - } - show_statement_list(stmt->stmts, ";\n"); - printf("\n}\n\n"); - break; - case STMT_EXPRESSION: - printf("\t"); - show_expression(stmt->expression); - return; - case STMT_IF: - printf("\tif ("); - show_expression(stmt->if_conditional); - printf(")\n"); - show_statement(stmt->if_true); - if (stmt->if_false) { - printf("\nelse\n"); - show_statement(stmt->if_false); - } - break; - case STMT_SWITCH: - printf("\tswitch ("); - show_expression(stmt->switch_expression); - printf(")\n"); - show_statement(stmt->switch_statement); - break; - - case STMT_CASE: - if (!stmt->case_expression) - printf("default"); - else { - printf("case "); - show_expression(stmt->case_expression); - if (stmt->case_to) { - printf(" ... "); - show_expression(stmt->case_to); - } - } - printf(":"); - show_statement(stmt->case_statement); - break; - - case STMT_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: - printf("WTF"); - } -} - -static void show_one_statement(struct statement *stmt, void *sep, int flags) -{ - show_statement(stmt); - if (!(flags & ITERATE_LAST)) - printf("%s", (const char *)sep); -} - -void show_statement_list(struct statement_list *stmt, const char *sep) -{ - statement_iterate(stmt, show_one_statement, (void *)sep); -} - -void show_expression(struct expression *expr) -{ - if (!expr) - return; - - printf("< "); - switch (expr->type) { - case EXPR_BINOP: - show_expression(expr->left); - printf(" %s ", show_special(expr->op)); - show_expression(expr->right); - break; - case EXPR_PREOP: - printf("%s<", show_special(expr->op)); - show_expression(expr->unop); - printf(">"); - break; - case EXPR_POSTOP: - show_expression(expr->unop); - printf(" %s ", show_special(expr->op)); - break; - case EXPR_CONSTANT: - printf("%s", show_token(expr->token)); - break; - case EXPR_SYMBOL: - if (!expr->symbol) { - warn(expr->token, "undefined symbol '%s'", show_token(expr->token)); - printf("<nosymbol>"); - break; - } - printf("<%s:", show_token(expr->symbol->token)); - show_type(expr->symbol); - printf(">"); - break; - case EXPR_DEREF: - show_expression(expr->deref); - printf("%s", show_special(expr->op)); - printf("%s", show_token(expr->member)); - break; - case EXPR_CAST: - printf("<cast>("); - show_type(expr->cast_type); - printf(")"); - show_expression(expr->cast_expression); - break; - default: - printf("WTF"); - } - printf(" >"); -} - struct statement *alloc_statement(struct token * token, int type) { struct statement *stmt = __alloc_statement(0); |
