예제 #1
0
 def invoke_method(self, argv, suppress_default):
     self = jit.promote(self)
     if len(argv) < self.arity:
         raise OldError(u"expected at least %d arguments, got %d" %
                        (self.arity, len(argv)))
     method = self.fetch_method(argv, suppress_default)
     if method is None:
         vec = []
         for i in range(self.arity):
             vec.append(space.get_interface(argv[i]))
         names = []
         for i in range(self.arity):
             names.append(vec[i].name)
         raise OldError(u"no method for [" + u' '.join(names) + u"]")
     return method.call(argv)
예제 #2
0
파일: interface.py 프로젝트: gordol/lever
 def repr(self):
     return u"<%s>" % space.get_interface(self).name
예제 #3
0
파일: interface.py 프로젝트: gordol/lever
def Interface_init_is_cast(obj):
    return space.get_interface(obj)
예제 #4
0
파일: multimethod.py 프로젝트: cheery/lever
 def invoke_method(self, argv, suppress_default):
     self = jit.promote(self)
     if len(argv) < self.arity:
         raise OldError(u"expected at least %d arguments, got %d" % (self.arity, len(argv))) 
     if self.arity == 1:
         method = self.get_method(jit.promote(space.get_interface(argv[0])))
     elif self.arity == 2:
         method = self.get_method(
             jit.promote(space.get_interface(argv[0])),
             jit.promote(space.get_interface(argv[1])))
     elif self.arity == 3:
         method = self.get_method(
             jit.promote(space.get_interface(argv[0])),
             jit.promote(space.get_interface(argv[1])),
             jit.promote(space.get_interface(argv[2])))
     elif self.arity == 4:
         method = self.get_method(
             jit.promote(space.get_interface(argv[0])),
             jit.promote(space.get_interface(argv[1])),
             jit.promote(space.get_interface(argv[2])),
             jit.promote(space.get_interface(argv[3])))
     else:
         vec = []
         for i in range(self.arity):
             vec.append(space.get_interface(argv[i]))
         method = self.methods.get(vec, None)
     if method is None:
         vec = []
         for i in range(self.arity):
             vec.append(space.get_interface(argv[i]))
         if self.default is null or suppress_default:
             names = []
             for i in range(self.arity):
                 names.append(vec[i].name)
             raise OldError(u"no method for ["+u' '.join(names)+u"]")
         return self.default.call(argv)
     return method.call(argv)
예제 #5
0
 def invoke_method(self, argv, suppress_default):
     self = jit.promote(self)
     if len(argv) < self.arity:
         raise OldError(u"expected at least %d arguments, got %d" %
                        (self.arity, len(argv)))
     if self.arity == 1:
         method = self.get_method(jit.promote(space.get_interface(argv[0])))
     elif self.arity == 2:
         method = self.get_method(jit.promote(space.get_interface(argv[0])),
                                  jit.promote(space.get_interface(argv[1])))
     elif self.arity == 3:
         method = self.get_method(jit.promote(space.get_interface(argv[0])),
                                  jit.promote(space.get_interface(argv[1])),
                                  jit.promote(space.get_interface(argv[2])))
     elif self.arity == 4:
         method = self.get_method(jit.promote(space.get_interface(argv[0])),
                                  jit.promote(space.get_interface(argv[1])),
                                  jit.promote(space.get_interface(argv[2])),
                                  jit.promote(space.get_interface(argv[3])))
     else:
         vec = []
         for i in range(self.arity):
             vec.append(space.get_interface(argv[i]))
         method = self.methods.get(vec, None)
     if method is None:
         vec = []
         for i in range(self.arity):
             vec.append(space.get_interface(argv[i]))
         if self.default is null or suppress_default:
             names = []
             for i in range(self.arity):
                 names.append(vec[i].name)
             raise OldError(u"no method for [" + u' '.join(names) + u"]")
         return self.default.call(argv)
     return method.call(argv)
예제 #6
0
파일: interface.py 프로젝트: Dohxis/lever
 def repr(self):
     return u"<%s>" % space.get_interface(self).name
예제 #7
0
 def get_interface(self, obj, version):
     interface = space.get_interface(obj)
     return self.get_impl(interface, version)