def visit_Return(self, node, stack, stack_base): if node.expr is None: return None if stack_base == len(stack): resume_record = ReturnRR() stack.append(resume_record) else: resume_record = stack[stack_base] try: if resume_record.ret is None: resume_record.ret = ExpressionEvaluatorVisitor( self.context).visit_and_force_eval(node.expr, stack, stack_base + 1) # We must scan through the return value to see if it contains any dereferenced references, and if so, yield so these can be fetched. eager_derefd_val = map_leaf_values( self.convert_wrapper_to_eager_dereference, resume_record.ret) stack.pop() return eager_derefd_val except: raise
def do_eager_thunks(self, args): def resolve_thunks_mapper(leaf): if isinstance(leaf, SWDereferenceWrapper): return self.eager_dereference(leaf.ref) else: return leaf return map_leaf_values(resolve_thunks_mapper, args)
def visit_Return(self, node, stack, stack_base): if node.expr is None: return None if stack_base == len(stack): resume_record = ReturnRR() stack.append(resume_record) else: resume_record = stack[stack_base] try: if resume_record.ret is None: resume_record.ret = ExpressionEvaluatorVisitor(self.context).visit_and_force_eval( node.expr, stack, stack_base + 1 ) # We must scan through the return value to see if it contains any dereferenced references, and if so, yield so these can be fetched. eager_derefd_val = map_leaf_values(self.convert_wrapper_to_eager_dereference, resume_record.ret) stack.pop() return eager_derefd_val except: raise