aboutsummaryrefslogtreecommitdiffstats
path: root/src/alloc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/alloc.c')
-rw-r--r--src/alloc.c37
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
2618Lisp_Object 2618Lisp_Object
2619listn (enum constype type, ptrdiff_t count, Lisp_Object arg, ...) 2619listn (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)
3625Lisp_Object 3624Lisp_Object
3626make_save_ptr_ptr (void *a, void *b) 3625make_save_ptr_ptr (void *a, void *b)