def setitem(self, index, value): if not isinstance(index, Integer): raise Error(u"index not an integer") if not 0 <= index.value < len(self.contents): raise Error(u"index out of range") self.contents[index.value] = value return value
def invoke_method(self, argv, suppress_default): self = jit.promote(self) if len(argv) < self.arity: raise Error(u"expected at least %d arguments, got %d" % (self.arity, len(argv))) if self.arity == 1: method = self.get_method(jit.promote(argv[0].__class__.interface)) elif self.arity == 2: method = self.get_method(jit.promote(argv[0].__class__.interface), jit.promote(argv[1].__class__.interface)) elif self.arity == 3: method = self.get_method(jit.promote(argv[0].__class__.interface), jit.promote(argv[1].__class__.interface), jit.promote(argv[2].__class__.interface)) elif self.arity == 4: method = self.get_method(jit.promote(argv[0].__class__.interface), jit.promote(argv[1].__class__.interface), jit.promote(argv[2].__class__.interface), jit.promote(argv[3].__class__.interface)) else: vec = [] for i in range(self.arity): vec.append(argv[i].__class__.interface) method = self.methods.get(List(vec), None) if method is None: vec = [] for i in range(self.arity): vec.append(argv[i].__class__.interface) if self.default is None or suppress_default: names = [] for i in range(self.arity): names.append(vec[i].name) raise Error(u"no method for [" + u' '.join(names) + u"]") return self.default.call(argv) return method.call(argv)
def fancy_frame(argv): args = () if len(argv) < argc: raise Error(u"expected %d arguments" % argc) for i in argi: arg = argv[i] if isinstance(arg, argt[i]): args += (arg, ) else: raise Error(u"expected %s as arg: %d" % (argt[i].interface.name, i)) return func(*args)
def setattr_force(self, name, value): try: cell = jit.promote(self.lookup(name, assign=True)) if isinstance(cell, FrozenCell): raise Error(u"cell %s is frozen" % name) elif isinstance(cell, MutableCell): cell.slot = value else: assert False except KeyError: if self.frozen: self.cells[name] = FrozenCell(value) else: self.cells[name] = MutableCell(value) return value
def getitem(self, index): try: return self.data[index] except KeyError as error: raise Error(u"key %s not in %s" % (index.repr(), self.repr()))
def setattr(self, name, value): if self.frozen: raise Error(u"module %s is frozen" % self.name) return self.setattr_force(name, value)
def as_cstring(value): if isinstance(value, String): return value.string.encode('utf-8') raise Error(u"expected string and got " + value.repr())
def argument(argv, index, cls): if index < len(argv): arg = argv[index] if isinstance(arg, cls): return arg raise Error(u"expected %s as argv: %d" % (cls.interface.name, index))