def create_attr(self, frame, anchor, name): if name == 'send': return self.Send('generator.send', self, self.elemall, [ANY], expts=[StopIterationType.maybe('might raise StopIteration')]) if name == 'next': NoneType.get_object().connect(self.sent.recv) return self.Send('generator.next', self, self.elemall, expts=[StopIterationType.maybe('might raise StopIteration')]) if name == 'throw': # XXX do nothing for now return BuiltinConstMethod('generator.throw', NoneType.get_object(), [ANY], [ANY, ANY]) if name == 'close': return self.Send('generator.close', self, NoneType.get_object(), [ANY]) return IterObject.create_attr(self, frame, anchor, name)
def create_attr(self, frame, anchor, name): if name == 'next': return BuiltinConstMethod( 'iter.next', self.elemall, expts=[StopIterationType.maybe('might raise StopIteration')]) raise NodeAttrError(name)
def recv_target(self, src): for obj in src: if obj in self.received: continue self.received.add(obj) try: iterobj = obj.get_reversed(self.frame, self.anchor) frame1 = ExceptionCatcher(self.frame) frame1.add_handler(StopIterationType.get_typeobj()) MethodCall(frame1, self.anchor, iterobj, 'next').connect(self.recv) except NodeTypeError: self.frame.raise_expt(ErrorConfig.NotIterable(obj)) return
def create_attr(self, frame, anchor, name): if name == 'send': return self.Send( 'generator.send', self, self.elemall, [ANY], expts=[StopIterationType.maybe('might raise StopIteration')]) if name == 'next': NoneType.get_object().connect(self.sent.recv) return self.Send( 'generator.next', self, self.elemall, expts=[StopIterationType.maybe('might raise StopIteration')]) if name == 'throw': # XXX do nothing for now return BuiltinConstMethod('generator.throw', NoneType.get_object(), [ANY], [ANY, ANY]) if name == 'close': return self.Send('generator.close', self, NoneType.get_object(), [ANY]) return IterObject.create_attr(self, frame, anchor, name)
def create_attr(self, frame, anchor, name): if name == 'next': return BuiltinConstMethod('iter.next', self.elemall, expts=[StopIterationType.maybe('might raise StopIteration')]) raise NodeAttrError(name)
def IterElement(frame0, anchor, target): frame1 = ExceptionCatcher(frame0) frame1.add_handler(StopIterationType.get_typeobj()) return MethodCall(frame1, anchor, IterRef(frame0, anchor, target), 'next')