new->parent = TREENULL;
new->label = NULL;
new->name = new->reg = (char *)NULL;
- new->val = 0;
+ new->val = new->paramges = new->vars = 0;
new->param_index = -1;
return new;
}
+struct treenode *new_nothing(void)
+{
+ return new_node(O_NOTHING, TREENULL, TREENULL);
+}
+
struct treenode *new_node(int op, struct treenode *l, struct treenode *r)
{
struct treenode *new = TREENULL;
return new;
}
-struct treenode *new_call(char *name, struct treenode *l, struct treenode *r)
+struct treenode *new_arg(struct treenode *l, struct treenode *r, int soffset)
+{
+ struct treenode *new = new_node(O_ARG, l, r);
+
+#ifdef DDTREE
+ fprintf(stderr, "new_arg: %i (soffset)\n", soffset);
+#endif
+ new->soffset = soffset;
+ new->name = (char *) malloc(10);
+ sprintf(new->name, "%i", soffset);
+ return new;
+}
+
+struct treenode *new_call(char *name, struct treenode *l, struct treenode *r, int paramges, int vars)
{
struct treenode *new = new_node(O_CALL, l, r);
fprintf(stderr, "new_call\n");
#endif
new->name = name;
+ new->paramges = paramges;
+ new->vars = vars;
return new;
}
}
}
+void just_calls(struct treenode *node)
+{
+ if(node == TREENULL) {
+ return;
+ } else if(node->op == O_CALL) {
+ write_tree(node, 0); burm_label(node); burm_reduce(node, 1);
+ } else {
+ just_calls(node->kids[0]);
+ just_calls(node->kids[1]);
+ }
+}