- 2011-03-16 Paul Eggert <eggert@cs.ucla.edu>
-
+2011-03-17 Paul Eggert <eggert@cs.ucla.edu>
+
+ * process.c (make_serial_process_unwind, send_process_trap):
+ (sigchld_handler): Now static.
+
+ * process.c (allocate_pty): Let PTY_ITERATION declare iteration vars.
+ That way, the code declares only the vars that it needs.
+ * s/aix4-2.h (PTY_ITERATION): Declare iteration vars.
+ * s/cygwin.h (PTY_ITERATION): Likewise.
+ * s/darwin.h (PTY_ITERATION): Likewise.
+ * s/gnu-linux.h (PTY_ITERATION): Likewise.
+
+ * s/irix6-5.h (PTY_OPEN): Declare stb, to loosen coupling.
+ * process.c (allocate_pty): Don't declare stb unless it's needed.
+
+ * bytecode.c (MAYBE_GC): Rewrite so as not to use empty "else".
+ (CONSTANTLIM): Remove; unused.
+ (METER_CODE, Bscan_buffer, Bread_char, Bset_mark):
+ Define only if needed.
+
+ * unexelf.c (unexec): Name an expression,
+ to avoid gcc -Wbad-function-cast warning.
+ Use a different way to cause a compilation error if anyone uses
+ n rather than nn, a way that does not involve shadowing.
+ (ELF_BSS_SECTION_NAME, OLD_PROGRAM_H): Remove; unused.
+
+ * deps.mk (unexalpha.o): Remove; unused.
+
- 2011-03-15 Paul Eggert <eggert@cs.ucla.edu>
-
+ New file unexec.h, the (simple) interface for unexec (Bug#8267).
+ * unexec.h: New file.
+ * deps.mk (emacs.o, unexaix.o, unexcw.o, unexcoff.o, unexelf.o):
+ (unexhp9k800.o, unexmacosx.o, unexsol.o, unexw32.o):
+ Depend on unexec.h.
+ * emacs.c [!defined CANNOT_DUMP]: Include unexec.h.
+ * unexaix.c, unexcoff.c, unexcw.c, unexelf.c, unexhp9k800.c:
+ * unexmacosx.c, unexsol.c, unexw32.c: Include unexec.h.
+
+ * syntax.c (Fforward_comment, scan_lists): Rename locals to avoid
+ shadowing.
+ (back_comment, skip_chars): Mark vars as initialized.
+
+ * character.h (FETCH_STRING_CHAR_ADVANCE_NO_CHECK, BUF_INC_POS):
+ Rename locals to avoid shadowing.
+
+ * lread.c (read1): Rewrite so as not to use empty "else".
+ (Fload, readevalloop, read1): Rename locals to avoid shadowing.
+
+ * print.c (Fredirect_debugging_output): Fix pointer signedess.
+
+ * lisp.h (debug_output_compilation_hack): Add decl here, to avoid
+ warning when compiling print.c.
+
+ * font.c (font_unparse_fcname): Abort in an "impossible" situation
+ instead of using an uninitialized var.
+ (font_sort_entities): Mark var as initialized.
+
+ * character.h (FETCH_CHAR_ADVANCE): Rename locals to avoid shadowing.
+
+ * font.c (font_unparse_xlfd): Don't mix pointers to variables with
+ pointers to constants.
+ (font_parse_fcname): Remove unused vars.
+ (font_delete_unmatched): Now static.
+ (font_get_spec): Remove; unused.
+ (font_style_to_value, font_prop_validate_style, font_unparse_fcname):
+ (font_update_drivers, Ffont_get_glyphs, font_add_log):
+ Rename or move locals to avoid shadowing.
+
+ * fns.c (require_nesting_list, require_unwind): Now static.
+ (Ffillarray): Rename locals to avoid shadowing.
+
+ * floatfns.c (domain_error2): Define only if needed.
+ (Ffrexp, Fldexp): Rename locals to avoid shadowing.
+
+ * alloc.c (mark_backtrace): Move decl from here ...
+ * lisp.h: ... to here, so that it can be checked.
+
+ * eval.c (call_debugger, do_debug_on_call, grow_specpdl): Now static.
+ (Fdefvar): Rewrite so as not to use empty "else".
+ (lisp_indirect_variable): Name an expression,
+ to avoid gcc -Wbad-function-cast warning.
+ (Fdefvar): Rename locals to avoid shadowing.
+
+ * callint.c (quotify_arg, quotify_args): Now static.
+ (Fcall_interactively): Rename locals to avoid shadowing.
+ Use const pointer when appropriate.
+
+ * lisp.h (get_system_name, get_operating_system_release):
+ Move decls here, to check interfaces.
+ * process.c (get_operating_system_release): Move decl to lisp.h.
+ * xrdb.c (get_system_name): Likewise.
+ * editfns.c (init_editfns, Fuser_login_name, Fuser_uid):
+ (Fuser_real_uid, Fuser_full_name): Remove unnecessary casts,
+ some of which prompt warnings from gcc -Wbad-function-cast.
+ (Fformat_time_string, Fencode_time, Finsert_char):
+ (Ftranslate_region_internal, Fformat):
+ Rename or remove local vars to avoid shadowing.
+ (Ftranslate_region_internal): Mark var as initialized.
+
-
- 2011-03-14 Paul Eggert <eggert@cs.ucla.edu>
-
- * buffer.c (switch_to_buffer_1): Now static.
+ * doc.c (Fdocumentation, Fsnarf_documentation): Move locals to
+ avoid shadowing.
+
+ * lisp.h (eassert): Check that the argument compiles, even if
+ ENABLE_CHECKING is not defined.
+
+ * data.c (Findirect_variable): Name an expression, to avoid
+ gcc -Wbad-function-cast warning.
+ (default_value, arithcompare, arith_driver, arith_error): Now static.
+ (store_symval_forwarding): Rename local to avoid shadowing.
+ (Fmake_variable_buffer_local, Fmake_local_variable): Mark
+ variables as initialized.
+ (do_blv_forwarding, do_symval_forwarding): Remove; unused.
+
+ * alloc.c (check_cons_list): Do not define unless GC_CHECK_CONS_LIST.
+ (Fmake_vector, Fvector, Fmake_byte_code, Fgarbage_collect):
+ Rename locals to avoid shadowing.
+ (mark_stack): Move local variables into the #ifdef region where
+ they're used.
+ (BLOCK_INPUT_ALLOC, UNBLOCK_INPUT_ALLOC): Define only if
+ ! defined SYSTEM_MALLOC && ! defined SYNC_INPUT, as they are not
+ needed otherwise.
+ (CHECK_ALLOCATED): Define only if GC_CHECK_MARKED_OBJECTS.
+ (GC_STRING_CHARS): Remove; not used.
+ (Fmemory_limit): Cast sbrk's returned value to char *.
+
+ * lisp.h (check_cons_list): Declare if GC_CHECK_CONS_LIST; this
+ avoids undefined behavior in theory.
+
+ * regex.c (IF_LINT): Add defn, for benefit of ../lib-src.
+
+ Use functions, not macros, for up- and down-casing (Bug#8254).
+ * buffer.h (DOWNCASE_TABLE, UPCASE_TABLE, DOWNCASE, UPPERCASEP):
+ (NOCASEP, LOWERCASEP, UPCASE, UPCASE1): Remove. All callers changed
+ to use the following functions instead of these macros.
+ (downcase): Adjust to lack of DOWNCASE_TABLE. Return int, not
+ EMACS_INT, since callers assume the returned value fits in int.
+ (upcase1): Likewise, for UPCASE_TABLE.
+ (uppercasep, lowercasep, upcase): New static inline functions.
+ * editfns.c (Fchar_equal): Remove no-longer-needed workaround for
+ the race-condition problem in the old DOWNCASE.
+
+ * regex.c (CHARSET_LOOKUP_RANGE_TABLE_RAW, POP_FAILURE_REG_OR_COUNT):
+ Rename locals to avoid shadowing.
+ (regex_compile, re_match_2_internal): Move locals to avoid shadowing.
+ (regex_compile, re_search_2, re_match_2_internal):
+ Remove unused local vars.
+ (FREE_VAR): Rewrite so as not to use empty "else",
+ which gcc can warn about.
+ (regex_compile, re_match_2_internal): Mark locals as initialized.
+ (RETALLOC_IF): Define only if needed.
+ (WORDCHAR_P): Likewise. This one is never needed, but is used
+ only in a comment talking about a compiler bug, so put inside
+ the #if 0 of that comment.
+ (CHARSET_LOOKUP_BITMAP, FAIL_STACK_FULL, RESET_FAIL_STACK):
+ (PUSH_FAILURE_ELT, BUF_PUSH_3, STOP_ADDR_VSTRING):
+ Remove; unused.
+
+ * search.c (boyer_moore): Rename locals to avoid shadowing.
+ * character.h (FETCH_STRING_CHAR_AS_MULTIBYTE_ADVANCE):
+ (PREV_CHAR_BOUNDARY): Likewise.
+
+ * search.c (simple_search): Remove unused var.
+
+ * dired.c (compile_pattern): Move decl from here ...
+ * lisp.h: ... to here, so that it can be checked.
+ (struct re_registers): New forward decl.
+
+ * character.h (INC_POS, DEC_POS): Rename locals to avoid shadowing.
+
+ * indent.c (MULTIBYTE_BYTES_WIDTH): New args bytes, width.
+ All uses changed.
+ (MULTIBYTE_BYTES_WIDTH, scan_for_column, compute_motion):
+ Rename locals to avoid shadowing.
+ (Fvertical_motion): Mark locals as initialized.
+
+ * casefiddle.c (casify_object, casify_region): Now static.
+ (casify_region): Mark local as initialized.
+
+ * cmds.c (internal_self_insert): Rename local to avoid shadowing.
+
+ * lisp.h (GCPRO2_VAR, GCPRO3_VAR, GCPRO4_VAR, GCPRO5_VAR, GCPRO6_VAR):
+ New macros, so that the caller can use some names other than
+ gcpro1, gcpro2, etc.
+ (GCPRO2, GCPRO3, GCPRO4, GCPRO5, GCPRO6): Reimplement in terms
+ of the new macros.
+ (GCPRO1_VAR, UNGCPRO_VAR): Change the meaning of the second
+ argument, for consistency with GCPRO2_VAR, etc: it is now the
+ prefix of the variable, not the variable itself. All uses
+ changed.
+ * dired.c (directory_files_internal, file_name_completion):
+ Rename locals to avoid shadowing.
+
+ Fix a race condition diagnosed by gcc -Wsequence-point (Bug#8254).
+ An expression of the form (DOWNCASE (x) == DOWNCASE (y)), found in
+ dired.c's scmp function, had undefined behavior.
+ * lisp.h (DOWNCASE_TABLE, UPCASE_TABLE, DOWNCASE, UPPERCASEP):
+ (NOCASEP, LOWERCASEP, UPCASE, UPCASE1): Move from here ...
+ * buffer.h: ... to here, because these macros use current_buffer,
+ and the new implementation with inline functions needs to have
+ current_buffer in scope now, rather than later when the macros
+ are used.
+ (downcase, upcase1): New static inline functions.
+ (DOWNCASE, UPCASE1): Reimplement using these functions.
+ This avoids undefined behavior in expressions like
+ DOWNCASE (x) == DOWNCASE (y), which previously suffered
+ from race conditions in accessing the global variables
+ case_temp1 and case_temp2.
+ * casetab.c (case_temp1, case_temp2): Remove; no longer needed.
+ * lisp.h (case_temp1, case_temp2): Remove their decls.
+ * character.h (ASCII_CHAR_P): Move from here ...
+ * lisp.h: ... to here, so that the inline functions mentioned
+ above can use them.
+
+ * dired.c (directory_files_internal_unwind): Now static.
+
+ * fileio.c (file_name_as_directory, directory_file_name):
+ (barf_or_query_if_file_exists, auto_save_error, auto_save_1):
+ Now static.
+ (file_name_as_directory): Use const pointers when appropriate.
+ (Fexpand_file_name): Likewise. In particular, newdir might
+ point at constant storage, so make it a const pointer.
+ (Fmake_directory_internal, Fread_file_name): Remove unused vars.
+ (Ffile_selinux_context, Fset_file_selinux_context): Fix pointer
+ signedness issues.
+ (Fset_file_times, Finsert_file_contents, auto_save_error):
+ Rename locals to avoid shadowing.
+
+ * minibuf.c (choose_minibuf_frame_1): Now static.
+ (Ftry_completion, Fall_completions): Rename or remove locals
+ to avoid shadowing.
+
+ * marker.c (bytepos_to_charpos): Remove; unused.
+
+ * lisp.h (verify_bytepos, count_markers): New decls,
+ so that gcc does not warn that these functions aren't declared.
+
+ * insdel.c (check_markers, make_gap_larger, make_gap_smaller):
+ (reset_var_on_error, Fcombine_after_change_execute_1): Now static.
+ (CHECK_MARKERS): Redo to avoid gcc -Wempty-body diagnostic.
+ (copy_text): Remove unused local var.
+
+ * filelock.c (within_one_second): Now static.
+ (lock_file_1): Rename local to avoid shadowing.
+
+ * buffer.c (fix_overlays_before): Mark locals as initialized.
+ (fix_start_end_in_overlays): Likewise. This function should be
+ simplified by using pointers-to-pointers, but that's a different
+ matter.
++ (switch_to_buffer_1): Now static.
+ (Fkill_buffer, record_buffer, Fbury_buffer, Fset_buffer_multibyte):
+ (report_overlay_modification): Rename locals to avoid shadowing.
+
+ * sysdep.c (system_process_attributes): Rename vars to avoid shadowing.
+ Fix pointer signedness issue.
+ (sys_subshell): Mark local as volatile if checking for lint,
+ to suppress a gcc -Wclobbered warning that does not seem to be right.
+ (MAXPATHLEN): Define only if needed.
+
+ * process.c (serial_open, serial_configure): Move decls from here ...
+ * systty.h: ... to here, so that they can be checked.
+
+ * fns.c (get_random, seed_random): Move extern decls from here ...
+ * lisp.h: ... to here, so that they can be checked.
+
+ * sysdep.c (reset_io): Now static.
+ (wait_for_termination_signal): Remove; unused.
+
+ * keymap.c (keymap_parent, keymap_memberp, map_keymap_internal):
+ (copy_keymap_item, append_key, push_text_char_description):
+ Now static.
+ (Fwhere_is_internal): Don't test CONSP (sequences) unnecessarily.
+ (DENSE_TABLE_SIZE): Remove; unused.
+ (get_keymap, access_keymap, Fdefine_key, Fwhere_is_internal):
+ (describe_map_tree):
+ Rename locals to avoid shadowing.
+
+ * keyboard.c: Declare functions static if they are not used elsewhere.
+ (echo_char, echo_dash, cmd_error, top_level_2):
+ (poll_for_input, handle_async_input): Now static.
+ (read_char, kbd_buffer_get_event, make_lispy_position):
+ (make_lispy_event, make_lispy_movement, apply_modifiers):
+ (decode_keyboard_code, tty_read_avail_input, menu_bar_items):
+ (parse_tool_bar_item, read_key_sequence, Fread_key_sequence):
+ (Fread_key_sequence_vector): Rename locals to avoid shadowing.
+ (read_key_sequence, read_char): Mark locals as initialized.
+ (Fexit_recursive_edit, Fabort_recursive_edit): Mark with NO_RETURN.
+
+ * keyboard.h (make_ctrl_char): New decl.
+ (mark_kboards): Move decl here ...
+ * alloc.c (mark_kboards): ... from here.
+
+ * lisp.h (force_auto_save_soon): New decl.
+
+ * emacs.c (init_cmdargs): Rename local to avoid shadowing.
+ (DEFINE_DUMMY_FUNCTION): New macro.
+ (__do_global_ctors, __do_global_ctors_aux, __do_global_dtors, __main):
+ Use it.
+ (main): Add casts to avoid warnings
+ if GCC considers string literals to be constants.
+
+ * lisp.h (fatal_error_signal): Add decl, since it's exported.
+
+ * dbusbind.c: Pointer signedness fixes.
+ (xd_signature, xd_append_arg, xd_initialize):
+ (Fdbus_call_method, Fdbus_call_method_asynchronously):
+ (Fdbus_method_return_internal, Fdbus_method_error_internal):
+ (Fdbus_send_signal, xd_read_message_1, Fdbus_register_service):
+ (Fdbus_register_signal): Use SSDATA when the context wants char *.
+
+ * dbusbind.c (Fdbus_init_bus): Add cast to avoid warning
+ if GCC considers string literals to be constants.
+ (Fdbus_register_service, Fdbus_register_method): Remove unused vars.
+
+ 2011-03-16 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * print.c (PRINT_CIRCLE_CANDIDATE_P): New macro.
+ (print_preprocess, print_object): New macro to fix last change.
+
+ * print.c (print_preprocess): Don't forget font objects.
+
+ 2011-03-16 Juanma Barranquero <lekktu@gmail.com>
+
+ * emacs.c (USAGE3): Doc fixes.
+
+ 2011-03-15 Andreas Schwab <schwab@linux-m68k.org>
+
+ * coding.c (detect_coding_iso_2022): Reorganize code to clarify
+ structure.
+
+ 2011-03-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * lisp.h (VWindow_system, Qfile_name_history):
+ * keyboard.h (lispy_function_keys) [WINDOWSNT]:
+ * w32term.h (w32_system_caret_hwnd, w32_system_caret_height)
+ (w32_system_caret_x, w32_system_caret_y): Declare extern.
+
+ * w32select.c: Don't #include "keyboard.h".
+ (run_protected): Add extern declaration for waiting_for_input.
+
+ * w32.c (Qlocal, noninteractive1, inhibit_window_system):
+ * w32console.c (detect_input_pending, read_input_pending)
+ (encode_terminal_code):
+ * w32fns.c (quit_char, lispy_function_keys, Qtooltip)
+ (w32_system_caret_hwnd, w32_system_caret_height, w32_system_caret_x)
+ (w32_system_caret_y, Qfile_name_history):
+ * w32font.c (w32font_driver, QCantialias, QCotf, QClang):
+ * w32inevt.c (reinvoke_input_signal, lispy_function_keys):
+ * w32menu.c (Qmenu_bar, QCtoggle, QCradio, Qoverriding_local_map)
+ (Qoverriding_terminal_local_map, Qmenu_bar_update_hook):
+ * w32proc.c (Qlocal, report_file_error):
+ * w32term.c (Vwindow_system, updating_frame):
+ * w32uniscribe.c (initialized, uniscribe_font_driver):
+ Remove unneeded extern declarations.
+
+ 2011-03-14 Chong Yidong <cyd@stupidchicken.com>
+
+ * buffer.c (Fmake_indirect_buffer): Fix incorrect assertions.
+
2011-03-13 Chong Yidong <cyd@stupidchicken.com>
* buffer.h (BUF_BEGV, BUF_BEGV_BYTE, BUF_ZV, BUF_ZV_BYTE, BUF_PT)
2011-03-12 Eli Zaretskii <eliz@gnu.org>
- * termcap.c [MSDOS]: Include "msdos.h.
+ * termcap.c [MSDOS]: Include "msdos.h".
(find_capability, tgetnum, tgetflag, tgetstr, tputs, tgetent):
Constify `char *' arguments and their references according to
prototypes in tparam.h.
/* Make sure the base buffer has markers for its narrowing. */
if (NILP (BVAR (b->base_buffer, pt_marker)))
{
- eassert (NILP (BVAR (b, begv_marker)));
- eassert (NILP (BVAR (b, zv_marker)));
+ eassert (NILP (BVAR (b->base_buffer, begv_marker)));
+ eassert (NILP (BVAR (b->base_buffer, zv_marker)));
BVAR (b->base_buffer, pt_marker) = Fmake_marker ();
set_marker_both (BVAR (b->base_buffer, pt_marker), base_buffer,
don't re-kill them. */
if (other->base_buffer == b && !NILP (BVAR (other, name)))
{
- Lisp_Object buffer;
- XSETBUFFER (buffer, other);
- Fkill_buffer (buffer);
+ Lisp_Object buf;
+ XSETBUFFER (buf, other);
+ Fkill_buffer (buf);
}
UNGCPRO;
&& BUF_SAVE_MODIFF (b) < BUF_MODIFF (b)
&& NILP (Fsymbol_value (intern ("auto-save-visited-file-name"))))
{
- Lisp_Object tem;
- tem = Fsymbol_value (intern ("delete-auto-save-files"));
- if (! NILP (tem))
+ Lisp_Object delete;
+ delete = Fsymbol_value (intern ("delete-auto-save-files"));
+ if (! NILP (delete))
internal_delete_file (BVAR (b, auto_save_file_name));
}
void
record_buffer (Lisp_Object buf)
{
- register Lisp_Object link, prev;
+ register Lisp_Object list, prev;
Lisp_Object frame;
frame = selected_frame;
prev = Qnil;
- for (link = Vbuffer_alist; CONSP (link); link = XCDR (link))
+ for (list = Vbuffer_alist; CONSP (list); list = XCDR (list))
{
- if (EQ (XCDR (XCAR (link)), buf))
+ if (EQ (XCDR (XCAR (list)), buf))
break;
- prev = link;
+ prev = list;
}
- /* Effectively do Vbuffer_alist = Fdelq (link, Vbuffer_alist);
+ /* Effectively do Vbuffer_alist = Fdelq (list, Vbuffer_alist);
we cannot use Fdelq itself here because it allows quitting. */
if (NILP (prev))
else
XSETCDR (prev, XCDR (XCDR (prev)));
- XSETCDR (link, Vbuffer_alist);
- Vbuffer_alist = link;
+ XSETCDR (list, Vbuffer_alist);
+ Vbuffer_alist = list;
/* Effectively do a delq on buried_buffer_list. */
prev = Qnil;
- for (link = XFRAME (frame)->buried_buffer_list; CONSP (link);
- link = XCDR (link))
+ for (list = XFRAME (frame)->buried_buffer_list; CONSP (list);
+ list = XCDR (list))
{
- if (EQ (XCAR (link), buf))
+ if (EQ (XCAR (list), buf))
{
if (NILP (prev))
- XFRAME (frame)->buried_buffer_list = XCDR (link);
+ XFRAME (frame)->buried_buffer_list = XCDR (list);
else
XSETCDR (prev, XCDR (XCDR (prev)));
break;
}
- prev = link;
+ prev = list;
}
/* Now move this buffer to the front of frame_buffer_list also. */
prev = Qnil;
- for (link = frame_buffer_list (frame); CONSP (link);
- link = XCDR (link))
+ for (list = frame_buffer_list (frame); CONSP (list);
+ list = XCDR (list))
{
- if (EQ (XCAR (link), buf))
+ if (EQ (XCAR (list), buf))
break;
- prev = link;
+ prev = list;
}
/* Effectively do delq. */
- if (CONSP (link))
+ if (CONSP (list))
{
if (NILP (prev))
set_frame_buffer_list (frame,
else
XSETCDR (prev, XCDR (XCDR (prev)));
- XSETCDR (link, frame_buffer_list (frame));
- set_frame_buffer_list (frame, link);
+ XSETCDR (list, frame_buffer_list (frame));
+ set_frame_buffer_list (frame, list);
}
else
set_frame_buffer_list (frame, Fcons (buf, frame_buffer_list (frame)));
/* Switch to buffer BUFFER in the selected window.
If NORECORD is non-nil, don't call record_buffer. */
-Lisp_Object
+static Lisp_Object
switch_to_buffer_1 (Lisp_Object buffer_or_name, Lisp_Object norecord)
{
register Lisp_Object buffer;
buffer is killed. */
if (!NILP (BVAR (XBUFFER (buffer), name)))
{
- Lisp_Object aelt, link;
+ Lisp_Object aelt, list;
aelt = Frassq (buffer, Vbuffer_alist);
- link = Fmemq (aelt, Vbuffer_alist);
+ list = Fmemq (aelt, Vbuffer_alist);
Vbuffer_alist = Fdelq (aelt, Vbuffer_alist);
- XSETCDR (link, Qnil);
- Vbuffer_alist = nconc2 (Vbuffer_alist, link);
+ XSETCDR (list, Qnil);
+ Vbuffer_alist = nconc2 (Vbuffer_alist, list);
XFRAME (selected_frame)->buffer_list
= Fdelq (buffer, XFRAME (selected_frame)->buffer_list);
&& GPT_BYTE > 1 && GPT_BYTE < Z_BYTE
&& ! CHAR_HEAD_P (*(GAP_END_ADDR)))
{
- unsigned char *p = GPT_ADDR - 1;
+ unsigned char *q = GPT_ADDR - 1;
- while (! CHAR_HEAD_P (*p) && p > BEG_ADDR) p--;
- if (LEADING_CODE_P (*p))
+ while (! CHAR_HEAD_P (*q) && q > BEG_ADDR) q--;
+ if (LEADING_CODE_P (*q))
{
- EMACS_INT new_gpt = GPT_BYTE - (GPT_ADDR - p);
+ EMACS_INT new_gpt = GPT_BYTE - (GPT_ADDR - q);
move_gap_both (new_gpt, new_gpt);
}
ZV = chars_in_text (BEG_ADDR, ZV_BYTE - BEG_BYTE) + BEG;
{
- EMACS_INT pt_byte = advance_to_char_boundary (PT_BYTE);
- EMACS_INT pt;
+ EMACS_INT byte = advance_to_char_boundary (PT_BYTE);
+ EMACS_INT position;
- if (pt_byte > GPT_BYTE)
- pt = chars_in_text (GAP_END_ADDR, pt_byte - GPT_BYTE) + GPT;
+ if (byte > GPT_BYTE)
+ position = chars_in_text (GAP_END_ADDR, byte - GPT_BYTE) + GPT;
else
- pt = chars_in_text (BEG_ADDR, pt_byte - BEG_BYTE) + BEG;
- TEMP_SET_PT_BOTH (pt, pt_byte);
+ position = chars_in_text (BEG_ADDR, byte - BEG_BYTE) + BEG;
+ TEMP_SET_PT_BOTH (position, byte);
}
tail = markers = BUF_MARKERS (current_buffer);
fix_start_end_in_overlays (register EMACS_INT start, register EMACS_INT end)
{
Lisp_Object overlay;
- struct Lisp_Overlay *before_list, *after_list;
+ struct Lisp_Overlay *before_list IF_LINT (= NULL);
+ struct Lisp_Overlay *after_list IF_LINT (= NULL);
/* These are either nil, indicating that before_list or after_list
should be assigned, or the cons cell the cdr of which should be
assigned. */
/* If parent is nil, replace overlays_before; otherwise, parent->next. */
struct Lisp_Overlay *tail = bp->overlays_before, *parent = NULL, *right_pair;
Lisp_Object tem;
- EMACS_INT end;
+ EMACS_INT end IF_LINT (= 0);
/* After the insertion, the several overlays may be in incorrect
order. The possibility is that, in the list `overlays_before',
for (i = 0; i < size;)
{
- Lisp_Object prop, overlay;
- prop = copy[i++];
- overlay = copy[i++];
- call_overlay_mod_hooks (prop, overlay, after, arg1, arg2, arg3);
+ Lisp_Object prop_i, overlay_i;
+ prop_i = copy[i++];
+ overlay_i = copy[i++];
+ call_overlay_mod_hooks (prop_i, overlay_i, after, arg1, arg2, arg3);
}
}
UNGCPRO;
Lisp_Object Qrisky_local_variable;
- /* If non-zero, emacs should not attempt to use a window-specific code,
+ /* If non-zero, Emacs should not attempt to use a window-specific code,
but instead should use the virtual terminal under which it was started. */
int inhibit_window_system;
#define MAX_HEAP_BSS_DIFF (1024*1024)
/* Nonzero means running Emacs without interactive terminal. */
-
int noninteractive;
/* Nonzero means remove site-lisp directories from load-path. */
--border-color, -bd COLOR main border color\n\
--border-width, -bw WIDTH width of main border\n\
--color, --color=MODE override color mode for character terminals;\n\
- MODE defaults to `auto', and can also\n\
- be `never', `auto', `always',\n\
+ MODE defaults to `auto', and\n\
+ can also be `never', `always',\n\
or a mode name like `ansi8'\n\
--cursor-color, -cr COLOR color of the Emacs cursor indicating point\n\
--font, -fn FONT default font; must be fixed-width\n\
--foreground-color, -fg COLOR window foreground color\n\
--fullheight, -fh make the first frame high as the screen\n\
- --fullscreen, -fs make first frame fullscreen\n\
+ --fullscreen, -fs make the first frame fullscreen\n\
--fullwidth, -fw make the first frame wide as the screen\n\
--maximized, -mm make the first frame maximized\n\
--geometry, -g GEOMETRY window geometry\n\
init_cmdargs (int argc, char **argv, int skip_args)
{
register int i;
- Lisp_Object name, dir, tem;
+ Lisp_Object name, dir, handler;
int count = SPECPDL_INDEX ();
Lisp_Object raw_name;
/* Add /: to the front of the name
if it would otherwise be treated as magic. */
- tem = Ffind_file_name_handler (raw_name, Qt);
- if (! NILP (tem))
+ handler = Ffind_file_name_handler (raw_name, Qt);
+ if (! NILP (handler))
raw_name = concat2 (build_string ("/:"), raw_name);
Vinvocation_name = Ffile_name_nondirectory (raw_name);
{
/* Add /: to the front of the name
if it would otherwise be treated as magic. */
- tem = Ffind_file_name_handler (found, Qt);
- if (! NILP (tem))
+ handler = Ffind_file_name_handler (found, Qt);
+ if (! NILP (handler))
found = concat2 (build_string ("/:"), found);
Vinvocation_directory = Ffile_name_directory (found);
}
Provide dummy definitions to avoid error.
(We don't have any real constructors or destructors.) */
#ifdef __GNUC__
+
+/* Define a dummy function F. Declare F too, to pacify gcc
+ -Wmissing-prototypes. */
+#define DEFINE_DUMMY_FUNCTION(f) void f (void); void f (void) {}
+
#ifndef GCC_CTORS_IN_LIBC
-void __do_global_ctors (void)
-{}
-void __do_global_ctors_aux (void)
-{}
-void __do_global_dtors (void)
-{}
+DEFINE_DUMMY_FUNCTION (__do_global_ctors)
+DEFINE_DUMMY_FUNCTION (__do_global_ctors_aux)
+DEFINE_DUMMY_FUNCTION (__do_global_dtors)
/* GNU/Linux has a bug in its library; avoid an error. */
#ifndef GNU_LINUX
char * __CTOR_LIST__[2] = { (char *) (-1), 0 };
#endif
char * __DTOR_LIST__[2] = { (char *) (-1), 0 };
#endif /* GCC_CTORS_IN_LIBC */
-void __main (void)
-{}
+DEFINE_DUMMY_FUNCTION (__main)
#endif /* __GNUC__ */
#endif /* ORDINARY_LINK */
enough information to do it right. */
static int
- argmatch (char **argv, int argc, const char *sstr, const char *lstr, int minlen, char **valptr, int *skipptr)
+ argmatch (char **argv, int argc, const char *sstr, const char *lstr,
+ int minlen, char **valptr, int *skipptr)
{
char *p = NULL;
int arglen;
/* Convert --script to -scriptload, un-skip it, and sort again
so that it will be handled in proper sequence. */
/* FIXME broken for --script=FILE - is that supposed to work? */
- argv[skip_args - 1] = "-scriptload";
+ argv[skip_args - 1] = (char *) "-scriptload";
skip_args -= 2;
sort_args (argc, argv);
}
for (j = 0; j < count_before + 1; j++)
new[j] = argv[j];
- new[count_before + 1] = "-d";
+ new[count_before + 1] = (char *) "-d";
new[count_before + 2] = displayname;
for (j = count_before + 2; j <argc; j++)
new[j + 1] = argv[j];
/* Change --display to -d, when its arg is separate. */
else if (displayname != 0 && skip_args > count_before
&& argv[count_before + 1][1] == '-')
- argv[count_before + 1] = "-d";
+ argv[count_before + 1] = (char *) "-d";
if (! no_site_lisp)
{
\f
#ifndef CANNOT_DUMP
-/* FIXME: maybe this should go into header file, config.h seems the
- only one appropriate. */
-extern int unexec (const char *, const char *);
+#include "unexec.h"
DEFUN ("dump-emacs", Fdump_emacs, Sdump_emacs, 2, 2, 0,
doc: /* Dump current state of Emacs into executable file FILENAME.
Anything else (in Emacs 24.1, the possibilities are: aix, berkeley-unix,
hpux, irix, usg-unix-v) indicates some sort of Unix system. */);
Vsystem_type = intern_c_string (SYSTEM_TYPE);
- /* Above values are from SYSTEM_TYPE in src/s/*.h. */
+ /* The above values are from SYSTEM_TYPE in include files under src/s. */
DEFVAR_LISP ("system-configuration", Vsystem_configuration,
doc: /* Value is string indicating configuration Emacs was built for.
extern void clear_input_pending (void);
extern int requeued_events_pending_p (void);
extern void bind_polling_period (int);
+extern int make_ctrl_char (int);
extern void stuff_buffered_input (Lisp_Object);
extern void clear_waiting_for_input (void);
extern void swallow_events (int);
extern int tty_read_avail_input (struct terminal *, int,
struct input_event *);
extern EMACS_TIME timer_check (int);
+extern void mark_kboards (void);
+
+ #ifdef WINDOWSNT
+ extern const char *const lispy_function_keys[];
+ #endif
types of run time checks for Lisp objects. */
#ifdef GC_CHECK_CONS_LIST
-#define CHECK_CONS_LIST() check_cons_list()
+extern void check_cons_list (void);
+#define CHECK_CONS_LIST() check_cons_list ()
#else
-#define CHECK_CONS_LIST() ((void)0)
+#define CHECK_CONS_LIST() ((void) 0)
#endif
/* These are default choices for the types to use. */
/* Define an Emacs version of "assert", since some system ones are
flaky. */
#ifndef ENABLE_CHECKING
-#define eassert(X) (void) 0
+#define eassert(X) ((void) (0 && (X))) /* Check that X compiles. */
#else /* ENABLE_CHECKING */
#if defined (__GNUC__) && __GNUC__ >= 2 && defined (__STDC__)
#define eassert(cond) CHECK(cond,"assertion failed: " #cond)
#endif /* not __GNUC__ */
+/* Nonzero iff C is an ASCII character. */
+#define ASCII_CHAR_P(c) ((unsigned) (c) < 0x80)
+
/* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
characters. Do not check validity of CT. */
#define CHAR_TABLE_REF(CT, IDX) \
#define QUITP (!NILP (Vquit_flag) && NILP (Vinhibit_quit))
\f
-/* Variables used locally in the following case handling macros. */
-extern int case_temp1;
-extern Lisp_Object case_temp2;
-
-/* Current buffer's map from characters to lower-case characters. */
-
-#define DOWNCASE_TABLE BVAR (current_buffer, downcase_table)
-
-/* Current buffer's map from characters to upper-case characters. */
-
-#define UPCASE_TABLE BVAR (current_buffer, upcase_table)
-
-/* Downcase a character, or make no change if that cannot be done. */
-
-#define DOWNCASE(CH) \
- ((case_temp1 = (CH), \
- case_temp2 = CHAR_TABLE_REF (DOWNCASE_TABLE, case_temp1), \
- NATNUMP (case_temp2)) \
- ? XFASTINT (case_temp2) : case_temp1)
-
-/* 1 if CH is upper case. */
-
-#define UPPERCASEP(CH) (DOWNCASE (CH) != (CH))
-
-/* 1 if CH is neither upper nor lower case. */
-
-#define NOCASEP(CH) (UPCASE1 (CH) == (CH))
-
-/* 1 if CH is lower case. */
-
-#define LOWERCASEP(CH) (!UPPERCASEP (CH) && !NOCASEP(CH))
-
-/* Upcase a character, or make no change if that cannot be done. */
-
-#define UPCASE(CH) (!UPPERCASEP (CH) ? UPCASE1 (CH) : (CH))
-
-/* Upcase a character known to be not upper case. */
-
-#define UPCASE1(CH) \
- ((case_temp1 = (CH), \
- case_temp2 = CHAR_TABLE_REF (UPCASE_TABLE, case_temp1), \
- NATNUMP (case_temp2)) \
- ? XFASTINT (case_temp2) : case_temp1)
-
extern Lisp_Object Vascii_downcase_table, Vascii_upcase_table;
extern Lisp_Object Vascii_canon_table, Vascii_eqv_table;
\f
|| GC_MARK_STACK == GC_MARK_STACK_CHECK_GCPROS)
-#define GCPRO1(varname) GCPRO1_VAR (varname, gcpro1)
-#define UNGCPRO UNGCPRO_VAR (gcpro1)
+#define GCPRO1(var) \
+ GCPRO1_VAR (var, gcpro)
+#define GCPRO2(var1, var2) \
+ GCPRO2_VAR (var1, var2, gcpro)
+#define GCPRO3(var1, var2, var3) \
+ GCPRO3_VAR (var1, var2, var3, gcpro)
+#define GCPRO4(var1, var2, var3, var4) \
+ GCPRO4_VAR (var1, var2, var3, var4, gcpro)
+#define GCPRO5(var1, var2, var3, var4, var5) \
+ GCPRO5_VAR (var1, var2, var3, var4, var5, gcpro)
+#define GCPRO6(var1, var2, var3, var4, var5, var6) \
+ GCPRO6_VAR (var1, var2, var3, var4, var5, var6, gcpro)
+#define UNGCPRO UNGCPRO_VAR (gcpro)
#if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS
/* Do something silly with gcproN vars just so gcc shuts up. */
/* You get warnings from MIPSPro... */
-#define GCPRO1_VAR(varname, gcpro1) ((void) gcpro1)
-#define GCPRO2(varname1, varname2)(((void) gcpro2, (void) gcpro1))
-#define GCPRO3(varname1, varname2, varname3) \
- (((void) gcpro3, (void) gcpro2, (void) gcpro1))
-#define GCPRO4(varname1, varname2, varname3, varname4) \
- (((void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1))
-#define GCPRO5(varname1, varname2, varname3, varname4, varname5) \
- (((void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1))
-#define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \
- (((void) gcpro6, (void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1))
-#define UNGCPRO_VAR(gcpro1) ((void) 0)
+#define GCPRO1_VAR(var, gcpro) ((void) gcpro##1)
+#define GCPRO2_VAR(var1, var2, gcpro) \
+ ((void) gcpro##2, (void) gcpro##1)
+#define GCPRO3_VAR(var1, var2, var3, gcpro) \
+ ((void) gcpro##3, (void) gcpro##2, (void) gcpro##1)
+#define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \
+ ((void) gcpro##4, (void) gcpro##3, (void) gcpro##2, (void) gcpro##1)
+#define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \
+ ((void) gcpro##5, (void) gcpro##4, (void) gcpro##3, (void) gcpro##2, \
+ (void) gcpro##1)
+#define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \
+ ((void) gcpro##6, (void) gcpro##5, (void) gcpro##4, (void) gcpro##3, \
+ (void) gcpro##2, (void) gcpro##1)
+#define UNGCPRO_VAR(gcpro) ((void) 0)
#else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */
#ifndef DEBUG_GCPRO
-#define GCPRO1_VAR(varname, gcpro1) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \
- gcprolist = &gcpro1; }
-
-#define GCPRO2(varname1, varname2) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
- gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
- gcprolist = &gcpro2; }
-
-#define GCPRO3(varname1, varname2, varname3) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
- gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
- gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
- gcprolist = &gcpro3; }
-
-#define GCPRO4(varname1, varname2, varname3, varname4) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
- gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
- gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
- gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
- gcprolist = &gcpro4; }
-
-#define GCPRO5(varname1, varname2, varname3, varname4, varname5) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
- gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
- gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
- gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
- gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \
- gcprolist = &gcpro5; }
-
-#define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
- gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
- gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
- gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
- gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \
- gcpro6.next = &gcpro5; gcpro6.var = &varname6; gcpro6.nvars = 1; \
- gcprolist = &gcpro6; }
-
-#define UNGCPRO_VAR(gcpro1) (gcprolist = gcpro1.next)
+#define GCPRO1_VAR(var, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var; gcpro##1.nvars = 1; \
+ gcprolist = &gcpro##1; }
+
+#define GCPRO2_VAR(var1, var2, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
+ gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
+ gcprolist = &gcpro##2; }
+
+#define GCPRO3_VAR(var1, var2, var3, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
+ gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
+ gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
+ gcprolist = &gcpro##3; }
+
+#define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
+ gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
+ gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
+ gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
+ gcprolist = &gcpro##4; }
+
+#define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
+ gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
+ gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
+ gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
+ gcpro##5.next = &gcpro##4; gcpro##5.var = &var5; gcpro##5.nvars = 1; \
+ gcprolist = &gcpro##5; }
+
+#define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
+ gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
+ gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
+ gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
+ gcpro##5.next = &gcpro##4; gcpro##5.var = &var5; gcpro##5.nvars = 1; \
+ gcpro##6.next = &gcpro##5; gcpro##6.var = &var6; gcpro##6.nvars = 1; \
+ gcprolist = &gcpro##6; }
+
+#define UNGCPRO_VAR(gcpro) (gcprolist = gcpro##1.next)
#else
extern int gcpro_level;
-#define GCPRO1_VAR(varname, gcpro1) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \
- gcpro1.level = gcpro_level++; \
- gcprolist = &gcpro1; }
-
-#define GCPRO2(varname1, varname2) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
- gcpro1.level = gcpro_level; \
- gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
- gcpro2.level = gcpro_level++; \
- gcprolist = &gcpro2; }
-
-#define GCPRO3(varname1, varname2, varname3) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
- gcpro1.level = gcpro_level; \
- gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
- gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
- gcpro3.level = gcpro_level++; \
- gcprolist = &gcpro3; }
-
-#define GCPRO4(varname1, varname2, varname3, varname4) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
- gcpro1.level = gcpro_level; \
- gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
- gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
- gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
- gcpro4.level = gcpro_level++; \
- gcprolist = &gcpro4; }
-
-#define GCPRO5(varname1, varname2, varname3, varname4, varname5) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
- gcpro1.level = gcpro_level; \
- gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
- gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
- gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
- gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \
- gcpro5.level = gcpro_level++; \
- gcprolist = &gcpro5; }
-
-#define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \
- {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
- gcpro1.level = gcpro_level; \
- gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
- gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
- gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
- gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \
- gcpro6.next = &gcpro5; gcpro6.var = &varname6; gcpro6.nvars = 1; \
- gcpro6.level = gcpro_level++; \
- gcprolist = &gcpro6; }
-
-#define UNGCPRO_VAR(gcpro1) \
- ((--gcpro_level != gcpro1.level) \
- ? (abort (), 0) \
- : ((gcprolist = gcpro1.next), 0))
+#define GCPRO1_VAR(var, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var; gcpro##1.nvars = 1; \
+ gcpro##1.level = gcpro_level++; \
+ gcprolist = &gcpro##1; }
+
+#define GCPRO2_VAR(var1, var2, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
+ gcpro##1.level = gcpro_level; \
+ gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
+ gcpro##2.level = gcpro_level++; \
+ gcprolist = &gcpro##2; }
+
+#define GCPRO3_VAR(var1, var2, var3, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
+ gcpro##1.level = gcpro_level; \
+ gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
+ gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
+ gcpro##3.level = gcpro_level++; \
+ gcprolist = &gcpro##3; }
+
+#define GCPRO4_VAR(var1, var2, var3, var4, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
+ gcpro##1.level = gcpro_level; \
+ gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
+ gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
+ gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
+ gcpro##4.level = gcpro_level++; \
+ gcprolist = &gcpro##4; }
+
+#define GCPRO5_VAR(var1, var2, var3, var4, var5, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
+ gcpro##1.level = gcpro_level; \
+ gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
+ gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
+ gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
+ gcpro##5.next = &gcpro##4; gcpro##5.var = &var5; gcpro##5.nvars = 1; \
+ gcpro##5.level = gcpro_level++; \
+ gcprolist = &gcpro##5; }
+
+#define GCPRO6_VAR(var1, var2, var3, var4, var5, var6, gcpro) \
+ {gcpro##1.next = gcprolist; gcpro##1.var = &var1; gcpro##1.nvars = 1; \
+ gcpro##1.level = gcpro_level; \
+ gcpro##2.next = &gcpro##1; gcpro##2.var = &var2; gcpro##2.nvars = 1; \
+ gcpro##3.next = &gcpro##2; gcpro##3.var = &var3; gcpro##3.nvars = 1; \
+ gcpro##4.next = &gcpro##3; gcpro##4.var = &var4; gcpro##4.nvars = 1; \
+ gcpro##5.next = &gcpro##4; gcpro##5.var = &var5; gcpro##5.nvars = 1; \
+ gcpro##6.next = &gcpro##5; gcpro##6.var = &var6; gcpro##6.nvars = 1; \
+ gcpro##6.level = gcpro_level++; \
+ gcprolist = &gcpro##6; }
+
+#define UNGCPRO_VAR(gcpro) \
+ ((--gcpro_level != gcpro##1.level) \
+ ? (abort (), 0) \
+ : ((gcprolist = gcpro##1.next), 0))
#endif /* DEBUG_GCPRO */
#endif /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */
/* Defined in dispnew.c */
extern Lisp_Object selected_frame;
+ extern Lisp_Object Vwindow_system;
EXFUN (Fding, 1);
EXFUN (Fredraw_frame, 1);
EXFUN (Fsleep_for, 2);
EXFUN (Ferror_message_string, 1);
extern Lisp_Object Qstandard_output;
extern Lisp_Object Qexternal_debugging_output;
+extern void debug_output_compilation_hack (int);
extern void temp_output_buffer_setup (const char *);
extern int print_level;
extern Lisp_Object Qprint_escape_newlines;
extern Lisp_Object safe_call1 (Lisp_Object, Lisp_Object);
extern Lisp_Object safe_call2 (Lisp_Object, Lisp_Object, Lisp_Object);
extern void init_eval (void);
+extern void mark_backtrace (void);
extern void syms_of_eval (void);
+/* Defined in editfns.c */
extern Lisp_Object Qfield;
EXFUN (Fcurrent_message, 0);
EXFUN (Fgoto_char, 1);
extern Lisp_Object make_buffer_string_both (EMACS_INT, EMACS_INT, EMACS_INT,
EMACS_INT, int);
extern void init_editfns (void);
+const char *get_system_name (void);
+const char *get_operating_system_release (void);
extern void syms_of_editfns (void);
EXFUN (Fconstrain_to_field, 5);
EXFUN (Ffield_end, 3);
extern void clear_charpos_cache (struct buffer *);
extern EMACS_INT charpos_to_bytepos (EMACS_INT);
extern EMACS_INT buf_charpos_to_bytepos (struct buffer *, EMACS_INT);
+extern EMACS_INT verify_bytepos (EMACS_INT charpos);
extern EMACS_INT buf_bytepos_to_charpos (struct buffer *, EMACS_INT);
extern void unchain_marker (struct Lisp_Marker *marker);
extern Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object);
extern Lisp_Object set_marker_both (Lisp_Object, Lisp_Object, EMACS_INT, EMACS_INT);
extern Lisp_Object set_marker_restricted_both (Lisp_Object, Lisp_Object,
EMACS_INT, EMACS_INT);
+extern int count_markers (struct buffer *);
extern void syms_of_marker (void);
/* Defined in fileio.c */
extern Lisp_Object Qfile_exists_p;
extern Lisp_Object Qfile_directory_p;
extern Lisp_Object Qinsert_file_contents;
+ extern Lisp_Object Qfile_name_history;
EXFUN (Ffind_file_name_handler, 2);
EXFUN (Ffile_name_as_directory, 1);
EXFUN (Fexpand_file_name, 2);
EXFUN (Fmatch_beginning, 1);
EXFUN (Fmatch_end, 1);
extern void record_unwind_save_match_data (void);
+struct re_registers;
+extern struct re_pattern_buffer *compile_pattern (Lisp_Object,
+ struct re_registers *,
+ Lisp_Object, int, int);
extern int fast_string_match (Lisp_Object, Lisp_Object);
extern int fast_c_string_match_ignore_case (Lisp_Object, const char *);
extern int fast_string_match_ignore_case (Lisp_Object, Lisp_Object);
extern Lisp_Object command_loop_1 (void);
extern Lisp_Object recursive_edit_1 (void);
extern void record_auto_save (void);
+extern void force_auto_save_soon (void);
extern void init_keyboard (void);
extern void syms_of_keyboard (void);
extern void keys_of_keyboard (void);
extern Lisp_Object empty_unibyte_string, empty_multibyte_string;
extern Lisp_Object Qfile_name_handler_alist;
extern void (*fatal_error_signal_hook) (void);
+extern SIGTYPE fatal_error_signal (int);
EXFUN (Fkill_emacs, 1) NO_RETURN;
#if HAVE_SETLOCALE
void fixup_locale (void);
extern void setup_pty (int);
extern int set_window_size (int, int, int);
extern void create_process (Lisp_Object, char **, Lisp_Object);
+extern long get_random (void);
+extern void seed_random (long);
extern int emacs_open (const char *, int, int);
extern int emacs_close (int);
extern int emacs_read (int, char *, unsigned int);
{
file = Fexpand_file_name (file, Qnil);
initial_stderr_stream = stderr;
- stderr = fopen (SDATA (file), NILP (append) ? "w" : "a");
+ stderr = fopen (SSDATA (file), NILP (append) ? "w" : "a");
if (stderr == NULL)
{
stderr = initial_stderr_stream;
print_object (obj, printcharfun, escapeflag);
}
+ #define PRINT_CIRCLE_CANDIDATE_P(obj) \
+ (STRINGP (obj) || CONSP (obj) \
+ || (VECTORLIKEP (obj) \
+ && (VECTORP (obj) || COMPILEDP (obj) \
+ || CHAR_TABLE_P (obj) || SUB_CHAR_TABLE_P (obj) \
+ || HASH_TABLE_P (obj) || FONTP (obj))) \
+ || (! NILP (Vprint_gensym) \
+ && SYMBOLP (obj) \
+ && !SYMBOL_INTERNED_P (obj)))
+
/* Construct Vprint_number_table according to the structure of OBJ.
OBJ itself and all its elements will be added to Vprint_number_table
recursively if it is a list, vector, compiled function, char-table,
halftail = obj;
loop:
- if (STRINGP (obj) || CONSP (obj) || VECTORP (obj)
- || COMPILEDP (obj) || CHAR_TABLE_P (obj) || SUB_CHAR_TABLE_P (obj)
- || HASH_TABLE_P (obj)
- || (! NILP (Vprint_gensym)
- && SYMBOLP (obj)
- && !SYMBOL_INTERNED_P (obj)))
+ if (PRINT_CIRCLE_CANDIDATE_P (obj))
{
if (!HASH_TABLE_P (Vprint_number_table))
{
error ("Apparently circular structure being printed");
/* Detect circularities and truncate them. */
- if (STRINGP (obj) || CONSP (obj) || VECTORP (obj)
- || COMPILEDP (obj) || CHAR_TABLE_P (obj) || SUB_CHAR_TABLE_P (obj)
- || HASH_TABLE_P (obj)
- || (! NILP (Vprint_gensym)
- && SYMBOLP (obj)
- && !SYMBOL_INTERNED_P (obj)))
+ if (PRINT_CIRCLE_CANDIDATE_P (obj))
{
if (NILP (Vprint_circle) && NILP (Vprint_gensym))
{