becopyheur: Reduce the number of -> indirections.
[libfirm] / scripts / gen_ir_io.py
index 5c86c84..edc257d 100755 (executable)
@@ -1,10 +1,11 @@
 #!/usr/bin/env python
+#
+# This file is part of libFirm.
+# Copyright (C) 2012 Karlsruhe Institute of Technology.
 import sys
-import re
 from jinja2 import Environment, Template
-from jinja2.filters import do_dictsort
-from spec_util import is_dynamic_pinned, verify_node, isAbstract
-import ir_spec
+from spec_util import is_dynamic_pinned, isAbstract, load_spec
+from filters import format_arguments, filter_isnot, filter_hasnot, filter_notset
 
 def error(msg):
        """writes an error message to stderr"""
@@ -25,23 +26,6 @@ def format_block(node):
        else:
                return "block"
 
-def format_arguments(string):
-       args = re.split('\s*\n\s*', string)
-       if args[0] == '':
-               args = args[1:]
-       if len(args) > 0 and args[-1] == '':
-               args = args[:-1]
-       return ", ".join(args)
-
-def filter_isnot(list, flag):
-       return filter(lambda x: not hasattr(x, flag), list)
-
-def filter_notset(list, flag):
-       return filter(lambda x: not getattr(x,flag), list)
-
-def filter_hasnot(list, flag):
-       return filter(lambda x: flag not in x, list)
-
 env = Environment()
 env.filters['args']      = format_args
 env.filters['block']     = format_block
@@ -118,8 +102,6 @@ def prepare_attr(node, attr):
 
 
 def preprocess_node(node):
-       verify_node(node)
-
        if node.customSerializer:
                return
 
@@ -181,7 +163,7 @@ static ir_node *read_{{node.name}}(read_env_t *env)
        {%- endif %}
        {%- if node.arity == "dynamic" or node.arity == "variable" %}
        int       n_preds = read_preds(env);
-       ir_node **preds   = obstack_finish(&env->preds_obst);
+       ir_node **preds   = (ir_node**)obstack_finish(&env->preds_obst);
        {%- endif %}
        {%- if node.constructorFlags %}
        ir_cons_flags flags = cons_none;
@@ -194,10 +176,10 @@ static ir_node *read_{{node.name}}(read_env_t *env)
                        {%- endif %}
                {%- endfor %}
                {%- if node.dynamic_pinned %}
-       flags |= pin_state == op_pin_state_floats ? cons_floats : 0;
+       flags |= pin_state == op_pin_state_floats ? cons_floats : cons_none;
                {%- endif %}
                {%- if "fragile" in node.flags %}
-       flags |= throws ? cons_throws_exception : 0;
+       flags |= throws ? cons_throws_exception : cons_none;
                {%- endif %}
        {%- endif %}
        res = new_r_{{node.name}}(
@@ -269,6 +251,7 @@ static void register_generated_node_writers(void)
        register_node_writer(op_{{node.name}}, write_{{node.name}});
        {%- endfor %}
 }
+
 ''')
 
 def main(argv):
@@ -276,10 +259,13 @@ def main(argv):
                print "usage: %s specname(ignored) destdirectory" % argv[0]
                sys.exit(1)
 
+       specfile = argv[1]
        gendir = argv[2]
 
+       spec = load_spec(specfile)
+       nodes = spec.nodes
        real_nodes = []
-       for node in ir_spec.nodes:
+       for node in nodes:
                if isAbstract(node):
                        continue
                preprocess_node(node)