changeset: 5445:af961911bcb2
user: Jerry James <james(a)xemacs.org>
date: Tue Mar 29 15:59:56 2011 -0600
files: src/ChangeLog src/alloc.c src/dired.c src/editfns.c src/faces.c
description:
Make listu() and listn() assemble lists in forward order. Use them.
See xemacs-patches message with ID
<AANLkTi=Tnd_e8WqiGBE2DmNGmY7zhqxhVNtxECnQo8w9(a)mail.gmail.com>
diff -r 436e67ca8c79 -r af961911bcb2 src/ChangeLog
--- a/src/ChangeLog Tue Mar 29 17:28:34 2011 +0100
+++ b/src/ChangeLog Tue Mar 29 15:59:56 2011 -0600
@@ -1,3 +1,13 @@
+2011-03-24 Jerry James <james(a)xemacs.org>
+
+ * alloc.c (listu): Assemble the list in the right order so we don't
+ have to reverse it.
+ (listn): Ditto.
+ * dired.c (Ffile_attributes): Use listn instead of building an array
+ to pass to Flist. GC protect the mode string.
+ * editfns.c (Fdecode_time): Use listn instead of Flist.
+ * faces.c (vars_of_faces): Use listu instead of Flist.
+
2011-03-24 Jerry James <james(a)xemacs.org>
* README.kkcc: "occured" -> "occurred".
diff -r 436e67ca8c79 -r af961911bcb2 src/alloc.c
--- a/src/alloc.c Tue Mar 29 17:28:34 2011 +0100
+++ b/src/alloc.c Tue Mar 29 15:59:56 2011 -0600
@@ -1465,18 +1465,23 @@
listu (Lisp_Object first, ...)
{
Lisp_Object obj = Qnil;
- Lisp_Object val;
- va_list va;
-
- va_start (va, first);
- val = first;
- while (!UNBOUNDP (val))
- {
- obj = Fcons (val, obj);
+
+ if (!UNBOUNDP (first))
+ {
+ va_list va;
+ Lisp_Object last, val;
+
+ last = obj = Fcons (first, Qnil);
+ va_start (va, first);
val = va_arg (va, Lisp_Object);
- }
- va_end (va);
- return Fnreverse (obj);
+ while (!UNBOUNDP (val))
+ {
+ last = XCDR (last) = Fcons (val, Qnil);
+ val = va_arg (va, Lisp_Object);
+ }
+ va_end (va);
+ }
+ return obj;
}
/* Return a list of arbitrary length, with length specified and remaining
@@ -1485,15 +1490,21 @@
Lisp_Object
listn (int num_args, ...)
{
- int i;
Lisp_Object obj = Qnil;
- va_list va;
-
- va_start (va, num_args);
- for (i = 0; i < num_args; i++)
- obj = Fcons (va_arg (va, Lisp_Object), obj);
- va_end (va);
- return Fnreverse (obj);
+
+ if (num_args > 0)
+ {
+ va_list va;
+ Lisp_Object last;
+ int i;
+
+ va_start (va, num_args);
+ last = obj = Fcons (va_arg (va, Lisp_Object), Qnil);
+ for (i = 1; i < num_args; i++)
+ last = XCDR (last) = Fcons (va_arg (va, Lisp_Object), Qnil);
+ va_end (va);
+ }
+ return obj;
}
/* Return a list of arbitrary length, with length specified and an array
diff -r 436e67ca8c79 -r af961911bcb2 src/dired.c
--- a/src/dired.c Tue Mar 29 17:28:34 2011 +0100
+++ b/src/dired.c Tue Mar 29 15:59:56 2011 -0600
@@ -845,14 +845,13 @@
(filename))
{
/* This function can GC. GC checked 1997.06.04. */
- Lisp_Object values[12];
Lisp_Object directory = Qnil;
struct stat s;
char modes[10];
- Lisp_Object handler;
- struct gcpro gcpro1, gcpro2;
+ Lisp_Object handler, mode, modestring = Qnil, size, gid;
+ struct gcpro gcpro1, gcpro2, gcpro3;
- GCPRO2 (filename, directory);
+ GCPRO3 (filename, directory, modestring);
filename = Fexpand_file_name (filename, Qnil);
/* If the file name has special constructs in it,
@@ -893,49 +892,54 @@
switch (s.st_mode & S_IFMT)
{
default:
- values[0] = Qnil;
+ mode = Qnil;
break;
case S_IFDIR:
- values[0] = Qt;
+ mode = Qt;
break;
#ifdef S_IFLNK
case S_IFLNK:
- values[0] = Ffile_symlink_p (filename);
+ mode = Ffile_symlink_p (filename);
break;
#endif
}
- values[1] = make_int (s.st_nlink);
- values[2] = make_int (s.st_uid);
- values[3] = make_int (s.st_gid);
- values[4] = make_time (s.st_atime);
- values[5] = make_time (s.st_mtime);
- values[6] = make_time (s.st_ctime);
#ifndef HAVE_BIGNUM
- values[7] = make_integer (NUMBER_FITS_IN_AN_EMACS_INT (s.st_size) ?
- (EMACS_INT)s.st_size : -1);
+ size = make_integer (NUMBER_FITS_IN_AN_EMACS_INT (s.st_size) ?
+ (EMACS_INT)s.st_size : -1);
#else
- values[7] = make_integer (s.st_size);
-#endif
+ size = make_integer (s.st_size);
+#endif
filemodestring (&s, modes);
- values[8] = make_string ((Ibyte *) modes, 10);
+ modestring = make_string ((Ibyte *) modes, 10),
+
#if defined (BSD4_2) || defined (BSD4_3) /* file gid will be dir gid */
{
struct stat sdir;
if (!NILP (directory) && qxe_stat (XSTRING_DATA (directory), &sdir) ==
0)
- values[9] = (sdir.st_gid != s.st_gid) ? Qt : Qnil;
+ gid = (sdir.st_gid != s.st_gid) ? Qt : Qnil;
else /* if we can't tell, assume worst */
- values[9] = Qt;
+ gid = Qt;
}
#else /* file gid will be egid */
- values[9] = (s.st_gid != getegid ()) ? Qt : Qnil;
+ gid = (s.st_gid != getegid ()) ? Qt : Qnil;
#endif /* BSD4_2 or BSD4_3 */
- values[10] = make_int (s.st_ino);
- values[11] = make_int (s.st_dev);
- UNGCPRO;
- return Flist (countof (values), values);
+
+ RETURN_UNGCPRO (listn (12,
+ mode,
+ make_int (s.st_nlink),
+ make_int (s.st_uid),
+ make_int (s.st_gid),
+ make_time (s.st_atime),
+ make_time (s.st_mtime),
+ make_time (s.st_ctime),
+ size,
+ modestring,
+ gid,
+ make_int (s.st_ino),
+ make_int (s.st_dev)));
}
diff -r 436e67ca8c79 -r af961911bcb2 src/editfns.c
--- a/src/editfns.c Tue Mar 29 17:28:34 2011 +0100
+++ b/src/editfns.c Tue Mar 29 15:59:56 2011 -0600
@@ -1102,29 +1102,28 @@
time_t time_spec;
struct tm save_tm;
struct tm *decoded_time;
- Lisp_Object list_args[9];
if (! lisp_to_time (specified_time, &time_spec))
invalid_argument ("Invalid time specification", Qunbound);
decoded_time = localtime (&time_spec);
- list_args[0] = make_int (decoded_time->tm_sec);
- list_args[1] = make_int (decoded_time->tm_min);
- list_args[2] = make_int (decoded_time->tm_hour);
- list_args[3] = make_int (decoded_time->tm_mday);
- list_args[4] = make_int (decoded_time->tm_mon + 1);
- list_args[5] = make_int (decoded_time->tm_year + 1900);
- list_args[6] = make_int (decoded_time->tm_wday);
- list_args[7] = (decoded_time->tm_isdst)? Qt : Qnil;
/* Make a copy, in case gmtime modifies the struct. */
save_tm = *decoded_time;
decoded_time = gmtime (&time_spec);
- if (decoded_time == 0)
- list_args[8] = Qnil;
- else
- list_args[8] = make_int (difftm (&save_tm, decoded_time));
- return Flist (9, list_args);
+
+ return listn(9,
+ make_int (save_tm.tm_sec),
+ make_int (save_tm.tm_min),
+ make_int (save_tm.tm_hour),
+ make_int (save_tm.tm_mday),
+ make_int (save_tm.tm_mon + 1),
+ make_int (save_tm.tm_year + 1900),
+ make_int (save_tm.tm_wday),
+ save_tm.tm_isdst ? Qt : Qnil,
+ (decoded_time == NULL)
+ ? Qnil
+ : make_int (difftm (&save_tm, decoded_time)));
}
static void set_time_zone_rule (Extbyte *tzstring);
diff -r 436e67ca8c79 -r af961911bcb2 src/faces.c
--- a/src/faces.c Tue Mar 29 17:28:34 2011 +0100
+++ b/src/faces.c Tue Mar 29 15:59:56 2011 -0600
@@ -2227,26 +2227,11 @@
debug_x_faces = 0;
#endif
- {
- Lisp_Object syms[20];
- int n = 0;
-
- syms[n++] = Qforeground;
- syms[n++] = Qbackground;
- syms[n++] = Qfont;
- syms[n++] = Qdisplay_table;
- syms[n++] = Qbackground_pixmap;
- syms[n++] = Qbackground_placement;
- syms[n++] = Qunderline;
- syms[n++] = Qstrikethru;
- syms[n++] = Qhighlight;
- syms[n++] = Qdim;
- syms[n++] = Qblinking;
- syms[n++] = Qreverse;
-
- Vbuilt_in_face_specifiers = Flist (n, syms);
- staticpro (&Vbuilt_in_face_specifiers);
- }
+ Vbuilt_in_face_specifiers =
+ listu (Qforeground, Qbackground, Qfont, Qdisplay_table, Qbackground_pixmap,
+ Qbackground_placement, Qunderline, Qstrikethru, Qhighlight, Qdim,
+ Qblinking, Qreverse, Qunbound);
+ staticpro (&Vbuilt_in_face_specifiers);
}
void
_______________________________________________
XEmacs-Patches mailing list
XEmacs-Patches(a)xemacs.org
http://lists.xemacs.org/mailman/listinfo/xemacs-patches