diff options
Diffstat (limited to 'src/alloc.c')
| -rw-r--r-- | src/alloc.c | 37 |
1 files changed, 18 insertions, 19 deletions
diff --git a/src/alloc.c b/src/alloc.c index bb47a24d905..31b0644c285 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -2618,29 +2618,28 @@ list5 (Lisp_Object arg1, Lisp_Object arg2, Lisp_Object arg3, Lisp_Object arg4, L | |||
| 2618 | Lisp_Object | 2618 | Lisp_Object |
| 2619 | listn (enum constype type, ptrdiff_t count, Lisp_Object arg, ...) | 2619 | listn (enum constype type, ptrdiff_t count, Lisp_Object arg, ...) |
| 2620 | { | 2620 | { |
| 2621 | va_list ap; | 2621 | Lisp_Object (*cons) (Lisp_Object, Lisp_Object); |
| 2622 | ptrdiff_t i; | 2622 | switch (type) |
| 2623 | Lisp_Object val, *objp; | 2623 | { |
| 2624 | case CONSTYPE_PURE: cons = pure_cons; break; | ||
| 2625 | case CONSTYPE_HEAP: cons = Fcons; break; | ||
| 2626 | default: emacs_abort (); | ||
| 2627 | } | ||
| 2624 | 2628 | ||
| 2625 | /* Change to SAFE_ALLOCA if you hit this eassert. */ | 2629 | eassume (0 < count); |
| 2626 | eassert (count <= MAX_ALLOCA / word_size); | 2630 | Lisp_Object val = cons (arg, Qnil); |
| 2631 | Lisp_Object tail = val; | ||
| 2627 | 2632 | ||
| 2628 | objp = alloca (count * word_size); | 2633 | va_list ap; |
| 2629 | objp[0] = arg; | ||
| 2630 | va_start (ap, arg); | 2634 | va_start (ap, arg); |
| 2631 | for (i = 1; i < count; i++) | 2635 | for (ptrdiff_t i = 1; i < count; i++) |
| 2632 | objp[i] = va_arg (ap, Lisp_Object); | ||
| 2633 | va_end (ap); | ||
| 2634 | |||
| 2635 | for (val = Qnil, i = count - 1; i >= 0; i--) | ||
| 2636 | { | 2636 | { |
| 2637 | if (type == CONSTYPE_PURE) | 2637 | Lisp_Object elem = cons (va_arg (ap, Lisp_Object), Qnil); |
| 2638 | val = pure_cons (objp[i], val); | 2638 | XSETCDR (tail, elem); |
| 2639 | else if (type == CONSTYPE_HEAP) | 2639 | tail = elem; |
| 2640 | val = Fcons (objp[i], val); | ||
| 2641 | else | ||
| 2642 | emacs_abort (); | ||
| 2643 | } | 2640 | } |
| 2641 | va_end (ap); | ||
| 2642 | |||
| 2644 | return val; | 2643 | return val; |
| 2645 | } | 2644 | } |
| 2646 | 2645 | ||
| @@ -3620,7 +3619,7 @@ make_save_int_obj (ptrdiff_t a, Lisp_Object b) | |||
| 3620 | p->data[1].object = b; | 3619 | p->data[1].object = b; |
| 3621 | return val; | 3620 | return val; |
| 3622 | } | 3621 | } |
| 3623 | 3622 | ||
| 3624 | #if ! (defined USE_X_TOOLKIT || defined USE_GTK) | 3623 | #if ! (defined USE_X_TOOLKIT || defined USE_GTK) |
| 3625 | Lisp_Object | 3624 | Lisp_Object |
| 3626 | make_save_ptr_ptr (void *a, void *b) | 3625 | make_save_ptr_ptr (void *a, void *b) |