コード例 #1
0
ファイル: __init__.py プロジェクト: vmx/cwrap
def generate_asts(config):
    """ Returns an iterable of ASTContainer objects.

    """
    c_ast_containers = []
    for header_file in config.files:
        # read the header info and create the extern and implemenation
        # module names
        path = header_file.path
        header_name = os.path.split(path)[-1]
        extern_name = header_file.metadata.get('extern_name')
        implementation_name = header_file.metadata.get('implementation_name')
        if extern_name is None:
            extern_name = '_' + os.path.splitext(header_name)[0]
        if implementation_name is None:
            implementation_name = os.path.splitext(header_name)[0]

        # generate the c_ast for the header 
        include_dirs = config.metadata.get('include_dirs', [])
        print 'Parsing %s' % path
        ast_items = gen_c_ast(path, include_dirs) 

        print 'file parsed'
        print 'AST:'
        for item in ast_items:
            if isinstance(item, c_ast.Namespace):
                for i in item.members:
                    
                    if i.location is not None and 'gccxml_builtins' in i.location[0]:
                        #print 'skipped'
                        pass
                    else:
                        print_item(i)


        # Apply the transformations to the ast items 
        trans_items = transforms.apply_c_ast_transformations(ast_items)
        
        # Create the CAstContainer for these items
        container = transforms.CAstContainer(trans_items, header_name, 
                                             extern_name, implementation_name)

        # Add the container to the list
        c_ast_containers.append(container)

    # Now we can create an ast transformer and transform the list 
    # of containers into a generator that can be rendered into code
    ast_transformer = transforms.CAstTransformer(c_ast_containers)
    return ast_transformer.transform()
コード例 #2
0
ファイル: __init__.py プロジェクト: vmx/cwrap
def generate_asts(config):
    """ Returns an iterable of ASTContainer objects.

    """
    c_ast_containers = []
    for header_file in config.files:
        # read the header info and create the extern and implemenation
        # module names
        path = header_file.path
        header_name = os.path.split(path)[-1]
        extern_name = header_file.metadata.get('extern_name')
        implementation_name = header_file.metadata.get('implementation_name')
        if extern_name is None:
            extern_name = '_' + os.path.splitext(header_name)[0]
        if implementation_name is None:
            implementation_name = os.path.splitext(header_name)[0]

        # generate the c_ast for the header 
        include_dirs = config.metadata.get('include_dirs', [])

        language = config.metadata.get('language', '')
        
        print 'Parsing %s' % path
        ast_items = gen_c_ast(path, include_dirs, language) 

        print 'in __init__/generate_asts()'
        print 'file parsed'
        print 'AST:', ast_items
        for item in ast_items:
            print item.__class__.__name__, item.name
        
        # Apply the transformations to the ast items 
        trans_items = transforms.apply_c_ast_transformations(ast_items)
        
        # Create the CAstContainer for these items
        container = transforms.CAstContainer(trans_items, header_name, 
                                             extern_name, implementation_name)

        # Add the container to the list
        c_ast_containers.append(container)

    # Now we can create an ast transformer and transform the list 
    # of containers into a generator that can be rendered into code
    ast_transformer = transforms.CAstTransformer(c_ast_containers)
    return ast_transformer.transform()
コード例 #3
0
ファイル: __init__.py プロジェクト: fruch/cwrap
def generate_asts(config):
    """ Returns an iterable of ASTContainer objects.

    """
    c_ast_containers = []
    for header_file in config.files:
        # read the header info and create the extern and implemenation
        # module names
        path = header_file.path
        header_name = os.path.split(path)[-1]
        extern_name = header_file.metadata.get('extern_name')
        implementation_name = header_file.metadata.get('implementation_name')
        if extern_name is None:
            extern_name = '_' + os.path.splitext(header_name)[0]
        if implementation_name is None:
            implementation_name = os.path.splitext(header_name)[0]

        # generate the c_ast for the header 
        include_dirs = config.metadata.get('include_dirs', [])
        print 'Parsing %s' % path
        ast_items = gen_c_ast(path, include_dirs) 

        # Apply the transformations to the ast items 
        trans_items = transforms.apply_c_ast_transformations(ast_items)
        
        # Create the CAstContainer for these items
        container = transforms.CAstContainer(trans_items, header_name, 
                                             extern_name, implementation_name)

        # Add the container to the list
        c_ast_containers.append(container)

    # Now we can create an ast transformer and transform the list 
    # of containers into a generator that can be rendered into code
    ast_transformer = transforms.CAstTransformer(c_ast_containers)
    return ast_transformer.transform()