Esempio n. 1
0
    class ReduceCaller(CompoundTypeNode):
        def __init__(self, frame, anchor, func, seq, initial):
            self.frame = frame
            self.anchor = anchor
            self.received = set()
            self.elem = IterElement(frame, anchor, seq)
            self.result = CompoundTypeNode()
            if initial:
                initial.connect(self.result.recv)
            else:
                self.elem.connect(self.result.recv)
            self.args = (self.result, self.elem)
            CompoundTypeNode.__init__(self, [self.result])
            func.connect(self.recv_func)
            return

        def recv_func(self, src):
            for obj in src:
                if obj in self.received: continue
                self.received.add(obj)
                try:
                    result = obj.call(self.frame, self.anchor, self.args, {})
                    result.connect(self.recv)
                    result.connect(self.result.recv)
                except NodeTypeError:
                    self.frame.raise_expt(ErrorConfig.NotCallable(obj))
            return
Esempio n. 2
0
  class ReduceCaller(CompoundTypeNode):
    
    def __init__(self, frame, anchor, func, seq, initial):
      self.frame = frame
      self.anchor = anchor
      self.received = set()
      self.elem = IterElement(frame, anchor, seq)
      self.result = CompoundTypeNode()
      if initial:
        initial.connect(self.result.recv)
      else:
        self.elem.connect(self.result.recv)
      self.args = (self.result, self.elem)
      CompoundTypeNode.__init__(self, [self.result])
      func.connect(self.recv_func)
      return

    def recv_func(self, src):
      for obj in src:
        if obj in self.received: continue
        self.received.add(obj)
        try:
          result = obj.call(self.frame, self.anchor, self.args, {})
          result.connect(self.recv)
          result.connect(self.result.recv)
        except NodeTypeError:
          self.frame.raise_expt(ErrorConfig.NotCallable(obj))
      return
Esempio n. 3
0
 def accept_arg(self, frame, anchor, i, arg1):
     if arg1 in self.cache_extend:
         elem = self.cache_extend[arg1]
     else:
         elem = IterElement(frame, anchor, arg1)
         self.cache_extend[arg1] = elem
     elem.connect(self.target.elemall.recv)
     return
Esempio n. 4
0
 def accept_arg(self, frame, anchor, i, arg1):
   if arg1 in self.cache_extend:
     elem = self.cache_extend[arg1]
   else:
     elem = IterElement(frame, anchor, arg1)
     self.cache_extend[arg1] = elem
   elem.connect(self.target.elemall.recv)
   return
Esempio n. 5
0
 def recv_pair(self, src):
   for obj in src:
     if obj.is_type(TupleType.get_typeobj()) and obj.elements:
       if len(obj.elements) == 2:
         (k,v) = obj.elements
         k.connect(self.target.key.recv)
         v.connect(self.target.value.recv)
       else:
         self.frame.raise_expt(ErrorConfig.NotConvertable('(key,value)'))
       continue
     elem = IterElement(self.frame, self.anchor, obj)
     elem.connect(self.target.key.recv)
     elem.connect(self.target.value.recv)
     self.frame.raise_expt(ErrorConfig.NotConvertable('dict'))
   return
Esempio n. 6
0
 def recv_pair(self, src):
     for obj in src:
         if obj.is_type(TupleType.get_typeobj()) and obj.elements:
             if len(obj.elements) == 2:
                 (k, v) = obj.elements
                 k.connect(self.target.key.recv)
                 v.connect(self.target.value.recv)
             else:
                 self.frame.raise_expt(
                     ErrorConfig.NotConvertable('(key,value)'))
             continue
         elem = IterElement(self.frame, self.anchor, obj)
         elem.connect(self.target.key.recv)
         elem.connect(self.target.value.recv)
         self.frame.raise_expt(ErrorConfig.NotConvertable('dict'))
     return
Esempio n. 7
0
  class SumCaller(CompoundTypeNode):
    
    def __init__(self, frame, anchor, seq, initial):
      self.frame = frame
      self.anchor = anchor
      self.received = set()
      self.elem = IterElement(frame, anchor, seq)
      self.result = CompoundTypeNode()
      if initial:
        initial.connect(self.result.recv)
      else:
        self.elem.connect(self.result.recv)
      CompoundTypeNode.__init__(self, [self.result])
      IterElement(frame, anchor, seq).connect(self.recv_elem)
      return

    def recv_elem(self, src):
      for obj in src:
        if obj in self.received: continue
        self.received.add(obj)
        BinaryOp(self.frame, self.anchor, 'Add', obj, self.result).connect(self.result.recv)
      return
Esempio n. 8
0
    class SumCaller(CompoundTypeNode):
        def __init__(self, frame, anchor, seq, initial):
            self.frame = frame
            self.anchor = anchor
            self.received = set()
            self.elem = IterElement(frame, anchor, seq)
            self.result = CompoundTypeNode()
            if initial:
                initial.connect(self.result.recv)
            else:
                self.elem.connect(self.result.recv)
            CompoundTypeNode.__init__(self, [self.result])
            IterElement(frame, anchor, seq).connect(self.recv_elem)
            return

        def recv_elem(self, src):
            for obj in src:
                if obj in self.received: continue
                self.received.add(obj)
                BinaryOp(self.frame, self.anchor, 'Add', obj,
                         self.result).connect(self.result.recv)
            return