comparison src/eval.c @ 2421:ab71ad6ff3dd

[xemacs-hg @ 2004-12-06 03:50:53 by ben] (none) README.packages: Document use of --package-prefix. Fix error in specifying standard package location. make-docfile.c: Use QXE_PATH_MAX. info.el: Correct doc string giving example package path. menubar-items.el: Move Prefix Rectangle command up one level. xemacs/packages.texi: Add long form of Lisp Reference Manual to links. Add links pointing to Lisp Reference Manual for more detailed package discussion. lispref/range-tables.texi: Document range-table changes. internals/internals.texi: Update history section. elhash.c, elhash.h, profile.c: Create inchash_eq() to allow direct incrementing of hash-table entry. Use in profile.c to try to reduce profiling overhead. Increase initial size of profile hash tables to reduce profiling overhead. buffer.c, device-msw.c, dialog-msw.c, dired-msw.c, editfns.c, event-msw.c, events.c, glyphs-msw.c, keymap.c, objects-msw.c, process-nt.c, syswindows.h, text.c, text.h, unexnt.c: Rename xetcs* -> qxetcs* for consistency with qxestr*. Rename ei*_c(_*) -> ei*_ascii(_*) since they work with ASCII-only strings not "C strings", whatever those are. This is the last place where "c" was incorrectly being used for "ascii". dialog-msw.c, dumper.c, event-msw.c, fileio.c, glyphs-gtk.c, glyphs-x.c, nt.c, process-nt.c, realpath.c, sysdep.c, sysfile.h, unexcw.c, unexnext.c, unexnt.c: Try to avoid differences in systems that do or do not include final null byte in PATH_MAX. Create PATH_MAX_INTERNAL and PATH_MAX_EXTERNAL and use them everywhere. Rewrite code in dumper.c to avoid use of PATH_MAX. When necessary in nt.c, use _MAX_PATH instead of MAX_PATH to be consistent with other places. text.c: Code to short-circuit when binary or Unicode was not working due to EOL wrapping. Fix this code to work when either no EOL autodetection or no CR's or LF's in the text. lisp.h, rangetab.c, rangetab.h, regex.c, search.c: Implement different types of ranges (open/closed start and end). Change default to be start-closed, end-open.
author ben
date Mon, 06 Dec 2004 03:52:23 +0000
parents ecf1ebac70d8
children 3d8143fc88e1
comparison
equal deleted inserted replaced
2420:ad56e5a6d09f 2421:ab71ad6ff3dd
1 /* Evaluator for XEmacs Lisp interpreter. 1 /* Evaluator for XEmacs Lisp interpreter.
2 Copyright (C) 1985-1987, 1992-1994 Free Software Foundation, Inc. 2 Copyright (C) 1985-1987, 1992-1994 Free Software Foundation, Inc.
3 Copyright (C) 1995 Sun Microsystems, Inc. 3 Copyright (C) 1995 Sun Microsystems, Inc.
4 Copyright (C) 2000, 2001, 2002, 2003 Ben Wing. 4 Copyright (C) 2000, 2001, 2002, 2003, 2004 Ben Wing.
5 5
6 This file is part of XEmacs. 6 This file is part of XEmacs.
7 7
8 XEmacs is free software; you can redistribute it and/or modify it 8 XEmacs is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published by the 9 under the terms of the GNU General Public License as published by the
1152 The return value of the `setq' form is the value of the last VAL. 1152 The return value of the `setq' form is the value of the last VAL.
1153 */ 1153 */
1154 (args)) 1154 (args))
1155 { 1155 {
1156 /* This function can GC */ 1156 /* This function can GC */
1157 Lisp_Object symbol, tail, val = Qnil;
1158 int nargs; 1157 int nargs;
1159 struct gcpro gcpro1; 1158 Lisp_Object retval = Qnil;
1160 1159
1161 GET_LIST_LENGTH (args, nargs); 1160 GET_LIST_LENGTH (args, nargs);
1162 1161
1163 if (nargs & 1) /* Odd number of arguments? */ 1162 if (nargs & 1) /* Odd number of arguments? */
1164 Fsignal (Qwrong_number_of_arguments, list2 (Qsetq, make_int (nargs))); 1163 Fsignal (Qwrong_number_of_arguments, list2 (Qsetq, make_int (nargs)));
1165 1164
1166 GCPRO1 (val); 1165 GC_PROPERTY_LIST_LOOP_3 (symbol, val, args)
1167
1168 PROPERTY_LIST_LOOP (tail, symbol, val, args)
1169 { 1166 {
1170 val = Feval (val); 1167 val = Feval (val);
1171 Fset (symbol, val); 1168 Fset (symbol, val);
1172 } 1169 retval = val;
1173 1170 }
1174 UNGCPRO; 1171
1175 return val; 1172 END_GC_PROPERTY_LIST_LOOP (symbol);
1173
1174 return retval;
1176 } 1175 }
1177 1176
1178 DEFUN ("quote", Fquote, 1, UNEVALLED, 0, /* 1177 DEFUN ("quote", Fquote, 1, UNEVALLED, 0, /*
1179 Return the argument, without evaluating it. `(quote x)' yields `x'. 1178 Return the argument, without evaluating it. `(quote x)' yields `x'.
1180 */ 1179 */
4823 { 4822 {
4824 struct call_trapping_problems *p = 4823 struct call_trapping_problems *p =
4825 (struct call_trapping_problems *) get_opaque_ptr (opaque); 4824 (struct call_trapping_problems *) get_opaque_ptr (opaque);
4826 4825
4827 if (!(inhibit_flags & INHIBIT_WARNING_ISSUE) 4826 if (!(inhibit_flags & INHIBIT_WARNING_ISSUE)
4828 && !warning_will_be_discarded (current_warning_level ())) 4827 && !warning_will_be_discarded (current_warning_level ())
4828 && !EQ (error_conditions, Qquit))
4829 { 4829 {
4830 struct gcpro gcpro1; 4830 struct gcpro gcpro1;
4831 Lisp_Object lstream = Qnil; 4831 Lisp_Object lstream = Qnil;
4832 int speccount = specpdl_depth (); 4832 int speccount = specpdl_depth ();
4833 4833
4896 Qnil, 3, 4896 Qnil, 3,
4897 build_msg_string (warning_string ? warning_string : "error"), 4897 build_msg_string (warning_string ? warning_string : "error"),
4898 p->thrown_tag, p->thrown_value); 4898 p->thrown_tag, p->thrown_value);
4899 warn_when_safe_lispobj (Qerror, current_warning_level (), errstr); 4899 warn_when_safe_lispobj (Qerror, current_warning_level (), errstr);
4900 } 4900 }
4901 else if (p->caught_error) 4901 else if (p->caught_error && !EQ (p->error_conditions, Qquit))
4902 { 4902 {
4903 Lisp_Object errstr; 4903 Lisp_Object errstr;
4904 /* #### This should call 4904 /* #### This should call
4905 (with-output-to-string (display-error (cons error_conditions 4905 (with-output-to-string (display-error (cons error_conditions
4906 data)) 4906 data))