def _optimize_hook(self, debug_info, w_arg): space = self.space cache = space.fromcache(Cache) if cache.in_recursion: return if space.is_true(cache.w_optimize_hook): logops = debug_info.logger._make_log_operations() list_w = wrap_oplist(space, logops, debug_info.operations) cache.in_recursion = True try: try: jd_name = debug_info.get_jitdriver().name w_res = space.call_function(cache.w_optimize_hook, space.wrap(jd_name), space.wrap(debug_info.type), w_arg, space.newlist(list_w)) if space.is_w(w_res, space.w_None): return l = [] for w_item in space.listview(w_res): item = space.interp_w(WrappedOp, w_item) l.append(jit_hooks._cast_to_resop(item.op)) del debug_info.operations[:] # modifying operations above is # probably not a great idea since types may not work # and we'll end up with half-working list and # a segfault/fatal RPython error for elem in l: debug_info.operations.append(elem) except OperationError, e: e.write_unraisable(space, "jit hook ", cache.w_compile_hook) finally: cache.in_recursion = False
def _compile_hook(self, debug_info, w_arg): space = self.space cache = space.fromcache(Cache) if cache.in_recursion: return if space.is_true(cache.w_compile_hook): logops = debug_info.logger._make_log_operations() list_w = wrap_oplist(space, logops, debug_info.operations, debug_info.asminfo.ops_offset) cache.in_recursion = True try: try: jd_name = debug_info.get_jitdriver().name asminfo = debug_info.asminfo space.call_function(cache.w_compile_hook, space.wrap(jd_name), space.wrap(debug_info.type), w_arg, space.newlist(list_w), space.wrap(asminfo.asmaddr), space.wrap(asminfo.asmlen)) except OperationError, e: e.write_unraisable(space, "jit hook ", cache.w_compile_hook) finally: cache.in_recursion = False
def on_abort(self, reason, jitdriver, greenkey, greenkey_repr, logops, operations): space = self.space cache = space.fromcache(Cache) if cache.in_recursion: return if space.is_true(cache.w_abort_hook): cache.in_recursion = True oplist_w = wrap_oplist(space, logops, operations) try: try: space.call_function(cache.w_abort_hook, space.wrap(jitdriver.name), wrap_greenkey(space, jitdriver, greenkey, greenkey_repr), space.wrap(Counters.counter_names[reason]), space.newlist(oplist_w) ) except OperationError, e: e.write_unraisable(space, "jit hook ", cache.w_abort_hook) finally: cache.in_recursion = False
def on_abort(self, reason, jitdriver, greenkey, greenkey_repr, logops, operations): space = self.space cache = space.fromcache(Cache) if cache.in_recursion: return if space.is_true(cache.w_abort_hook): cache.in_recursion = True oplist_w = wrap_oplist(space, logops, operations) try: try: space.call_function( cache.w_abort_hook, space.wrap(jitdriver.name), wrap_greenkey(space, jitdriver, greenkey, greenkey_repr), space.wrap(Counters.counter_names[reason]), space.newlist(oplist_w)) except OperationError, e: e.write_unraisable(space, "jit hook ", cache.w_abort_hook) finally: cache.in_recursion = False