comparison src/alloc.c @ 5386:af961911bcb2

Make listu() and listn() assemble lists in forward order. Use them. See xemacs-patches message with ID <AANLkTi=Tnd_e8WqiGBE2DmNGmY7zhqxhVNtxECnQo8w9@mail.gmail.com>
author Jerry James <james@xemacs.org>
date Tue, 29 Mar 2011 15:59:56 -0600
parents 3889ef128488
children 248176c74e6b
comparison
equal deleted inserted replaced
5385:436e67ca8c79 5386:af961911bcb2
1463 1463
1464 Lisp_Object 1464 Lisp_Object
1465 listu (Lisp_Object first, ...) 1465 listu (Lisp_Object first, ...)
1466 { 1466 {
1467 Lisp_Object obj = Qnil; 1467 Lisp_Object obj = Qnil;
1468 Lisp_Object val; 1468
1469 va_list va; 1469 if (!UNBOUNDP (first))
1470
1471 va_start (va, first);
1472 val = first;
1473 while (!UNBOUNDP (val))
1474 { 1470 {
1475 obj = Fcons (val, obj); 1471 va_list va;
1472 Lisp_Object last, val;
1473
1474 last = obj = Fcons (first, Qnil);
1475 va_start (va, first);
1476 val = va_arg (va, Lisp_Object); 1476 val = va_arg (va, Lisp_Object);
1477 while (!UNBOUNDP (val))
1478 {
1479 last = XCDR (last) = Fcons (val, Qnil);
1480 val = va_arg (va, Lisp_Object);
1481 }
1482 va_end (va);
1477 } 1483 }
1478 va_end (va); 1484 return obj;
1479 return Fnreverse (obj);
1480 } 1485 }
1481 1486
1482 /* Return a list of arbitrary length, with length specified and remaining 1487 /* Return a list of arbitrary length, with length specified and remaining
1483 args making up the list. */ 1488 args making up the list. */
1484 1489
1485 Lisp_Object 1490 Lisp_Object
1486 listn (int num_args, ...) 1491 listn (int num_args, ...)
1487 { 1492 {
1488 int i;
1489 Lisp_Object obj = Qnil; 1493 Lisp_Object obj = Qnil;
1490 va_list va; 1494
1491 1495 if (num_args > 0)
1492 va_start (va, num_args); 1496 {
1493 for (i = 0; i < num_args; i++) 1497 va_list va;
1494 obj = Fcons (va_arg (va, Lisp_Object), obj); 1498 Lisp_Object last;
1495 va_end (va); 1499 int i;
1496 return Fnreverse (obj); 1500
1501 va_start (va, num_args);
1502 last = obj = Fcons (va_arg (va, Lisp_Object), Qnil);
1503 for (i = 1; i < num_args; i++)
1504 last = XCDR (last) = Fcons (va_arg (va, Lisp_Object), Qnil);
1505 va_end (va);
1506 }
1507 return obj;
1497 } 1508 }
1498 1509
1499 /* Return a list of arbitrary length, with length specified and an array 1510 /* Return a list of arbitrary length, with length specified and an array
1500 of elements. */ 1511 of elements. */
1501 1512