1. 27 Nov, 2012 1 commit
  2. 23 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Simplify and avoid signal-handling races. · 4d7e6e51
      Paul Eggert authored
      * nt/inc/ms-w32.h (emacs_raise): New macro.
      * src/alloc.c (die):
      * src/sysdep.c (emacs_abort) [HAVE_NTGUI]:
      Avoid recursive loop if there's a fatal error in the function itself.
      * src/atimer.c (pending_atimers):
      * src/blockinput.h: Don't include "atimer.h"; no longer needed.
      (interrupt_input_pending): Remove.  All uses removed.
      pending_signals now counts both atimers and ordinary interrupts.
      This is less racy than having three separate pending-signal flags.
      (block_input, unblock_input, totally_unblock_input, unblock_input_to)
      (input_blocked_p):
      Rename from their upper-case counterparts BLOCK_INPUT,
      UNBLOCK_INPUT, TOTALLY_UNBLOCK_INPUT, UNBLOCK_INPUT_TO,
      INPUT_BLOCKED_P, and turn into functions.  All uses changed.
      This makes it easier to access volatile variables more accurately.
      (BLOCK_INPUT_RESIGNAL): Remove.  All uses replaced by unblock_input ().
      (input_blocked_p): Prefer this to 'interrupt_input_blocked', as
      that's more reliable if the code is buggy and sets
      interrupt_input_blocked to a negative value.  All uses changed.
      * src/atimer.c (deliver_alarm_signal):
      Remove.  No need to deliver this to the parent; any thread can
      handle this signal now.  All uses replaced by underlying handler.
      * src/atimer.c (turn_on_atimers):
      * src/dispnew.c (handle_window_change_signal):
      * src/emacs.c (handle_danger_signal):
      * src/keyboard.c (kbd_buffer_get_event):
      Don't reestablish signal handler; not needed with sigaction.
      * src/blockinput.h (UNBLOCK_INPUT_TO, TOTALLY_UNBLOCK_INPUT)
      (UNBLOCK_INPUT_TO):
      Rework to avoid unnecessary accesses to volatile variables.
      (UNBLOCK_INPUT_TO): Now a function.
      (totally_unblock_input, unblock_input): New decls.
      * src/data.c (handle_arith_signal, deliver_arith_signal): Move to sysdep.c
      (init_data): Remove.  Necessary stuff now done in init_signal.
      * src/emacs.c, src/xdisp.c: Include "atimer.h", since we invoke atimer functions.
      * src/emacs.c (handle_fatal_signal, deliver_fatal_signal): Move to sysdep.c.
      (fatal_error_code): Remove; no longer needed.
      (terminate_due_to_signal): Rename from fatal_error_backtrace, since
      it doesn't always backtrace.  All uses changed.  No need to reset
      signal to default, since sigaction and/or die does that for us now.
      Use emacs_raise (FOO), not kill (getpid (), FOO).
      (main): Check more-accurately whether we're dumping.
      Move fatal-error setup to sysdep.c
      * src/floatfns.c: Do not include "syssignal.h"; no longer needed.
      * src/gtkutil.c (xg_get_file_name, xg_get_font):
      Remove no-longer-needed signal-mask manipulation.
      * src/keyboard.c, src/process.c (POLL_FOR_INPUT):
      Don't depend on USE_ASYNC_EVENTS, a symbol that is never defined.
      * src/keyboard.c (read_avail_input): Remove.
      All uses replaced by gobble_input.
      (Ftop_level): Use TOTALLY_UNBLOCK_INPUT rather than open code.
      (kbd_buffer_store_event_hold, gobble_input):
      (record_asynch_buffer_change) [USABLE_SIGIO]:
      (store_user_signal_events):
      No need to mess with signal mask.
      (gobble_input): If blocking input and there are terminals, simply
      set pending_signals to 1 and return.  All hooks changed to not
      worry about whether input is blocked.
      (process_pending_signals): Clear pending_signals before processing
      them, in case a signal comes in while we're processing.
      By convention callers now test pending_signals before calling us.
      (UNBLOCK_INPUT_TO, unblock_input, totally_unblock_input):
      New functions, to support changes to blockinput.h.
      (handle_input_available_signal): Now extern.
      (reinvoke_input_signal): Remove.  All uses replaced by
      handle_async_input.
      (quit_count): Now volatile, since a signal handler uses it.
      (handle_interrupt): Now takes bool IN_SIGNAL_HANDLER as arg.  All
      callers changed.  Block SIGINT only if not already blocked.
      Clear sigmask reliably, even if Fsignal returns, which it can.
      Omit unnecessary accesses to volatile var.
      (quit_throw_to_read_char): No need to restore sigmask.
      * src/keyboard.c (gobble_input, handle_user_signal):
      * src/process.c (wait_reading_process_output):
      Call signal-handling code rather than killing ourselves.
      * src/lisp.h: Include <float.h>, for...
      (IEEE_FLOATING_POINT): New macro, moved here to avoid duplication.
      (pending_signals): Now volatile.
      (syms_of_data): Now const if IEEE floating point.
      (handle_input_available_signal) [USABLE_SIGIO]:
      (terminate_due_to_signal, record_child_status_change): New decls.
      * src/process.c (create_process): Avoid disaster if memory is exhausted
      while we're processing a vfork, by tightening the critical section
      around the vfork.
      (send_process_frame, process_sent_to, handle_pipe_signal)
      (deliver_pipe_signal): Remove.  No longer needed, as Emacs now
      ignores SIGPIPE.
      (send_process): No need for setjmp/longjmp any more, since the
      SIGPIPE stuff is now gone.  Instead, report an error if errno
      is EPIPE.
      (record_child_status_change): Now extern.  PID and W are now args.
      Return void, not bool.  All callers changed.
      * src/sysdep.c (wait_debugging) [(BSD_SYSTEM || HPUX) && !defined (__GNU__)]:
      Remove.  All uses removed.  This bug should be fixed now in a
      different way.
      (wait_for_termination_1): Use waitpid rather than sigsuspend,
      and record the child status change directly.  This avoids the
      need to futz with the signal mask.
      (process_fatal_action): Move here from emacs.c.
      (emacs_sigaction_flags): New function, containing
      much of what used to be in emacs_sigaction_init.
      (emacs_sigaction_init): Use it.  Block nonfatal system signals that are
      caught by emacs, to make races less likely.
      (deliver_process_signal): Rename from handle_on_main_thread.
      All uses changed.
      (BACKTRACE_LIMIT_MAX): Now at top level.
      (thread_backtrace_buffer, threadback_backtrace_pointers):
      New static vars.
      (deliver_thread_signal, deliver_fatal_thread_signal):
      New functions, for more-accurate delivery of thread-specific signals.
      (handle_fatal_signal, deliver_fatal_signal): Move here from emacs.c.
      (deliver_arith_signal): Handle in this thread, not
      in the main thread, since it's triggered by this thread.
      (maybe_fatal_sig): New function.
      (init_signals): New arg DUMPING so that we can be more accurate
      about whether we're dumping.  Caller changed.
      Treat thread-specific signals differently from process-general signals.
      Block all signals while handling fatal error; that's safer.
      xsignal from SIGFPE only on non-IEEE hosts, treating it as fatal
      on IEEE hosts.
      When batch, ignore SIGHUP, SIGINT, SIGTERM if they were already ignored.
      Ignore SIGPIPE unless batch.
      (emacs_backtrace): Output backtrace for the appropriate thread,
      which is not necessarily the main thread.
      * src/syssignal.h: Include <stdbool.h>.
      (emacs_raise): New macro.
      * src/xterm.c (x_connection_signal): Remove; no longer needed
      now that we use sigaction.
      (x_connection_closed): No need to mess with sigmask now.
      (x_initialize): No need to reset SIGPIPE handler here, since
      init_signals does this for us now.
      
      Fixes: debbugs:12471
      4d7e6e51
  3. 15 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Port better to POSIX hosts lacking _setjmp. · 0328b6de
      Paul Eggert authored
      * configure.ac (HAVE__SETJMP, HAVE_SIGSETJMP): New symbols.
      (_setjmp, _longjmp): Remove.
      * src/lisp.h: Include <setjmp.h> here, since we use its symbols here.
      All instances of '#include <setjmp.h>' removed, if the
      only reason for the instance was because "lisp.h" was included.
      (sys_jmp_buf, sys_setjmp, sys_longjmp): New symbols.
      Unless otherwise specified, replace all uses of jmp_buf, _setjmp,
      and _longjmp with the new symbols.  Emacs already uses _setjmp if
      available, so this change affects only POSIXish hosts that have
      sigsetjmp but not _setjmp, such as some versions of Solaris and
      Unixware.  (Also, POSIX-2008 marks _setjmp as obsolescent.)
      * src/image.c (_setjmp, _longjmp) [HAVE_PNG && !HAVE__SETJMP]: New macros.
      (png_load_body) [HAVE_PNG]:
      (PNG_LONGJMP) [HAVE_PNG && PNG_LIBPNG_VER < 10500]:
      (PNG_JMPBUF) [HAVE_PNG && PNG_LIBPNG_VER >= 10500]:
      Use _setjmp and _longjmp rather than sys_setjmp and sys_longjmp,
      since PNG requires jmp_buf.  This is the only exception to the
      general rule that we now use sys_setjmp and sys_longjmp.
      This exception is OK since this code does not change the signal
      mask or longjmp out of a signal handler.
      
      Fixes: debbugs:12446
      0328b6de
  4. 12 Sep, 2012 1 commit
    • Stefan Monnier's avatar
      Remove unread-command-char. · bfeae2cf
      Stefan Monnier authored
      * src/keyboard.c (read_char, requeued_events_pending_p, Finput_pending_p)
      (Fdiscard_input, quit_throw_to_read_char, init_keyboard)
      (syms_of_keyboard): Remove support for unread-command-char.
      * lisp/emacs-lisp/debug.el (debugger-outer-unread-command-char, debug)
      (debugger-env-macro): Remove support for unread-command-char.
      
      * lisp/ehelp.el (with-electric-help): Accept functions in
      electric-help-form-to-execute.
      (electric-help-execute-extended, electric-help-ctrl-x-prefix): Use it.
      And replace unread-command-char -> unread-command-events.
      
      * lisp/subr.el (set-temporary-overlay-map): Minimize slightly the impact of
      the temporary map re-appearing on emulation-mode-map-alists.
      
      * lisp/emacs-lisp/edebug.el (def-edebug-form-spec): Remove, it's been broken
      since 22.1.
      bfeae2cf
  5. 11 Sep, 2012 2 commits
    • Dmitry Antipov's avatar
      Discard killed buffers from deleted window and frame objects. · d73e321c
      Dmitry Antipov authored
      This reduces an amount of references to killed buffers and
      helps GC to reclaim them faster.
      * alloc.c (discard_killed_buffers): New function.
      (mark_object): Use it for deleted windows and frames.
      (mark_object): If symbol's value is set up for a killed buffer
      or deleted frame, restore it's global binding.
      * data.c (swap_in_global_binding): Add GC notice.
      (swap_in_symval_forwarding): Use convenient set_blv_where.
      * window.c (wset_next_buffers, wset_prev_buffers): Move ...
      * window.h: ... to here.
      d73e321c
    • Paul Eggert's avatar
      Simplify, document, and port floating-point. · c990426a
      Paul Eggert authored
      The porting part of this patch fixes bugs on non-IEEE platforms
      with frexp, ldexp, logb.
      * admin/CPP-DEFINES (HAVE_CBRT, HAVE_LOGB, logb): Remove.
      * configure.ac (logb, cbrt): Do not check for these functions,
      as they are not being used.
      * doc/lispref/numbers.texi (Float Basics, Arithmetic Operations, Math Functions):
      Document that / and mod (with floating point arguments), along
      with asin, acos, log, log10, expt and sqrt, return special values
      instead of signaling exceptions.
      (Float Basics): Document that logb operates on the absolute value
      of its argument.
      (Math Functions): Document that (log ARG BASE) also returns NaN if
      BASE is negative.  Document that (expt X Y) returns NaN if X is a
      finite negative number and Y a finite non-integer.
      * etc/NEWS: Document NaNs versus signaling-error change.
      * src/data.c, src/lisp.h (Qdomain_error, Qsingularity_error, Qunderflow_error):
      Now static.
      * src/floatfns.c: Simplify discussion of functions that Emacs doesn't
      support, by removing commented-out code and briefly listing the
      C89 functions excluded.  The commented-out stuff was confusing
      maintenance, e.g., we thought we needed cbrt but it was commented out.
      (logb): Remove decl; no longer needed.
      (isfinite): New macro, if not already supplied.
      (isnan): Don't replace any existing macro.
      (Ffrexp, Fldexp): Define even if !HAVE_COPYSIGN, as frexp and ldexp
      are present on all C89 platforms.
      (Ffrexp): Do not special-case zero, as frexp does the right thing
      for that case.
      (Flogb): Do not use logb, as it doesn't have the desired meaning
      on hosts that use non-base-2 floating point.  Instead, stick with
      frexp, which is C89 anyway.  Do not pass an infinity or a NaN to
      frexp, to avoid getting an unspecified result.
      c990426a
  6. 09 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Assume C89 or later for math functions. · f6196b87
      Paul Eggert authored
      This simplifies the code, and makes it a bit smaller and faster,
      and (most important) makes it easier to clean up signal handling
      since we can stop worring about floating-point exceptions in
      library code.  That was a problem before C89, but the problem
      went away many years ago on all practical Emacs targets.
      * configure.ac (frexp, fmod): Remove checks for these functions,
      as we now assume them.
      (FLOAT_CHECK_DOMAIN, HAVE_INVERSE_HYPERBOLIC, NO_MATHERR)
      (HAVE_EXCEPTION):
      Remove; no longer needed.
      * admin/CPP-DEFINES (HAVE_FMOD, HAVE_FREXP, FLOAT_CHECK_DOMAIN)
      (HAVE_INVERSE_HYPERBOLIC, NO_MATHERR): Remove.
      * src/data.c, src/image.c, src/lread.c, src/print.c:
      Don't include <math.h>; no longer needed.
      * src/data.c, src/floatfns.c (IEEE_FLOATING_POINT): Don't worry that it
      might be autoconfigured, as that never happens.
      * src/data.c (fmod):
      * src/doprnt.c (DBL_MAX_10_EXP):
      * src/print.c (DBL_DIG):
      Remove.  C89 or later always defines these.
      * src/floatfns.c (HAVE_MATHERR, FLOAT_CHECK_ERRNO, FLOAT_CHECK_DOMAIN)
      (in_float, float_error_arg, float_error_arg2, float_error_fn_name)
      (arith_error, domain_error, domain_error2):
      Remove all this pre-C89 cruft.  Do not include <errno.h> as that's
      no longer needed -- we simply return what C returns.  All uses removed.
      (IN_FLOAT, IN_FLOAT2): Remove.  All uses replaced with
      the wrapped code.
      (FLOAT_TO_INT, FLOAT_TO_INT2, range_error, range_error2):
      Remove.  All uses expanded, as these macros are no longer used
      more than once and are now more trouble than they're worth.
      (Ftan): Use tan, not sin / cos.
      (Flogb): Assume C89 frexp.
      (fmod_float): Assume C89 fmod.
      (matherr) [HAVE_MATHERR]: Remove; no longer needed.
      (init_floatfns): Remove.  All uses removed.
      f6196b87
  7. 07 Sep, 2012 2 commits
    • Chong Yidong's avatar
      Fix doc of local-variable-if-set-p. · 1a5432bc
      Chong Yidong authored
      * doc/lispref/variables.texi (Creating Buffer-Local): Fix description of
      local-variable-if-set-p.
      
      * src/data.c (Flocal_variable_if_set_p): Doc fix (Bug#10713).
      1a5432bc
    • Paul Eggert's avatar
      Signal-handler cleanup. · 2fe28299
      Paul Eggert authored
      Emacs's signal handlers were written in the old 4.2BSD style with
      sigblock and sigmask and so forth, and this led to some
      inefficiencies and confusion.  Rewrite these to use
      pthread_sigmask etc. without copying signal sets around.  Also,
      get rid of the confusing macros 'SIGNAL_THREAD_CHECK' and
      'signal', and instead use functions that do not attempt to take
      over the system name space.  This patch causes Emacs's text
      segment to shrink by 0.7% on my platform, Fedora 17 x86-64.
      * configure.ac (PTY_OPEN, PTY_TTY_NAME_SPRINTF):
      Adjust to syssignal.h changes.
      (SIGNAL_H_AB): Remove; no longer needed.
      * src/alloc.c, src/emacsgtkfixed.c, src/nsfns.m, src/widget.c, src/xmenu.c:
      Do not include <signal.h> or "syssignal.h", as these
      modules do not use signals.
      * src/atimer.c, src/callproc.c, src/data.c, src/dispnew.c, src/emacs.c:
      * src/floatfns.c, src/gtkutil.c, src/keyboard.c, src/process.c, src/sound.c:
      * src/sysdep.c, src/term.c, src/xterm.c:
      Do not include <signal.h>, as "syssignal.h" does that for us now.
      * src/atimer.c (sigmask_atimers): New function.
      (block_atimers, unblock_atimers): New functions,
      replacing the old macros BLOCK_ATIMERS and UNBLOCK_ATIMERS.
      All uses replaced.
      * src/conf_post.h [SIGNAL_H_AHB]: Do not include <signal.h>;
      no longer needed here.
      * src/emacs.c (main): Inspect existing signal handler with sigaction,
      so that there's	no need to block and unblock SIGHUP.
      * src/sysdep.c (struct save_signal): New member 'action', replacing
      old member 'handler'.
      (save_signal_handlers, restore_signal_handlers):
      Use sigaction instead of 'signal' to save and restore.
      (get_set_sighandler, set_sighandler) [!WINDOWSNT]:
      New function.  All users of 'signal' modified to use set_sighandler
      if they're writeonly, and to use sys_signal if they're read+write.
      (emacs_sigaction_init, forwarded_signal): New functions.
      (sys_signal): Remove.  All uses replaced by calls to sigaction
      and emacs_sigaction_init, or by direct calls to 'signal'.
      (sys_sigmask) [!__GNUC__]: Remove; no longer needed.
      (sys_sigblock, sys_sigunblock, sys_sigsetmask): Remove;
      all uses replaced by pthread_sigmask etc. calls.
      * src/syssignal.h: Include <signal.h>.
      (emacs_sigaction_init, forwarded_signal): New decls.
      (SIGMASKTYPE): Remove.  All uses replaced by its definiens, sigset_t.
      (SIGEMPTYMASK): Remove; all uses replaced by its definiens, empty_mask.
      (sigmask, sys_sigmask): Remove; no longer needed.
      (sigpause): Remove.  All uses replaced by its definiens, sigsuspend.
      (sigblock, sigunblock, sigfree):
      (sigsetmask) [!defined sigsetmask]:
      Remove.  All uses replaced by pthread_sigmask.
      (signal): Remove.  Its remaining uses (with SIG_DFL and SIG_IGN)
      no longer need to be replaced, and its typical old uses
      are now done via emacs_sigaction_init and sigaction.
      (sys_sigblock, sys_sigunblock, sys_sigsetmask): Remove decls.
      (sys_sigdel): Remove; unused.
      (NSIG): Remove a FIXME; the code's fine.  Remove an unnecessary ifdef.
      
      Fixes: debbugs:12327
      2fe28299
  8. 05 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Fix race conditions with signal handlers and errno. · 20ef56db
      Paul Eggert authored
      Be more systematic about preserving errno whenever a signal
      handler returns, even if it's not in the main thread.  Do this by
      renaming signal handlers to distinguish between signal delivery
      and signal handling.  All uses changed.
      * atimer.c (deliver_alarm_signal): Rename from alarm_signal_handler.
      * data.c (deliver_arith_signal): Rename from arith_error.
      * dispnew.c (deliver_window_change_signal): Rename from
      window_change_signal.
      * emacs.c (deliver_error_signal): Rename from fatal_error_signal.
      (deliver_danger_signal) [SIGDANGER]: Rename from memory_warning_signal.
      * keyboard.c (deliver_input_available_signal): Rename from
      input_available_signal.
      (deliver_user_signal): Rename from handle_user_signal.
      (deliver_interrupt_signal): Rename from interrupt_signal.
      * process.c (deliver_pipe_signal): Rename from send_process_trap.
      (deliver_child_signal): Rename from sigchld_handler.
      * atimer.c (handle_alarm_signal):
      * data.c (handle_arith_signal):
      * dispnew.c (handle_window_change_signal):
      * emacs.c (handle_fatal_signal, handle_danger_signal):
      * keyboard.c (handle_input_available_signal):
      * keyboard.c (handle_user_signal, handle_interrupt_signal):
      * process.c (handle_pipe_signal, handle_child_signal):
      New functions, with the actual signal-handling code taken from the
      original respective signal handlers, sans the sporadic attempts to
      preserve errno, since that's now done by handle_on_main_thread.
      * atimer.c (alarm_signal_handler): Remove unnecessary decl.
      * emacs.c, floatfns.c, lisp.h: Remove unused FLOAT_CATCH_SIGKILL cruft.
      * emacs.c (main_thread) [FORWARD_SIGNAL_TO_MAIN_THREAD]:
      Move to sysdep.c.
      (main) [FORWARD_SIGNAL_TO_MAIN_THREAD]:
      Move initialization of main_thread to sysdep.c's init_signals.
      * process.c (waitpid) [!WNOHANG]: #define to wait; that's good enough for
      our usage, and simplifies the mainline code.
      (record_child_status_change): New static function, as a helper
      for handle_child_signal, and with most of the old child handler's
      contents.
      (CAN_HANDLE_MULTIPLE_CHILDREN): New constant.
      (handle_child_signal): Use the above.
      * sysdep.c (main_thread) [FORWARD_SIGNAL_TO_MAIN_THREAD]:
      Moved here from emacs.c.
      (init_signals) [FORWARD_SIGNAL_TO_MAIN_THREAD]: Initialize it;
      code moved here from emacs.c's main function.
      * sysdep.c, syssignal.h (handle_on_main_thread): New function,
      replacing the old SIGNAL_THREAD_CHECK.  All uses changed.  This
      lets callers save and restore errno properly.
      20ef56db
  9. 04 Sep, 2012 1 commit
    • Paul Eggert's avatar
      Simplify redefinition of 'abort' (Bug#12316). · 1088b922
      Paul Eggert authored
      Do not try to redefine the 'abort' function.  Instead, redo
      the code so that it calls 'emacs_abort' rather than 'abort'.
      This removes the need for the NO_ABORT configure-time macro
      and makes it easier to change the abort code to do a backtrace.
      * configure.ac (NO_ABRT): Remove.
      * admin/CPP-DEFINES (NO_ABORT): Remove.
      * nt/inc/ms-w32.h (w32_abort) [HAVE_NTGUI]: Remove.
      * src/.gdbinit: Just stop at emacs_abort, not at w32_abort or abort.
      * src/emacs.c (abort) [!DOS_NT && !NO_ABORT]:
      Remove; sysdep.c's emacs_abort now takes its place.
      * src/lisp.h (emacs_abort): New decl.  All calls from Emacs code to
      'abort' changed to use 'emacs_abort'.
      * src/msdos.c (dos_abort) [defined abort]: Remove; not used.
      (abort) [!defined abort]: Rename to ...
      (emacs_abort): ... new name.
      * src/sysdep.c (emacs_abort) [!HAVE_NTGUI]: New function, taking
      the place of the old 'abort' in emacs.c.
      * src/w32.c, src/w32fns.c (abort): Do not #undef.
      * src/w32.c (emacs_abort): Rename from w32_abort.
      1088b922
  10. 27 Aug, 2012 1 commit
    • Paul Eggert's avatar
      * composite.c, data.c, dbusbind.c, dired.c: Use bool for booleans. · de1339b0
      Paul Eggert authored
      * composite.c (find_composition, composition_gstring_p)
      (composition_reseat_it, find_automatic_composition):
      * data.c (let_shadows_buffer_binding_p)
      (let_shadows_global_binding_p, set_internal, make_blv)
      (Fmake_variable_buffer_local, Fmake_local_variable)
      (Fmake_variable_frame_local, arithcompare, cons_to_unsigned)
      (cons_to_signed, arith_driver):
      * dbusbind.c (xd_in_read_queued_messages):
      * dired.c (directory_files_internal, file_name_completion):
      Use bool for booleans.
      * dired.c (file_name_completion):
      * process.h (fd_callback):
      Omit int (actually boolean) argument.  It wasn't being used.
      All uses changed.
      * composite.h, lisp.h: Reflect above API changes.
      de1339b0
  11. 26 Aug, 2012 1 commit
    • Paul Eggert's avatar
      Remove unused external symbols. · b52d6985
      Paul Eggert authored
      * data.c (Qcons, Qfloat, Qmisc, Qstring, Qvector):
      * window.c (Qwindow_valid_p, decode_valid_window):
      Now static, not extern.
      * data.c (Qinterval): Remove; unused.
      (syms_of_data): Do not define 'interval'.
      * lisp.h (Qinteger, Qstring, Qmisc, Qvector, Qfloat, Qcons):
      * window.h (decode_valid_window):
      Remove decls.
      b52d6985
  12. 20 Aug, 2012 1 commit
  13. 19 Aug, 2012 1 commit
  14. 18 Aug, 2012 1 commit
    • Paul Eggert's avatar
      * buffer.h (BSET): Remove. · 39eb03f1
      Paul Eggert authored
      Replace all uses with calls to new setter functions.
      (bset_bidi_paragraph_direction, bset_case_canon_table)
      (bset_case_eqv_table, bset_directory, bset_display_count)
      (bset_display_time, bset_downcase_table)
      (bset_enable_multibyte_characters, bset_filename, bset_keymap)
      (bset_last_selected_window, bset_local_var_alist)
      (bset_mark_active, bset_point_before_scroll, bset_read_only)
      (bset_truncate_lines, bset_undo_list, bset_upcase_table)
      (bset_width_table):
      * buffer.c (bset_abbrev_mode, bset_abbrev_table)
      (bset_auto_fill_function, bset_auto_save_file_format)
      (bset_auto_save_file_name, bset_backed_up, bset_begv_marker)
      (bset_bidi_display_reordering, bset_buffer_file_coding_system)
      (bset_cache_long_line_scans, bset_case_fold_search)
      (bset_ctl_arrow, bset_cursor_in_non_selected_windows)
      (bset_cursor_type, bset_display_table, bset_extra_line_spacing)
      (bset_file_format, bset_file_truename, bset_fringe_cursor_alist)
      (bset_fringe_indicator_alist, bset_fringes_outside_margins)
      (bset_header_line_format, bset_indicate_buffer_boundaries)
      (bset_indicate_empty_lines, bset_invisibility_spec)
      (bset_left_fringe_width, bset_major_mode, bset_mark)
      (bset_minor_modes, bset_mode_line_format, bset_mode_name)
      (bset_name, bset_overwrite_mode, bset_pt_marker)
      (bset_right_fringe_width, bset_save_length)
      (bset_scroll_bar_width, bset_scroll_down_aggressively)
      (bset_scroll_up_aggressively, bset_selective_display)
      (bset_selective_display_ellipses, bset_vertical_scroll_bar_type)
      (bset_word_wrap, bset_zv_marker):
      * category.c (bset_category_table):
      * syntax.c (bset_syntax_table):
      New setter functions.
      
      Fixes: debbugs:12215
      39eb03f1
  15. 17 Aug, 2012 1 commit
  16. 14 Aug, 2012 1 commit
    • Chong Yidong's avatar
      More doc fixes. · 4abcdac8
      Chong Yidong authored
      * lisp/minibuffer.el (read-file-name): Doc fix.
      
      * character.c (Fcharacterp): Doc fix (Bug#12076).
      
      * data.c (Findirect_variable): Doc fix (Bug#11040).
      
      * editfns.c (Fsave_current_buffer): Doc fix (Bug#11542).
      
      Fixes: debbugs:11542 debbugs:11040 debbugs:12076 debbugs:10881
      4abcdac8
  17. 13 Aug, 2012 1 commit
  18. 07 Aug, 2012 2 commits
    • Dmitry Antipov's avatar
      Revert and cleanup Lisp_Cons, Lisp_Misc and Lisp_Symbol things. · c644523b
      Dmitry Antipov authored
      * src/lisp.h (struct Lisp_Symbol): Change xname to meaningful
      name since all xname users are fixed long time ago.  Do not use
      INTERNAL_FIELD.
      (set_symbol_name, set_symbol_function, set_symbol_plist):
      (set_symbol_next, set_overlay_plist): New function.
      (struct Lisp_Cons): Do not use INTERNAL_FIELD.
      (struct Lisp_Overlay): Likewise.
      (CVAR, MVAR, SVAR): Remove.
      * src/alloc.c, src/buffer.c, src/buffer.h, src/bytecode.c:
      * src/cmds.c, src/data.c, src/doc.c, src/eval.c, src/fns.c:
      * src/keyboard.c, src/lread.c, src/nsselect.m, src/xterm.c:
      Adjust users.
      * src/.gdbinit: Change to use name field of struct Lisp_Symbol
      where appropriate.
      * admin/coccinelle/overlay.cocci, admin/coccinelle/symbol.cocci:
      Remove.
      c644523b
    • Dmitry Antipov's avatar
      Drop FGET and revert read access to Lisp_Objects slots of struct frame. · e69b0960
      Dmitry Antipov authored
      * frame.h (FGET): Remove.
      (struct frame): Do not use INTERNAL_FIELD.
      * buffer.c, data.c, dispnew.c, dosfns.c, eval.c, fontset.c, frame.c:
      * fringe.c, gtkutil.c, minibuf.c, msdos.c, nsfns.m, nsmenu.m, nsterm.m:
      * print.c, term.c, w32fns.c, w32menu.c, w32term.c, window.c, window.h:
      * xdisp.c, xfaces.c, xfns.c, xmenu.c, xterm.c: Adjust users.
      e69b0960
  19. 06 Aug, 2012 1 commit
    • Dmitry Antipov's avatar
      Separate read and write access to Lisp_Object slots of struct frame. · edd74c35
      Dmitry Antipov authored
      * frame.h (FGET, FSET): New macros similar to AREF and ASET.
      * buffer.c, data.c, dispnew.c, dosfns.c, eval.c, fontset.c, frame.c:
      * fringe.c, gtkutil.c, minibuf.c, msdos.c, nsfns.m, nsmenu.m, nsterm.m:
      * print.c, term.c, w32fns.c, w32menu.c, w32term.c, window.c, window.h:
      * xdisp.c, xfaces.c, xfns.c, xmenu.c, xterm.c: Adjust users.
      edd74c35
  20. 03 Aug, 2012 1 commit
    • Paul Eggert's avatar
      Remove unnecessary casts involving pointers. · 98c6f1e3
      Paul Eggert authored
      These casts are no longer needed now that we assume C89 or later,
      since they involve casting to or from void *.
      * alloc.c (make_pure_string, make_pure_c_string, pure_cons)
      (make_pure_float, make_pure_vector):
      * lisp.h (SAFE_ALLOCA, SAFE_ALLOCA_LISP):
      * macros.c (Fstart_kbd_macro):
      * menu.c (find_and_return_menu_selection):
      * minibuf.c (read_minibuf_noninteractive):
      * sysdep.c (closedir):
      * xdisp.c (x_produce_glyphs):
      * xfaces.c (compare_fonts_by_sort_order):
      * xfns.c (x_real_positions, select_visual):
      * xselect.c (x_stop_queuing_selection_requests)
      (x_get_window_property, x_get_window_property_as_lisp_data):
      * xterm.c (x_set_frame_alpha, x_find_modifier_meanings):
      Remove unnecessary pointer casts.
      * alloc.c (record_xmalloc): New function.
      * lisp.h (record_xmalloc): New decl.
      (SAFE_ALLOCA): Now takes just one arg -- the size -- and acts
      more like a function.  This is because the pointer cast is not
      needed.  All uses changed.
      * print.c (print_string, print_error_message): Avoid length recalc.
      98c6f1e3
  21. 01 Aug, 2012 1 commit
    • Dmitry Antipov's avatar
      Use INTERNAL_FIELD for symbols. · 8271d590
      Dmitry Antipov authored
      * src/lisp.h (SVAR): New macro.  Adjust users.
      * src/alloc.c, src/bytecode.c, src/cmds.c, src/data.c, src/doc.c, src/eval.c:
      * src/fns.c, src/keyboard.c, src/lread.c, src/xterm.c: Users changed.
      * admin/coccinelle/symbol.cocci: Semantic patch to replace direct
      access to Lisp_Object members of struct Lisp_Symbol to SVAR.
      8271d590
  22. 31 Jul, 2012 1 commit
    • Dmitry Antipov's avatar
      Generalize INTERNAL_FIELD between buffers, keyboards and frames. · e34f7f79
      Dmitry Antipov authored
      * src/lisp.h (INTERNAL_FIELD): New macro.
      * src/buffer.h (BUFFER_INTERNAL_FIELD): Removed.
      (BVAR): Change to use INTERNAL_FIELD.
      * src/keyboard.h (KBOARD_INTERNAL_FIELD): Likewise.
      (KVAR): Change to use INTERNAL_FIELD.
      * src/frame.h (FVAR): New macro.
      (struct frame): Use INTERNAL_FIELD for all Lisp_Object fields.
      * src/alloc.c, src/buffer.c, src/data.c, src/dispnew.c, src/dosfns.c
      * src/eval.c, src/frame.c, src/fringe.c, src/gtkutil.c, src/minibuf.c
      * src/nsfns.m, src/nsterm.m, src/print.c, src/term.c, src/w32fns.c
      * src/w32menu.c, src/w32term.c, src/window.c, src/window.h, src/xdisp.c
      * src/xfaces.c, src/xfns.c, src/xmenu.c, src/xterm.c: Users changed.
      * admin/coccinelle/frame.cocci: Semantic patch to replace direct
      access to Lisp_Object members of struct frame to FVAR.
      e34f7f79
  23. 30 Jul, 2012 1 commit
  24. 29 Jul, 2012 1 commit
  25. 26 Jul, 2012 1 commit
    • Stefan Monnier's avatar
      Autoload more carefully from Lisp. Follow aliases for function properties. · 7abaf5cc
      Stefan Monnier authored
      * lisp/subr.el (autoloadp): New function.
      (symbol-file): Use it.
      (function-get): New function.
      * lisp/emacs-lisp/macroexp.el (macroexp--expand-all): Use function-get and
      autoload-do-load.
      * lisp/emacs-lisp/lisp-mode.el (lisp-font-lock-syntactic-face-function)
      (lisp-indent-function):
      * lisp/emacs-lisp/gv.el (gv-get):
      * lisp/emacs-lisp/edebug.el (get-edebug-spec, edebug-basic-spec):
      * lisp/emacs-lisp/byte-opt.el (byte-optimize-form):
      * lisp/emacs-lisp/bytecomp.el (byte-compile-arglist-warn):
      * lisp/emacs-lisp/autoload.el (make-autoload, autoload-print-form):
      Use function-get.
      * lisp/emacs-lisp/cl.el: Don't propagate function properties any more.
      
      * src/eval.c (Fautoload_do_load): Rename from do_autoload, export to Lisp,
      add argument, tune behavior, and adjust all callers.
      
      * lisp/speedbar.el (speedbar-add-localized-speedbar-support):
      * lisp/emacs-lisp/disass.el (disassemble-internal):
      * lisp/desktop.el (desktop-load-file):
      * lisp/help-fns.el (help-function-arglist, find-lisp-object-file-name)
      (describe-function-1):
      * lisp/emacs-lisp/find-func.el (find-function-noselect):
      * lisp/emacs-lisp/elp.el (elp-instrument-function):
      * lisp/emacs-lisp/advice.el (ad-has-proper-definition):
      * lisp/apropos.el (apropos-safe-documentation, apropos-macrop):
      * lisp/emacs-lisp/debug.el (debug-on-entry):
      * lisp/emacs-lisp/cl-macs.el (cl-compiler-macroexpand):
      * lisp/emacs-lisp/byte-opt.el (byte-compile-inline-expand):
      * lisp/calc/calc.el (name): Use autoloadp & autoload-do-load.
      7abaf5cc
  26. 19 Jul, 2012 2 commits
    • Paul Eggert's avatar
      * buffer.h (FOR_EACH_BUFFER): Rename from 'for_each_buffer'. · 52b852c7
      Paul Eggert authored
      (FOR_EACH_PER_BUFFER_OBJECT_AT): Rename from
      'for_each_per_buffer_object_at'.
      All uses changed.  It's better to use upper-case for macros that
      cannot be implemented as functions, to give the reader a clue
      that they're special.
      52b852c7
    • Dmitry Antipov's avatar
      New macro to iterate over all buffers, miscellaneous cleanups. · d17337e5
      Dmitry Antipov authored
      * lisp.h (all_buffers): Remove declaration.
      * buffer.h (all_buffers): Add declaration, with comment.
      (for_each_buffer): New macro.
      * alloc.c (Fgarbage_collect, mark_object): Use it.
      * buffer.c (Fkill_buffer, Fbuffer_swap_text, Fset_buffer_multibyte)
      (init_buffer): Likewise.
      * data.c (Fset_default): Likewise.
      * coding.c (code_conversion_restore): Remove redundant check
      for dead buffer.
      * buffer.c (Fkill_buffer): Likewise.  Remove obsolete comment.
      d17337e5
  27. 18 Jul, 2012 1 commit
    • Dmitry Antipov's avatar
      Return more descriptive data from Fgarbage_collect. · 3ab6e069
      Dmitry Antipov authored
      Suggested by Stefan Monnier in
      http://lists.gnu.org/archive/html/emacs-devel/2012-07/msg00369.html.
      * src/alloc.c (bounded_number): New function.
      (total_buffers, total_vectors): New variable.
      (total_string_size): Rename to total_string_bytes, adjust users.
      (total_vector_size): Rename to total_vector_bytes, adjust users.
      (sweep_vectors): Account total_vectors and total_vector_bytes.
      (Fgarbage_collect): New return value.  Adjust documentation.
      (gc_sweep): Account total_buffers.
      (Fmemory_free, Fmemory_use_counts): Use bounded_number.
      (VECTOR_SIZE): Remove.
      * src/data.c (Qfloat, Qvector, Qsymbol, Qstring, Qcons): Make global.
      (Qinterval, Qmisc): New symbols.
      (syms_of_data): Initialize them.
      * src/lisp.h (Qinterval, Qsymbol, Qstring, Qmisc, Qvector, Qfloat)
      (Qcons, Qbuffer): New declarations.
      * lisp/emacs-lisp/chart.el (chart-emacs-storage): Change to
      reflect new format of data returned by Fgarbage_collect.
      3ab6e069
  28. 10 Jul, 2012 1 commit
    • Dmitry Antipov's avatar
      Optimize pure C strings initialization. · 2a0213a6
      Dmitry Antipov authored
      * lisp.h (make_pure_string): Fix prototype.
      (build_pure_c_string): New function, defined as static inline.  This
      provides a better opportunity to optimize away calls to strlen when
      the function is called with compile-time constant argument.
      * alloc.c (make_pure_c_string): Fix comment.  Change to add nchars
      argument, adjust users accordingly.  Use build_pure_c_string where
      appropriate.
      * buffer.c, coding.c, data.c, dbusbind.c, fileio.c, fontset.c, frame.c,
      * keyboard.c, keymap.c, lread.c, search.c, syntax.c, w32fns.c, xdisp.c,
      * xfaces.c, xfns.c, xterm.c: Use build_pure_c_string where appropriate.
      2a0213a6
  29. 05 Jul, 2012 1 commit
    • Paul Eggert's avatar
      More xmalloc and related cleanup. · 38182d90
      Paul Eggert authored
      * alloc.c, bidi.c, buffer.c, buffer.h, bytecode.c, callint.c:
      * callproc.c, charset.c, coding.c, composite.c, data.c, dispnew.c:
      * doc.c, editfns.c, emacs.c, eval.c, fileio.c, filelock.c, fns.c:
      * font.c, fontset.c, frame.c, fringe.c, ftfont.c, ftxfont.c, gmalloc.c:
      * gtkutil.c, image.c, keyboard.c, keymap.c, lread.c, macros.c, menu.c:
      * nsfns.m, nsfont.m, nsmenu.m, nsterm.m, print.c, process.c, ralloc.c:
      * regex.c, region-cache.c, scroll.c, search.c, sound.c, syntax.c:
      * sysdep.c, term.c, termcap.c, unexmacosx.c, window.c, xdisp.c:
      * xfaces.c, xfns.c, xftfont.c, xgselect.c, xmenu.c, xrdb.c, xselect.c:
      * xterm.c:
      Omit needless casts involving void * pointers and allocation.
      Prefer "P = xmalloc (sizeof *P)" to "P = xmalloc (sizeof (TYPE_OF_P))",
      as the former is more robust if P's type is changed.
      Prefer xzalloc to xmalloc + memset 0.
      Simplify malloc-or-realloc to realloc.
      Don't worry about xmalloc returning a null pointer.
      Prefer xstrdup to xmalloc + strcpy.
      * editfns.c (Fmessage_box): Grow message_text by at least 80 when
      growing it.
      * keyboard.c (apply_modifiers_uncached): Prefer local array to
      alloca of a constant.
      38182d90
  30. 27 Jun, 2012 1 commit
    • Stefan Monnier's avatar
      Get rid of all the manual purecopy calls in menu-bar definitions. · 1ec4b7b2
      Stefan Monnier authored
      * lisp/loadup.el (purify-flag): Pre-grow the hash-table to reduce the
      memory use.
      * lisp/bindings.el (bindings--define-key): New function.
      * lisp/vc/vc-hooks.el, lisp/replace.el, lisp/menu-bar.el:
      * lisp/international/mule-cmds.el, lisp/emacs-lisp/lisp-mode.el:
      * lisp/buff-menu.el, lisp/bookmark.el:
      * bindings.el: Use it to purecopy define-key bindings.
      * src/fns.c (maybe_resize_hash_table): Output message when growing the
      purify-hashtable.
      1ec4b7b2
  31. 26 Jun, 2012 1 commit
    • Paul Eggert's avatar
      Use sprintf return value instead of invoking strlen on result. · 99027bdd
      Paul Eggert authored
      In the old days this wasn't portable, since some sprintf
      implementations returned char *.  But they died out years ago and
      Emacs already assumes sprintf returns int.
      Similarly for float_to_string.
      This patch speeds up (number-to-string 1000) by 3% on Fedora 15 x86-64.
      * ccl.c (ccl_driver):
      * character.c (string_escape_byte8):
      * data.c (Fnumber_to_string):
      * doprnt.c (doprnt):
      * print.c (print_object):
      * xdisp.c (message_dolog):
      * xfns.c (syms_of_xfns):
      Use sprintf or float_to_string result to avoid need to call strlen.
      * data.c (Fnumber_to_string):
      Use make_unibyte_string, since the string must be ASCII.
      * lisp.h, print.c (float_to_string): Now returns int length.
      * term.c (produce_glyphless_glyph):
      Use sprintf result rather than recomputing it.
      99027bdd
  32. 24 Jun, 2012 1 commit
  33. 19 Jun, 2012 1 commit
  34. 18 Jun, 2012 1 commit
    • Stefan Monnier's avatar
      Fix return value of `defun' and un-define it. · 1053a871
      Stefan Monnier authored
      * src/data.c (Fdefalias): Return `symbol'.
      * doc/lispref/functions.texi (Defining Functions):
      * doc/lispref/macros.texi (Defining Macros): Un-define the return value of
      `defun', `defmacro' and `defalias'.
      
      Fixes: debbugs:11686
      1053a871
  35. 13 Jun, 2012 1 commit
    • Paul Eggert's avatar
      USE_LISP_UNION_TYPE + USE_LSB_TAG cleanup (Bug#11604) · bfe3e0a2
      Paul Eggert authored
      * alloc.c (make_number) [!defined make_number]:
      Remove, as lisp.h always defines this now.
      (mark_maybe_pointer): Simplify since USE_LSB_TAG is always defined now.
      (roundup_size): Verify that it is a power of 2.
      * data.c (Fmake_variable_buffer_local, Fmake_local_variable):
      * ftfont.c (ftfont_driver): Use LISP_INITIALLY_ZERO.
      * lisp.h (USE_LSB_TAG): Allow the builder to compile with
      -DUSE_LSB_TAG=0, to override the automatically-selected default.
      USE_LSB_TAG now is always defined to be either 0 or 1.
      All uses changed.
      (union Lisp_Object): Don't worry about WORDS_BIGENDIAN; the
      code works fine either way, and efficiency is not a concern here,
      as the union type is for debugging, not for production.
      (LISP_MAKE_RVALUE, make_number) [USE_LISP_UNION_TYPE]:
      Use an inline function on all platforms when using the union type,
      since this is simpler and 'static inline' can be used portably
      within Emacs now.
      (LISP_INITIALLY_ZERO): New macro.
      (XFASTINT, XSETFASTINT) [USE_LISP_UNION_TYPE]: Remove.
      (XSET) [USE_LISP_UNION_TYPE]: Don't overparenthesize.
      bfe3e0a2
  36. 30 May, 2012 1 commit
    • Stefan Monnier's avatar
      * lisp/emacs-lisp/byte-run.el (defmacro, defun): Move from C. · 61b108cc
      Stefan Monnier authored
      (macro-declaration-function): Move var from C code.
      (macro-declaration-function): Define function with defalias.
      * lisp/emacs-lisp/macroexp.el (macroexpand-all-1):
      * lisp/emacs-lisp/cconv.el (cconv-convert, cconv-analyse-form):
      * lisp/emacs-lisp/byte-opt.el (byte-optimize-form-code-walker): Don't handle
      defun/defmacro any more.
      * lisp/emacs-lisp/bytecomp.el (byte-compile-arglist-signature):
      Provide fallback for unknown arglist.
      (byte-compile-arglist-warn): Change calling convention.
      (byte-compile-output-file-form): Move print-vars binding.
      (byte-compile-output-docform): Simplify accordingly.
      (byte-compile-file-form-defun, byte-compile-file-form-defmacro)
      (byte-compile-defmacro-declaration): Remove.
      (byte-compile-file-form-defmumble): Generalize to defalias.
      (byte-compile-output-as-comment): Return byte-positions.
      Simplify callers accordingly.
      (byte-compile-lambda): Use `assert'.
      (byte-compile-defun, byte-compile-defmacro): Remove.
      (byte-compile-file-form-defalias):
      Use byte-compile-file-form-defmumble.
      (byte-compile-defalias-warn): Remove.
      * src/eval.c (Fdefun, Fdefmacro, Vmacro_declaration_function):
      Move to byte-run.el.
      (Fautoload): Do the hash-doc more carefully.
      * src/data.c (Fdefalias): Purify definition, except for keymaps.
      (Qdefun): Move from eval.c.
      * src/lisp.h (Qdefun): Remove.
      * src/lread.c (read1): Tiny simplification.
      * lib-src/make-docfile.c: Improve comment style.
      (search_lisp_doc_at_eol): New function.
      (scan_lisp_file): Use it.
      61b108cc