Example #1
0
    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
Example #2
0
    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)
Example #3
0
    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