コード例 #1
0
ファイル: kgen_search.py プロジェクト: mikebentley15/KGen
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)
コード例 #2
0
ファイル: kgen_search.py プロジェクト: ydjung11/KGen
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)
コード例 #3
0
ファイル: kgen_search.py プロジェクト: NCAR/KGen
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)