X-Git-Url: http://nsz.repo.hu/git/?a=blobdiff_plain;ds=sidebyside;f=walk.c;h=c3d13ab8cf75aa31b6537e6a213ed8b21a8ecb6a;hb=296ba6e16420b89723d1a5b1217d6ecfc2fb0c7d;hp=ae097f15f3d39f58d7fdf2183673604c2487d130;hpb=d7f1c1ad6c742bbc6d0d49f15df476f7727f30af;p=cparser diff --git a/walk.c b/walk.c index ae097f1..c3d13ab 100644 --- a/walk.c +++ b/walk.c @@ -96,16 +96,16 @@ static void walk_expression(expression_t *const expr, walk_statement(expr->statement.statement, env); return; - EXPR_BINARY_CASES + case EXPR_BINARY_CASES: walk_expression(expr->binary.left, env); walk_expression(expr->binary.right, env); return; - EXPR_UNARY_CASES_OPTIONAL + case EXPR_UNARY_CASES_OPTIONAL: if (expr->unary.value == NULL) return; /* FALLTHROUGH */ - EXPR_UNARY_CASES_MANDATORY + case EXPR_UNARY_CASES_MANDATORY: walk_expression(expr->unary.value, env); return; @@ -176,11 +176,11 @@ static void walk_expression(expression_t *const expr, walk_designator(expr->offsetofe.designator, env); return; - EXPR_LITERAL_CASES + case EXPR_LITERAL_CASES: + case EXPR_LITERAL_CHARACTER: case EXPR_REFERENCE: - case EXPR_REFERENCE_ENUM_VALUE: + case EXPR_ENUM_CONSTANT: case EXPR_STRING_LITERAL: - case EXPR_WIDE_STRING_LITERAL: case EXPR_FUNCNAME: case EXPR_LABEL_ADDRESS: case EXPR_ERROR: @@ -214,8 +214,8 @@ static void walk_initializer(const initializer_t *initializer, case INITIALIZER_DESIGNATOR: walk_designator(initializer->designator.designator, env); return; + case INITIALIZER_STRING: - case INITIALIZER_WIDE_STRING: return; } } @@ -243,8 +243,8 @@ static void walk_entity(entity_t *entity, const walk_env_t *const env) return; case ENTITY_FUNCTION: walk_type(entity->declaration.type, env); - if (entity->function.statement != NULL) - walk_statement(entity->function.statement, env); + if (entity->function.body != NULL) + walk_statement(entity->function.body, env); return; case ENTITY_COMPOUND_MEMBER: case ENTITY_PARAMETER: @@ -268,8 +268,6 @@ static void walk_entity(entity_t *entity, const walk_env_t *const env) case ENTITY_LABEL: case ENTITY_LOCAL_LABEL: return; - case ENTITY_INVALID: - break; } panic("invalid entity found"); } @@ -329,14 +327,14 @@ static void walk_statement(statement_t *const stmt, const walk_env_t *const env) return; case STATEMENT_CASE_LABEL: + if (stmt->case_label.expression) { + walk_expression(stmt->case_label.expression, env); + if (stmt->case_label.end_range) + walk_expression(stmt->case_label.end_range, env); + } walk_statement(stmt->case_label.statement, env); return; - case STATEMENT_WHILE: - walk_expression(stmt->whiles.condition, env); - walk_statement(stmt->whiles.body, env); - return; - case STATEMENT_DO_WHILE: walk_statement(stmt->do_while.body, env); walk_expression(stmt->do_while.condition, env); @@ -361,12 +359,16 @@ static void walk_statement(statement_t *const stmt, const walk_env_t *const env) walk_statement(stmt->ms_try.final_statement, env); return; - case STATEMENT_INVALID: + case STATEMENT_COMPUTED_GOTO: + walk_expression(stmt->computed_goto.expression, env); + return; + + case STATEMENT_ERROR: case STATEMENT_EMPTY: case STATEMENT_CONTINUE: case STATEMENT_BREAK: - case STATEMENT_GOTO: case STATEMENT_ASM: + case STATEMENT_GOTO: case STATEMENT_LEAVE: return; }