return res
def format_blockdecl(node):
+ if hasattr(node, "knownBlock"):
+ return "ir_graph *irg"
+ else:
+ return "ir_node *block"
+
+def format_irgassign(node):
if hasattr(node, "knownBlock"):
return ""
else:
- return ", ir_node *block"
+ return "ir_graph *irg = get_Block_irg(block);\n"
def format_block(node):
if hasattr(node, "knownBlock"):
- return ""
+ return "irg"
else:
- return ", block"
+ return "block"
def format_curblock(node):
if hasattr(node, "knownBlock"):
- return ""
+ return "current_ir_graph"
else:
- return ", current_ir_graph->current_block"
+ return "current_ir_graph->current_block"
def format_insdecl(node):
arity = node.arity
env.filters['argdecls'] = format_argdecls
env.filters['args'] = format_args
env.filters['blockdecl'] = format_blockdecl
+env.filters['irgassign'] = format_irgassign
env.filters['block'] = format_block
env.filters['curblock'] = format_curblock
env.filters['insdecl'] = format_insdecl
constructor_template = env.from_string('''
-ir_node *new_rd_{{node.constrname}}(dbg_info *dbgi, ir_graph *irg{{node|blockdecl}}{{node|argdecls}})
+ir_node *new_rd_{{node.constrname}}(dbg_info *dbgi, {{node|blockdecl}}{{node|argdecls}})
{
ir_node *res;
ir_graph *rem = current_ir_graph;
+ {{node|irgassign}}
{{node|insdecl}}
current_ir_graph = irg;
res = new_ir_node(dbgi, irg, {{node.block}}, op_{{node.name}}, {{node.mode}}, {{node|arity_and_ins}});
return res;
}
-ir_node *new_r_{{node.constrname}}(ir_graph *irg{{node|blockdecl}}{{node|argdecls}})
+ir_node *new_r_{{node.constrname}}({{node|blockdecl}}{{node|argdecls}})
{
- return new_rd_{{node.constrname}}(NULL, irg{{node|block}}{{node|args}});
+ return new_rd_{{node.constrname}}(NULL, {{node|block}}{{node|args}});
}
ir_node *new_d_{{node.constrname}}(dbg_info *dbgi{{node|argdecls}})
{
ir_node *res;
{{ node.d_pre }}
- res = new_rd_{{node.constrname}}(dbgi, current_ir_graph{{node|curblock}}{{node|args}});
+ res = new_rd_{{node.constrname}}(dbgi, {{node|curblock}}{{node|args}});
{{ node.d_post }}
return res;
}
}
''')
+# not used - as we have the pn_ declarations in libfirm/irnode.h where they
+# contain informative comments
+# {% for node in nodes %}
+# {% if node.outs %}
+# typedef enum {
+# {%- for out in node.outs %}
+# pn_{{node.name}}_{{out}},
+# {%- endfor %}
+# pn_{{node.name}}_max
+# } pn_{{node.name}};
+# {% endif %}
+# {% endfor %}
+
irnode_h_template = env.from_string('''
/* Warning: automatically generated code */
free_ir_op(op_{{node.name}}); op_{{node.name}} = NULL;
{%- endfor %}
}
+
''')
#############################