def dispatch(self, node, *args): mutils.print_debug('dispatching for ' + repr(node.__class__) ) mutils.print_debug( ' ' + repr(node) + ' in ' \ + self.__class__.__name__) self.node = node klass = node.__class__ meth = self._cache.get(klass, None) if meth is None: classList = [] # This is really a stack for the dfs search we're about to perform. classList.append(klass) while len(classList) >0 and meth is None: sklass = classList.pop() if hasattr(self.visitor, 'visit' + sklass.__name__): meth = getattr(self.visitor,'visit'+sklass.__name__, self.default) classList = [] else: # Ensures we parse classes _exactly_ like python does -- dfs, ltr. classList = classList + [b for b in reversed(list(sklass.__bases__)) ] if meth is None: meth = self.default self._cache[klass] = meth ret = meth(node, *args) mutils.print_debug( 'finished with ' + repr(node.__class__) ) return ret
def dispatch(self, node, *args): if type(node) is list: try: import multiprocessing as mp from multiprocessing import Pool p = Pool(4) return p.map(lambda t: self.dispatch(t,*args),node) except Exception: return [self.dispatch(sn,*args) for sn in node] mutils.print_debug( 'dispatching for ' + repr(node.__class__) ) mutils.print_debug(' ' + repr(node) + ' in ' \ + self.__class__.__name__ ) self.node = node klass = node.__class__ meth = self._cache.get(klass, None) if meth is None: className = klass.__name__ meth = getattr(self.visitor, 'visit' + className, self.default) self._cache[klass] = meth ret = meth(node, *args) mutils.print_debug('finished with ' + repr(node.__class__) ) return ret
def dispatch(self, node, *args): mutils.print_debug( 'dispatching for ' + repr(node.__class__) ) mutils.print_debug(' ' + repr(node) + ' in ' \ + self.__class__.__name__ ) self.node = node klass = node.__class__ meth = self._cache.get(klass, None) if meth is None: className = klass.__name__ meth = getattr(self.visitor, 'visit' + className, self.default) self._cache[klass] = meth ret = meth(node, *args) mutils.print_debug('finished with ' + repr(node.__class__) ) return ret
from generate_x86 import GenX86Visitor4,string_constants from generate_x86 import fun_prefix from remove_structured_control import RemoveStructuredControl from uniquify import UniquifyVisitor from os.path import splitext from declassify import DeclassifyVisitor debug = mutils.debug() try: input_file_name = sys.argv[1] fbase = os.path.splitext(input_file_name)[0] ast = compiler.parseFile(input_file_name) if debug: mutils.print_debug('finished parsing') mutils.write_debug(repr(ast),fbase+'.00.prsr.ast') mutils.write_debug(ASTPyPrinter().preorder(ast),fbase+'.01.prsr.apy') ast = DeclassifyVisitor().preorder(ast) if debug: mutils.print_debug('finished declassifying') mutils.write_debug(repr(ast),fbase+'.02.dcls.ast') mutils.write_debug(ASTPyPrinter().preorder(ast),fbase+'.03.dcls.apy') ast.node.nodes += [Discard(CallFunc(Name('gc_collect_all'),[]))] ast = UniquifyVisitor().preorder(ast) if debug: mutils.print_debug('finished uniquifying')