1.1 --- a/lib/__builtins__/list.py Mon Nov 21 22:56:52 2016 +0100
1.2 +++ b/lib/__builtins__/list.py Tue Nov 22 01:28:58 2016 +0100
1.3 @@ -31,9 +31,10 @@
1.4
1.5 "Initialise the list."
1.6
1.7 - # Reserve space for a fragment reference.
1.8 + # Reserve an attribute for a fragment reference along with some space
1.9 + # for elements.
1.10
1.11 - self.__data__ = native._list_init(len(args)) # reserve space for elements
1.12 + self.__data__ = native._list_init(len(args))
1.13
1.14 if args is not None:
1.15 self.extend(args)
1.16 @@ -56,7 +57,13 @@
1.17
1.18 def __setslice__(self, start, end, slice): pass
1.19 def __delslice__(self, start, end): pass
1.20 - def append(self, value): pass
1.21 +
1.22 + def append(self, value):
1.23 +
1.24 + "Append 'value' to the list."
1.25 +
1.26 + native._list_append(self, value)
1.27 +
1.28 def insert(self, i, value): pass
1.29
1.30 def extend(self, iterable):
1.31 @@ -77,15 +84,38 @@
1.32 return native._list_len(self)
1.33
1.34 def __add__(self, other): pass
1.35 - def __iadd__(self, other): pass
1.36 +
1.37 + def __iadd__(self, other):
1.38 +
1.39 + "Concatenate 'other' to the list."
1.40 +
1.41 + if isinstance(other, list):
1.42 + native._list_concat(self, other)
1.43 + else:
1.44 + self.extend(other)
1.45 + return self
1.46
1.47 def __str__(self):
1.48
1.49 "Return a string representation of the list."
1.50
1.51 - # NOTE: To be implemented, maybe using a buffer.
1.52 + b = buffer()
1.53 + i = 0
1.54 + l = self.__len__()
1.55 + first = True
1.56 +
1.57 + # NOTE: Should really show quoted forms of the items.
1.58
1.59 - return "[...]"
1.60 + b.append("[")
1.61 + while i < l:
1.62 + if first:
1.63 + first = False
1.64 + else:
1.65 + b.append(", ")
1.66 + b.append(self.__get_single_item__(i))
1.67 + b.append("]")
1.68 +
1.69 + return str(b)
1.70
1.71 def __bool__(self):
1.72