def f2003_search_unknowns(stmt, node, resolvers=None, gentype=None): if node is None: return # skip searching if specified if ( hasattr(node, 'skip_search') and node.skip_search ) or \ ( hasattr(node, 'parent') and hasattr(node.parent, 'skip_search') and node.parent.skip_search ): return # save in unknowns dict in stmt if not hasattr(stmt, 'unknowns'): stmt.unknowns = OrderedDict() clsname = node.__class__.__name__ if clsname == 'Name': get_name(stmt, node, resolvers, gentype=gentype) return itemclsname = None try: if clsname.endswith('_List'): _clsname = clsname[:-5] for item in node.items: if item is None: continue itemclsname = item.__class__.__name__ if itemclsname == 'Name': get_name(stmt, item, resolvers, gentype=gentype) else: exec('search_%s(stmt, item, gentype=gentype)' % itemclsname) elif clsname.startswith('End_'): pass else: exec('search_%s(stmt, node, gentype=gentype)' % clsname) except Exception as e: errname = clsname if itemclsname: errname = itemclsname errmsg = "Error: Fortran specification of %s is not supported yet." % errname Logger.exception(errmsg, node=node) if Config.search['promote_exception']: raise else: print '' print errmsg print '' print "'kgen.log' in output folder contains detail information of this error." print "If you send the log file to '*****@*****.**', that could be very" print "helpful for us to support this Fortran spec. in future KGEN version." print '' import sys sys.exit(-1)
def f2003_search_unknowns(stmt, node, resolvers=None, gentype=None): """Identify unknowns whose declaration statement will be searched by KGen. Parameters ---------- stmt : F2PY parser statement object Specify a statement object to be searched node : F2PY Fortran2003 parser object Specify an expression object to be searched resolvers : A list of statement classes for resolver Limits the classes of resolver gentype : Type of state data (IN or OUT) Specify the type of state data Returns ------- None See also -------- get_name_or_defer get_name defer defer_names """ if node is None: return # skip searching if specified if ( hasattr(node, 'skip_search') and node.skip_search ) or \ ( hasattr(node, 'parent') and hasattr(node.parent, 'skip_search') and node.parent.skip_search ): return # save in unknowns dict in stmt if not hasattr(stmt, 'unknowns'): stmt.unknowns = OrderedDict() clsname = node.__class__.__name__ if clsname == 'Name': get_name(stmt, node, resolvers, gentype=gentype) return itemclsname = None try: if clsname.endswith('_List'): _clsname = clsname[:-5] for item in node.items: if item is None: continue itemclsname = item.__class__.__name__ if itemclsname == 'Name': get_name(stmt, item, resolvers, gentype=gentype) else: exec('search_%s(stmt, item, gentype=gentype)' % itemclsname) elif clsname.startswith('End_'): pass else: exec('search_%s(stmt, node, gentype=gentype)' % clsname) except Exception as e: errname = clsname if itemclsname: errname = itemclsname errmsg = "Error: Fortran specification of %s is not supported yet." % errname Logger.exception(errmsg, node=node) if Config.search['promote_exception']: raise else: print '' print errmsg print '' print "'kgen.log' in output folder contains detail information of this error." print "If you send the log file to '*****@*****.**', that could be very" print "helpful for us to support this Fortran spec. in future KGEN version." print '' import sys sys.exit(-1)
def f2003_search_unknowns(stmt, node, resolvers=None, gentype=None): """Identify unknowns whose declaration statement will be searched by KGen. Parameters ---------- stmt : F2PY parser statement object Specify a statement object to be searched node : F2PY Fortran2003 parser object Specify an expression object to be searched resolvers : A list of statement classes for resolver Limits the classes of resolver gentype : Type of state data (IN or OUT) Specify the type of state data Returns ------- None See also -------- get_name_or_defer get_name defer defer_names """ if node is None: return # skip searching if specified if ( hasattr(node, 'skip_search') and node.skip_search ) or \ ( hasattr(node, 'parent') and hasattr(node.parent, 'skip_search') and node.parent.skip_search ): return # save in unknowns dict in stmt if not hasattr(stmt, 'unknowns'): stmt.unknowns = OrderedDict() clsname = node.__class__.__name__ if clsname=='Name': get_name(stmt, node, resolvers, gentype=gentype) return itemclsname = None try: if clsname.endswith('_List'): _clsname = clsname[:-5] for item in node.items: if item is None: continue itemclsname = item.__class__.__name__ if itemclsname=='Name': get_name(stmt, item, resolvers, gentype=gentype) else: exec('search_%s(stmt, item, gentype=gentype)' % itemclsname) elif clsname.startswith('End_'): pass else: exec('search_%s(stmt, node, gentype=gentype)' % clsname) except Exception as e: errname = clsname if itemclsname: errname = itemclsname errmsg = "Error: Fortran specification of %s is not supported yet."%errname Logger.exception(errmsg, node=node) if Config.search['promote_exception']: raise else: print '' print errmsg print '' print "'kgen.log' in output folder contains detail information of this error." print "If you send the log file to '*****@*****.**', that could be very" print "helpful for us to support this Fortran spec. in future KGEN version." print '' import sys sys.exit(-1)