Exemplo n.º 1
0
 def get_attr(self, frame, anchor, name, write=False):
   from pyntch.basic_types import StrType
   if name == '__class__':
     if write: raise NodeAssignError(name)
     return self.get_type()
   elif name == '__doc__':
     return StrType.get_object()
   return self.get_type().get_attr(frame, anchor, name, write=write)
Exemplo n.º 2
0
    def get_attr(self, frame, anchor, name, write=False):
        from pyntch.basic_types import StrType

        if name == "__file__":
            if write:
                raise NodeAssignError(name)
            return StrType.get_object()
        return self.space.register_var(name)
Exemplo n.º 3
0
 def process_args(self, frame, anchor, args, kwargs):
   if kwargs:
     node = tuple(kwargs.values())
     if node in self.cache_conv:
       obj = self.cache_conv[node]
     else:
       obj = DictType.create_dict(key=[StrType.get_object()], value=kwargs.values())
       self.cache_conv[node] = obj
     return obj
   if args:
     return self.create_sequence(frame, anchor, args[0])
   return self.create_null(frame, anchor)
Exemplo n.º 4
0
 def call(self, frame, anchor, args, kwargs):
     from pyntch.basic_types import StrType
     from pyntch.aggregate_types import DictType, TupleType
     from pyntch.expression import TupleUnpack, TupleSlice
     # Process keyword arguments first.
     varsleft = list(self.argvars)
     varikwargs = []
     for (kwname, kwvalue) in kwargs.iteritems():
         for var1 in varsleft:
             if isinstance(var1, Variable) and var1.name == kwname:
                 var1.bind(kwvalue)
                 # When a keyword argument is given, remove that name from the remaining arguments.
                 varsleft.remove(var1)
                 break
         else:
             if self.kwarg:
                 varikwargs.append(kwvalue)
             else:
                 frame.raise_expt(ErrorConfig.InvalidKeywordArgs(kwname))
     # Process standard arguments.
     variargs = []
     for arg1 in args:
         assert arg1 != None, args
         if varsleft:
             var1 = varsleft.pop(0)
             assign_arg(frame, anchor, var1, arg1)
         elif self.variarg:
             variargs.append(arg1)
         else:
             # Too many arguments.
             frame.raise_expt(
                 ErrorConfig.InvalidNumOfArgs(len(self.argvars), len(args)))
     if len(self.defaults) < len(varsleft):
         # Too few arguments.
         frame.raise_expt(
             ErrorConfig.InvalidNumOfArgs(len(self.argvars), len(args)))
     # Handle remaining arguments: kwargs and variargs.
     if self.variarg and variargs:
         self.space[self.variarg].bind(TupleType.create_tuple(variargs))
     if self.kwarg:
         if varikwargs:
             self.space[self.kwarg].bind(
                 DictType.create_dict(key=StrType.get_object(),
                                      value=varikwargs))
         else:
             self.space[self.kwarg].bind(DictType.create_null(
                 frame, anchor))
     # Remember where this is called from.
     self.frames.add(frame)
     # Propagate the exceptions upward.
     self.frame.connect(frame.recv)
     return self.body
Exemplo n.º 5
0
 def process_args(self, frame, anchor, args, kwargs):
     if kwargs:
         node = tuple(kwargs.values())
         if node in self.cache_conv:
             obj = self.cache_conv[node]
         else:
             obj = DictType.create_dict(key=[StrType.get_object()],
                                        value=kwargs.values())
             self.cache_conv[node] = obj
         return obj
     if args:
         return self.create_sequence(frame, anchor, args[0])
     return self.create_null(frame, anchor)
Exemplo n.º 6
0
 def call(self, frame, anchor, args, kwargs):
   from pyntch.basic_types import StrType
   from pyntch.aggregate_types import DictType, TupleType
   from pyntch.expression import TupleUnpack, TupleSlice
   # Process keyword arguments first.
   varsleft = list(self.argvars)
   varikwargs = []
   for (kwname, kwvalue) in kwargs.iteritems():
     for var1 in varsleft:
       if isinstance(var1, Variable) and var1.name == kwname:
         var1.bind(kwvalue)
         # When a keyword argument is given, remove that name from the remaining arguments.
         varsleft.remove(var1)
         break
     else:
       if self.kwarg:
         varikwargs.append(kwvalue)
       else:
         frame.raise_expt(ErrorConfig.InvalidKeywordArgs(kwname))
   # Process standard arguments.
   variargs = []
   for arg1 in args:
     assert arg1 != None, args
     if varsleft:
       var1 = varsleft.pop(0)
       assign_arg(frame, anchor, var1, arg1)
     elif self.variarg:
       variargs.append(arg1)
     else:
       # Too many arguments.
       frame.raise_expt(ErrorConfig.InvalidNumOfArgs(len(self.argvars), len(args)))
   if len(self.defaults) < len(varsleft):
     # Too few arguments.
     frame.raise_expt(ErrorConfig.InvalidNumOfArgs(len(self.argvars), len(args)))
   # Handle remaining arguments: kwargs and variargs.
   if self.variarg and variargs:
     self.space[self.variarg].bind(TupleType.create_tuple(variargs))
   if self.kwarg:
     if varikwargs:
       self.space[self.kwarg].bind(DictType.create_dict(key=StrType.get_object(), value=varikwargs))
     else:
       self.space[self.kwarg].bind(DictType.create_null(frame, anchor))
   # Remember where this is called from.
   self.frames.add(frame)
   # Propagate the exceptions upward.
   self.frame.connect(frame.recv)
   return self.body
Exemplo n.º 7
0
 def __init__(self):
   BuiltinConstFunc.__init__(self, 'repr', StrType.get_object(), [ANY])
   return
Exemplo n.º 8
0
 def __init__(self):
   BuiltinConstFunc.__init__(self, 'raw_input', StrType.get_object(), [StrType])
   return
Exemplo n.º 9
0
 def __init__(self):
   BuiltinConstFunc.__init__(self, 'oct', StrType.get_object(), [IntType])
   return
Exemplo n.º 10
0
 def __init__(self):
   BuiltinConstFunc.__init__(self, 'dir', ListType.create_list(StrType.get_object()), [], [ANY])
   return
Exemplo n.º 11
0
 def __init__(self):
     BuiltinConstFunc.__init__(self, 'repr', StrType.get_object(), [ANY])
     return
Exemplo n.º 12
0
 def __init__(self):
     BuiltinConstFunc.__init__(self, 'raw_input', StrType.get_object(),
                               [StrType])
     return
Exemplo n.º 13
0
 def __init__(self):
     BuiltinConstFunc.__init__(self, 'oct', StrType.get_object(), [IntType])
     return
Exemplo n.º 14
0
 def __init__(self):
     BuiltinConstFunc.__init__(self, 'dir',
                               ListType.create_list(StrType.get_object()),
                               [], [ANY])
     return
Exemplo n.º 15
0
 def get_attr(self, frame, anchor, name, write=False):
     from pyntch.basic_types import StrType
     if name == '__file__':
         if write: raise NodeAssignError(name)
         return StrType.get_object()
     return self.space.register_var(name)