コード例 #1
0
ファイル: p3explicate.py プロジェクト: smitten0000/ecen5523

if __name__ == "__main__":
    import sys, compiler
    import logging.config
    from p3declassify import P3Declassify
    from p3wrapper import P3Wrapper
    from p3uniquifyvars import P3UniquifyVars
    from gcflattener import GCFlattener
    from gcrefcount import GCRefCount
    if len(sys.argv) < 2:
        sys.exit(1)
    # configure logging
    logging.config.fileConfig('logging.cfg')
    testcases = sys.argv[1:]
    for testcase in testcases:
        varalloc = VariableAllocator()
        declassify = P3Declassify(varalloc)
        wrapper = P3Wrapper()
        gcflatten = GCFlattener(varalloc)
        uniquify = P3UniquifyVars()
        explicator = P3Explicate(varalloc, handleLambdas=False)
        gcrefcount = GCRefCount(varalloc)
        ast = compiler.parseFile(testcase)
        ast = declassify.transform(ast)
        ast = wrapper.transform(ast)
        ast = uniquify.transform(ast)
        ast = gcflatten.transform(ast)
        ast = gcrefcount.transform(ast)
        print prettyAST(explicator.transform(ast))
コード例 #2
0
    testcases = sys.argv[1:]
    for testcase in testcases:
        varalloc = VariableAllocator()
        declassify = P3Declassify(varalloc)
        unique = P3UniquifyVars()
        wrapper = P3Wrapper()
        gcflatten = GCFlattener(varalloc)
        gcrefcount = GCRefCount(varalloc)
        explicator = P3Explicate(varalloc, handleLambdas=False)
        heap = P3Heapify(explicator)
        closure = P3ClosureConversion(explicator, varalloc)
        flatten = P3Flattener(varalloc)
        insselector = P3InstructionSelector(varalloc)

        ast = compiler.parseFile(testcase)
        ast = declassify.transform(ast)
        ast = wrapper.transform(ast)
        ast = unique.transform(ast)        
        ast = gcflatten.transform(ast)
        ast = gcrefcount.transform(ast)         
        ast = explicator.explicate(ast)
        ast = heap.transform(ast)
        astlist = closure.transform(ast)
        for ast in astlist:
            ast = flatten.flatten(ast)
            program = insselector.transform(ast)
            allocator = P3StackAllocator(program)
            program = allocator.substitute()
            print '\nFunction\n================='
            print prettyAST(program)
コード例 #3
0
ファイル: compile.py プロジェクト: smitten0000/ecen5523
        gcrefcount = GCRefCount(varalloc)
        explicator = P3Explicate(varalloc, handleLambdas=False)
        heap = P3Heapify(explicator)
        closer = P3ClosureConversion(explicator, varalloc)
        flattener = P3Flattener(varalloc)
        instruction_selector = P3InstructionSelector(varalloc)
        ifinsselector = P3IfInstructionSelector(
            varalloc, instruction_selector.labelalloc)
        generator = P3Generator(allowMem2Mem=True)

        # send the AST through the pipeline
        ast = compiler.parseFile(testcase)
        ast = declassify.transform(ast)
        ast = wrapper.transform(ast)
        ast = uniquify.transform(ast)
        ast = gcflattener.transform(ast)
        ast = gcrefcount.transform(ast)
        ast = explicator.explicate(ast)
        ast = heap.transform(ast)
        astlist = closer.transform(ast)
        output = ''
        for ast in astlist:
            flatast = flattener.flatten(ast)
            program = instruction_selector.visit(flatast)
            allocator = P3StackAllocator(program)
            #allocator = P3RegAllocator(program, varalloc)
            program = allocator.substitute()
            program = ifinsselector.visit(program)
            output = output + generator.generate(program)
        outputfile = '%s.s' % testcase[:testcase.rfind('.')]
        f = open(outputfile, 'w')
コード例 #4
0
ファイル: compile.py プロジェクト: smitten0000/ecen5523
        gcflattener = GCFlattener(varalloc)
        gcrefcount = GCRefCount(varalloc)
        explicator = P3Explicate(varalloc,handleLambdas=False)
        heap = P3Heapify(explicator)
        closer = P3ClosureConversion(explicator, varalloc)
        flattener = P3Flattener(varalloc)
        instruction_selector = P3InstructionSelector(varalloc)
        ifinsselector = P3IfInstructionSelector(varalloc,instruction_selector.labelalloc)
        generator = P3Generator(allowMem2Mem=True)

        # send the AST through the pipeline
        ast = compiler.parseFile(testcase)
        ast = declassify.transform(ast)
        ast = wrapper.transform(ast)
        ast = uniquify.transform(ast)
        ast = gcflattener.transform(ast)
        ast = gcrefcount.transform(ast)
        ast = explicator.explicate(ast)
        ast  = heap.transform(ast)
        astlist = closer.transform(ast)
        output = ''
        for ast in astlist:
            flatast = flattener.flatten(ast)
            program = instruction_selector.visit(flatast)
            allocator = P3StackAllocator(program)
            #allocator = P3RegAllocator(program, varalloc)
            program = allocator.substitute()
            program = ifinsselector.visit(program)
            output = output + generator.generate(program)
        outputfile = '%s.s' % testcase[:testcase.rfind('.')]
        f = open(outputfile, 'w')
コード例 #5
0
ファイル: gcrefcount.py プロジェクト: smitten0000/ecen5523
    def visit_Compare(self, node, *args, **kwargs):
        return node


if __name__ == "__main__":
    import compiler, sys
    import logging.config
    
    if len(sys.argv) < 2:
        sys.exit(1)
    # configure logging 
    logging.config.fileConfig('logging.cfg')

    testcases = sys.argv[1:]
    for testcase in testcases:
        varalloc = VariableAllocator()
        declassify = P3Declassify(varalloc)
        wrapper = P3Wrapper()
        unique = P3UniquifyVars()
        flatten = GCFlattener(varalloc,True)
        refcount = GCRefCount(varalloc)

        ast = compiler.parseFile(testcase)
        ast = declassify.transform(ast)
        ast = wrapper.transform(ast)
        ast = unique.transform(ast)        
        ast = flatten.transform(ast)
        ast = refcount.transform(ast)
        print ast
        print prettyAST(ast)