Mercurial > hg > xemacs-beta
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 |