diff options
author | Søren Sandmann <sandmann@redhat.com> | 2007-07-26 03:02:02 -0400 |
---|---|---|
committer | Søren Sandmann <sandmann@redhat.com> | 2007-07-26 03:02:02 -0400 |
commit | c869dc2e15576dcd8b12a3f15a52e361a51e6566 (patch) | |
tree | ac31bbbddd6446a6137f342f6d49099740edc180 /ast.c | |
parent | 94c5d40908cff06b938efe86727623534de6d791 (diff) |
Add ast_is() function; use it in symbol.c
Diffstat (limited to 'ast.c')
-rw-r--r-- | ast.c | 30 |
1 files changed, 30 insertions, 0 deletions
@@ -48,6 +48,36 @@ ast_statement_new_while (ast_expression_t *condition, return statement; } +gboolean +ast_is (ast_t *ast, + ast_type_t type, + int subtype) +{ + if (ast->common.type != type) + return FALSE; + + switch (type) + { + case AST_DEFINITION: + return subtype == ast->definition.common.type; + + case AST_STATEMENT: + return subtype == ast->statement.common.type; + + case AST_EXPRESSION: + return subtype == ast->expression.common.type; + + case AST_TYPE_SPEC: + return subtype == ast->type_spec.common.type; + + case AST_PROGRAM: + return TRUE; + } + + g_assert_not_reached(); + return FALSE; +} + ast_statement_t * ast_statement_new_for (ast_expression_t *first, ast_expression_t *second, |