def call(self, frame, anchor, args, kwargs): from pyntch.config import ErrorConfig if len(args) < self.minargs: frame.raise_expt(ErrorConfig.InvalidNumOfArgs(self.minargs, len(args))) return UndefinedTypeNode.get_object() if len(self.args) < len(args): frame.raise_expt(ErrorConfig.InvalidNumOfArgs(len(self.args), len(args))) return UndefinedTypeNode.get_object() return self.process_args(frame, anchor, args, kwargs)
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
def call(self, frame, anchor, args, kwargs): from pyntch.config import ErrorConfig if len(args) == 0: frame.raise_expt(ErrorConfig.InvalidNumOfArgs(1, len(args))) return UndefinedTypeNode.get_object() arg0checker = TypeChecker(frame, [self.klass], 'arg0') args[0].connect(arg0checker.recv) return self.func.call(frame, anchor, args, kwargs)
def call(self, frame, anchor, args, kwargs): if kwargs: frame.raise_expt(ErrorConfig.NoKeywordArgs()) return UndefinedTypeNode.get_object() if len(args) < self.minargs: frame.raise_expt( ErrorConfig.InvalidNumOfArgs(self.minargs, len(args))) return UndefinedTypeNode.get_object() return self.MapCaller(frame, anchor, args[0], args[1:])