Newer
Older
/*
** ast_if.c for 42sh
**
** Made by Seblu
** Login <seblu@epita.fr>
**
** Started on Thu Aug 3 02:41:37 2006 Seblu
s_ast_node *ast_if_create(s_ast_node *cond,
s_ast_node *cond_true,
s_ast_node *cond_false)
node->type = T_IF;
node->body.child_if.cond = cond;
node->body.child_if.cond_true = cond_true;
node->body.child_if.cond_false = cond_false;
return node;
}
void ast_if_print(s_ast_node *node, FILE *fs, unsigned *node_id)
{
unsigned cur_node;
if (node->type != T_IF)
return;
fprintf(fs, "%u [label = \"IF\"];\n", cur_node = *node_id);
++*node_id;
//if
if (node->body.child_if.cond) {
fprintf(fs, "%u -> %u\n", cur_node, *node_id);
ast_print_node(node->body.child_if.cond, fs, node_id);
}
//then
if (node->body.child_if.cond_true) {
fprintf(fs, "%u -> %u\n", cur_node, *node_id);
ast_print_node(node->body.child_if.cond_true, fs, node_id);
}
//else
if (node->body.child_if.cond_false) {
fprintf(fs, "%u -> %u\n", cur_node, *node_id);
ast_print_node(node->body.child_if.cond_false, fs, node_id);
}
}