예제 #1
0
 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)
예제 #2
0
 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)
예제 #3
0
 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
예제 #4
0
 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)
예제 #5
0
 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
예제 #6
0
 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)
예제 #7
0
def IterElement(frame0, anchor, target):
    frame1 = ExceptionCatcher(frame0)
    frame1.add_handler(StopIterationType.get_typeobj())
    return MethodCall(frame1, anchor, IterRef(frame0, anchor, target), 'next')
예제 #8
0
파일: expression.py 프로젝트: euske/pyntch
def IterElement(frame0, anchor, target):
  frame1 = ExceptionCatcher(frame0)
  frame1.add_handler(StopIterationType.get_typeobj())
  return MethodCall(frame1, anchor, IterRef(frame0, anchor, target), 'next')