# HG changeset patch # User paulb@localhost.localdomain # Date 1166226662 -3600 # Node ID fde2cdf3bdca4f240385ee2b0f7af29b7a3ed447 # Parent 3a9190325ac925dd290b3522d8f9a3b563251f31 Simplified the builtins to remove the pretense of having a working library. diff -r 3a9190325ac9 -r fde2cdf3bdca lib/builtins.py --- a/lib/builtins.py Wed Dec 13 00:24:59 2006 +0100 +++ b/lib/builtins.py Sat Dec 16 00:51:02 2006 +0100 @@ -54,7 +54,16 @@ return str() class dict: - pass + def __init__(self, *args): + for key, value in args: + self[key] = value + + def __setitem__(self, key, value): + self.key = key + self.value = value + + def __getitem__(self, key): + return self.value class file: def write(self, s): @@ -402,102 +411,49 @@ class list: def __init__(self, *args): - self.next = None - self.last = self for arg in args: self.append(arg) def __getitem__(self, index): - i = 0 - n = self - # NOTE: Support negative indices using last. - while i < index and n.next is not None: - n = n.next - i += 1 - if n.next is not None: - return n.value + if -len(self) <= index < len(self): + return self.value else: - raise IndexError() # NOTE: Make this compliant with Python! + raise IndexError, index def __setitem__(self, index, value): - i = 0 - n = self - # NOTE: Support negative indices using last. - while i < index and n.next is not None: - n = n.next - i += 1 - if n.next is not None: - n.value = value + if -len(self) <= index < len(self): + self.value = value else: - raise IndexError() # NOTE: Make this compliant with Python! + raise IndexError, index def __getslice__(self, start, end=None): - slice = [] - i = 0 - n = self - # NOTE: Support negative indices using last. - while (end is None or i < end) and n.next is not None: - if i >= start: - slice.append(n.value) - n = n.next - i += 1 - return slice + if -len(self) <= start < len(self) and -len(self) <= end < len(self) and start <= end: + return list(self.value) + else: + raise IndexError, index def __setslice__(self, start, end, slice): - i = 0 - n = self - j = 0 - p = slice - # NOTE: Support negative indices using last. - # NOTE: Support appending when start >= len(self). - while i < end and n is not None and p is not None: - if i >= start: - n.value = p.value - p = p.next - j += 1 - n = n.next - i += 1 + if -len(self) <= start < len(self) and -len(self) <= end < len(self) and start <= end: + for value in slice: + self.value = value + else: + raise IndexError, index def append(self, value): - n = self.last - n.value = value - n.next = self.__class__() - self.last = n.next + self.value = value def __len__(self): - i = 0 - n = self - while n.next is not None: - n = n.next - i += 1 - return i + return int() def __add__(self, other): - result = self.__class__() - for value in self: - result.append(value) for value in other: - result.append(value) - return result + self.value = value + return self - def __iadd__(self, other): - for value in other: - self.append(value) - return self + __iadd__ = __add__ def __str__(self): - output = ["["] - n = self - first = 1 - while n.next is not None: - if not first: - output.append(", ") - else: - first = 0 - output.append(str(n.value)) - n = n.next - output.append("]") - return "".join(output) + return str() def __iter__(self): return listiterator(self) @@ -508,13 +464,12 @@ class listiterator: def __init__(self, l): self.l = l + self.index = 0 def next(self): - l = self.l - next = l.next - if next is not None: - self.l = next - return l.value + if self.index < len(self.l): + self.index += 1 + return self.l[self.index] else: raise StopIteration @@ -683,73 +638,49 @@ class tuple: def __init__(self, *args): - self.next = None - self.last = self for arg in args: self.append(arg) def __getitem__(self, index): - i = 0 - n = self - # NOTE: Support negative indices using last. - while i < index and n.next is not None: - n = n.next - i += 1 - if n.next is not None: - return n.value + if -len(self) <= index < len(self): + return self.value else: - raise IndexError() # NOTE: Make this compliant with Python! + raise IndexError, index + + def __setitem__(self, index, value): + if -len(self) <= index < len(self): + self.value = value + else: + raise IndexError, index def __getslice__(self, start, end=None): - # NOTE: Should probably return a tuple. - slice = [] - i = 0 - n = self - # NOTE: Support negative indices using last. - while (end is None or i < end) and n.next is not None: - if i >= start: - slice.append(n.value) - n = n.next - i += 1 - return slice + if -len(self) <= start < len(self) and -len(self) <= end < len(self) and start <= end: + return list(self.value) + else: + raise IndexError, index + + def __setslice__(self, start, end, slice): + if -len(self) <= start < len(self) and -len(self) <= end < len(self) and start <= end: + for value in slice: + self.value = value + else: + raise IndexError, index # NOTE: The append method should be internal at most. def append(self, value): - n = self.last - n.value = value - n.next = self.__class__() - self.last = n.next + self.value = value def __len__(self): - i = 0 - n = self - while n.next is not None: - n = n.next - i += 1 - return i + return int() def __add__(self, other): - result = self.__class__() - for value in self: - result.append(value) for value in other: - result.append(value) - return result + self.value = value + return self def __str__(self): - output = ["("] - n = self - first = 1 - while n.next is not None: - if not first: - output.append(", ") - else: - first = 0 - output.append(str(n.value)) - n = n.next - output.append(")") - return "".join(output) + return str() def __iter__(self): return tupleiterator(self) @@ -760,13 +691,12 @@ class tupleiterator: def __init__(self, l): self.l = l + self.index = 0 def next(self): - l = self.l - next = l.next - if next is not None: - self.l = next - return l.value + if self.index < len(self.l): + self.index += 1 + return self.l[self.index] else: raise StopIteration @@ -791,7 +721,8 @@ return current class Exception: - pass + def __init__(self, *args): + pass class AttributeError(Exception): pass