| 80 | return long(cast_addr2long_pointer(addr).dereference()) |
| 81 | |
| 82 | class StacklessCoroutineFrame(CoroutineFrame): |
| 83 | def __init__(self, task_addr): |
| 84 | super(StacklessCoroutineFrame, self).__init__(task_addr) |
| 85 | |
| 86 | self.resume_addr_size = types.long_pointer_size |
| 87 | self.destroy_addr_size = types.long_pointer_size |
| 88 | |
| 89 | self.promise_type_addr = self.promise_base_addr |
| 90 | self.destroy_addr = self.promise_type_addr - self.destroy_addr_size |
| 91 | self.resume_addr = self.destroy_addr - self.resume_addr_size |
| 92 | self.frame_addr = self.resume_addr |
| 93 | self.other_fields = self.continuation_addr + types.continuation_size |
| 94 | |
| 95 | class StacklessCoroutineFrameDecorator(FrameDecorator): |
| 96 | def __init__(self, frame, coro_frame): |
no outgoing calls
no test coverage detected