aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fns.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/fns.c b/src/fns.c
index 57c57884f4d..6cc5cef95df 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -1992,17 +1992,18 @@ sort_vector (Lisp_Object vector, Lisp_Object predicate)
1992 return; 1992 return;
1993 ptrdiff_t halflen = len >> 1; 1993 ptrdiff_t halflen = len >> 1;
1994 Lisp_Object *tmp; 1994 Lisp_Object *tmp;
1995 Lisp_Object tmpvec = Qnil;
1995 struct gcpro gcpro1, gcpro2, gcpro3; 1996 struct gcpro gcpro1, gcpro2, gcpro3;
1996 GCPRO3 (vector, predicate, predicate); 1997 GCPRO3 (vector, predicate, tmpvec);
1997 USE_SAFE_ALLOCA; 1998 if (halflen < MAX_ALLOCA / word_size)
1998 SAFE_ALLOCA_LISP (tmp, halflen); 1999 tmp = alloca (halflen * word_size);
1999 for (ptrdiff_t i = 0; i < halflen; i++) 2000 else
2000 tmp[i] = make_number (0); 2001 {
2001 gcpro3.var = tmp; 2002 tmpvec = Fmake_vector (make_number (halflen), make_number (0));
2002 gcpro3.nvars = halflen; 2003 tmp = XVECTOR (tmpvec)->contents;
2004 }
2003 sort_vector_inplace (predicate, len, XVECTOR (vector)->contents, tmp); 2005 sort_vector_inplace (predicate, len, XVECTOR (vector)->contents, tmp);
2004 UNGCPRO; 2006 UNGCPRO;
2005 SAFE_FREE ();
2006} 2007}
2007 2008
2008DEFUN ("sort", Fsort, Ssort, 2, 2, 0, 2009DEFUN ("sort", Fsort, Ssort, 2, 2, 0,