summaryrefslogtreecommitdiff
path: root/ast.c
diff options
context:
space:
mode:
authorSøren Sandmann <sandmann@redhat.com>2007-09-05 22:57:52 -0400
committerSøren Sandmann <sandmann@redhat.com>2007-09-05 22:57:52 -0400
commitbc63448c5cf216a2b9a42fbefc377c0fb751c430 (patch)
treebb82811aa3ab146e312f2ca5feaf01c541801ba2 /ast.c
parent72a3726d206853d07bb677bcfe7087b4c14975a2 (diff)
Initial support for switch statements
Diffstat (limited to 'ast.c')
-rw-r--r--ast.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/ast.c b/ast.c
index 5f491e1..27bb2c8 100644
--- a/ast.c
+++ b/ast.c
@@ -114,6 +114,7 @@ case_new (ast_case_type_t type,
{
ast_t *ast = ast_new (AST_CASE);
+ ast->case_.common.type = type;
ast->case_.common.statement = statement;
return (ast_case_t *)ast;
@@ -629,3 +630,23 @@ ast_enclosing_do (ast_t *ast)
return (ast_do_statement_t *)enclosing (
ast, AST_STATEMENT, AST_DO_STATEMENT);
}
+
+ast_switch_statement_t *
+ast_enclosing_switch (ast_t *ast)
+{
+ return (ast_switch_statement_t *)enclosing (
+ ast, AST_STATEMENT, AST_SWITCH_STATEMENT);
+}
+
+gboolean
+ast_encloses (ast_t *outer,
+ ast_t *inner)
+{
+ if (!inner)
+ return FALSE;
+
+ if (inner == outer)
+ return TRUE;
+ else
+ return ast_encloses (outer, inner->common.parent);
+}