*** Objects/listobject.c	Sat Aug 10 05:51:27 1996
--- Objects/listobject.c	Thu Sep 19 16:35:36 1996
***************
*** 543,548 ****
--- 543,593 ----
  	return ins(self, (int) self->ob_size, v);
  }
  
+ static object *
+ listconcat(self, args)
+ 	listobject *self;
+ 	object *args;
+ {
+ 	int i, size;
+ 	object* v;
+ 	object* bb;
+ 	object** items;
+ 
+ 	if (!getargs(args, "O", &bb))
+ 		return NULL;
+ 	if (!is_listobject(bb)) {
+ 		err_badarg();
+ 		return NULL;
+ 	}
+ 
+ #define b ((listobject *)bb)
+ 	items = self->ob_item;
+ 	size = self->ob_size;
+ 
+ 	NRESIZE(items, object *, size + b->ob_size);
+ 	if (items == NULL) {
+ 		err_nomem();
+ 		return NULL;
+ 	}
+ 
+ /* b might be equal to self, so make items available as ob_item */
+ /* and don't change ob_size until we're done concatenating. */
+ 
+ 	self->ob_item = items;
+ 
+ 	for (i = 0; i < b->ob_size; i++) {
+ 		v = b->ob_item[i];
+ 		items[size ++] = v;
+ 		INCREF(v);
+ 	}
+ 
+ 	self->ob_size = size;
+ #undef b
+ 
+ 	INCREF(None);
+ 	return None;
+ }
+ 
  static object *comparefunc;
  
  static int
***************
*** 762,767 ****
--- 807,813 ----
  	{"sort",	(method)listsort, 0},
  	{"remove",	(method)listremove},
  	{"reverse",	(method)listreverse},
+ 	{"concat",	(method)listconcat},
  	{NULL,		NULL}		/* sentinel */
  };
  
