\f
* Lisp changes in Emacs 24.3
-** New functions `autoloadp' and `autoload-do-load'.
-
-** New function `posnp' to test if an object is a `posn'.
-
-** `function-get' fetches the property of a function, following aliases.
-
-** `toggle-read-only' accepts a second argument specifying whether to
-print a message, if called from Lisp.
++** New sampling-based Elisp profiler.
++Try M-x profiler-start ... M-x profiler-stop; and then M-x profiler-report.
++The sampling rate can be based on CPU time (only supported on some
++systems), or based on memory allocations.
+
** CL-style generalized variables are now in core Elisp.
-`setf' is autoloaded and `push' and `pop' accept generalized variables.
+`setf' is autoloaded; `push' and `pop' accept generalized variables.
** `defun' also accepts a (declare DECLS) form, like `defmacro'.
The interpretation of the DECLS is determined by `defun-declarations-alist'.
++2012-09-26 Tomohiro Matsuyama <tomo@cx4a.org>
++ Stefan Monnier <monnier@iro.umontreal.ca>
++
++ * profiler.el: New file.
++
2012-09-26 Stefan Monnier <monnier@iro.umontreal.ca>
- * profiler.el (profiler-start): Don't prompt for choice when there
- isn't any.
- (profiler-stop): Use new semantics of profiler-*-stop.
- (profiler-reset, profiler--report-cpu): Don't signal an error if the
- cpu profiler is not available.
-
-2012-09-24 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * profiler.el (profiler-sample-interval): Move before first use.
- Change default to 1ms.
- (profiler-entry=, profiler-backtrace-reverse, profiler-log-fixup-slot)
- (profiler-calltree-elapsed<, profiler-calltree-elapsed>): Remove functions.
- (profiler-entry-format): Don't use type-of.
- (profiler-slot, profiler-log): Remove structs.
- (profiler-log-timestamp, profiler-log-type, profiler-log-diff-p):
- Redefine for new log representation.
- (profiler-log-diff, profiler-log-fixup, profiler-calltree-build-1):
- Rewrite for new log representation.
- (profiler-calltree): Remove `elapsed' fields.
- (profiler-calltree-count<, profiler-report-make-entry-part):
- Remove gc special case.
- (profiler-calltree-find): Use equal.
- (profiler-calltree-walk): Remove `args'; rely on closures instead.
- (profiler-calltree-compute-percentages-1): Remove; inlined.
- (profiler-calltree-compute-percentages): Simplify.
- (profiler-report-log, profiler-report-reversed)
- (profiler-report-order): Use defvar-local.
- (profiler-report-line-format): Remove `elapsed', do a bit of CSE.
- (profiler-report-mode-map): Remove up/down bindings.
- (profiler-report-make-buffer-name): Simplify by CSE.
- (profiler-report-mode): Remove redundant code.
- (profiler-report-expand-entry, profiler-report-collapse-entry):
- Use inhibit-read-only.
- (profiler-report-render-calltree-1): Simplify by CSE.
- (profiler-reset): Rewrite for new subroutines.
- (profiler--report-cpu): Rename from sample-profiler-report.
- (profiler--report-memory): Rename from memory-profiler-report.
-
-2012-08-22 Tomohiro Matsuyama <tomo@cx4a.org>
-
- * profiler.el: Switch to cl-lib.
- (profiler-start): Change mode spec.
- (with-sample-profiling): New macro.
- (with-memory-profiling): New macro.
+ * emacs-lisp/testcover.el (testcover-after): Add gv-expander.
+ (testcover-reinstrument): Simplify with CSE.
+
+2012-09-26 Juanma Barranquero <lekktu@gmail.com>
+
+ * window.el (temp-buffer-window-setup): Fix typo in docstring.
+
+2012-09-25 Wilson Snyder <wsnyder@wsnyder.org>
+
+ * verilog-mode.el (verilog-auto-ascii-enum, verilog-auto-inout)
+ (verilog-auto-input, verilog-auto-insert-lisp)
+ (verilog-auto-output, verilog-auto-output-every, verilog-auto-reg)
+ (verilog-auto-reg-input, verilog-auto-tieoff, verilog-auto-undef)
+ (verilog-auto-unused, verilog-auto-wire)
+ (verilog-forward-or-insert-line): Fix AUTOs with no trailing
+ newline. Reported by Andrew Jones.
+ (verilog-auto-inst) Support expanding $clog2 in AUTOINST.
+ Reported by Brad Dobbie.
+ (verilog-batch-delete-trailing-whitespace):
+ Create verilog-batch-delete-trailing-whitespace.
+ Reported by Brad Dobbie.
+ (verilog-auto-inout-param): Support AUTOINOUTPARAM for copying
+ parameters from another module. Reported by Dan Katz.
+ (verilog-auto, verilog-auto-assign-modport)
+ (verilog-auto-inout-modport): Add AUTOASSIGNMODPORT and
+ AUTOINOUTMODPORT for UVM interface module shell generation.
+ Reported by Brad Dobbie.
+ (verilog-auto-inst-interfaced-ports): Make default nil, as more
+ standard behavior.
+ (verilog-auto): Fix AUTO parameters with parenthesis arguments.
+ Reported by Matt Martin.
+
+2012-09-25 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (window--resize-child-windows): When resizing child
+ windows proportionally, process them in reverse order to
+ preserve the "when splitting a window the new one gets the odd
+ line" behavior.
+ (window--resize-root-window-vertically): When resizing the
+ minibuffer window try to affect only windows at the bottom of the
+ frame. (Bug#12419)
+
+2012-09-25 Chong Yidong <cyd@gnu.org>
+
+ * subr.el (declare): Doc fix.
+
+ * help-fns.el (help-fns--obsolete): Handle macros properly.
+
+2012-09-25 Chong Yidong <cyd@gnu.org>
+
+ * bookmark.el (bookmark-jump-noselect): Use a declare form to mark
+ this function obsolete.
+
+ * calendar/cal-x.el (calendar-two-frame-setup)
+ (calendar-only-one-frame-setup, calendar-one-frame-setup):
+ * calendar/calendar.el (american-calendar, european-calendar)
+ (calendar-for-loop):
+ * comint.el (comint-dynamic-simple-complete)
+ (comint-dynamic-complete-as-filename, comint-unquote-filename):
+ * desktop.el (desktop-load-default):
+ * dired-x.el (dired-omit-here-always)
+ (dired-hack-local-variables, dired-default-directory):
+ * emacs-lisp/derived.el (derived-mode-class):
+ * emacs-lisp/timer.el (timer-set-time-with-usecs):
+ * emacs-lock.el (toggle-emacs-lock):
+ * epa.el (epa-display-verify-result):
+ * epg.el (epg-sign-keys, epg-start-sign-keys)
+ (epg-passphrase-callback-function):
+ * eshell/esh-util.el (eshell-for):
+ * eshell/eshell.el (eshell-remove-from-window-buffer-names)
+ (eshell-add-to-window-buffer-names):
+ * files.el (locate-file-completion):
+ * imenu.el (imenu-example--create-c-index)
+ (imenu-example--create-lisp-index)
+ (imenu-example--lisp-extract-index-name)
+ (imenu-example--name-and-position):
+ * international/mule-cmds.el (princ-list):
+ * international/mule-diag.el (decode-codepage-char):
+ * international/mule-util.el (detect-coding-with-priority):
+ * iswitchb.el (iswitchb-read-buffer):
+ * mail/mailalias.el (mail-complete):
+ * mail/sendmail.el (mail-sent-via):
+ * mouse.el (mouse-popup-menubar-stuff, mouse-popup-menubar)
+ (mouse-major-mode-menu):
+ * password-cache.el (password-read-and-add):
+ * pcomplete.el (pcomplete-parse-comint-arguments):
+ * progmodes/sh-script.el (sh-maybe-here-document):
+ * replace.el (query-replace-regexp-eval):
+ * savehist.el (savehist-load):
+ * simple.el (choose-completion-delete-max-match):
+ * term.el (term-dynamic-simple-complete):
+ * vc/ediff-init.el (ediff-check-version):
+ * vc/ediff-wind.el (ediff-choose-window-setup-function-automatically):
+ * vc/vc.el (vc-diff-switches-list):
+ * view.el (view-return-to-alist-update): Likewise.
+
+ * subr.el (eval-next-after-load, makehash, insert-string)
+ (assoc-ignore-representation, assoc-ignore-case): Use declare to
+ mark obsolete.
+ (mode-line-inverse-video): Variable deleted.
+
+ * international/mule-util.el (string-to-sequence): Remove.
+
+ * calendar/calendar.el (calendar-version):
+ * calendar/icalendar.el (icalendar-extract-ical-from-buffer)
+ (icalendar-convert-diary-to-ical):
+ * cus-edit.el (custom-mode):
+ * ansi-color.el (ansi-color-unfontify-region):
+ * international/latin1-disp.el (latin1-char-displayable-p):
+ * progmodes/cwarn.el (turn-on-cwarn-mode):
+ * progmodes/which-func.el (which-func-update-1):
+ Use define-obsolete-function-alias.
+
+ * net/newst-backend.el (newsticker-cache-filename):
+ * net/newst-treeview.el (newsticker-groups-filename):
+ Fix incorrect obsolescence declaration.
+
+ * allout.el (allout-passphrase-hint-string): Likewise.
+ (allout-init): Use a declare form to mark obsolete.
+
+ * emacs-lisp/byte-run.el (make-obsolete): Doc fix; emphasize that
+ this applies to functions.
+
+ * iswitchb.el (iswitchb-read-buffer): Move code of
+ iswitchb-define-mode-map here, and delete that obsolete function.
+
+ * net/snmp-mode.el (snmp-font-lock-keywords-3): Don't use obsolete
+ font-lock-reference-face.
+
+2012-09-25 Glenn Morris <rgm@gnu.org>
+
+ * buff-menu.el (Buffer-menu-name-width, Buffer-menu-size-width):
+ Doc fixes.
+
+ * eshell/em-term.el (eshell-term-name):
+ Default to term-term-name. (Bug#12485)
+
+2012-09-24 Fabián Ezequiel Gallina <fgallina@cuca>
+
+ * progmodes/python.el (python-shell-send-buffer): Better handling
+ of "if __name__ == '__main__':" conditionals when sending the buffer.
+
+2012-09-24 Glenn Morris <rgm@gnu.org>
+
+ * eshell/esh-cmd.el (eshell-find-alias-function):
+ Tighten up file-name regexp. (Bug#12499)
+
+2012-09-24 Fabián Ezequiel Gallina <fgallina@cuca>
+
+ Enhancements for triple-quote string syntax.
+ * progmodes/python.el (python-quote-syntax): Remove.
+ (python-syntax-propertize-function): New value.
+ (python-syntax-count-quotes, python-syntax-stringify):
+ New functions.
+
+2012-09-24 Chong Yidong <cyd@gnu.org>
+
+ * mail/supercite.el (sc-version): Remove obsolete function.
+ (sc-describe): Don't mark as obsolete, since it is bound.
+ (sc-submit-bug-report): Remove.
+
+ * vc/log-edit.el (cvs-changelog-full-paragraphs)
+ (cvs-commit-buffer-require-final-newline): Remove.
+ (log-edit-require-final-newline)
+ (log-edit-changelog-full-paragraphs): Default to t.
+
+ * vc/pcvs-defs.el (cvs-diff-buffer-name, cvs-diff-ignore-marks)
+ * vc/vc-hooks.el (vc-ignore-vc-files, vc-master-templates)
+ * vc/vc.el (vc-checkout-carefully): Likewise.
+
+ * vc/emerge.el (emerge-mode): Make it an obsolete alias.
+ (emerge-version): Remove.
+
+ * progmodes/compile.el (compile-internal): Remove.
+ (compilation-parse-errors-function): Fix typo.
+
+ * international/mule.el (set-char-table-default): Remove.
+ (set-coding-priority, make-coding-system, generic-char-p)
+ (charset-list, charset-bytes, charset-id): Use declare to mark
+ functions as obsolete.
+
+ * vc/pcvs-defs.el (cvs-buffer-name-alist)
+ (cvs-invert-ignore-marks): Remove references to obsolete vars.
+ * vc/vc-hooks.el (vc-default-registered): Don't use
+ vc-master-templates.
+
+ * font-lock.el (font-lock-reference-face):
+ Use define-obsolete-variable-alias.
+
+ * generic-x.el (rul-generic-mode): Use font-lock-constant-face.
+ * calendar/calendar.el (calendar-font-lock-keywords):
+ * calendar/diary-lib.el (diary-font-lock-keywords)
+ (diary-fancy-font-lock-keywords):
+ * textmodes/reftex-sel.el (reftex-insert-docstruct):
+ * textmodes/reftex-index.el (reftex-insert-index):
+ * textmodes/reftex-cite.el (reftex-format-bib-entry):
+ * progmodes/ruby-mode.el (ruby-font-lock-keywords):
+ * progmodes/ps-mode.el (ps-mode-font-lock-keywords-1):
+ * progmodes/prolog.el (prolog-font-lock-keywords):
+ * progmodes/idlwave.el (idlwave-idl-keywords):
+ * progmodes/ada-mode.el (ada-font-lock-keywords):
+ * net/snmp-mode.el (snmp-font-lock-keywords-3): Likewise.
+
+2012-09-24 Glenn Morris <rgm@gnu.org>
+
+ * mail/emacsbug.el (report-emacs-bug): Include `lsb_release -d'.
+
+2012-09-23 Fabián Ezequiel Gallina <fgallina@cuca>
+
+ * progmodes/python.el (python-indent-line): More consistent cursor
+ movement behavior.
+
+2012-09-23 Stefan Merten <smerten@oekonux.de>
+
+ * textmodes/rst.el: Fix compiler warning.
+
+2012-09-23 Roland Winkler <winkler@gnu.org>
+
+ * textmodes/bibtex.el (bibtex-autokey-transcriptions):
+ Transcribe also LaTeX hyphenation.
+ (bibtex-reformat): Bug fix. Do not quote twice the elements of
+ bibtex-reformat-previous-options.
+
+2012-09-23 Roland Winkler <winkler@gnu.org>
+
+ * proced.el (proced-renice-command): New variable.
+ (proced-marked-processes): New function.
+ (proced-with-processes-buffer): New macro.
+ (proced-send-signal): Use them.
+ (proced-renice): New command bound to r.
+
+2012-09-23 Roland Winkler <winkler@gnu.org>
+
+ * ibuf-ext.el (ibuffer-switch-to-saved-filter-groups): If list
+ ibuffer-saved-filter-groups has one element, shortcut the call of
+ completing-read. (Bug#12331)
+
+2012-09-23 Chong Yidong <cyd@gnu.org>
+
+ * bindings.el (mode-line-toggle-read-only):
+ * bs.el (bs-toggle-readonly):
+ * buff-menu.el (Buffer-menu-toggle-read-only):
+ * dired.el (dired-toggle-read-only):
+ * ibuffer.el (ibuffer-do-toggle-read-only): Use read-only-mode.
+
+2012-09-23 Chong Yidong <cyd@gnu.org>
+
+ * image.el (image-type-available-p): Adapt to init-image-library
+ argument changes.
+
+2012-09-22 Juri Linkov <juri@jurta.org>
+
+ * dired.el (dired-mode-map): Add [remap read-only-mode] for
+ `dired-toggle-read-only'. (Bug#12462)
+
+2012-09-22 Martin Rudalics <rudalics@gmx.at>
+
+ * subr.el (temp-output-buffer-show): New function.
+ (with-output-to-temp-buffer): Call temp-output-buffer-show
+ instead of internal-temp-output-buffer-show.
+
+2012-09-22 Chong Yidong <cyd@gnu.org>
+
+ * files.el (ctl-x-map): Bind C-x C-q to read-only-mode
+ (Bug#12462).
+
+ * repeat.el (repeat): Doc fix (Bug#12348).
+
+ * emacs-lisp/easy-mmode.el (define-minor-mode): Doc fix
+ (Bug#10909).
+
+ * simple.el (shell-command-on-region): Doc fix.
+ (read-only-mode): Doc fix.
+
+2012-09-22 Eli Zaretskii <eliz@gnu.org>
+
+ * emacs-lisp/timer.el (run-with-idle-timer)
+ (timer-activate-when-idle): Warn against reinvoking an idle timer
+ from within its own timer action. (Bug#12447)
+
+2012-09-22 Martin Rudalics <rudalics@gmx.at>
+
+ * cus-start.el (window-combination-limit): Add new optional
+ values.
+ * window.el (temp-buffer-window-show)
+ (window--try-to-split-window): Handle new values of
+ window-combination-limit (Bug#1806).
+ (split-window): Test window-combination-limit for t instead of
+ non-nil.
+ (display-buffer-at-bottom): New buffer display action function.
+ * help.el (temp-buffer-resize-regexps): New option.
+ (temp-buffer-resize-mode): Rewrite doc-string.
+ (resize-temp-buffer-window): Obey temp-buffer-resize-regexps.
+ Don't resize reused window. Suggested by Glenn Morris.
+
+2012-09-22 Stefan Merten <smerten@oekonux.de>
+
+ * textmodes/rst.el: Revamp section title faces.
+ (rst-official-version)
+ (rst-package-emacs-version-alist): Sync with official version
+ V1.4.0.
+ (rst-faces-defaults, rst-set-level-default)
+ (rst-level-face-max, rst-level-face-base-color)
+ (rst-level-face-base-light, rst-level-face-format-light)
+ (rst-level-face-step-light, rst-define-level-faces): Obsolete.
+ (rst-adornment-faces-alist): Match new setup.
+ (rst-level-1, rst-level-2, rst-level-3, rst-level-4)
+ (rst-level-5, rst-level-6): New faces.
+
+2012-09-22 Chong Yidong <cyd@gnu.org>
+
+ * simple.el (undo): Handle indirect buffers (Bug#8207).
+
+2012-09-21 Leo Liu <sdl.web@gmail.com>
+
+ IDO: Disable match re-ordering for buffer switching.
+ * ido.el (ido-buffer-disable-smart-matches): New variable.
+ (ido-set-matches-1): Use it. (Bug#2042)
+
+2012-09-21 Jose Marino <marinoj@nso.edu> (tiny change)
+
+ * progmodes/idlw-shell.el (idlwave-shell-complete-filename):
+ Fix 2011-05-17 change. (Bug#12418)
+
+2012-09-21 Leo Liu <sdl.web@gmail.com>
+
+ * subr.el (ignore-errors): Mention with-demoted-errors in doc-string.
+
+2012-09-21 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/shadow.el (load-path-shadows-font-lock-keywords):
+ Be more robust about locating simple.el.
+
+2012-09-21 Glenn Morris <rgm@gnu.org>
+
+ * mail/emacsbug.el (report-emacs-bug): Trap load-path-shadows errors.
+
+2012-09-21 Joel Bion <jpbion@westvi.com> (tiny change)
+
+ * pcmpl-gnu.el (pcmpl-gnu-tarfile-regexp): Add tar.xz. (Bug#12382)
+
+2012-09-20 Juri Linkov <juri@jurta.org>
+
+ * replace.el (query-replace-read-from): Use `read-regexp' instead
+ of `read-from-minibuffer' when `regexp-flag' is non-nil.
+ (occur-read-primary-args): Use `read-regexp' instead of
+ `read-string'.
+ (multi-occur-in-matching-buffers): Use `read-regexp' instead of
+ `read-from-minibuffer'.
+ * isearch.el (isearch-occur): Use `read-regexp' instead of
+ `read-string'.
+ * dired.el (dired-read-regexp): Use `read-regexp' instead of
+ `read-from-minibuffer'.
+ * progmodes/grep.el (grep-read-regexp): Use `read-regexp' instead
+ of `read-string'. (Bug#7567)
+
+ * replace.el (read-regexp): Rename DEFAULT-VALUE arg to DEFAULTS
+ and allow accepting a list of strings prepended to a list of
+ standard default values. Doc fix. (Bug#12321)
+
+ * replace.el (read-regexp): Add HISTORY arg. (Bug#7567)
+
+ * replace.el (read-regexp): Don't add ": " when PROMPT already
+ ends with a colon and space. (Bug#12321)
+
+2012-09-20 Tassilo Horn <tsdh@gnu.org>
+
+ * doc-view.el (doc-view-display): Better fix for the cl-assertion
+ error.
+
+2012-09-20 Stefan Merten <smerten@oekonux.de>
+
+ * textmodes/rst.el: Integrate support for `imenu' and `which-function'.
+ Fixes feature request bug#11711.
+ (rst-mode): Create `imenu-create-index-function'.
+ (rst-get-stripped-line): Delete after refactoring.
+ (rst-section-tree, rst-section-tree-rec)
+ (rst-section-tree-point): Refactor and document properly.
+ (rst-imenu-find-adornments-for-position)
+ (rst-imenu-convert-cell, rst-imenu-create-index):
+ New function.
+
+2012-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/macroexp.el (macroexp--obsolete-warning): New function.
+ (macroexp--expand-all): Use it.
+ (macroexp--funcall-and-return): Remove by folding it into its sole
+ caller (macroexp--warn-and-return).
+ * emacs-lisp/bytecomp.el (byte-compile-warn-obsolete):
+ Use macroexp--obsolete-warning.
+
+ * calc/calc.el: Fix last change by removing the whole chunk, since it
+ was only needed back when Calc was not bundled.
+
+2012-09-20 Martin Rudalics <rudalics@gmx.at>
+
+ * emacs-lisp/debug.el (debug): Restore assignment to
+ debugger-old-buffer removed on 2012-09-08.
+
+2012-09-20 Juri Linkov <juri@jurta.org>
+
+ * dired-aux.el (dired-diff): Remove (require 'diff) since
+ `diff-latest-backup-file' is now autoloaded.
+
+2012-09-20 Chong Yidong <cyd@gnu.org>
+
+ * vc/diff.el (diff-latest-backup-file): Autoload.
+
+2012-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * calc/calc.el: Remove redundant autoload shape check.
+ (sel-mode): Don't defvar.
+ (calc-get-stack-element): Add `sel-mode' arg instead.
+ (calc-top, calc-top-list): Pass it this additional argument.
+ * calc/calc-store.el (calc-store-map):
+ * calc/calc-map.el (calc-apply, calc-reduce, calc-map)
+ (calc-map-equation, calc-outer-product, calc-inner-product):
+ * calc/calc-aent.el (calc-alg-entry): Don't bind sel-mode.
+
+ * emacs-lisp/macroexp.el (macroexp--expand-all): Fix last change.
+
+2012-09-19 Juri Linkov <juri@jurta.org>
+
+ * dired-aux.el (dired-diff): Add (require 'diff) because
+ `diff-latest-backup-file' is not autoloaded.
+ (dired-do-chxxx, dired-do-chmod): Set `no-error-if-not-filep' arg
+ of `dired-get-filename' to t to not report error when there is
+ no default file on the current line.
+
+2012-09-19 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/macroexp.el (macroexp--funcall-if-compiled): Rename from
+ macroexp--eval-if-compile.
+ (macroexp--funcall-and-return, macroexp--warn-and-return): New funs.
+ (macroexp--expand-all): Use them (bug#12371).
+
+ * doc-view.el (doc-view-guess-paper-size)
+ (doc-view-scale-bounding-box): Fix unbound `caddr'.
+
+2012-09-19 Tassilo Horn <tsdh@gnu.org>
+
+ New feature: set optimal slice from BoundingBox information.
+ * doc-view.el (doc-view-mode-map): Add keybinding.
+ (doc-view-menu): Add menu entry.
+ (doc-view-set-slice): Adapt docstring.
+ (doc-view-get-bounding-box, doc-view-guess-paper-size)
+ (doc-view-scale-bounding-box)
+ (doc-view-set-slice-from-bounding-box): New functions.
+ (doc-view-paper-sizes): New defvar.
+
+2012-09-19 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/macroexp.el (byte-compile-warn-obsolete)
+ (byte-compile-log-warning): Autoload. (Bug#12371)
+
+ * calendar/calendar.el (calendar-american-month-header)
+ (calendar-european-month-header, calendar-iso-month-header)
+ (calendar-month-header): New options.
+ (calendar-set-date-style): Set calendar-month-header. Redraw calendar.
+ (calendar-generate-month): Use calendar-month-header. (Bug#9510)
+
+2012-09-19 Jan Djärv <jan.h.d@swipnet.se>
+
+ * startup.el (command-line-ns-option-alist): Add -g and --geometry.
+
+2012-09-18 Juri Linkov <juri@jurta.org>
+
+ * dired-aux.el (dired-diff): Restore original functionality of
+ getting the default value, but keep new feature of using the
+ latest existing backup file (`diff-latest-backup-file').
+
+2012-09-18 Juri Linkov <juri@jurta.org>
+
+ * dired.el (dired-mark): If the region is active in Transient Mark
+ mode, mark all files in the active region. Doc fix.
+ (dired-unmark, dired-flag-file-deletion, dired-unmark-backward):
+ Doc fix. (Bug#10624)
+
+2012-09-18 Juri Linkov <juri@jurta.org>
+
+ * dired-aux.el (dired-do-chxxx, dired-do-chmod): Default file
+ attributes for M-n are pulled from the file at point.
+ (dired-do-chgrp, dired-do-chown, dired-do-touch): Doc fix.
+ Suggested by Drew Adams. (Bug#10624)
+
+2012-09-18 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (ruby-brace-to-do-end): Don't add extra
+ whitespace after "end".
+ (ruby-do-end-to-brace): Collapse block to one line if it fits
+ within fill-column.
+
+2012-09-18 Martin Rudalics <rudalics@gmx.at>
+
+ * emacs-lisp/debug.el (debugger-bury-or-kill): Fix customization
+ value.
+ (debug): Don't remove debugger window when debugger is expected
+ to be back.
+
+2012-09-18 Chong Yidong <cyd@gnu.org>
+
+ * custom.el (defface): Doc fix.
+
+ * cus-edit.el (custom-unlispify-remove-prefixes): Add warning.
+
+2012-09-18 Martin Blais <blais@furius.ca> (tiny change)
+
+ * progmodes/compile.el (compilation-start): Use compilation-always-kill
+ to initialize query-on-exit; then test that instead (bug#12288).
+
+2012-09-17 Stefan Merten <smerten@oekonux.de>
+
+ * textmodes/rst.el: Add support for `testcover'.
+ (rst-defcustom-testcover, rst-testcover-add-compose)
+ (rst-testcover-add-1value): New functions.
+ (rst-portable-mark-active-p): Replace by `use-region-p'.
+ (rst-update-section, rst-classify-adornment)
+ (rst-find-title-line): Mark `1value' forms.
+ (rst-classify-adornment): Remove superfluous form.
+ (rst-update-section, rst-get-adornments-around)
+ (rst-adornment-complete-p, rst-get-next-adornment)
+ (rst-adjust, rst-promote-region)
+ (rst-display-adornments-hierarchy, rst-straighten-adornments)
+ (rst-find-pfx-in-region, rst-section-tree-rec)
+ (rst-section-tree-point, rst-toc-insert, rst-toc-insert-node)
+ (rst-toc-node, rst-toc, rst-forward-section)
+ (rst-iterate-leftmost-paragraphs)
+ (rst-iterate-leftmost-paragraphs-2, rst-enumerate-region)
+ (rst-bullet-list-region)
+ (rst-convert-bullets-to-enumeration, rst-font-lock-keywords)
+ (rst-compile-find-conf, rst-compile)
+ (rst-repeat-last-character): Fix style.
+
+2012-09-17 Chong Yidong <cyd@gnu.org>
+
+ * comint.el (comint--complete-file-name-data): Don't add a space
+ if the status is `sole'; that adds a gratuitous space in the
+ completion-cycling case (Bug#12092).
+
+ * pcomplete.el (pcomplete-completions-at-point): Likewise.
+
+2012-09-17 Richard Stallman <rms@gnu.org>
+
+ * mail/rmailmm.el (rmail-mime-toggle-raw): Do rmail-mime-insert
+ only in the mime-shown mode, not in raw mode.
+ (rmail-mime): Toggle off mime by displaying the message without
+ mime processing. (Bug#12305)
+
+ * mail/rmail.el (rmail-retry-failure):
+ Turn off mime processing first. (Bug#12037)
+
+ * epa-mail.el (epa-mail-encrypt): Fix bug when a name has no key.
+
+2012-09-17 Chong Yidong <cyd@gnu.org>
+
+ * shell.el (shell-file-name-chars, shell-file-name-quote-list)
+ (shell-dynamic-complete-functions): Convert to defcustom.
+ (shell-prompt-pattern, shell-completion-fignore): Doc fix.
+
+ * bookmark.el (bookmark-bmenu-toggle-filenames): Doc fixes.
+ * comint.el (comint-prompt-read-only):
+ * custom.el (defcustom):
+ * hi-lock.el (hi-lock-mode):
+ * ibuffer.el (ibuffer-formats):
+ * ielm.el (ielm-prompt-read-only):
+ * novice.el (disable-command):
+ * saveplace.el (toggle-save-place):
+ * speedbar.el (speedbar-supported-extension-expressions):
+ * startup.el (auto-save-list-file-prefix, init-file-user)
+ (after-init-hook, inhibit-startup-echo-area-message):
+ * strokes.el (strokes-help):
+ * time-stamp.el (time-stamp):
+ * calendar/calendar.el (calendar, diary-file):
+ * calendar/diary-lib.el (diary-mail-entries, diary)
+ (diary-list-entries-hook):
+ * calendar/holidays.el (holidays, calendar-holidays):
+ * calendar/lunar.el (lunar-phases):
+ * calendar/solar.el (sunrise-sunset):
+ * emulation/edt.el (edt-load-keys):
+ * emulation/viper.el (viper-mode):
+ * eshell/em-alias.el (eshell-command-aliases-list):
+ * eshell/esh-util.el (eshell-convert-numeric-arguments):
+ * international/ogonek.el (ogonek-information):
+ * net/tramp-cmds.el (tramp-bug):
+ * net/quickurl.el (quickurl-reread-hook-postfix):
+ * play/decipher.el (decipher-font-lock-keywords):
+ * progmodes/cc-styles.el (c-set-style):
+ * progmodes/idlw-shell.el (idlwave-shell-prompt-pattern):
+ * progmodes/inf-lisp.el (inferior-lisp-prompt):
+ * progmodes/octave-mod.el (octave-mode):
+ * progmodes/sql.el (sql-mode, sql-interactive-mode, sql-password):
+ * progmodes/verilog-mode.el (verilog-read-defines):
+ * textmodes/two-column.el (2C-mode): Likewise.
+
+2012-09-16 Katsumi Yamaoka <yamaoka@jpl.org>
+
+ * mail/mailabbrev.el (mail-abbrev-expand-hook): Work for a mail aliasee
+ that holds many addresses.
+
+2012-09-16 Chong Yidong <cyd@gnu.org>
+
+ * align.el (align-areas): Call the indication function with
+ positions instead of markers for arguments (Bug#12343).
+
+ * files.el (parse-colon-path): Use split-string (Bug#12351).
+
+ * window.el (special-display-popup-frame): Doc fix (Bug#8853).
+ (display-buffer-function): Mark as obsolete.
+
+ * progmodes/compile.el (compilation-parse-errors): Accept list
+ values similar to font-lock-keywords (Bug#12136).
+ Suggested by Oleksandr Manzyuk.
+ (compilation-error-regexp-alist): Doc fix.
+
+2012-09-15 Glenn Morris <rgm@gnu.org>
+
+ * version.el (emacs-bzr-version-bzr): New function.
+ (emacs-bzr-get-version): Add optional EXTERNAL argument.
+
+ * vc/vc-bzr.el (vc-bzr-working-revision): For lightweight local
+ checkouts, check the parent dirstate matches the branch.
+ Add "--tree" to "bzr revno" arguments. Don't try to shorten the
+ empty string.
+
+ * version.el (emacs-bzr-version): Doc fix.
+ (emacs-bzr-version-dirstate): New function.
+ (emacs-bzr-get-version): For lightweight checkouts, if the parent
+ is local try and check that it matches the branch. If not, just
+ use dirstate information. (Bug#12441)
+
+2012-09-14 Juri Linkov <juri@jurta.org>
+
+ * dired-aux.el (dired-do-chmod): Use `eq' to detect empty input.
+ (Bug#12399)
+
+2012-09-14 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/advice.el (ad-prognify): Remove, use macroexp-progn.
+
+ * emacs-lisp/edebug.el: Miscellaneous cleanup.
+ Remove obsolete byte-compiler hack that tried to silence some warnings.
+ (edebug-submit-bug-report): Remove.
+ (edebug-get-buffer-window, edebug-sit-for, edebug-input-pending-p):
+ Remove aliases, use the un-prefixed name instead.
+ (edebug-pop-to-buffer): Consider other frames.
+ (edebug-original-read):: Make it more obvious that it's always defined.
+ (edebug--make-form-data-entry, edebug--form-data-name)
+ (edebug--form-data-begin, edebug--form-data-end): Rename from the
+ single-dashed name, and implement with cl-defstruct.
+ (edebug-set-form-data-entry): Use the standard accessors.
+ (edebug-make-top-form-data-entry): Use push.
+ (edebug-no-match): Drop useless `funcall'.
+ (mapcar, mapconcat, mapatoms, apply, funcall): Don't add debug specs
+ to functions.
+ (defsubst, dont-compile, eval-when-compile, eval-and-compile)
+ (delay-mode-hooks, with-temp-file, with-temp-message, ad-dolist)
+ (with-syntax-table, push, pop, 1value, noreturn, defadvice)
+ (easy-menu-define, with-custom-print): Remove redundant specs.
+ (edebug-outside-overriding-local-map)
+ (edebug-outside-overriding-terminal-local-map): Remove, unused.
+ (edebug--display): Bind unread-command-events directly to nil rather
+ than binding it to unread-command-events and later setting it to nil.
+ (edebug--display): Kill edebug-eval-buffer here...
+ (edebug--recursive-edit): ...rather than here.
+ Bind standard-output and standard-input.
+ (edebug-eval): Check cl-macroexpand-all is fboundp.
+ (edebug-temp-display-freq-count): Fix last change.
+
+ * emacs-lisp/easymenu.el (easy-menu-define): Add `debug' spec.
+ * subr.el (noreturn, 1value): Add `debug' spec.
+ * emacs-lisp/advice.el: Require cl-lib.
+ (ad-copy-tree): Remove, use copy-tree instead.
+ (ad-dolist): Remove use dolist or cl-dolist instead.
+ (ad-do-return): Remove, use cl-return instead.
+ (defadvice): Add `debug' spec.
+
+2012-09-13 Juri Linkov <juri@jurta.org>
+
+ * dired-aux.el (dired-do-chxxx): Use `eq' to detect empty input.
+ (Bug#12399)
+
+2012-09-13 Glenn Morris <rgm@gnu.org>
+
+ * calc/calc.el (math-compose-expr):
+ * calc/calc-ext.el (math-compose-expr):
+ * progmodes/cc-defs.el (cl-macroexpand-all):
+ * progmodes/cc-langs.el (delete-duplicates, mapcan)
+ (cl-macroexpand-all): Update declarations.
+
+ * vc/vc.el: No need to require ediff.
+ (ediff-load-version-control): Declare.
+ (ediff-vc-internal): Fix declaration.
+ (vc-version-ediff): Require ediff.
+
+2012-09-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ Use a more backwards-compatible timer format (Bug#12430).
+ * emacs-lisp/timer.el (timer): PSECS is now at the end, rather than
+ being right after USECS, as that better supports old code that
+ inadvisedly looked directly at the timer vector.
+
+2012-09-13 Kenichi Handa <handa@gnu.org>
+
+ * language/chinese.el ("Chinese-GB", "Chinese-BIG5")
+ ("Chinese-CNS", "Chinese-EUC-TW"): Add chinese-gbk to
+ `coding-priority' property of these language environment.
+
+2012-09-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix glitches caused by addition of psec to timers (Bug#12430).
+ * image.el (image-animate-timer):
+ * time.el (display-time-world-timer):
+ Use timer--function and timer--args rather than raw access to
+ timer vector.
+
+2012-09-13 Glenn Morris <rgm@gnu.org>
+
+ * emacs-lisp/bytecomp.el (byte-compile-warning-prefix):
+ If not compiling a file, try using load-file-name.
+
+2012-09-13 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/edebug.el (edebug-outside-unread-command-events):
+ Fix last change.
+ (edebug-update-eval-list): Use `push'.
+
+ * emacs-lisp/edebug.el: Use lexical-binding.
+ Remove the "edebug-" prefix from non-dynamically-scoped variables.
+ Mark unused args with underscore.
+ (edebug-save-restriction, edebug-outside-excursion): Use `declare'.
+ (edebug-form-data): Use defvar-local.
+ (edebug-make-before-and-after-form, edebug-make-after-form):
+ Use backquote.
+ (edebug-args, edebug-value, edebug-after-index, edebug-arg-mode):
+ Not dynamically scoped any more.
+ (edebug--enter-trace): Add arguments `function' and `args'.
+ Rename from edebug-enter-trace.
+ (edebug-enter): Call it accordingly. Bind edebug-function explicitly.
+ (edebug--update-coverage): Add `after-index' and `value' args.
+ Rename from edebug-update-coverage.
+ (edebug-slow-after): Call it accordingly.
+ (edebug--recursive-edit): Add arg `arg-mode'. Rename from
+ edebug-recursive-edit.
+ (edebug--display): Call it accordingly. Add args `value',
+ `offset-index', and `arg-mode'. Rename from edebug-display.
+ (edebug-debugger, edebug): Call it accordingly.
+ (edebug-eval-display-list): Use dolist.
+
+2012-09-12 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-search): Don't check for isearch-mode and
+ isearch-regexp before let-binding search-spaces-regexp to
+ Info-search-whitespace-regexp.
+ (Info-isearch-search): Let-bind Info-search-whitespace-regexp to
+ search-whitespace-regexp if isearch-lax-whitespace or
+ isearch-regexp-lax-whitespace is non-nil.
+ (Info-mode): Don't set local variable search-whitespace-regexp.
+ http://lists.gnu.org/archive/html/emacs-devel/2012-08/msg00811.html
+
+2012-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/debug.el (debugger-outer-unread-command-char, debug)
+ (debugger-env-macro): Remove support for unread-command-char.
+
+ * subr.el (set-temporary-overlay-map): Minimize slightly the impact of
+ the temporary map re-appearing on emulation-mode-map-alists.
+
+ * emacs-lisp/edebug.el (def-edebug-form-spec): Remove, it's been broken
+ since 22.1.
+
+ * 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.
+
+2012-09-12 Michael Albinus <michael.albinus@gmx.de>
+
+ Sync with Tramp 2.2.6.
+
+ * net/tramp.el (tramp-accept-process-output): Don't use
+ JUST-THIS-ONE in the XEmacs case.
+
+ * net/trampver.el: Update release number.
+
+2012-09-12 Martin Rudalics <rudalics@gmx.at>
+
+ * emacs-lisp/debug.el (debugger-previous-window-height):
+ New variable.
+ (debug): When debugger-jumping-flag is non-nil try to restore
+ height of debugger window. (Bug#8789)
+
+2012-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/edebug.el (edebug-enter): Don't mess with
+ overriding-local-map and pre/post-command-hook here.
+ (edebug-recursive-edit): Do it here instead (bug#12345).
+ (edebug-outside-unread-command-char): Remove all uses of
+ unread-command-char.
+
+ * emacs-lisp/debug.el (debug): Don't bind debug-on-error since
+ inhibit-debugger is bound instead.
+
+2012-09-11 Bastien Guerry <bzg@gnu.org>
+
+ * subr.el (set-temporary-overlay-map): Add a docstring.
+ (Bug#12346)
+
+2012-09-11 Bastien Guerry <bzg@gnu.org>
+
+ * minibuffer.el (completion-table-subvert): Fix docstring.
+ (Bug#12347)
+
+2012-09-11 Bastien Guerry <bzg@gnu.org>
+
+ * help-fns.el (describe-variable): Fix typo. (Bug#12346)
+
+2012-09-10 Michael R. Mauger <mmaug@yahoo.com>
+
+ * progmodes/sql.el: Version 3.1
+ (sql-db2-escape-newlines): New variable.
+ (sql-escape-newlines-filter): Use it.
+
+2012-09-10 Juanma Barranquero <lekktu@gmail.com>
+
+ * custom.el (custom-theme-load-confirm): Remove unneeded assignment.
+
+2012-09-10 Dan Nicolaescu <dann@gnu.org>
+
+ * vc/diff-mode.el (diff-mode-menu):
+ Bind diff-remove-trailing-whitespace.
+
+2012-09-10 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/lisp-mode.el (emacs-list-byte-code-comment-re): New var.
+ (emacs-lisp-byte-code-comment, emacs-lisp-byte-code-syntax-propertize)
+ (emacs-lisp-byte-code-mode): New functions.
+ (eval-sexp-add-defvars): Don't skip defvars in column >0.
+ (eval-defun-2): Remove bogus interactive spec.
+ (lisp-indent-line): Remove redundant whole-exp code, now done in
+ indent-according-to-mode.
+ (save-match-data): Remove redundant indent data.
+
+ * emacs-lisp/benchmark.el (benchmark-run, benchmark-run-compiled):
+ Use `declare'.
+
+2012-09-09 Juri Linkov <juri@jurta.org>
+
+ * replace.el (replace-regexp-lax-whitespace): New defcustom.
+ (replace-lax-whitespace, query-replace-regexp)
+ (query-replace-regexp-eval, replace-regexp): Doc fix.
+ (perform-replace, replace-highlight): Let-bind
+ isearch-lax-whitespace to replace-lax-whitespace and
+ isearch-regexp-lax-whitespace to replace-regexp-lax-whitespace.
+
+ * isearch.el (isearch-query-replace): Let-bind
+ replace-lax-whitespace to isearch-lax-whitespace and
+ replace-regexp-lax-whitespace to
+ isearch-regexp-lax-whitespace. (Bug#10885)
+
+2012-09-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * eshell/em-unix.el (eshell/sudo): Explicitly drop return value.
+
+2012-09-09 Alan Mackenzie <acm@muc.de>
+
+ * progmodes/cc-engine.el (c-state-cache-init):
+ Initialise c-state-semi-nonlit-pos-cache\(-limit\)? properly.
+ (c-record-parse-state-state):
+ Record c-state-semi-nonlit-pos-cache\(-limit\)?.
+
+2012-09-09 Andreas Schwab <schwab@linux-m68k.org>
+
+ * register.el (register-separator): Rename from
+ separator-register. All uses changed. Doc fix.
+ (register): Fix version.
+
+2012-09-09 Chong Yidong <cyd@gnu.org>
+
+ * replace.el (query-replace-map): Bind four new symbols for
+ requesting window scrolling.
+
+ * subr.el (y-or-n-p): Handle the window-scrolling bindings in
+ query-replace-map (Bug#8948).
+
+ * custom.el (custom-theme-load-confirm): Use y-or-n-p.
+
+ * emacs-lisp/map-ynp.el (map-y-or-n-p): Don't bind scrolling keys
+ since they are now in query-replace-map.
+
+ * window.el (scroll-other-window-down): Make the arg optional.
+
+2012-09-09 Chong Yidong <cyd@gnu.org>
+
+ * files.el (hack-local-variables-confirm): Use quit-window to kill
+ the *Local Variables* buffer.
+
+2012-09-08 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (ruby-toggle-block): Guess the current block,
+ not just expect to be at its beginning. Adjust callees.
+ Succeed when do-end block has no space before the pipe character.
+ (ruby-brace-to-do-end): When the original block is one-liner,
+ convert to multiline. Reindent the result.
+
+2012-09-08 Jambunathan K <kjambunathan@gmail.com>
+
+ * register.el (register): New group.
+ (register-separator): New user option.
+ (increment-register): Route it to `append-to-register', if
+ register contains text. Implication is that `C-x r +' can now be
+ used for appending to a text register (bug#12217).
+ (append-to-register, prepend-to-register): Add separator based on
+ `register-separator.
+
+2012-09-08 Alan Mackenzie <acm@muc.de>
+
+ AWK Mode: make auto-newline work when there's "==" in the pattern.
+ * progmodes/cc-cmds.el (c-point-syntax): Handle virtual semicolons
+ correctly.
+ * progmodes/cc-engine.el (c-guess-basic-syntax CASE 5A.3):
+ Test more rigorously for "=" token.
+
+2012-09-08 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (ruby-match-expression-expansion):
+ Only fail when reached LIMIT.
+
+2012-09-08 Chong Yidong <cyd@gnu.org>
+
+ * dired.el (dired-mode-map): Don't bind M-=.
+
+ * dired-aux.el (dired-diff): Use backup file as default.
+
+2012-09-08 Drew Adams <drew.adams@oracle.com>
+
+ * subr.el (add-to-history): Fix delete usage (Bug#12314).
+
+2012-09-08 Chong Yidong <cyd@gnu.org>
+
+ * subr.el (syntax-after, syntax-class): Doc fix.
+
+2012-09-08 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (display-buffer-in-previous-window): New buffer
+ display action function.
+
+ * emacs-lisp/debug.el (debugger-bury-or-kill): New option.
+ (debugger-previous-window): New variable.
+ (debug): Rewrite using display-buffer-in-previous-window,
+ quit-restore-window and debugger-bury-or-kill. (Bug#8789)
+
+2012-09-07 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/byte-run.el (defun): Tweak message. Simplify code.
+
+2012-09-07 Matt McClure <mlm@aya.yale.edu> (tiny change)
+
+ * progmodes/python.el (python-shell-send-string):
+ When default-directory is remote, create temp file on remote
+ filesystem.
+ (python-shell-send-file): When file is remote, pass local view of
+ file paths to remote Python interpreter. (Bug#12340)
+
+2012-09-07 Chong Yidong <cyd@gnu.org>
+
+ * window.el (switch-to-buffer): Doc fix (Bug#12181).
+
+ * files.el (after-find-file): Don't fail on a read-only buffer if
+ require-final-newline is `visit' or `visit-save' (Bug#11156).
+
+ * subr.el (read-char-choice): Allow quitting via ESC ESC.
+
+ * userlock.el (ask-user-about-supersession-threat):
+ Use read-char-choice (Bug#12093).
+
+2012-09-07 Chong Yidong <cyd@gnu.org>
+
+ * subr.el (buffer-narrowed-p): New function.
+
+ * ses.el (ses-widen):
+ * simple.el (count-words--buffer-message):
+ * net/browse-url.el (browse-url-of-buffer): Use it
+
+ * simple.el (count-words-region): Don't signal an error if there
+ is a non-nil prefix arg and the mark is not set.
+
+ * help.el (describe-key-briefly): Allow the message to be seen
+ when invoked from the minibuffer (Bug#7014).
+
+2012-09-07 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (ruby-end-of-defun)
+ (ruby-beginning-of-defun): Simplify, allow indentation before
+ block beginning and end keywords.
+ (ruby-beginning-of-defun): Only consider 3 keywords defun beginners.
+ (ruby-end-of-defun): Expect that the point is at the beginning of
+ the defun.
+
+2012-09-06 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/cl-macs.el (cl--do-arglist): Understand _ on &key args
+ (bug#12367).
+ (cl--make-usage-args): Strip _ from argument names.
+
+2012-09-06 Rüdiger Sonderfeld <ruediger@c-plusplus.de>
+
+ * progmodes/vhdl-mode.el (vhdl-speedbar-initialize): Don't use
+ obsolete alias speedbar-key-map.
+ (vhdl-doc-variable, vhdl-doc-mode): Use called-interactively-p.
+ (vhdl-index-menu-init): Don't use obsolete variable
+ font-lock-maximum-size.
+
+2012-09-06 Chong Yidong <cyd@gnu.org>
+
+ * frame.el (window-system-version): Mark as obsolete.
+
+ * speedbar.el (speedbar-update-flag, speedbar-mode): Remove uses
+ of obsolete variable speedbar-key-map.
+
+2012-09-06 Juri Linkov <juri@jurta.org>
+
+ * replace.el (replace-lax-whitespace): New defcustom.
+ (query-replace, query-replace-regexp, query-replace-regexp-eval)
+ (replace-string, replace-regexp): Mention it in docstrings.
+ (perform-replace, replace-highlight): Let-bind
+ isearch-lax-whitespace and isearch-regexp-lax-whitespace according
+ to the values of replace-lax-whitespace and regexp-flag.
+ Don't let-bind search-whitespace-regexp. (Bug#10885)
+
+ * isearch.el (isearch-query-replace): Let-bind
+ replace-lax-whitespace instead of let-binding
+ replace-search-function and replace-re-search-function.
+ (isearch-lazy-highlight-search): Let-bind isearch-lax-whitespace
+ and isearch-regexp-lax-whitespace to lazy-highlight variables.
+ (isearch-toggle-symbol): Set isearch-regexp to nil
+ in isearch-word mode (like in isearch-toggle-word).
+
+2012-09-06 Juri Linkov <juri@jurta.org>
+
+ * replace.el (replace-search-function)
+ (replace-re-search-function): Set default values to nil.
+ (perform-replace): Let-bind isearch-related variables based on
+ replace-related values, call `isearch-search-fun' and let-bind
+ the result to `search-function'. Remove code that sets
+ `search-function' and `search-string' separately for
+ `delimited-flag'.
+ (replace-highlight): Add new argument `delimited-flag' and
+ rename other arguments to the names used in `perform-replace'.
+ Let-bind `isearch-word' to the argument `delimited-flag'.
+ (Bug#10885, bug#10887)
+
+2012-09-07 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el (ruby-indent-beg-re): Add pieces from
+ ruby-beginning-of-indent, simplify, allow all keywords to have
+ indentation before them.
+ (ruby-beginning-of-indent): Adjust for above. Search until the
+ found point is not inside a string or comment.
+ (ruby-font-lock-keywords): Allow symbols to start with "@"
+ character, give them higher priority than variables.
+ (ruby-syntax-propertize-function)
+ (ruby-font-lock-syntactic-keywords): Remove the "not comments"
+ matchers. Expression expansions are not comments when inside a
+ string, and there comment syntax status is irrelevant.
+ (ruby-match-expression-expansion): New function. Check that
+ expression expansion is inside a string, and it's not escaped.
+ (ruby-font-lock-keywords): Use it.
+
+2012-09-05 Martin Rudalics <rudalics@gmx.at>
+
+ * help.el (temp-buffer-max-height): New default value.
+ (temp-buffer-resize-frames): New option.
+ (resize-temp-buffer-window): Optionally resize frame.
+
+ * window.el (fit-frame-to-buffer-bottom-margin): New option.
+ (fit-frame-to-buffer): New function.
+
+2012-09-05 Glenn Morris <rgm@gnu.org>
+
+ * emulation/cua-rect.el (cua--init-rectangles):
+ * textmodes/picture.el (picture-mode-map):
+ * play/blackbox.el (blackbox-mode-map): Remap right-char and left-char
+ like forward-char and backward-char. (Bug#12317)
+
+2012-09-05 Leo Liu <sdl.web@gmail.com>
+
+ * progmodes/flymake.el (flymake-warning-re): New variable.
+ (flymake-parse-line): Use it.
+
+2012-09-05 Glenn Morris <rgm@gnu.org>
+
+ * calendar/holidays.el (holiday-christian-holidays):
+ Rename an entry. (Bug#12289)
+
+2012-09-05 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * progmodes/sh-script.el (sh-font-lock-paren): Don't burp at BOB
+ (bug#12222).
+
+2012-09-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * loadup.el: Load macroexp. Remove hack.
+ * emacs-lisp/macroexp.el (macroexp--eval-if-compile): New function.
+ (macroexp--expand-all): Use it to get better warnings.
+ (macroexp--backtrace, macroexp--trim-backtrace-frame)
+ (internal-macroexpand-for-load): New functions.
+ (macroexp--pending-eager-loads): New var.
+ (emacs-startup-hook): New hack to replace one in loadup.el.
+ * emacs-lisp/cl-macs.el (cl--compiler-macro-list*)
+ (cl--compiler-macro-cXXr): Move to top, before they can be used.
+ (cl-psetf): Simplify.
+ (cl-defstruct): Add indent rule.
+
+2012-09-04 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * mail/smtpmail.el (smtpmail-send-it): Prefer the From: header
+ over `user-mail-address' for the SMTP MAIL FROM envelope.
+ (smtpmail-via-smtp): Ditto.
+
+2012-09-04 Dmitry Gutov <dgutov@yandex.ru>
+
+ * progmodes/ruby-mode.el: Clean up keybindings.
+ (ruby-mode-map): Don't bind ruby-electric-brace,
+ ruby-beginning-of-defun, ruby-end-of-defun, ruby-mark-defun,
+ backward-kill-word, reindent-then-newline-and-indent.
+ (ruby-mark-defun): Remove.
+ (ruby-electric-brace): Remove. Obsoleted by electric-indent-chars.
+ (ruby-mode): Set local beginning-of-defun-function and
+ end-of-defun-function values.
+
+2012-09-03 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (temp-buffer-window-setup-hook)
+ (temp-buffer-window-show-hook): New hooks.
+ (temp-buffer-window-setup, temp-buffer-window-show)
+ (with-temp-buffer-window): New functions.
+ (fit-window-to-buffer): Remove unused optional argument OVERRIDE.
+ (special-display-popup-frame): Make sure the window used shows BUFFER.
+
+ * help.el (temp-buffer-resize-mode): Fix doc-string.
+ (resize-temp-buffer-window): New optional argument WINDOW.
+
+ * files.el (recover-file, save-buffers-kill-emacs):
+ * dired.el (dired-mark-pop-up): Use with-temp-buffer-window.
+
+2012-09-02 Michael Albinus <michael.albinus@gmx.de>
+
+ * eshell/em-unix.el (eshell/sudo): When we have an ad-hoc
+ remote definition of `default-directory', ensure we can connect.
+
+2012-09-02 Juri Linkov <juri@jurta.org>
+
+ Toggle whitespace matching mode with M-s SPC.
+ http://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00008.html
+
+ * isearch.el (search-whitespace-regexp): Doc fix.
+ Remove cons cell customization.
+ (isearch-mode-map): Bind "\M-s " to isearch-toggle-lax-whitespace.
+ (isearch-lax-whitespace, isearch-regexp-lax-whitespace):
+ New variables.
+ (isearch-forward, isearch-forward-regexp): Doc fix.
+ (isearch-toggle-lax-whitespace): New command.
+ (search-forward-lax-whitespace, search-backward-lax-whitespace)
+ (re-search-forward-lax-whitespace)
+ (re-search-backward-lax-whitespace): New functions.
+ (isearch-whitespace-regexp): Remove function.
+ (isearch-query-replace): Let-bind replace-search-function and
+ replace-re-search-function.
+ (isearch-occur): Let-bind search-spaces-regexp according to the
+ value of isearch-lax-whitespace and isearch-regexp-lax-whitespace.
+ (isearch-quote-char): Check isearch-regexp-lax-whitespace in the
+ condition for C-q SPC.
+ (isearch-search-fun-default): Use new functions mentioned above.
+ (isearch-search-forward, isearch-search-backward): Remove functions.
+ (isearch-search): Don't let-bind search-spaces-regexp.
+ (isearch-lazy-highlight-space-regexp): Remove variable.
+ (isearch-lazy-highlight-lax-whitespace)
+ (isearch-lazy-highlight-regexp-lax-whitespace): New variables.
+ (isearch-lazy-highlight-new-loop): Use them.
+ (isearch-lazy-highlight-search): Don't let-bind search-spaces-regexp.
+
+2012-09-02 Chong Yidong <cyd@gnu.org>
+
+ * dired.el (dired-mode-map): Menu string fixes (Bug#11616).
+
+2012-09-02 Glenn Morris <rgm@gnu.org>
+
+ * simple.el (undo): Tweak message in undo-only case. (Bug#12283)
+
+2012-09-01 Glenn Morris <rgm@gnu.org>
+
+ * term.el: Tidy up menu definitions.
+ (term-mode-map): Use easymenu for In/Out, Complete menus.
+ (term-pager-break-map): Initialize in the defvar.
+ (term-terminal-menu, term-signals-menu): Define with easymenu.
+ (term-terminal-menu): Also show it in line-mode. (Bug#11957)
+ (term-pager-menu): New, extracted from term-process-pager.
+ (term-mode, term-char-mode, term-process-pager): Use easymenu-add.
+ (term-update-mode-line): Propertize line/char and page items.
+ (term-process-pager): Move keymap initialization elsewhere.
+
+2012-09-01 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (switch-to-prev-buffer): Handle additional values of
+ BURY-OR-KILL argument. Don't switch in minibuffer window.
+ (switch-to-next-buffer): Don't switch in minibuffer window.
+ (quit-restore-window): New function based on quit-window.
+ Handle additional values of former KILL argument.
+ (quit-window): Call quit-restore-window with appropriate
+ interpretation of KILL argument.
+ (display-buffer-below-selected): New buffer display action
+ function.
+
+2012-09-01 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * minibuffer.el (completion-at-point-functions): Complete docstring
+ (bug#12254).
+
+2012-09-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ Better seed support for (random).
+ * play/5x5.el, play/animate.el, play/cookie1.el, play/dissociate.el:
+ * play/doctor.el, play/dunnet.el, play/gomoku.el, play/landmark.el:
+ * play/mpuz.el, play/tetris.el, play/zone.el:
+ * calc/calc-comb.el (math-init-random-base):
+ * play/blackbox.el (bb-init-board):
+ * play/life.el (life):
+ * server.el (server-use-tcp):
+ * type-break.el (type-break):
+ Remove unnecessary call to (random t).
+ * net/sasl.el (sasl-unique-id-function):
+ Change (random t) to (random), now that the latter is more random.
+ * play/life.el (life-initialized): Remove no-longer-needed var.
+
+2012-08-31 Alp Aker <alp.tekin.aker@gmail.com>
+
+ * window.el (switch-to-prev-buffer, switch-to-next-buffer):
+ Consider frame's buffer predicate when choosing the buffer.
+ (Bug#12081)
+
+2012-08-30 Richard Stallman <rms@gnu.org>
+
+ * simple.el (special-mode-map): Delete binding for `z'.
+
+2012-08-30 Andreas Schwab <schwab@linux-m68k.org>
+
+ * progmodes/compile.el (compilation-always-kill): Doc fix.
+
+2012-08-30 Chong Yidong <cyd@gnu.org>
+
+ * window.el (display-buffer-reuse-frames): Make the obsolescence
+ message more informative.
+
+2012-08-30 Glenn Morris <rgm@gnu.org>
+
+ * paren.el (show-paren-delay):
+ Add a :set function. Doc fix. (Bug#12297)
+
+2012-08-29 Martin Blais <blais@furius.ca> (tiny change)
+
+ * progmodes/compile.el (compilation-always-kill): New var.
+ (compilation-start): Use it.
+
+2012-08-29 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * simple.el (read-only-mode): Move from files.el for bootstrapping.
+ * files.el (read-only-mode): Move to simple.el.
+
+ * files.el (read-only-mode): New minor mode.
+ (toggle-read-only): Use it and mark obsolete.
+ (find-file--read-only):
+ * vc/vc.el (vc-next-action, vc-checkout):
+ * vc/vc-cvs.el (vc-cvs-checkout):
+ * obsolete/vc-mcvs.el (vc-mcvs-update):
+ * ffap.el (ffap--toggle-read-only): Update callers.
+
+2012-08-29 Michael Albinus <michael.albinus@gmx.de>
+
+ * eshell/esh-ext.el (eshell-external-command): Do not examine
+ remote shell scripts.
+ See <https://bugs.launchpad.net/ubuntu/+source/emacs23/+bug/1035790>.
+
+ * net/tramp-sh.el (tramp-remote-path): Add "/sbin" and
+ "/usr/local/sbin".
+
+2012-08-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * emacs-lisp/cl-lib.el (buffer-string): Fix setter macro (bug#12293).
+
+2012-08-28 Leo Liu <sdl.web@gmail.com>
+
+ * progmodes/sh-script.el (sh-dynamic-complete-functions): Adapt to
+ completion-at-point. (Bug#12220)
+
+ * skeleton.el (skeleton-untabify): Change to nil (bug#12223).
+
+ * progmodes/sh-script.el (sh-indent-comment): Change to t (bug#12267).
+
+2012-08-28 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * files.el (safe-local-eval-forms): Fix before-save-hook entry to
+ be buffer-local; add delete-trailing-whitespace (bug#12259).
+
+2012-08-28 Jeremy Moore <jmoore@ieee.org> (tiny change)
+
+ * progmodes/hideif.el (hif-compress-define-list):
+ Fix typo. (Bug#11951)
+
+2012-08-28 Dan Nicolaescu <dann@gnu.org>
+
+ * progmodes/hideshow.el (hs-block-end-regexp): Restore lost
+ buffer local setting.
+
+ * net/rcirc.el (rcirc-split-message): Fix for buffer-local
+ rcirc-encode-coding-system.
+
+2012-08-28 Leo Liu <sdl.web@gmail.com>
+
+ * net/rcirc.el (rcirc-split-message): New function.
+ (rcirc-send-message): Use it. (Bug#12051)
+
+2012-08-28 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-fontify-node): Hide empty lines at the end of
+ the node. (Bug#12272)
+
+2012-08-27 Drew Adams <drew.adams@oracle.com>
+
+ * dired.el (dired-pop-to-buffer): Make window start at beginning
+ of buffer (Bug#12281).
+
+2012-08-26 Chong Yidong <cyd@gnu.org>
+
+ * window.el (special-display-regexps, special-display-frame-alist)
+ (special-display-buffer-names, special-display-function)
+ (display-buffer-reuse-frames): Mark as obsolete.
+
+ * progmodes/compile.el: Don't use display-buffer-reuse-frames.
+
+ * help.el (help-print-return-message): Don't treat
+ display-buffer-reuse-frames specially.
+
+2012-08-26 Chong Yidong <cyd@gnu.org>
+
+ * progmodes/gdb-mi.el (gdb-display-buffer-other-frame-action):
+ New variable, replacing gdb-frame-parameters.
+ (gdb-frame-io-buffer, gdb-frame-breakpoints-buffer)
+ (gdb-frame-threads-buffer, gdb-frame-memory-buffer)
+ (gdb-frame-disassembly-buffer, gdb-frame-stack-buffer)
+ (gdb-frame-locals-buffer, gdb-frame-registers-buffer): Use it.
+ (def-gdb-frame-for-buffer): Macro deleted. It is easier to define
+ the functions directly with gdb-display-buffer-other-frame-action.
+ (gdb-display-breakpoints-buffer, gdb-display-threads-buffer)
+ (gdb-display-memory-buffer, gdb-display-disassembly-buffer)
+ (gdb-display-stack-buffer, gdb-display-locals-buffer)
+ (gdb-display-registers-buffer): Define directly.
+ (def-gdb-display-buffer): Macro deleted.
+ (gdb-display-buffer): Remove second and third args, callers don't
+ use them. Defer to the default display-buffer behavior, apart
+ from making windows dedicated.
+ (gdb-setup-windows): Don't call display-buffer unnecessarily.
+
+ * progmodes/gud.el (gud-display-line): Just use display-buffer.
+
+ * window.el (display-buffer-pop-up-frame): Handle a
+ pop-up-frame-parameters alist entry.
+ (display-buffer): Document it.
+
+2012-08-26 Chong Yidong <cyd@gnu.org>
+
+ * isearch.el (search-whitespace-regexp): Make string and nil
+ values apply to both ordinary and regexp search. Allow a cons
+ cell value to distinguish between the two.
+ (isearch-whitespace-regexp, isearch-search-forward)
+ (isearch-search-backward): New functions.
+ (isearch-occur, isearch-search-fun-default, isearch-search)
+ (isearch-lazy-highlight-new-loop): Use them.
+ (isearch-forward, isearch-forward-regexp): Doc fix.
+
+2012-08-26 Chong Yidong <cyd@gnu.org>
+
+ * faces.el (help-argument-name): Always inherit from italic
+ (Bug#12213).
+
+2012-08-25 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (window--even-window-heights): Even heights when
+ WINDOW and the selected window form a vertical combination.
+ (display-buffer-use-some-window): Provide that window used gets
+ sized back by quit-window. (Bug#11880) and (Bug#12091)
+
+2012-08-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix file time stamp problem with bzr and CVS (Bug#12001).
+ * vc/vc-cvs.el (vc-cvs-parse-entry): Ignore subsecond information
+ in the file's time stamp, since the version control system loses
+ that information.
+
+2012-08-22 Juri Linkov <juri@jurta.org>
+
+ * info.el (Info-fontify-node): Hide the suffix of the
+ Info file name in the header line. (Bug#12187)
+
+2012-08-22 Glenn Morris <rgm@gnu.org>
+
+ * calendar/cal-tex.el (cal-tex-weekly-common):
+ Restore leading blank page.
+
+2012-08-22 Le Wang <l26wang@gmail.com> (tiny change)
+
+ * misc.el (forward-to-word, backward-to-word): Activate or extend
+ the region under `shift-select-mode'. (Bug#12231)
+
+2012-08-22 Bastien Guerry <bzg@gnu.org>
+
+ * progmodes/executable.el (executable-prefix): Set to "#!" instead
+ of "#! ". http://www.in-ulm.de/~mascheck/various/shebang/#details
+ gives details on why the space is never needed.
+
+2012-08-22 Martin Rudalics <rudalics@gmx.at>
+
+ * window.el (walk-window-tree, window-with-parameter):
+ New optional argument MINIBUF to control whether these functions
+ should run on the minibuffer window.
+ (window-at-side-list): Don't operate on minibuffer window.
+ (window-in-direction): Simplify and rewrite doc-string.
+ (window--size-ignore): Rename to window--size-ignore-p.
+ Update callers.
+ (display-buffer-in-atom-window, window--major-non-side-window)
+ (window--major-side-window, display-buffer-in-major-side-window)
+ (delete-side-window, display-buffer-in-side-window):
+ New functions.
+ (window--side-check, window-deletable-p, delete-window)
+ (delete-other-windows, split-window): Handle side windows and
+ atomic windows appropriately.
+ (window--display-buffer): Call display-buffer-record-window also
+ when the window buffer did not change.
+
+2012-08-22 Christopher Schmidt <christopher@ch.ristopher.com>
+
+ * help-fns.el (help-fns--key-bindings):
+ Abbreviate non-symbol remap targets. (Bug#12174)
+
+2012-08-22 Martin Rudalics <rudalics@gmx.at>
+
+ * dired.el (dired-mark-remembered): Don't clobber point.
+ (Bug#11795)
+
+2012-08-22 Glenn Morris <rgm@gnu.org>
+
+ * progmodes/bug-reference.el (bug-reference): New custom group.
+ (bug-reference-bug-regexp): Make it a defcustom.
2012-08-22 Daiki Ueno <ueno@unixuser.org>
--- /dev/null
-(cl-defmacro with-sample-profiling ((&key interval) &rest body)
- `(unwind-protect
- (progn
- (ignore (profiler-cpu-log))
- (profiler-cpu-start ,interval)
- ,@body)
- (profiler-cpu-stop)
- (profiler--report-cpu)))
-
-(defmacro with-memory-profiling (&rest body)
- `(unwind-protect
- (progn
- (ignore (profiler-memory-log))
- (profiler-memory-start)
- ,@body)
- (profiler-memory-stop)
- (profiler--report-memory)))
+ ;;; profiler.el --- UI and helper functions for Emacs's native profiler -*- lexical-binding: t -*-
+
+ ;; Copyright (C) 2012 Free Software Foundation, Inc.
+
+ ;; Author: Tomohiro Matsuyama <tomo@cx4a.org>
+ ;; Keywords: lisp
+
+ ;; This program is free software; you can redistribute it and/or modify
+ ;; it under the terms of the GNU General Public License as published by
+ ;; the Free Software Foundation, either version 3 of the License, or
+ ;; (at your option) any later version.
+
+ ;; This program is distributed in the hope that it will be useful,
+ ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+ ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ ;; GNU General Public License for more details.
+
+ ;; You should have received a copy of the GNU General Public License
+ ;; along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+ ;;; Commentary:
+
+ ;;
+
+ ;;; Code:
+
+ (eval-when-compile
+ (require 'cl-lib))
+
+ (defgroup profiler nil
+ "Emacs profiler."
+ :group 'lisp
+ :prefix "profiler-")
+
+ (defcustom profiler-sample-interval 1
+ "Default sample interval in millisecond."
+ :type 'integer
+ :group 'profiler)
+
+ ;;; Utilities
+
+ (defun profiler-ensure-string (object)
+ (cond ((stringp object)
+ object)
+ ((symbolp object)
+ (symbol-name object))
+ ((numberp object)
+ (number-to-string object))
+ (t
+ (format "%s" object))))
+
+ (defun profiler-format (fmt &rest args)
+ (cl-loop for (width align subfmt) in fmt
+ for arg in args
+ for str = (cond
+ ((consp subfmt)
+ (apply 'profiler-format subfmt arg))
+ ((stringp subfmt)
+ (format subfmt arg))
+ ((and (symbolp subfmt)
+ (fboundp subfmt))
+ (funcall subfmt arg))
+ (t
+ (profiler-ensure-string arg)))
+ for len = (length str)
+ if (< width len)
+ collect (substring str 0 width) into frags
+ else
+ collect
+ (let ((padding (make-string (- width len) ?\s)))
+ (cl-ecase align
+ (left (concat str padding))
+ (right (concat padding str))))
+ into frags
+ finally return (apply #'concat frags)))
+
+ (defun profiler-format-percent (number divisor)
+ (concat (number-to-string (/ (* number 100) divisor)) "%"))
+
+ (defun profiler-format-nbytes (nbytes)
+ "Format NBYTES in humarn readable string."
+ (if (and (integerp nbytes) (> nbytes 0))
+ (cl-loop with i = (% (1+ (floor (log10 nbytes))) 3)
+ for c in (append (number-to-string nbytes) nil)
+ if (= i 0)
+ collect ?, into s
+ and do (setq i 3)
+ collect c into s
+ do (cl-decf i)
+ finally return
+ (apply 'string (if (eq (car s) ?,) (cdr s) s)))
+ (profiler-ensure-string nbytes)))
+
+ \f
+ ;;; Entries
+
+ (defun profiler-entry-format (entry)
+ "Format ENTRY in human readable string. ENTRY would be a
+ function name of a function itself."
+ (cond ((memq (car-safe entry) '(closure lambda))
+ (format "#<lambda 0x%x>" (sxhash entry)))
+ ((byte-code-function-p entry)
+ (format "#<compiled 0x%x>" (sxhash entry)))
+ ((or (subrp entry) (symbolp entry) (stringp entry))
+ (format "%s" entry))
+ (t
+ (format "#<unknown 0x%x>" (sxhash entry)))))
+
+ ;;; Log data structure
+
+ ;; The C code returns the log in the form of a hash-table where the keys are
+ ;; vectors (of size profiler-max-stack-depth, holding truncated
+ ;; backtraces, where the first element is the top of the stack) and
+ ;; the values are integers (which count how many times this backtrace
+ ;; has been seen, multiplied by a "weight factor" which is either the
+ ;; sample-interval or the memory being allocated).
+ ;; We extend it by adding a few other entries to the hash-table, most notably:
+ ;; - Key `type' has a value indicating the kind of log (`memory' or `cpu').
+ ;; - Key `timestamp' has a value giving the time when the log was obtained.
+ ;; - Key `diff-p' indicates if this log represents a diff between two logs.
+
+ (defun profiler-log-timestamp (log) (gethash 'timestamp log))
+ (defun profiler-log-type (log) (gethash 'type log))
+ (defun profiler-log-diff-p (log) (gethash 'diff-p log))
+
+ (defun profiler-log-diff (log1 log2)
+ "Compare LOG1 with LOG2 and return a diff log. Both logs must
+ be same type."
+ (unless (eq (profiler-log-type log1)
+ (profiler-log-type log2))
+ (error "Can't compare different type of logs"))
+ (let ((newlog (make-hash-table :test 'equal)))
+ ;; Make a copy of `log1' into `newlog'.
+ (maphash (lambda (backtrace count) (puthash backtrace count newlog))
+ log1)
+ (puthash 'diff-p t newlog)
+ (maphash (lambda (backtrace count)
+ (when (vectorp backtrace)
+ (puthash backtrace (- (gethash backtrace log1 0) count)
+ newlog)))
+ log2)
+ newlog))
+
+ (defun profiler-log-fixup-entry (entry)
+ (if (symbolp entry)
+ entry
+ (profiler-entry-format entry)))
+
+ (defun profiler-log-fixup-backtrace (backtrace)
+ (mapcar 'profiler-log-fixup-entry backtrace))
+
+ (defun profiler-log-fixup (log)
+ "Fixup LOG so that the log could be serialized into file."
+ (let ((newlog (make-hash-table :test 'equal)))
+ (maphash (lambda (backtrace count)
+ (puthash (if (not (vectorp backtrace))
+ backtrace
+ (profiler-log-fixup-backtrace backtrace))
+ count newlog))
+ log)
+ newlog))
+
+ (defun profiler-log-write-file (log filename &optional confirm)
+ "Write LOG into FILENAME."
+ (with-temp-buffer
+ (let (print-level print-length)
+ (print (profiler-log-fixup log) (current-buffer)))
+ (write-file filename confirm)))
+
+ (defun profiler-log-read-file (filename)
+ "Read log from FILENAME."
+ (with-temp-buffer
+ (insert-file-contents filename)
+ (goto-char (point-min))
+ (read (current-buffer))))
+
+ \f
+ ;;; Calltree data structure
+
+ (cl-defstruct (profiler-calltree (:constructor profiler-make-calltree))
+ entry
+ (count 0) (count-percent "")
+ parent children)
+
+ (defun profiler-calltree-leaf-p (tree)
+ (null (profiler-calltree-children tree)))
+
+ (defun profiler-calltree-count< (a b)
+ (cond ((eq (profiler-calltree-entry a) t) t)
+ ((eq (profiler-calltree-entry b) t) nil)
+ (t (< (profiler-calltree-count a)
+ (profiler-calltree-count b)))))
+
+ (defun profiler-calltree-count> (a b)
+ (not (profiler-calltree-count< a b)))
+
+ (defun profiler-calltree-depth (tree)
+ (let ((parent (profiler-calltree-parent tree)))
+ (if (null parent)
+ 0
+ (1+ (profiler-calltree-depth parent)))))
+
+ (defun profiler-calltree-find (tree entry)
+ "Return a child tree of ENTRY under TREE."
+ ;; OPTIMIZED
+ (let (result (children (profiler-calltree-children tree)))
+ ;; FIXME: Use `assoc'.
+ (while (and children (null result))
+ (let ((child (car children)))
+ (when (equal (profiler-calltree-entry child) entry)
+ (setq result child))
+ (setq children (cdr children))))
+ result))
+
+ (defun profiler-calltree-walk (calltree function)
+ (funcall function calltree)
+ (dolist (child (profiler-calltree-children calltree))
+ (profiler-calltree-walk child function)))
+
+ (defun profiler-calltree-build-1 (tree log &optional reverse)
++ ;; FIXME: Do a better job of reconstructing a complete call-tree
++ ;; when the backtraces have been truncated. Ideally, we should be
++ ;; able to reduce profiler-max-stack-depth to 3 or 4 and still
++ ;; get a meaningful call-tree.
+ (maphash
+ (lambda (backtrace count)
+ (when (vectorp backtrace)
+ (let ((node tree)
+ (max (length backtrace)))
+ (dotimes (i max)
+ (let ((entry (aref backtrace (if reverse i (- max i 1)))))
+ (when entry
+ (let ((child (profiler-calltree-find node entry)))
+ (unless child
+ (setq child (profiler-make-calltree
+ :entry entry :parent node))
+ (push child (profiler-calltree-children node)))
+ (cl-incf (profiler-calltree-count child) count)
+ (setq node child))))))))
+ log))
+
+ (defun profiler-calltree-compute-percentages (tree)
+ (let ((total-count 0))
+ ;; FIXME: the memory profiler's total wraps around all too easily!
+ (dolist (child (profiler-calltree-children tree))
+ (cl-incf total-count (profiler-calltree-count child)))
+ (unless (zerop total-count)
+ (profiler-calltree-walk
+ tree (lambda (node)
+ (setf (profiler-calltree-count-percent node)
+ (profiler-format-percent (profiler-calltree-count node)
+ total-count)))))))
+
+ (cl-defun profiler-calltree-build (log &key reverse)
+ (let ((tree (profiler-make-calltree)))
+ (profiler-calltree-build-1 tree log reverse)
+ (profiler-calltree-compute-percentages tree)
+ tree))
+
+ (defun profiler-calltree-sort (tree predicate)
+ (let ((children (profiler-calltree-children tree)))
+ (setf (profiler-calltree-children tree) (sort children predicate))
+ (dolist (child (profiler-calltree-children tree))
+ (profiler-calltree-sort child predicate))))
+
+ \f
+ ;;; Report rendering
+
+ (defcustom profiler-report-closed-mark "+"
+ "An indicator of closed calltrees."
+ :type 'string
+ :group 'profiler)
+
+ (defcustom profiler-report-open-mark "-"
+ "An indicator of open calltrees."
+ :type 'string
+ :group 'profiler)
+
+ (defcustom profiler-report-leaf-mark " "
+ "An indicator of calltree leaves."
+ :type 'string
+ :group 'profiler)
+
+ (defvar profiler-report-sample-line-format
+ '((60 left)
+ (14 right ((9 right)
+ (5 right)))))
+
+ (defvar profiler-report-memory-line-format
+ '((55 left)
+ (19 right ((14 right profiler-format-nbytes)
+ (5 right)))))
+
+ (defvar-local profiler-report-log nil
+ "The current profiler log.")
+
+ (defvar-local profiler-report-reversed nil
+ "True if calltree is rendered in bottom-up. Do not touch this
+ variable directly.")
+
+ (defvar-local profiler-report-order nil
+ "The value can be `ascending' or `descending'. Do not touch
+ this variable directly.")
+
+ (defun profiler-report-make-entry-part (entry)
+ (let ((string (cond
+ ((eq entry t)
+ "Others")
+ ((and (symbolp entry)
+ (fboundp entry))
+ (propertize (symbol-name entry)
+ 'face 'link
+ 'mouse-face 'highlight
+ 'help-echo "mouse-2 or RET jumps to definition"))
+ (t
+ (profiler-entry-format entry)))))
+ (propertize string 'profiler-entry entry)))
+
+ (defun profiler-report-make-name-part (tree)
+ (let* ((entry (profiler-calltree-entry tree))
+ (depth (profiler-calltree-depth tree))
+ (indent (make-string (* (1- depth) 2) ?\s))
+ (mark (if (profiler-calltree-leaf-p tree)
+ profiler-report-leaf-mark
+ profiler-report-closed-mark))
+ (entry (profiler-report-make-entry-part entry)))
+ (format "%s%s %s" indent mark entry)))
+
+ (defun profiler-report-header-line-format (fmt &rest args)
+ (let* ((header (apply 'profiler-format fmt args))
+ (escaped (replace-regexp-in-string "%" "%%" header)))
+ (concat " " escaped)))
+
+ (defun profiler-report-line-format (tree)
+ (let ((diff-p (profiler-log-diff-p profiler-report-log))
+ (name-part (profiler-report-make-name-part tree))
+ (count (profiler-calltree-count tree))
+ (count-percent (profiler-calltree-count-percent tree)))
+ (profiler-format (cl-ecase (profiler-log-type profiler-report-log)
+ (cpu profiler-report-sample-line-format)
+ (memory profiler-report-memory-line-format))
+ name-part
+ (if diff-p
+ (list (if (> count 0)
+ (format "+%s" count)
+ count)
+ "")
+ (list count count-percent)))))
+
+ (defun profiler-report-insert-calltree (tree)
+ (let ((line (profiler-report-line-format tree)))
+ (insert (propertize (concat line "\n") 'calltree tree))))
+
+ (defun profiler-report-insert-calltree-children (tree)
+ (mapc 'profiler-report-insert-calltree
+ (profiler-calltree-children tree)))
+
+ \f
+ ;;; Report mode
+
+ (defvar profiler-report-mode-map
+ (let ((map (make-sparse-keymap)))
+ ;; FIXME: Add menu.
+ (define-key map "n" 'profiler-report-next-entry)
+ (define-key map "p" 'profiler-report-previous-entry)
+ ;; I find it annoying more than helpful to not be able to navigate
+ ;; normally with the cursor keys. --Stef
+ ;; (define-key map [down] 'profiler-report-next-entry)
+ ;; (define-key map [up] 'profiler-report-previous-entry)
+ (define-key map "\r" 'profiler-report-toggle-entry)
+ (define-key map "\t" 'profiler-report-toggle-entry)
+ (define-key map "i" 'profiler-report-toggle-entry)
+ (define-key map "f" 'profiler-report-find-entry)
+ (define-key map "j" 'profiler-report-find-entry)
+ (define-key map [mouse-2] 'profiler-report-find-entry)
+ (define-key map "d" 'profiler-report-describe-entry)
+ (define-key map "C" 'profiler-report-render-calltree)
+ (define-key map "B" 'profiler-report-render-reversed-calltree)
+ (define-key map "A" 'profiler-report-ascending-sort)
+ (define-key map "D" 'profiler-report-descending-sort)
+ (define-key map "=" 'profiler-report-compare-log)
+ (define-key map (kbd "C-x C-w") 'profiler-report-write-log)
+ (define-key map "q" 'quit-window)
+ map))
+
+ (defun profiler-report-make-buffer-name (log)
+ (format "*%s-Profiler-Report %s*"
+ (cl-ecase (profiler-log-type log) (cpu 'CPU) (memory 'Memory))
+ (format-time-string "%Y-%m-%d %T" (profiler-log-timestamp log))))
+
+ (defun profiler-report-setup-buffer (log)
+ "Make a buffer for LOG and return it."
+ (let* ((buf-name (profiler-report-make-buffer-name log))
+ (buffer (get-buffer-create buf-name)))
+ (with-current-buffer buffer
+ (profiler-report-mode)
+ (setq profiler-report-log log
+ profiler-report-reversed nil
+ profiler-report-order 'descending))
+ buffer))
+
+ (define-derived-mode profiler-report-mode special-mode "Profiler-Report"
+ "Profiler Report Mode."
+ (setq buffer-read-only t
+ buffer-undo-list t
+ truncate-lines t))
+
+ \f
+ ;;; Report commands
+
+ (defun profiler-report-calltree-at-point ()
+ (get-text-property (point) 'calltree))
+
+ (defun profiler-report-move-to-entry ()
+ (let ((point (next-single-property-change (line-beginning-position)
+ 'profiler-entry)))
+ (if point
+ (goto-char point)
+ (back-to-indentation))))
+
+ (defun profiler-report-next-entry ()
+ "Move cursor to next entry."
+ (interactive)
+ (forward-line)
+ (profiler-report-move-to-entry))
+
+ (defun profiler-report-previous-entry ()
+ "Move cursor to previous entry."
+ (interactive)
+ (forward-line -1)
+ (profiler-report-move-to-entry))
+
+ (defun profiler-report-expand-entry ()
+ "Expand entry at point."
+ (interactive)
+ (save-excursion
+ (beginning-of-line)
+ (when (search-forward (concat profiler-report-closed-mark " ")
+ (line-end-position) t)
+ (let ((tree (profiler-report-calltree-at-point)))
+ (when tree
+ (let ((inhibit-read-only t))
+ (replace-match (concat profiler-report-open-mark " "))
+ (forward-line)
+ (profiler-report-insert-calltree-children tree)
+ t))))))
+
+ (defun profiler-report-collapse-entry ()
+ "Collpase entry at point."
+ (interactive)
+ (save-excursion
+ (beginning-of-line)
+ (when (search-forward (concat profiler-report-open-mark " ")
+ (line-end-position) t)
+ (let* ((tree (profiler-report-calltree-at-point))
+ (depth (profiler-calltree-depth tree))
+ (start (line-beginning-position 2))
+ d)
+ (when tree
+ (let ((inhibit-read-only t))
+ (replace-match (concat profiler-report-closed-mark " "))
+ (while (and (eq (forward-line) 0)
+ (let ((child (get-text-property (point) 'calltree)))
+ (and child
+ (numberp (setq d (profiler-calltree-depth child)))))
+ (> d depth)))
+ (delete-region start (line-beginning-position)))))
+ t)))
+
+ (defun profiler-report-toggle-entry ()
+ "Expand entry at point if the tree is collapsed,
+ otherwise collapse."
+ (interactive)
+ (or (profiler-report-expand-entry)
+ (profiler-report-collapse-entry)))
+
+ (defun profiler-report-find-entry (&optional event)
+ "Find entry at point."
+ (interactive (list last-nonmenu-event))
+ (if event (posn-set-point (event-end event)))
+ (let ((tree (profiler-report-calltree-at-point)))
+ (when tree
+ (let ((entry (profiler-calltree-entry tree)))
+ (find-function entry)))))
+
+ (defun profiler-report-describe-entry ()
+ "Describe entry at point."
+ (interactive)
+ (let ((tree (profiler-report-calltree-at-point)))
+ (when tree
+ (let ((entry (profiler-calltree-entry tree)))
+ (require 'help-fns)
+ (describe-function entry)))))
+
+ (cl-defun profiler-report-render-calltree-1
+ (log &key reverse (order 'descending))
+ (let ((calltree (profiler-calltree-build profiler-report-log
+ :reverse reverse)))
+ (setq header-line-format
+ (cl-ecase (profiler-log-type log)
+ (cpu
+ (profiler-report-header-line-format
+ profiler-report-sample-line-format
+ "Function" (list "Time (ms)" "%")))
+ (memory
+ (profiler-report-header-line-format
+ profiler-report-memory-line-format
+ "Function" (list "Bytes" "%")))))
+ (let ((predicate (cl-ecase order
+ (ascending #'profiler-calltree-count<)
+ (descending #'profiler-calltree-count>))))
+ (profiler-calltree-sort calltree predicate))
+ (let ((inhibit-read-only t))
+ (erase-buffer)
+ (profiler-report-insert-calltree-children calltree)
+ (goto-char (point-min))
+ (profiler-report-move-to-entry))))
+
+ (defun profiler-report-rerender-calltree ()
+ (profiler-report-render-calltree-1 profiler-report-log
+ :reverse profiler-report-reversed
+ :order profiler-report-order))
+
+ (defun profiler-report-render-calltree ()
+ "Render calltree view."
+ (interactive)
+ (setq profiler-report-reversed nil)
+ (profiler-report-rerender-calltree))
+
+ (defun profiler-report-render-reversed-calltree ()
+ "Render reversed calltree view."
+ (interactive)
+ (setq profiler-report-reversed t)
+ (profiler-report-rerender-calltree))
+
+ (defun profiler-report-ascending-sort ()
+ "Sort calltree view in ascending order."
+ (interactive)
+ (setq profiler-report-order 'ascending)
+ (profiler-report-rerender-calltree))
+
+ (defun profiler-report-descending-sort ()
+ "Sort calltree view in descending order."
+ (interactive)
+ (setq profiler-report-order 'descending)
+ (profiler-report-rerender-calltree))
+
+ (defun profiler-report-log (log)
+ (let ((buffer (profiler-report-setup-buffer log)))
+ (with-current-buffer buffer
+ (profiler-report-render-calltree))
+ (pop-to-buffer buffer)))
+
+ (defun profiler-report-compare-log (buffer)
+ "Compare the current profiler log with another."
+ (interactive (list (read-buffer "Compare to: ")))
+ (let* ((log1 (with-current-buffer buffer profiler-report-log))
+ (log2 profiler-report-log)
+ (diff-log (profiler-log-diff log1 log2)))
+ (profiler-report-log diff-log)))
+
+ (defun profiler-report-write-log (filename &optional confirm)
+ "Write the current profiler log into FILENAME."
+ (interactive
+ (list (read-file-name "Write log: " default-directory)
+ (not current-prefix-arg)))
+ (profiler-log-write-file profiler-report-log
+ filename
+ confirm))
+
+ \f
+ ;;; Profiler commands
+
+ ;;;###autoload
+ (defun profiler-start (mode)
+ "Start/restart profilers.
+ MODE can be one of `cpu', `mem', or `cpu+mem'.
+ If MODE is `cpu' or `cpu+mem', time-based profiler will be started.
+ Also, if MODE is `mem' or `cpu+mem', then memory profiler will be started."
+ (interactive
+ (list (if (not (fboundp 'profiler-cpu-start)) 'mem
+ (intern (completing-read "Mode (default cpu): "
+ '("cpu" "mem" "cpu+mem")
+ nil t nil nil "cpu")))))
+ (cl-ecase mode
+ (cpu
+ (profiler-cpu-start profiler-sample-interval)
+ (message "CPU profiler started"))
+ (mem
+ (profiler-memory-start)
+ (message "Memory profiler started"))
+ (cpu+mem
+ (profiler-cpu-start profiler-sample-interval)
+ (profiler-memory-start)
+ (message "CPU and memory profiler started"))))
+
+ (defun profiler-stop ()
+ "Stop started profilers. Profiler logs will be kept."
+ (interactive)
+ (let ((cpu (if (fboundp 'profiler-cpu-stop) (profiler-cpu-stop)))
+ (mem (profiler-memory-stop)))
+ (message "%s profiler stopped"
+ (cond ((and mem cpu) "CPU and memory")
+ (mem "Memory")
+ (cpu "CPU")
+ (t "No")))))
+
+ (defun profiler-reset ()
+ "Reset profiler log."
+ (interactive)
+ (when (fboundp 'profiler-cpu-log)
+ (ignore (profiler-cpu-log)))
+ (ignore (profiler-memory-log))
+ t)
+
+ (defun profiler--report-cpu ()
+ (let ((log (if (fboundp 'profiler-cpu-log) (profiler-cpu-log))))
+ (when log
+ (puthash 'type 'cpu log)
+ (puthash 'timestamp (current-time) log)
+ (profiler-report-log log))))
+
+ (defun profiler--report-memory ()
+ (let ((log (profiler-memory-log)))
+ (when log
+ (puthash 'type 'memory log)
+ (puthash 'timestamp (current-time) log)
+ (profiler-report-log log))))
+
+ (defun profiler-report ()
+ "Report profiling results."
+ (interactive)
+ (profiler--report-cpu)
+ (profiler--report-memory))
+
+ ;;;###autoload
+ (defun profiler-find-log (filename)
+ "Read a profiler log from FILENAME and report it."
+ (interactive
+ (list (read-file-name "Find log: " default-directory)))
+ (profiler-report-log (profiler-log-read-file filename)))
+
+ \f
+ ;;; Profiling helpers
+
++;; (cl-defmacro with-sample-profiling ((&key interval) &rest body)
++;; `(unwind-protect
++;; (progn
++;; (ignore (profiler-cpu-log))
++;; (profiler-cpu-start ,interval)
++;; ,@body)
++;; (profiler-cpu-stop)
++;; (profiler--report-cpu)))
++
++;; (defmacro with-memory-profiling (&rest body)
++;; `(unwind-protect
++;; (progn
++;; (ignore (profiler-memory-log))
++;; (profiler-memory-start)
++;; ,@body)
++;; (profiler-memory-stop)
++;; (profiler--report-memory)))
+
+ (provide 'profiler)
+ ;;; profiler.el ends here
-2012-09-26 Stefan Monnier <monnier@iro.umontreal.ca>
-
- * profiler.c (Fprofiler_cpu_stop, Fprofiler_memory_stop):
- Return whether the profiler was running, instead of signaling an error
- if it wasn't.
-
-2012-09-26 Juanma Barranquero <lekktu@gmail.com>
++2012-09-26 Tomohiro Matsuyama <tomo@cx4a.org>
++ Stefan Monnier <monnier@iro.umontreal.ca>
++ Juanma Barranquero <lekktu@gmail.com>
+
++ * profiler.c: New file.
++ * Makefile.in (base_obj): Add profiler.o.
+ * makefile.w32-in (OBJ2, GLOBAL_SOURCES): Add profiler.c.
+ ($(BLD)/profiler.$(O)): New target.
++ * emacs.c (main): Call syms_of_profiler.
++ * alloc.c (Qautomatic_gc): New constant.
++ (MALLOC_PROBE): New macro.
++ (xmalloc, xzalloc, xrealloc, lisp_malloc, lisp_align_malloc): Use it.
++ (total_bytes_of_live_objects): New function.
++ (Fgarbage_collect): Use it. Record itself in backtrace_list.
++ Call malloc_probe for the memory profiler.
++ (syms_of_alloc): Define Qautomatic_gc.
++ * eval.c (eval_sub, Ffuncall): Reorder assignments to avoid
++ race condition.
++ (struct backtrace): Move definition...
++ * lisp.h (struct backtrace): ..here.
++ (Qautomatic_gc, profiler_memory_running): Declare vars.
++ (malloc_probe, syms_of_profiler): Declare functions.
++ * xdisp.c (Qautomatic_redisplay): New constant.
++ (redisplay_internal): Record itself in backtrace_list.
++ (syms_of_xdisp): Define Qautomatic_redisplay.
+
-2012-09-25 Stefan Monnier <monnier@iro.umontreal.ca>
+2012-09-25 Juanma Barranquero <lekktu@gmail.com>
- * profiler.c: Rename sample_profiler_* to profiler_cpu_* and
- memory_profiler_* to profiler_memory_*. Move sigprof_handler before
- its first use, inside the PROFILER_CPU_SUPPORT conditional.
+ * makefile.w32-in ($(BLD)/callproc.$(O)): Update dependencies.
-2012-09-24 Stefan Monnier <monnier@iro.umontreal.ca>
+2012-09-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ Prefer POSIX timers if available.
+ They avoid a race if the timer is too close to the current time.
+ * atimer.c (alarm_timer, alarm_timer_ok) [SIGEV_SIGNAL]: New static vars.
+ (set_alarm) [SIGEV_SIGNAL]: Use POSIX timers if available.
+ (init_atimer) [SIGEV_SIGNAL]: Initialize them.
+
+2012-09-25 Eli Zaretskii <eliz@gnu.org>
+
+ * coding.c (CHAR_STRING_ADVANCE_NO_UNIFY): Make it an alias of
+ CHAR_STRING_ADVANCE.
+ (STRING_CHAR_ADVANCE_NO_UNIFY): Make it an alias of
+ STRING_CHAR_ADVANCE.
+
+2012-09-25 Juanma Barranquero <lekktu@gmail.com>
+
+ Move Vlibrary_cache to emacs.c and reset before dumping.
+
+ * lisp.h (reset_image_types): Declare.
+ [WINDOWSNT] (Vlibrary_cache): Declare.
+
+ * image.c (reset_image_types): New function.
- * profiler.c (evict_lower_half): Fix typo.
- (PROFILER_CPU_SUPPORT): Check and define if cpu-profiler is supported.
- Don't compile the cpu-profiler code, if not supported.
- (malloc_probe): Presume memory_log is non-nil.
- (syms_of_profiler): Don't defsubr functions when they aren't defined.
+ * emacs.c [WINDOWSNT] (Vlibrary_cache): Move from w32.c.
+ (syms_of_emacs) [WINDOWSNT] <Vlibrary_cache>: Initialize and staticpro.
+ (Fdump_emacs): Reset Vlibrary_cache and image_types.
- * lisp.h (sample_profiler_running, gc_probe): Don't declare.
+ * w32.c (Vlibrary_cache): Do not define; moved to emacs.c
+ (globals_of_w32) <Vlibrary_cache>: Do not initialize.
+
+ * w32.h (Vlibrary_cache): Do not declare.
+
+2012-09-25 Eli Zaretskii <eliz@gnu.org>
+
+ * w32proc.c (sys_signal): Handle all signals defined by the
+ MS-Windows runtime, not just SIGCHLD. Actually install the signal
+ handlers for signals supported by Windows. Don't override
+ term_ntproc as the handler for SIGABRT.
+ (sigaction): Rewrite to call sys_signal instead of duplicating its
+ code.
+ (sys_kill): Improve commentary.
+
+ * w32.c (term_ntproc): Accept (and ignore) one argument, for
+ consistency with a signature of a signal handler. All callers
+ changed.
+ (init_ntproc): Accept an argument DUMPING. If dumping, don't
+ install term_ntproc as a signal handler for SIGABRT, as that
+ should be done by the dumped Emacs.
+
+ * w32.h (init_ntproc, term_ntproc): Adjust prototypes.
+
+ * w32select.c (term_w32select): Protect against repeated
+ invocation by setting clipboard_owner to NULL after calling
+ DestroyWindow.
+
+ * emacs.c (shut_down_emacs, main): Adapt the calls to init_ntproc
+ and term_ntproc to their modified signatures.
+
+ * character.c (char_string, string_char): Remove calls to
+ MAYBE_UNIFY_CHAR. See the discussion starting at
+ http://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00433.html
+ for the details.
+
+2012-09-25 Chong Yidong <cyd@gnu.org>
+
+ * xdisp.c (mode_line_inverse_video): Delete obsolete variable.
2012-09-24 Stefan Monnier <monnier@iro.umontreal.ca>
- * xdisp.c (Qautomatic_redisplay): New constant.
- (redisplay_internal): Record itself in backtrace_list.
- (syms_of_xdisp): Define Qautomatic_redisplay.
+ * bytecode.c (exec_byte_code): Signal an error instead of aborting,
+ when encountering an unknown bytecode.
+
+2012-09-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ image.c, indent.c: Use bool for booleans.
+ * dispextern.h (struct image_type): Members valid_p, load, init
+ now return bool, not int. All uses changed.
+ * image.c: Omit unnecessary static decls.
+ (x_create_bitmap_mask, x_build_heuristic_mask):
+ Return void, not int, since callers don't care about the return value.
+ (x_create_bitmap_mask, define_image_type, valid_image_p)
+ (struct image_keyword, parse_image_spec, image_spec_value)
+ (check_image_size, image_background)
+ (image_background_transparent, x_clear_image_1)
+ (postprocess_image, lookup_image, x_check_image_size)
+ (x_create_x_image_and_pixmap, xbm_image_p)
+ (Create_Pixmap_From_Bitmap_Data, xbm_read_bitmap_data)
+ (xbm_load_image, xbm_file_p, xbm_load, xpm_lookup_color)
+ (init_xpm_functions, xpm_valid_color_symbols_p, xpm_image_p)
+ (xpm_load, xpm_load_image, lookup_rgb_color, lookup_pixel_color)
+ (x_to_xcolors, x_build_heuristic_mask, pbm_image_p, pbm_load)
+ (png_image_p, init_png_functions, png_load_body, png_load)
+ (jpeg_image_p, init_jpeg_functions, jpeg_load_body, jpeg_load)
+ (tiff_image_p, init_tiff_functions, tiff_load, gif_image_p)
+ (init_gif_functions, gif_load, imagemagick_image_p)
+ (imagemagick_load_image, imagemagick_load, svg_image_p)
+ (init_svg_functions, svg_load, svg_load_image, gs_image_p)
+ (gs_load):
+ * nsimage.m (ns_load_image):
+ * nsterm.m (ns_defined_color):
+ * xfaces.c (tty_lookup_color, tty_defined_color, defined_color):
+ * xfns.c (x_defined_color):
+ * xterm.c (x_alloc_lighter_color_for_widget)
+ (x_alloc_nearest_color_1, x_alloc_nearest_color)
+ (x_alloc_lighter_color):
+ * indent.c (disptab_matches_widthtab, current_column)
+ (scan_for_column, string_display_width, indented_beyond_p)
+ (compute_motion, vmotion, Fvertical_motion):
+ Use bool for booleans.
+
+2012-09-24 Chong Yidong <cyd@gnu.org>
+
+ * chartab.c (Fset_char_table_default): Obsolete function removed.
+
+2012-09-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ Move pid_t related decls out of lisp.h.
+ * lisp.h, syswait.h (record_child_status_change, wait_for_termination)
+ (interruptible_wait_for_termination):
+ Move these decls from lisp.h to syswait.h, since they use pid_t.
+ Needed on FreeBSD; see Herbert J. Skuhra in
+ <http://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00571.html>.
+ * callproc.c: Include syswait.h.
+
+ gnutls.c, gtkutil.c: Use bool for boolean.
+ * gnutls.c (gnutls_global_initialized, init_gnutls_functions)
+ (emacs_gnutls_handle_error):
+ * gtkutil.c (xg_check_special_colors, xg_prepare_tooltip)
+ (xg_hide_tooltip, xg_create_frame_widgets)
+ (create_dialog, xg_uses_old_file_dialog)
+ (xg_get_file_with_chooser, xg_get_file_with_selection)
+ (xg_get_file_name, xg_have_tear_offs, create_menus, xg_create_widget)
+ (xg_item_label_same_p, xg_update_menubar)
+ (xg_modify_menubar_widgets, xg_event_is_for_menubar)
+ (xg_ignore_gtk_scrollbar, xg_set_toolkit_scroll_bar_thumb)
+ (xg_event_is_for_scrollbar, xg_pack_tool_bar, xg_make_tool_item)
+ (is_box_type, xg_tool_item_stale_p, xg_update_tool_bar_sizes)
+ (update_frame_tool_bar, free_frame_tool_bar):
+ * gtkutil.c, w32term.c, xterm.c (x_wm_set_size_hint):
+ * nsmenu.m (ns_update_menubar):
+ * nsmenu.m, w32menu.c, xmenu.c (set_frame_menubar):
+ * xfns.c (Fx_show_tip) [USE_GTK]:
+ Use bool for boolean.
+ * gtkutil.c (xg_update_frame_menubar):
+ * xmenu.c (update_frame_menubar):
+ Return void, not int, since caller ignores return value.
+ * gtkutil.c (xg_change_toolbar_position):
+ Return void, not 1.
+
+2012-09-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in (BLOCKINPUT_H): Remove.
+ (SYSSIGNAL_H): New macro.
+ ($(BLD)/alloc.$(O), $(BLD)/atimer.$(O), $(BLD)/buffer.$(O))
+ ($(BLD)/callproc.$(O), $(BLD)/data.$(O), $(BLD)/dired.$(O))
+ ($(BLD)/dispnew.$(O), $(BLD)/editfns.$(O), $(BLD)/emacs.$(O))
+ ($(BLD)/eval.$(O), $(BLD)/fileio.$(O), $(BLD)/floatfns.$(O))
+ ($(BLD)/fns.$(O), $(BLD)/fontset.$(O), $(BLD)/frame.$(O))
+ ($(BLD)/fringe.$(O), $(BLD)/image.$(O), $(BLD)/insdel.$(O))
+ ($(BLD)/keyboard.$(O), $(BLD)/keymap.$(O), $(BLD)/lread.$(O))
+ ($(BLD)/menu.$(O), $(BLD)/w32inevt.$(O), $(BLD)/w32proc.$(O))
+ ($(BLD)/print.$(O), $(BLD)/process.$(O), $(BLD)/ralloc.$(O))
+ ($(BLD)/search.$(O), $(BLD)/sound.$(O), $(BLD)/sysdep.$(O))
+ ($(BLD)/term.$(O), $(BLD)/window.$(O), $(BLD)/xdisp.$(O))
+ ($(BLD)/xfaces.$(O), $(BLD)/w32fns.$(O), $(BLD)/w32menu.$(O))
+ ($(BLD)/w32term.$(O), $(BLD)/w32select.$(O), $(BLD)/w32reg.$(O))
+ ($(BLD)/w32xfns.$(O)): Update dependencies.
+
+2012-09-23 Eli Zaretskii <eliz@gnu.org>
+
+ * .gdbinit: Set breakpoint on terminate_due_to_signal, not on
+ fatal_error_backtrace.
+
+ * w32proc.c (sys_kill): Undo last change: don't do anything when
+ invoked to deliver SIGABRT to our own process. This is now
+ handled by emacs_raise.
+
+2012-09-23 Juanma Barranquero <lekktu@gmail.com>
+
+ * w32term.c (w32_read_socket): Remove leftover reference to
+ interrupt_input_pending.
+
+2012-09-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ Do not use SA_NODEFER.
+ Problem reported by Dani Moncayo in
+ <http://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00557.html>.
+ * alloc.c (die):
+ * sysdep.c (emacs_abort): Do not reset signal handler.
+ * emacs.c (terminate_due_to_signal): Reset signal handler here.
+ * sysdep.c (init_signals): Do not use SA_NODEFER. It wasn't
+ wanted even on POSIXish hosts, and it doesn't work on Windows.
+
+2012-09-23 Jan Djärv <jan.h.d@swipnet.se>
+
+ * xterm.c (x_term_init): Call fixup_locale before and after calling
+ gtk_init (Bug#12392).
+
+2012-09-23 Chong Yidong <cyd@gnu.org>
+
+ * w32.c (w32_delayed_load): Remove LIBRARIES argument; always use
+ Vdynamic_library_alist.
+
+ * gnutls.c (init_gnutls_functions): Caller changed; remove arg.
+ (Fgnutls_available_p): Caller changed.
+
+ * xml.c (init_libxml2_functions, Flibxml_parse_html_region)
+ (Flibxml_parse_xml_region): Likewise.
+
+ * dispextern.h (struct image_type): Remove arg from init function.
+
+ * image.c (Finit_image_library, lookup_image_type)
+ (define_image_type): Remove now-unneeded second arg.
+ (init_xpm_functions, init_png_functions, init_jpeg_functions)
+ (init_tiff_functions, init_gif_functions, init_svg_functions):
+ Arglist and w32_delayed_load calling convention changed.
+ (gs_type): Remove init_gs_functions; there is no such function.
+ (valid_image_p, make_image): Fix caller to lookup_image_type.
+
+2012-09-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ Simplify and avoid signal-handling races (Bug#12471).
+ * alloc.c (die):
+ * sysdep.c (emacs_abort) [HAVE_NTGUI]:
+ Avoid recursive loop if there's a fatal error in the function itself.
+ * atimer.c (pending_atimers):
+ * 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.
+ * 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.
+ * atimer.c (turn_on_atimers):
+ * dispnew.c (handle_window_change_signal):
+ * emacs.c (handle_danger_signal):
+ * keyboard.c (kbd_buffer_get_event):
+ Don't reestablish signal handler; not needed with sigaction.
+ * 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.
+ * data.c (handle_arith_signal, deliver_arith_signal): Move to sysdep.c
+ (init_data): Remove. Necessary stuff now done in init_signal.
+ * emacs.c, xdisp.c: Include "atimer.h", since we invoke atimer functions.
+ * 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
+ * floatfns.c: Do not include "syssignal.h"; no longer needed.
+ * gtkutil.c (xg_get_file_name, xg_get_font):
+ Remove no-longer-needed signal-mask manipulation.
+ * keyboard.c, process.c (POLL_FOR_INPUT):
+ Don't depend on USE_ASYNC_EVENTS, a symbol that is never defined.
+ * 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.
++ (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.
+ * keyboard.c (gobble_input, handle_user_signal):
+ * process.c (wait_reading_process_output):
+ Call signal-handling code rather than killing ourselves.
+ * 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.
+ * 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.
+ * 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.
+ * syssignal.h: Include <stdbool.h>.
+ (emacs_raise): New macro.
+ * 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.
- * profiler.c: Remove filtering functionality.
- (is_in_trace, Qgc): Remove vars.
- (make_log, record_backtrace, Fsample_profiler_log):
- Rewrite, using Elisp hash-tables.
- (approximate_median, evict_lower_half): New functions.
- (cpu_log): Rename from sample_log.
- (cpu_gc_count): New var.
- (Fsample_profiler_reset, Fmemory_profiler_reset): Remove.
- (sigprof_handler): Add count to cpu_gc_count during GC, detected via
- backtrace_list.
- (block_sigprof, unblock_sigprof): Remove.
- (gc_probe, mark_profiler): Remove functions.
- (syms_of_profiler): Staticpro cpu_log and memory_log.
-
- * lisp.h (SXHASH_COMBINE): Move back to...
- * fns.c (SXHASH_COMBINE): ...here.
-
- * alloc.c (Fgarbage_collect): Record itself in backtrace_list.
- Don't set is_in_trace any more. Don't call mark_profiler.
- Only call gc_probe for the memory profiler.
- (syms_of_alloc): Define Qautomatic_gc.
+2012-09-23 Jan Djärv <jan.h.d@swipnet.se>
+
+ * nsterm.m (ns_dumpglyphs_image): dr is a new rect to draw image into,
+ background rect may be larger (Bug#12245).
+
+2012-09-23 Chong Yidong <cyd@gnu.org>
+
+ * keyboard.c (timer_check): Avoid quitting during Fcopy_sequence.
+
+2012-09-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ * .gdbinit: Just stop at fatal_error_backtrace.
+ See Stefan Monnier's request in
+ <http://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00549.html>.
+ Remove no-longer-used query of system type.
+
+2012-09-22 Chong Yidong <cyd@gnu.org>
+
+ * search.c (Freplace_match): Doc fix (Bug#12325).
+
+ * minibuf.c (Finternal_complete_buffer): Doc fix (Bug#12391).
+
+ * editfns.c (Fline_beginning_position): Doc fix (Bug#12416).
+ (Fline_end_position): Doc fix.
+
+ * cmds.c (Fforward_char, Fbackward_char): Doc fix (Bug#12414).
+
+2012-09-22 Chong Yidong <cyd@gnu.org>
+
+ * dispextern.h (struct image_type): Add new slot, storing a type
+ initialization function.
+
+ * image.c (define_image_type): Call the image initializer function
+ if it is defined. Arguments and return value changed.
+ (valid_image_p, make_image): Callers changed.
+ (xbm_type, xpm_type, pbm_type, png_type, jpeg_type, tiff_type)
- (gif_type, imagemagick_type, svg_type, gs_type): Add
- initialization functions.
++ (gif_type, imagemagick_type, svg_type, gs_type):
++ Add initialization functions.
+ (Finit_image_library): Call lookup_image_type.
+ (CHECK_LIB_AVAILABLE): Macro deleted.
+ (lookup_image_type): Call define_image_type here, rather than via
+ Finit_image_library, and without using CHECK_LIB_AVAILABLE.
+ (syms_of_image): Move define_image_type calls for xbm_type and
+ pbm_type to lookup_image_type.
+
+2012-09-22 Eli Zaretskii <eliz@gnu.org>
+
+ * keyboard.c (timer_check_2): Move calculation of 'timers' and
+ 'idle_timers' from here ...
+ (timer_check): ... to here. Use Fcopy_sequence to copy the timer
+ lists, to avoid infloops when the timer does something stupid,
+ like reinvoke itself with the same or smaller time-out.
+ (Bug#12447)
+
+2012-09-22 Martin Rudalics <rudalics@gmx.at>
+
+ * window.c (Fsplit_window_internal): Handle only Qt value of
+ Vwindow_combination_limit separately.
+ (Qtemp_buffer_resize): New symbol.
- (Vwindow_combination_limit): New default value. Rewrite
- doc-string.
++ (Vwindow_combination_limit): New default value.
++ Rewrite doc-string.
+
+2012-09-22 Eli Zaretskii <eliz@gnu.org>
+
+ * xdisp.c (next_overlay_string): Initialize it->end_charpos for
+ the new overlay string. (Bug#10159)
+
+2012-09-22 Paul Eggert <eggert@cs.ucla.edu>
+
+ * emacs.c (shut_down_emacs): Don't assume stderr is buffered,
+ or that fprintf is async-signal-safe. POSIX doesn't require
+ either assumption.
+
+2012-09-22 Chong Yidong <cyd@gnu.org>
+
+ * buffer.c (Fset_buffer_modified_p): Handle indirect buffers
+ (Bug#8207).
+
+2012-09-22 Kenichi Handa <handa@gnu.org>
+
+ * composite.c (composition_reseat_it): Handle the case that a
+ grapheme cluster is not covered by a single font (Bug#12352).
+
+2012-09-21 Chong Yidong <cyd@gnu.org>
+
+ * image.c (define_image_type): Avoid adding duplicate types to
+ image_types (Bug#12463). Suggested by Jörg Walter.
+
+2012-09-21 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * unexmacosx.c: Define LC_DATA_IN_CODE if not defined.
+ (print_load_command_name): Add case LC_DATA_IN_CODE.
+ (dump_it) [LC_DATA_IN_CODE]: Call copy_linkedit_data.
+
+2012-09-21 Glenn Morris <rgm@gnu.org>
+
+ * eval.c (Frun_hook_with_args_until_success)
+ (Frun_hook_with_args_until_failure): Doc fixes. (Bug#12393)
+
+2012-09-21 Andreas Schwab <schwab@linux-m68k.org>
+
+ * fileio.c (Ffile_selinux_context): Only call freecon when
+ lgetfilecon succeeded.
+ (Fset_file_selinux_context): Likewise. (Bug#12444)
+
+2012-09-21 Eli Zaretskii <eliz@gnu.org>
+
+ * xdisp.c (try_window_reusing_current_matrix): Under bidi
+ reordering, locate the cursor by calling set_cursor_from_row; if
+ that fails, clear the desired glyph matrix before returning a
+ failure indication to the caller. Fixes leaving garbled display
+ when fast scrolling with a down-key. (Bug#12403)
+ (compute_stop_pos_backwards): Fix a typo that caused crashes while
+ scrolling through multibyte text.
+
+2012-09-20 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * alloc.c (mark_object) <PVEC_WINDOW>: Mark prev/next_buffers *after*
+ calling mark_vectorlike since that's the one that marks the window.
+ (mark_discard_killed_buffers): Mark the final cdr.
+ * window.h (struct window): Move prev/next_buffers to the
+ non-standard fields.
+ * window.c (make_window): Initialize prev/next_buffers manually.
+
+2012-09-20 Paul Eggert <eggert@cs.ucla.edu>
+
+ Omit unused arg EXPECTED from socket hooks.
+ * keyboard.c (gobble_input, read_avail_input, tty_read_avail_input):
+ * nsterm.m (ns_term_init):
+ * termhooks.h (struct terminal.read_socket_hook):
+ * w32inevt.c (w32_console_read_socket):
+ * w32term.c (w32_read_socket):
+ * xterm.c (XTread_socket):
+ Omit unused arg EXPECTED. All callers changed.
+ (store_user_signal_events): Return void, not int, since callers no
+ longer care about the return value. All uses changed.
+
+2012-09-20 Juanma Barranquero <lekktu@gmail.com>
+
+ * w32gui.h (XParseGeometry): Do not declare.
+
+2012-09-19 Paul Eggert <eggert@cs.ucla.edu>
+
+ * w32inevt.c (w32_console_read_socket): Return -1 on failure, not 0.
+ Ignore 'expected'. See Eli Zaretskii in
+ <http://bugs.gnu.org/12471#8> (last line).
+
+ * frame.c (read_integer): Remove. All uses replaced by strtol/strtoul.
+ (XParseGeometry): Now static. Substitute extremal values for
+ values that are out of range.
+
+2012-09-19 Jan Djärv <jan.h.d@swipnet.se>
+
+ * w32xfns.c (read_integer, XParseGeometry): Move to frame.c.
+
+ * nsfns.m (XParseGeometry): Remove.
+ (Fx_create_frame): Call x_set_offset to correctly interpret
+ top_pos in geometry.
+
- * frame.c (read_integer, XParseGeometry): Moved from w32xfns.c.
++ * frame.c (read_integer, XParseGeometry): Move from w32xfns.c.
+ (Fx_parse_geometry): If there is a space in string, call
+ Qns_parse_geometry, otherwise do as on other terms (Bug#12368).
+
+2012-09-17 Eli Zaretskii <eliz@gnu.org>
+
+ * search.c (scan_buffer): Use character positions in calls to
+ region_cache_forward and region_cache_backward, not byte
+ positions. (Bug#12196)
+
+ * w32term.c (w32_read_socket): Set pending_signals to 1, like
+ xterm.c does. Reported by Daniel Colascione <dancol@dancol.org>.
+
+ * ralloc.c (r_alloc_init) [!SYSTEM_MALLOC]: Initialize
+ __malloc_extra_blocks to 32 instead of 64, like alloc.c did in
+ emacs_blocked_malloc, now deleted.
+
+2012-09-17 Paul Eggert <eggert@cs.ucla.edu>
+
+ Remove no-longer-needed Solaris 2.4 vfork bug workaround.
+ The workaround was for improving performance on Solaris 2.4, but
+ is getting in the way now. Emacs will still work if someone is
+ still running Solaris 2.4 in a museum somewhere; Sun dropped
+ support for Solaris 2.4 in 2003.
+ * callproc.c (Fcall_process) [HAVE_WORKING_VFORK]:
+ * process.c (create_process) [HAVE_WORKING_VFORK]:
+ Omit now-unnecessary workaround for the Solaris 2.4 vfork bug,
+ since Emacs no longer uses vfork on that platform.
+
+2012-09-17 Glenn Morris <rgm@gnu.org>
+
+ * emacs.c: Use COPYRIGHT.
+
+2012-09-16 Paul Eggert <eggert@cs.ucla.edu>
+
+ Remove configure's --without-sync-input option (Bug#12450).
+ When auditing signal-handling in preparation for cleaning it up,
+ I found that SYNC_INPUT has race conditions and would be a real
+ pain to fix. Since it's an undocumented and deprecated
+ configure-time option, now seems like a good time to remove it.
+ Also see <http://bugs.gnu.org/11080#16>.
+ * alloc.c (_bytes_used, __malloc_extra_blocks, _malloc_internal)
+ (_free_internal) [!DOUG_LEA_MALLOC]: Remove decls.
+ (alloc_mutex) [!SYSTEM_MALLOC && !SYNC_INPUT && HAVE_PTHREAD]:
+ (malloc_hysteresis):
+ (check_depth) [XMALLOC_OVERRUN_CHECK]:
+ (MALLOC_BLOCK_INPUT, MALLOC_UNBLOCK_INPUT):
+ (__malloc_hook, __realloc_hook, __free_hook, BYTES_USED)
+ (dont_register_blocks, bytes_used_when_reconsidered)
+ (bytes_used_when_full, emacs_blocked_free, emacs_blocked_malloc)
+ (emacs_blocked_realloc, reset_malloc_hooks, uninterrupt_malloc):
+ [!SYSTEM_MALLOC && !SYNC_INPUT]:
+ Remove. All uses removed.
+ (MALLOC_BLOCK_INPUT, MALLOC_UNBLOCK_INPUT): Use a different
+ implementation, one that depends on whether the new macro
+ XMALLOC_BLOCK_INPUT_CHECK is defined, not on whether SYNC_INPUT
+ is defined.
+ * atimer.c (run_timers, handle_alarm_signal):
+ * keyboard.c (pending_signal, poll_for_input_1, poll_for_input)
+ (handle_async_input, process_pending_signals)
+ (handle_input_available_signal, init_keyboard):
+ * nsterm.m (ns_read_socket):
+ * process.c (wait_reading_process_output):
+ * regex.c (immediate_quit, IMMEDIATE_QUIT_CHECK):
+ * sysdep.c (emacs_sigaction_init) [SA_RESTART]:
+ (emacs_write):
+ * xterm.c (XTread_socket):
+ Assume SYNC_INPUT.
+ * conf_post.h (SA_RESTART) [IRIX6_5]: Do not #undef.
+ * eval.c (handling_signal): Remove. All uses removed.
+ * lisp.h (ELSE_PENDING_SIGNALS): Remove.
+ All uses replaced with the SYNC_INPUT version.
+ (reset_malloc_hooks, uninterrupt_malloc, handling_signal):
+ Remove decls.
+ * sysdep.c, syssignal.h (main_thread) [FORWARD_SIGNAL_TO_MAIN_THREAD]:
+ Now static.
+
+ * font.c (Ffont_shape_gstring): Remove unused local.
+
+2012-09-16 Glenn Morris <rgm@gnu.org>
+
+ * Makefile.in (clean): No longer run nextstep's clean.
+
+ * Makefile.in (ns_appdir, ns_appbindir, ns_appsrc): Remove variables.
+ (ns_frag): Remove.
+ (ns-app): Move here from ns.mk, and simplify.
+ (clean): Simplify nextstep entry.
+ * ns.mk: Remove file.
+
+2012-09-17 Kenichi Handa <handa@gnu.org>
+
+ * font.c (Ffont_shape_gstring): Fix previous change; GLYPHs may
+ not covert the last few charactes.
+
+2012-09-16 Kenichi Handa <handa@gnu.org>
+
+ * font.c (Ffont_shape_gstring): Don't adjust grapheme cluster
+ here, but just check the validity of glyphs in the glyph-string.
+
+2012-09-16 Martin Rudalics <rudalics@gmx.at>
+
- * window.c (Fwindow_parameter, Fset_window_parameter): Accept
- any window as argument (Bug#12452).
++ * window.c (Fwindow_parameter, Fset_window_parameter):
++ Accept any window as argument (Bug#12452).
+
+2012-09-16 Jan Djärv <jan.h.d@swipnet.se>
+
+ * nsfns.m (Fx_open_connection): Move initialization of ns_*_types
+ to ns_term_init to avoid memory leak.
+
+ * nsterm.m (ns_update_begin): Initialize bp after lcokFocus, use
+ explicit retain/release.
+ (ns_term_init): Only allow one display. Initialize outerpool and
+ ns_*_types.
+
+2012-09-15 Paul Eggert <eggert@cs.ucla.edu>
+
+ Port _setjmp fix to POSIXish hosts as well as Microsoft.
+ * image.c (_setjmp) [!HAVE__SETJMP]: Restore definition, as
+ it's needed on POSIXish hosts that lack _setjmp. Attempt to solve
+ the Microsoft problem in a different way, by altering ../nt/config.nt.
+
+2012-09-15 Eli Zaretskii <eliz@gnu.org>
+
+ * w32xfns.c:
+ * w32uniscribe.c:
+ * w32term.c:
+ * w32select.c:
+ * w32reg.c:
+ * w32proc.c:
+ * w32menu.c:
+ * w32inevt.c:
+ * w32heap.c:
+ * w32font.c:
+ * w32fns.c:
+ * w32console.c:
+ * w32.c:
+ * w16select.c: Remove inclusion of setjmp.h, as it is now included
+ by lisp.h. This completes removal of setjmp.h inclusion
+ erroneously announced in the previous commit. (Bug#12446)
+
+ * lisp.h [!HAVE__SETJMP, !HAVE_SIGSETJMP]: Make the commentary
+ more accurate.
+
+ * image.c (_setjmp) [!HAVE__SETJMP]: Define only if 'setjmp' is
+ not defined as a macro. The latter happens on MS-Windows.
+ (Bug#12446)
+
+2012-09-15 Paul Eggert <eggert@cs.ucla.edu>
+
+ Port better to POSIX hosts lacking _setjmp (Bug#12446).
+ * lisp.h: Include <setjmp.h> here, since we use its symbols here.
+ Some 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.)
+ * 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.
+
+2012-09-14 Paul Eggert <eggert@cs.ucla.edu>
+
+ * alloc.c [!SYSTEM_MALLOC && !SYNC_INPUT && HAVE_PTHREAD]:
+ Include "syssignal.h", for 'main_thread'.
+
+2012-09-14 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Avoid out-of-range marker position (Bug#12426).
- * insdel.c (replace_range, replace_range_2): Adjust
- markers before overlays, as suggested by comments.
++ * insdel.c (replace_range, replace_range_2):
++ Adjust markers before overlays, as suggested by comments.
+ (insert_1_both, insert_from_buffer_1, adjust_after_replace):
+ Remove redundant check before calling offset_intervals.
+
+2012-09-14 Martin Rudalics <rudalics@gmx.at>
+
+ * xdisp.c (Fformat_mode_line): Unconditionally save/restore
+ current buffer (Bug#12387).
+
+2012-09-14 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in ($(BLD)/alloc.$(O)): Update dependencies.
+
+2012-09-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ Use a more backwards-compatible timer format (Bug#12430).
+ * keyboard.c (decode_timer): Get PSECS from the 8th (origin-0)
+ vector element, not from the 4th, since PSECS is now at the end.
+ (Fcurrent_idle_time): Doc fix.
+
+2012-09-13 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Function to mark objects and remove killed buffers at once.
+ * alloc.c (discard_killed_buffers): Rename to ...
+ (mark_discard_killed buffers) ... new name. Add marking
+ of remaining objects. Fix comment. Adjust users.
+ (mark_object): Do not touch frame buffer lists here.
+ * frame.c (delete_frame): Reset frame buffer lists here.
+
+2012-09-13 Paul Eggert <eggert@cs.ucla.edu>
+
+ Better workaround for GNOME bug when --enable-gcc-warnings.
+ * emacsgtkfixed.c (G_STATIC_ASSERT): Remove, undoing last change.
+ Instead, disable -Wunused-local-typedefs. See Dmitry Antipov in
+ <http://lists.gnu.org/archive/html/emacs-devel/2012-09/msg00335.html>.
+
+ Simplify SIGIO usage (Bug#12408).
+ The code that dealt with SIGIO was crufty and confusing, e.g., it
+ played tricks like "#undef SIGIO" but these tricks were not used
+ consistently. Simplify mostly by not #undeffing standard symbols,
+ e.g., use "defined USABLE_SIGIO" (our symbol, which we can define
+ or not as we please) rather than "defined SIGIO" (standard symbol
+ that we probably shouldn't #undef).
+ * conf_post.h [USG5_4]: Do not include <sys/wait.h> here.
+ Modules that need it can include it.
+ [USG5_4 && emacs]: Likewise, do not include the streams stuff here.
+ * dispextern.h (ignore_sigio): New decl.
+ * emacs.c (shut_down_emacs): Invoke unrequest_sigio
+ unconditionally, since it's now a no-op if !USABLE_SIGIO.
+ * emacs.c (shut_down_emacs):
+ * keyboard.c (kbd_buffer_store_event_hold):
+ Use ignore_sigio rather than invoking 'signal' directly.
+ * keyboard.c (USABLE_FIONREAD && USG5_4): Include <sys/filio.h>,
+ for FIONREAD.
+ (FIONREAD, SIGIO): Do not #undef.
+ (tty_read_avail_input): Use #error rather than a syntax error.
+ * process.c [USG5_4]: Include <sys/stream.h> and <sys/stropts.h>,
+ for I_PIPE, used by SETUP_SLAVE_PTY.
+ (DATAGRAM_SOCKETS): Simplify defn, based on USABLE_FIONREAD.
+ * sysdep.c (croak): Remove; no longer needed. This bit of
+ temporary code, with Fred N. Fish's comment that it's temporary,
+ has been in Emacs since at least 1992!
+ (init_sigio, reset_sigio, request_sigio, unrequest_sigio):
+ Arrange for them to be no-ops in all cases when ! USABLE_SIGIO.
+ * syssignal.h (croak): Remove decl.
+ (SIGIO, SIGPOO, SIGAIO, SIGPTY): Do not #undef; that's too fragile.
+ * systty.h [!NO_TERMIO]: Do not include <termio.h>; no longer needed
+ now that we're termios-only.
+ (FIONREAD, ASYNC) [BROKEN_FIONREAD]: Do not #undef.
+ * term.c (dissociate_if_controlling_tty): Use #error rather than
+ a run-time error.
+
+ Work around GCC and GNOME bugs when --enable-gcc-warnings.
+ * emacsgtkfixed.c (G_STATIC_ASSERT): Redefine to use 'verify',
+ to work around GNOME bug 683906.
+ * image.c (jpeg_load_body) [HAVE_JPEG && lint]: Pacify gcc -Wclobber.
+ (struct my_jpeg_error_mgr) [HAVE_JPEG && lint]: New member fp.
+ This works around GCC bug 54561.
+
+2012-09-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ More fixes for 'volatile' and setjmp/longjmp.
+ * eval.c (Fdefvar, Fcondition_case): Remove unnecessary 'volatile's.
+ * image.c (struct png_load_context) [HAVE_PNG]: New type.
+ (png_load_body) [HAVE_PNG]:
+ (jpeg_load_body) [HAVE_JPEG]:
+ New function, with most of the old parent function's body.
+ (png_load) [HAVE_PNG]:
+ (jpeg_load) [HAVE_JPEG]:
+ Invoke the new function, to avoid longjmp munging our locals.
+ (struct my_jpeg_error_mgr) [HAVE_JPEG]: New members cinfo, failure_code.
+ (my_error_exit) [HAVE_JPEG]: Don't trust 'setjmp' to return 2 when
+ longjmp is passed 2, as the C standard doesn't guarantee this.
+ Instead, store the failure code into mgr->failure_code.
+
+2012-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * 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.
+
+2012-09-12 Eli Zaretskii <eliz@gnu.org>
+
+ * w32proc.c (sys_kill): If PID is our process ID and the signal is
+ SIGABRT, call emacs_abort. Avoids silently exiting upon assertion
+ violation. (Bug#12426)
+
+2012-09-12 Paul Eggert <eggert@cs.ucla.edu>
+
+ * image.c (jpeg_memory_src): Don't assume string len fits in unsigned.
+
+2012-09-12 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * eval.c: Add `inhibit-debugger'.
+ (Qinhibit_debugger): New symbol.
+ (call_debugger): Bind it instead of Qdebug_on_error.
+ (maybe_call_debugger): Test Vinhibit_debugger.
+ (syms_of_eval): Define inhibit-debugger.
+ * xdisp.c (set_message): Don't bind Qinhibit_debug_on_message.
+ (syms_of_xdisp): Remove inhibit-debug-on-message.
+
+2012-09-11 Paul Eggert <eggert@cs.ucla.edu>
+
+ Avoid _setjmp/_longjmp problems with local nonvolatile variables.
+ If a nonvolatile local variable is written before a _longjmp to
+ the frame containing the variable, and is read after the _longjmp,
+ the value read is indeterminate. Some local variables of type
+ 'struct handler' and 'struct catchtag' are used in this way, so
+ mark each of their slots as volatile if the slot can be set before
+ _longjmp and read afterwards.
+ * lisp.h (struct handler): var and chosen_clause are now volatile.
+ (struct catchtag): val, next, and pdlcount are now volatile.
+
+ * bidi.c (bidi_push_it, bidi_pop_it):
+ * fns.c (copy_hash_table):
+ * image.c (define_image_type):
+ * keyboard.c (kbd_buffer_store_event_hold):
+ * process.c (Fprocess_send_eof):
+ * xfaces.c (x_create_gc) [HAVE_NS]:
+ * xgselect.c (xg_select):
+ Prefer assignment to memcpy when either will do.
+
+ * alloc.c (discard_killed_buffers): Tune and simplify a bit.
+ Use pointer-to-a-pointer to simplify and avoid a NILP check each
+ time an item is removed. No need to mark this function 'inline';
+ the compiler knows better than we do.
+
+2012-09-11 Jan Djärv <jan.h.d@swipnet.se>
+
+ * nsterm.m (ns_judge_scroll_bars): Pass NO to updateFrameSize.
+ (updateFrameSize:): Add delay parameter to updateFrameSize, send it
+ to change_frame_size (Bug#12388).
+ (windowDidResize:): Pass YES to updateFrameSize.
+
+ * nsterm.h: Add delay parameter to updateFrameSize.
+
+2012-09-11 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Discard killed buffers from deleted window and frame objects.
+ 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.
+
+2012-09-11 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Convenient macro to check whether the buffer is live.
+ * buffer.h (BUFFER_LIVE_P): New macro.
+ * alloc.c, buffer.c, editfns.c, insdel.c, lread.c, marker.c:
+ * minibuf.c, print.c, process.c, window.c, xdisp.c: Use it.
+
+2012-09-11 YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
+
+ * xdisp.c (right_overwritten, right_overwriting): Also handle gstring
+ composition cases (Bug#12364).
+
+ * xterm.c (x_draw_glyph_string): Avoid overwriting inverted left
+ overhang of succeeding glyphs overlapping box cursor.
+
+ * w32term.c (x_draw_glyph_string): Likewise.
+
+2012-09-11 Paul Eggert <eggert@cs.ucla.edu>
+
+ Simplify, document, and port floating-point (Bug#12381).
+ The porting part of this patch fixes bugs on non-IEEE platforms
+ with frexp, ldexp, logb.
+ * data.c, lisp.h (Qdomain_error, Qsingularity_error, Qunderflow_error):
+ Now static.
+ * 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.
+
+ * xdisp.c (Qinhibit_debug_on_message): Now static.
+
+2012-09-10 Jan Djärv <jan.h.d@swipnet.se>
+
+ * nsterm.m (ns_update_begin): Set clip path to whole view by using
+ NSBezierPath (Bug#12131).
+
+2012-09-10 Chong Yidong <cyd@gnu.org>
+
+ * fns.c (Fdelq, Fdelete): Doc fix.
+
+2012-09-10 Paul Eggert <eggert@cs.ucla.edu>
+
+ * lisp.h (XSETINT, XSETCONS, XSETVECTOR, XSETSTRING, XSETSYMBOL)
+ (XSETFLOAT, XSETMISC): Parenthesize macro bodies.
+
+2012-09-09 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lisp.h (make_lisp_ptr): New macro to replace XSET.
+ (XSETCONS, XSETVECTOR, XSETSTRING, XSETSYMBOL, XSETFLOAT, XSETMISC):
+ Use it.
+
+2012-09-09 Eli Zaretskii <eliz@gnu.org>
+
+ * fringe.c (draw_fringe_bitmap_1): Don't reduce the width of the
+ left fringe if the window has a left margin. This avoids leaving
+ traces of the cursor because its leftmost pixel is not drawn over.
+
+ * dispnew.c (update_window_line): When the left margin area of a
+ screen line is updated, set the redraw_fringe_bitmaps_p flag of
+ that screen line. (Bug#12277)
+
+2012-09-09 Paul Eggert <eggert@cs.ucla.edu>
+
+ Assume C89 or later for math functions (Bug#12381).
+ 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.
+ * data.c, image.c, lread.c, print.c:
+ Don't include <math.h>; no longer needed.
+ * data.c, floatfns.c (IEEE_FLOATING_POINT): Don't worry that it
+ might be autoconfigured, as that never happens.
+ * data.c (fmod):
+ * doprnt.c (DBL_MAX_10_EXP):
+ * print.c (DBL_DIG):
+ Remove. C89 or later always defines these.
+ * 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.
+
+2012-09-08 Jan Djärv <jan.h.d@swipnet.se>
+
+ * nsterm.m (ns_draw_fringe_bitmap, ns_dumpglyphs_image): Take back
+ compositeToPoint for OSX < 10.6 (Bug#12390).
+
+2012-09-08 Paul Eggert <eggert@cs.ucla.edu>
+
+ * floatfns.c (Ftan): Use tan (x), not (sin (x) / cos (x)).
+ This produces more-accurate results.
+
+2012-09-08 Jan Djärv <jan.h.d@swipnet.se>
+
+ * nsterm.m (updateFrameSize): Call setFrame: on the view when size
+ changes (Bug#12088).
+
+2012-09-08 Chong Yidong <cyd@gnu.org>
+
+ * syntax.c (Fstring_to_syntax): Doc fix.
+
+2012-09-08 Jan Djärv <jan.h.d@swipnet.se>
+
+ * nsterm.m (ns_clip_to_row): Remove code that deals with drawing fringe
+ in the internal border.
+ (x_set_window_size): Remove static variables and their usage.
+ (ns_redraw_scroll_bars): Fix NSTRACE arg.
- (ns_after_update_window_line, ns_draw_fringe_bitmap): Remove
- fringe/internal border adjustment (Bug#11052).
++ (ns_after_update_window_line, ns_draw_fringe_bitmap):
++ Remove fringe/internal border adjustment (Bug#11052).
+ (ns_draw_fringe_bitmap): Make code more like other terms (xterm.c).
+ (ns_draw_window_cursor): Remove fringe/internal border adjustment.
+ (ns_fix_rect_ibw): Remove.
+ (ns_get_glyph_string_clip_rect): Remove call to ns_fix_rect_ibw.
+ (ns_dumpglyphs_box_or_relief): Ditto.
+ (ns_maybe_dumpglyphs_background): Remove fringe/internal border
+ adjustment.
+ (ns_dumpglyphs_image): Ditto.
+ (ns_dumpglyphs_stretch): Fix coding style. Remove fringe/internal
+ border adjustment.
+ (ns_set_vertical_scroll_bar): Remove variables barOnVeryLeft/Right and
+ their usage. Add fringe_extended_p and its use as in other terms.
+ (ns_judge_scroll_bars): Code style fix. Call updateFrameSize if
+ scroll bar was removed.
+ (updateFrameSize): New function.
+ (windowDidResize): Move code to updateFrameSize and call it.
+
+ * nsterm.h (EmacsView): Add updateFrameSize.
+
+2012-09-07 Chong Yidong <cyd@gnu.org>
+
+ * textprop.c (Fget_text_property): Minor doc fix (Bug#12323).
+
+ * data.c (Flocal_variable_if_set_p): Doc fix (Bug#10713).
+
+2012-09-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ More signal-handler cleanup (Bug#12327).
+ * emacs.c (main): Convert three 'signal' calls to 'sigaction' calls.
+ Problem introduced when merging patches. Noted by Eli Zaretskii in
+ <http://bugs.gnu.org/12327#67>.
+ * floatfns.c: Comment fix.
+ * lisp.h (force_auto_save_soon): Declare regardless of SIGDANGER.
+ SIGDANGER might not be in scope so "#ifdef SIGDANGER" is not right,
+ and anyway the declaration is harmless even if SIGDANGER is not defined.
+ * syssignal.h (SIGIO): Also #undef if (! defined FIONREAD ||
+ defined BROKEN_FIONREAD). systty.h formerly did this, but other
+ source files not surprisingly expected syssignal.h to define, or
+ not define, SIGIO, and it's cleaner to do it that way, for consistency.
+ Include <sys/ioctl.h>, for FIONREAD.
+ * systty.h (SIGIO): Do not #undef here; it's now syssignal.h's job.
+ This eliminates a problem whereby other files mysteriously had
+ to include "syssignal.h" before including "systty.h" if they
+ wanted to use "#ifdef SIGIO".
+
+2012-09-07 Eli Zaretskii <eliz@gnu.org>
+
+ * w32proc.c (sigaction): New function, emulates Posix 'sigaction'.
+
+ * w32.c (sigemptyset): Empty the set.
+ (sigsetmask, sigmask, sigblock, sigunblock): Remove unused functions.
+
+ * alloc.c [ENABLE_CHECKING]: Include signal.h, since we need SIGABRT.
+
+2012-09-07 Dmitry Antipov <dmantipov@yandex.ru>
+
+ * alloc.c (mark_buffer): Revert unsafe marking optimization.
+ (mark_object): Likewise for frame objects.
+
+2012-09-07 Paul Eggert <eggert@cs.ucla.edu>
+
+ * syssignal.h (handle_on_main_thread): Always declare,
+ even if FORWARD_SIGNAL_TO_MAIN_THREAD is not defined.
+ This ports to platforms without HAVE_PTHREAD.
+
+2012-09-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ Signal-handler cleanup (Bug#12327).
+ 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.
+ * alloc.c, emacsgtkfixed.c, nsfns.m, widget.c, xmenu.c:
+ Do not include <signal.h> or "syssignal.h", as these
+ modules do not use signals.
+ * atimer.c, callproc.c, data.c, dispnew.c, emacs.c, floatfns.c:
+ * gtkutil.c, keyboard.c, process.c, sound.c, sysdep.c, term.c, xterm.c:
+ Do not include <signal.h>, as "syssignal.h" does that for us now.
+ * atimer.c (sigmask_atimers): New function.
+ (block_atimers, unblock_atimers): New functions,
+ replacing the old macros BLOCK_ATIMERS and UNBLOCK_ATIMERS.
+ All uses replaced.
+ * conf_post.h [SIGNAL_H_AHB]: Do not include <signal.h>;
+ no longer needed here.
+ * emacs.c (main): Inspect existing signal handler with sigaction,
+ so that there's no need to block and unblock SIGHUP.
+ * 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.
+ * 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.
+
+2012-09-06 Eli Zaretskii <eliz@gnu.org>
+
+ * process.c (CAN_HANDLE_MULTIPLE_CHILDREN): Fix a typo that broke
+ SIGCHLD handling on systems that don't have WNOHANG. (Bug#12327)
+
+2012-09-06 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Explicitly mark buffer_defaults and buffer_local_symbols.
+ * alloc.c (Fgarbage_collect): Mark buffer_defaults and
+ mark_local_symbols here.
+ (mark_object): If GC_CHECK_MARKED_OBJECTS, simplify checking
+ since special buffers aren't marked here any more.
+ (allocate_buffer): Chain new buffer with all_buffers here...
+ * buffer.c (Fget_buffer_create, Fmake_indirect_buffer): ...and
+ not here.
+ (Vbuffer_defaults, Vbuffer_local_symbols): Remove.
+ (syms_of_buffer): Remove staticpro of the above.
+ (init_buffer_once): Set names for buffer_defaults and
+ buffer_local_symbols.
+
+2012-09-06 Paul Eggert <eggert@cs.ucla.edu>
+
+ Use bool for booleans in font-related modules.
+ * font.c (font_intern_prop, font_style_to_value)
+ (font_style_symbolic, font_parse_xlfd, font_parse_fcname)
+ (generate_otf_features, font_check_otf_features, font_check_otf)
+ (font_match_p, font_list_entities, font_at):
+ * fontset.c (fontset_id_valid_p, reorder_font_vector
+ (fontset_find_font, Fset_fontset_font)
+ (face_suitable_for_char_p) [0]:
+ * ftfont.c (fc_initialized, ftfont_get_open_type_spec)
+ (ftfont_open, ftfont_text_extents, ftfont_check_otf):
+ (m17n_flt_initialized, ftfont_shape_by_flt):
+ * ftxfont.c (ftxfont_draw_bitmap, ftxfont_draw):
+ * nsfont.m (nsfont_draw):
+ * w32font.c (w32font_draw):
+ * w32term.c (x_draw_glyphless_glyph_string_foreground):
+ Use bool for booleans.
+ * font.h: Adjust to above API changes.
+ (struct font, struct font_driver, struct font_driver_list):
+ Use bool for booleans.
+ (struct font): Remove useless member encoding_type.
+ All users removed.
+ * fontset.c, xftfont.c: Omit unnecessary static decls.
+
+2012-09-06 Dmitry Antipov <dmantipov@yandex.ru>
+
+ * alloc.c (mark_object): Revert window marking code
+ since it's unsafe for the Fset_window_configuration.
+
+2012-09-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix race conditions with signal handlers and errno (Bug#12327).
+ 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.
++ replacing the old SIGNAL_THREAD_CHECK. All uses changed.
++ This lets callers save and restore errno properly.
+
+2012-09-05 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Remove redundant or unused things here and there.
+ * lisp.h (CYCLE_CHECK, CHAR_TABLE_TRANSLATE): Remove.
+ * conf_post.h (RE_TRANSLATE): Use char_table_translate.
+ * editfns.c (Fcompare_buffer_substrings): Likewise.
+ * frame.h (struct terminal, struct font_driver_list):
+ Remove redundant declarations.
+ * window.h (Qleft, Qright): Likewise.
+
+2012-09-05 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Do not mark objects from deleted buffers, windows and frames.
+ * alloc.c (mark_buffer): Mark just the buffer if it is dead.
+ (mark_object): Likewise for windows and frames.
+
+2012-09-05 Dmitry Antipov <dmantipov@yandex.ru>
+
+ * alloc.c (valid_lisp_object_p): Treat killed buffers,
+ buffer_defaults and buffer_local_symbols as valid objects.
+ Return special value to denote them.
+
+2012-09-05 Paul Eggert <eggert@cs.ucla.edu>
+
+ * fileio.c, filelock.c, floatfns.c, fns.c: Use bool for boolean.
+ * fileio.c (auto_saving, auto_save_error_occurred, make_temp_name)
+ (Fexpand_file_name, barf_or_query_if_file_exists, Fcopy_file)
+ (file_name_absolute_p, Fsubstitute_in_file_name):
+ (check_executable, check_writable, Ffile_accessible_directory_p)
+ (Fset_file_selinux_context, Fdefault_file_modes)
+ (Finsert_file_contents, choose_write_coding_system)
+ (Fwrite_region, build_annotations, a_write, e_write)
+ (Fdo_auto_save):
+ * filelock.c (boot_time_initialized, get_boot_time)
+ (get_boot_time_1, lock_file_1, within_one_second):
+ * floatfns.c (in_float):
+ * fns.c (concat, internal_equal, Frequire, base64_encode_1)
+ (base64_decode_1, cmpfn_eql, cmpfn_user_defined)
+ (sweep_weak_table, sweep_weak_hash_tables, secure_hash):
+ * lisp.h (struct Lisp_Hash_Table.cmpfn):
+ * window.c (compare_window_configurations):
+ Use bool for booleans.
+ * fileio.c (auto_saving_dir_umask, auto_saving_mode_bits)
+ (Fdefault_file_modes): Now mode_t, not int, for modes.
+ (Fdo_auto_save): Set a boolean to 1 rather than using ++.
+ (internal_delete_file): Now returns void, not a (boolean) int,
+ since nobody was looking at the return value.
+ * lisp.h, window.h: Adjust to above API changes.
+
+ * xdisp.c (set_message): Simplify and reindent last change.
+
+2012-09-05 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in ($(BLD)/sysdep.$(O)): Update dependencies.
+
+2012-09-04 Lars Ingebrigtsen <larsi@gnus.org>
+
+ * eval.c (call_debugger): Make the function non-static so that we
+ can call it from set_message.
+
+ * xdisp.c (set_message): Implement the new variable `debug-on-message'.
+ (syms_of_xdisp): Defvar it and `inhibit-debug-on-message'.
+
+2012-09-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ Give more-useful info on a fatal error (Bug#12328).
+ * alloc.c [ENABLE_CHECKING]: Do not include <execinfo.h>.
+ (die) [ENABLE_CHECKING]: Call fatal_error_backtrace instead
+ of doing the work ourselves.
+ * emacs.c (fatal_error_signal): Let fatal_error_backtrace
+ do most of the work.
+ (fatal_error_backtrace): New function, taken from the guts
+ of the old fatal_error_signal, but with a new option to output
+ a backtrace.
+ (shut_down_emacs) [!DOS_NT]: Use strsignal to give more-useful
+ info about the signal than just its number.
+ * lisp.h (fatal_error_backtrace, emacs_backtrace): New decls.
+ * sysdep.c: Include <execinfo.h>
+ (emacs_backtrace): New function, taken partly from the previous
+ code of the 'die' function.
+ (emacs_abort): Call fatal_error_backtrace rather than abort.
+
+2012-09-04 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * lread.c (readevalloop): Call internal-macroexpand-for-load to perform
+ eager (load-time) macro-expansion.
+ * lisp.mk (lisp): Add macroexp.
+
+2012-09-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ Simplify redefinition of 'abort' (Bug#12316).
+ 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.
+ * .gdbinit: Just stop at emacs_abort, not at w32_abort or abort.
+ * emacs.c (abort) [!DOS_NT && !NO_ABORT]:
+ Remove; sysdep.c's emacs_abort now takes its place.
+ * lisp.h (emacs_abort): New decl. All calls from Emacs code to
+ 'abort' changed to use 'emacs_abort'.
+ * msdos.c (dos_abort) [defined abort]: Remove; not used.
+ (abort) [!defined abort]: Rename to ...
+ (emacs_abort): ... new name.
+ * sysdep.c (emacs_abort) [!HAVE_NTGUI]: New function, taking
+ the place of the old 'abort' in emacs.c.
+ * w32.c, w32fns.c (abort): Do not #undef.
+ * w32.c (emacs_abort): Rename from w32_abort.
+
+2012-09-04 Eli Zaretskii <eliz@gnu.org>
+
+ * w32uniscribe.c (uniscribe_shape): Reverse the sign of
+ offsets[j].dv, since the y axis of the screen coordinates points
+ down, while the y axis of the font definition coordinates points
+ up. This fixes display of Arabic diacritics such as KASRA and
+ KASRATAN. (Bug#11860)
+
+2012-09-04 Paul Eggert <eggert@cs.ucla.edu>
+
+ Be more systematic about _setjmp vs setjmp.
+ * alloc.c (test_setjmp, mark_stack):
+ * image.c (PNG_LONGJMP) [PNG_LIBPNG_VER < 10500]:
+ (PNG_JMPBUF) [! (PNG_LIBPNG_VER < 10500)]:
+ (png_load, my_error_exit, jpeg_load):
+ * process.c (send_process_trap, send_process):
+ Uniformly prefer _setjmp and _longjmp to setjmp and longjmp.
+ The underscored versions are up to 30x faster on some hosts.
+ Formerly, the code used setjmp+longjmp sometimes and
+ _setjmp+_longjmp at other times, with no particular reason to
+ prefer setjmp+longjmp.
+
+2012-09-03 Paul Eggert <eggert@cs.ucla.edu>
+
+ Fix minor problem found by static checking.
+ * buffer.c (Fdelete_all_overlays): Return nil.
+
+2012-09-03 Martin Rudalics <rudalics@gmx.at>
+
+ * buffer.c (Fdelete_all_overlays): New function.
+
+2012-09-03 Chong Yidong <cyd@gnu.org>
+
+ * gtkutil.c: Add extern decl for Qxft.
+
+2012-09-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * emacs.c, eval.c: Use bool for boolean.
+ * emacs.c (initialized, inhibit_window_system, running_asynch_code):
+ (malloc_using_checking) [DOUG_LEA_MALLOC]:
+ (display_arg) [HAVE_X_WINDOWS || HAVE_NS]:
+ (noninteractive, no_site_lisp, fatal_error_in_progress, argmatch)
+ (main, decode_env_path, Fdaemon_initialized):
+ * eval.c (call_debugger, Finteractive_p, interactive_p):
+ (unwind_to_catch, Fsignal, wants_debugger, skip_debugger)
+ (maybe_call_debugger, Fbacktrace):
+ * process.c (read_process_output, exec_sentinel):
+ Use bool for booleans.
+ * emacs.c (shut_down_emacs): Omit unused boolean argument NO_X.
+ All callers changed.
+ * eval.c (interactive_p): Omit always-true boolean argument
+ EXCLUDE_SUBRS_P. All callers changed.
+ * dispextern.h, lisp.h: Reflect above API changes.
+ * firstfile.c (dummy): Use the address of 'main', whose signature
+ won't change, instead of the address of 'initialize', whose
+ signature just changed from int to bool.
+ * lisp.h (fatal_error_in_progress): New decl of boolean, moved here ...
+ * msdos.c (fatal_error_in_progress): ... from here.
+ * xdisp.c (redisplaying_p): Now a boolean. Set it to 1 instead
+ of incrementing it.
+ (redisplay_internal, unwind_redisplay): Simply clear
+ REDISPLAYING_P when unwinding, instead of saving its previous,
+ always-false value and then restoring it.
+
+ Clean up some extern decls.
+ Mostly, this hoists extern decls out of .c files and into .h files.
+ That way, we're more likely to catch errors if the interfaces change.
+ * alloc.c [USE_GTK]: Include "gtkutil.h" so that we need not
+ declare xg_mark_data.
+ * dispextern.h (x_frame_parm_handlers):
+ * font.h (Qxft):
+ * lisp.h (Qlexical_binding, Qinternal_interpreter_environment)
+ (Qextra_light, Qlight, Qsemi_light, Qsemi_bold, Qbold, Qextra_bold)
+ (Qultra_bold, Qoblique, Qitalic):
+ Move extern decl here from .c file.
+ * alloc.c (xg_mark_data) [USE_GTK]:
+ * doc.c (Qclosure):
+ * eval.c (Qlexical_binding):
+ * fns.c (time) [!HAVE_UNISTD_H]:
+ * gtkutil.c (Qxft, Qnormal, Qextra_light, Qlight, Qsemi_light)
+ (Qsemi_bold, Qbold, Qextra_bold, Qultra_bold, Qoblique, Qitalic):
+ * image.c (Vlibrary_cache, QCloaded_from) [HAVE_NTGUI]:
+ * lread.c (Qinternal_interpreter_environment):
+ * minibuf.c (Qbuffer):
+ * process.c (QCfamily, QCfilter):
+ * widget.c (free_frame_faces):
+ * xfaces.c (free_frame_menubar) [USE_X_TOOLKIT]:
+ * xfont.c (x_clear_errors):
+ * xterm.c (x_frame_parm_handlers):
+ Remove now-redundant extern decls.
+ * keyboard.c, keyboard.h (ignore_mouse_drag_p) [USE_GTK || HAVE_NS]:
+ * xfaces.c (Qultra_light, Qreverse_oblique, Qreverse_italic):
+ Now static.
+ * xfaces.c: Remove unnecessary static decls.
+ * xterm.c (updating_frame): Remove decl of nonexistent object.
+
+ * Makefile.in (gl-stamp): Don't scan $(SOME_MACHINE_OBJECTS)
+ when building globals.h, as the objects that are not built on
+ this host are not needed to compile C files on this host.
+
+2012-09-02 Jan Djärv <jan.h.d@swipnet.se>
+
+ * gtkutil.h: Remove prototype for x_wm_set_size_hint.
+
+ * frame.h: Add missing prototype for x_wm_set_size_hint.
+
+2012-09-02 Paul Eggert <eggert@cs.ucla.edu>
+
+ * doc.c, editfns.c, insdel.c, intervals.c: Use bool for boolean.
+ * doc.c (read_bytecode_char, get_doc_string, reread_doc_file)
+ (Fdocumentation, Fdocumentation_property, Fsnarf_documentation)
+ (Fsubstitute_command_keys):
+ * editfns.c (region_limit, find_field, Fconstrain_to_field)
+ (save_excursion_save, save_excursion_restore)
+ (disassemble_lisp_time, decode_time_components, emacs_nmemftime)
+ (format_time_string, general_insert_function)
+ (make_buffer_string, make_buffer_string_both)
+ (Fsubst_char_in_region, Ftranslate_region_internal, Fformat):
+ * insdel.c (check_markers, gap_left, adjust_markers_for_insert)
+ (copy_text, insert_1, insert_1_both, insert_from_string)
+ (insert_from_string_before_markers, insert_from_string_1)
+ (insert_from_buffer, insert_from_buffer_1, replace_range)
+ (replace_range_2, del_range_1, del_range_byte, del_range_both)
+ (del_range_2, modify_region):
+ * intervals.c (intervals_equal, balance_possible_root_interval)
+ (adjust_intervals_for_insertion, merge_properties_sticky)
+ (graft_intervals_into_buffer, lookup_char_property)
+ (adjust_for_invis_intang, set_point_both)
+ (get_property_and_range, compare_string_intervals)
+ (set_intervals_multibyte_1, set_intervals_multibyte):
+ * keyboard.c (decode_timer):
+ Use bool for boolean.
+ * intervals.h, lisp.h, systime.h: Reflect above API changes.
+ * editfns.c (struct info): Use 1-bit unsigned bitfields for booleans.
+
+2012-09-02 Chong Yidong <cyd@gnu.org>
+
+ * keymap.c (push_key_description): Print M-TAB as C-M-i
+ (Bug#11758).
+
+2012-09-02 Juanma Barranquero <lekktu@gmail.com>
+
+ * makefile.w32-in (CCL_H, W32FONT_H): New macros.
+ (ATIMER_H, FONT_H, $(BLD)/alloc.$(O), $(BLD)/callproc.$(O))
+ ($(BLD)/editfns.$(O), $(BLD)/ccl.$(O), $(BLD)/chartab.$(O))
+ ($(BLD)/coding.$(O), $(BLD)/sysdep.$(O), $(BLD)/fontset.$(O))
+ ($(BLD)/sysdep.$(O), $(BLD)/w32fns.$(O), $(BLD)/keyboard.$(O))
+ ($(BLD)/w32term.$(O), $(BLD)/w32menu.$(O), $(BLD)/process.$(O))
+ ($(BLD)/w32font.$(O), $(BLD)/w32uniscribe.$(O)): Update dependencies.
+
+2012-09-01 Eli Zaretskii <eliz@gnu.org>
+
+ * w32uniscribe.c (uniscribe_shape): Handle correctly the case of
+ more than one grapheme cluster passed to the shaper: compute the
+ offset adjustment values separately for each cluster. (Bug#11860)
+
+ * image.c: Restore mistakenly removed inclusion of w32.h. Without
+ it, GCC doesn't see prototypes of w32_delayed_load, and complains
+ about implicit conversions from integer to pointer.
+
+2012-09-01 Daniel Colascione <dancol@dancol.org>
+
+ * w32fns.c (x_display_info_for_name): Prevent crash if w32 window
+ system used too early.
+
+2012-09-01 Paul Eggert <eggert@cs.ucla.edu>
+
+ Better seed support for (random).
+ * emacs.c (main): Call init_random.
+ * fns.c (Frandom): Set the seed from a string argument, if given.
+ Remove long-obsolete Gentzel cruft.
+ * lisp.h, sysdep.c (seed_random): Now takes address and size, not long.
+ (init_random): New function.
+
+2012-09-01 Daniel Colascione <dancol@dancol.org>
+
+ * xterm.h: Add header guards. Declare x_menubar_window_to_frame.
+ Remove x_set_frame_alpha, x_bitmap_icon, x_make_frame_visible,
+ x_make_frame_invisible, x_iconify_frame, x_free_frame_resources,
+ x_wm_set_size_hint, x_query_colors, x_real_positions,
+ x_set_menu_bar_lines, x_char_width, x_char_height, x_sync,
+ x_set_tool_bar_lines, x_activate_menubar, and free_frame_menubar,
+ all of which have been moved to common code.
+
+ * xfaces.c: Include TERM_HEADER instead of listing all possible
+ window-system headers.
+
+ * w32xfns.c (x_sync): Correct definition of x_sync (a no-op here)
+ to match header.
+
+ * w32term.h (FRAME_X_WINDOW): Use FRAME_W32_WINDOW instead of
+ directly accessing frame internals.
+
+ * w32font.h: Include font.h. Define syms_of_w32font and
+ globals_of_w32font.
+
+ * process.c: Include TERM_HEADER instead of listing all possible
+ window-system headers.
+
- * nsterm.h: Remove declarations now in frame.h. Define
- FRAME_X_SCREEN, FRAME_X_VISUAL.
++ * nsterm.h: Remove declarations now in frame.h.
++ Define FRAME_X_SCREEN, FRAME_X_VISUAL.
+
+ * menu.c: Include TERM_HEADER instead of listing all possible
+ window-system headers.
+
+ * keyboard.h: Declare ignore_mouse_drag_p whenever we have a
+ window system.
+
+ * keyboard.c: Include TERM_HEADER instead of listing all possible
+ window-system headers.
+
+ * image.c: Include TERM_HEADER instead of listing all possible
+ window-system headers. Declare Vlibrary_cache when compiling for
+ Windows.
+
+ * gtkutil.h (xg_list_node_): Include xterm.h to pick up needed
+ window system declarations.
+
+ * frame.h: Move common functions here: set_frame_menubar,
+ x_set_window_size, x_sync, x_get_focus_frame,
+ x_set_mouse_position, x_set_mouse_pixel_position,
+ x_make_frame_visible, x_make_frame_invisible, x_iconify_frame,
+ x_char_width, x_char_height, x_pixel_width, x_pixel_height,
+ x_set_frame_alpha, x_set_menu_bar_lines, x_set_tool_bar_lines,
+ x_activate_menubar, x_real_positions, x_bitmap_icon,
+ x_set_menu_bar_lines, free_frame_menubar, x_free_frame_resources,
+ and x_query_colors.
+
+ * frame.c: Include TERM_HEADER instead of listing all possible
+ window-system headers.
+
+ * font.c: Include TERM_HEADER instead of listing all possible
+ window-system headers.
+
+ * emacs.c: Include TERM_HEADER.
+
+ * dispnew.c: Include TERM_HEADER instead of listing all possible
+ window-system headers.
+
+ * ccl.h: Include character.h.
+
+ * Makefile.in: Define WINDOW_SYSTEM_OBJ to hold objects needed for
+ the current window system; include in list of objects to link into
+ Emacs.
+
+2012-08-31 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Remove mark_ttys function and fix tty_display_info initialization.
+ * lisp.h (mark_ttys): Remove prototype.
+ * alloc.c (Fgarbage_collect): Remove redundant (and the only) call
+ to mark_ttys because all possible values of 'top_frame' slot are
+ the frames which are reachable from Vframe_list.
+ * term.c (mark_ttys): Remove.
+ (init_tty): Safely initialize 'top_frame' slot with Qnil.
+
+2012-08-31 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Change struct frame bitfields from unsigned char to unsigned.
+ * frame.h (struct frame): Change type of 'display_preempted',
+ 'visible', 'iconified', 'has_minibuffer', 'wants_modeline',
+ 'auto_raise', 'auto_lower', 'no_split', 'explicit_name',
+ 'window_sizes_changed', 'mouse_moved' and 'pointer_invisible'
+ bitfields from unsigned char to unsigned.
+
+2012-08-31 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Remove unused member of struct x_output and struct w32_output.
+ * xterm.h (struct x_output): Remove unused field 'needs_exposure'.
+ * w32term.h (struct w32_output): Likewise.
+
+2012-08-30 Jan Djärv <jan.h.d@swipnet.se>
+
+ * gtkutil.c (x_wm_set_size_hint): Use 1 col for base_width so it
+ does not become zero (Bug#12234).
+
+2012-08-30 Paul Eggert <eggert@cs.ucla.edu>
+
+ * dispnew.c (update_frame_1): Pacify gcc -Wstrict-overflow
+ for GCC 4.7.1 x86-64.
+
+2012-08-30 Glenn Morris <rgm@gnu.org>
+
+ * lread.c (init_lread): For out-of-tree builds, only add the
+ source directory's site-lisp dir to the load-path if it exists,
+ consistent with in-tree builds. (Bug#12302)
+
+2012-08-28 Jan Djärv <jan.h.d@swipnet.se>
+
+ * nsmenu.m (initWithContentRect:styleMask:backing:defer:): Initialize
+ button_values to NULL. Call setStykeMask so dialogs get a close button.
+ (windowShouldClose:): Set window_closed.
+ (dealloc): New member, free button_values.
+ (process_dialog:): Make member function. Remove window argument,
+ replace window with self. Count buttons and allocate and store values
+ in button_values.
+ (addButton:value:row:): value is int with the name tag. Call setTag
+ with tag. Remove return self, declare return value as void.
+ (addString:row:): Remove return self, declare return value as void.
+ (addSplit): Remove return self, declare return value as void.
+ (clicked:): Remove return self, declare return value as void.
+ Set dialog_return to button_values[seltag]. Code formatting change.
+ (initFromContents:isQuestion:): Adjust call to process_dialog.
+ Code formatting change.
+ (timeout_handler:): Set timer_fired to YES.
+ (runDialogAt:): Set timer_fired to NO.
+ Handle click on close button as quit.
+
+ * nsterm.h (EmacsDialogPanel): Make timer_fired BOOL.
+ Add window_closed and button_values. Add void as return value for
+ add(Button|String|Split). addButton takes int instead of Lisp_Object.
+ Add process_dialog as new member.
+
+2012-08-28 Eli Zaretskii <eliz@gnu.org>
+
+ * ralloc.c (free_bloc): Don't dereference a 'heap' structure if it
+ is not one of the heaps we manage. (Bug#12242)
+
+2012-08-28 Glenn Morris <rgm@gnu.org>
+
+ * eval.c (Fcalled_interactively_p): Doc fix. (Bug#11747)
+
+2012-08-28 Martin Rudalics <rudalics@gmx.at>
+
+ * window.c (Fset_window_configuration): Remove handling of
+ auto-buffer-name window parameter. Install revision of reverted
+ fix.
+
+2012-08-28 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Do not allow to set major mode for a dead buffer.
+ * buffer.c (Fset_buffer_major_mode): Signal an error
+ if the buffer is dead.
+ (Fother_buffer, other_buffer_safely): Remove redundant
+ nested declaration.
+
+2012-08-28 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Always use set_buffer_if_live to restore original buffer at unwind.
+ * buffer.h (record_unwind_current_buffer): New function.
+ * bytecode.c, dispnew.c, editfns.c, fileio.c, fns.c, insdel.c:
+ * keyboard.c, keymap.c, minibuf.c, print.c, process.c, textprop.c:
+ * undo.c, window.c: Adjust users.
+ * buffer.c (set_buffer_if_live): Fix comment.
+
+2012-08-28 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Fix usage of set_buffer_internal.
+ * buffer.h (set_buffer_internal): Make it BUFFER_INLINE.
+ * buffer.c (set_buffer_if_live): Use set_buffer_internal.
+ * coding.c (decode_coding): Omit redundant test.
+ * fileio.c (decide_coding_unwind): Likewise.
+ * fns.c (secure_hash): Likewise.
+ * insdel.c (modify_region): Likewise.
+ * keyboard.c (command_loop_1): Likewise.
+ * print.c (PRINTFINISH): Likewise.
+ * xdisp.c (run_window_scroll_functions): Use set_buffer_internal.
+
+2012-08-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ * dispnew.c: Use bool for boolean.
+ (frame_garbaged, display_completed, delayed_size_change)
+ (fonts_changed_p, add_window_display_history)
+ (add_frame_display_history, verify_row_hash)
+ (adjust_glyph_matrix, clear_window_matrices, glyph_row_slice_p)
+ (row_equal_p, realloc_glyph_pool)
+ (allocate_matrices_for_frame_redisplay)
+ (showing_window_margins_p)
+ (adjust_frame_glyphs_for_frame_redisplay)
+ (build_frame_matrix_from_leaf_window, make_current)
+ (mirrored_line_dance, mirror_line_dance, update_frame)
+ (update_window_tree, update_single_window)
+ (check_current_matrix_flags, update_window, update_text_area)
+ (update_window_line, set_window_update_flags, scrolling_window)
+ (update_frame_1, scrolling, buffer_posn_from_coords)
+ (do_pending_window_change, change_frame_size)
+ (change_frame_size_1, sit_for):
+ Use bool for boolean.
+ (clear_glyph_matrix_rows): Rename from enable_glyph_matrix_rows,
+ and remove last int (actually boolean) argument, which was always 0.
+ All callers changed.
+ * dispextern.h, frame.h, lisp.h: Reflect above API changes.
+ * dispextern.h (struct composition_it): Use bool for boolean.
+ (struct glyph_matrix): Don't assume buffer sizes can fit in 'int'.
+ (struct bidi_it): Use unsigned:1, not int, for boolean prev_was_pdf.
+ * dired.c (file_name_completion):
+ Use bool for boolean. (This was missed in an earlier change.)
+
+2012-08-27 Martin Rudalics <rudalics@gmx.at>
+
+ * window.c (Fset_window_configuration): Revert first part of
+ last change.
+
+2012-08-27 Jan Djärv <jan.h.d@swipnet.se>
+
+ * nsterm.h (NSPanel): New class variable dialog_return.
+
- * nsmenu.m (initWithContentRect:styleMask:backing:defer:): Initialize
- dialog_return.
++ * nsmenu.m (initWithContentRect:styleMask:backing:defer:):
++ Initialize dialog_return.
+ (windowShouldClose:): Use stop instead of stopModalWithCode.
+ (clicked:): Ditto, and also set dialog_return (Bug#12258).
+ (timeout_handler:): Use stop instead of abortModal. Send a dummy
+ event.
+ (runDialogAt:): Make ret Lisp_Object. Set it from dialog_return when
+ modal loop returns.
+
+2012-08-27 Paul Eggert <eggert@cs.ucla.edu>
+
+ * composite.c, data.c, dbusbind.c, dired.c: Use bool for booleans.
+ * 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.
+
+ * cmds.c, coding.c: Use bool for booleans.
+ * cmds.c (move_point, Fself_insert_command):
+ * coding.h (struct composition status, struct coding_system):
+ * coding.c (detect_coding_utf_8, encode_coding_utf_8)
+ (detect_coding_utf_16, encode_coding_utf_16, detect_coding_emacs_mule)
+ (emacs_mule_char, decode_coding_emacs_mule)
+ (encode_coding_emacs_mule, detect_coding_iso_2022)
+ (decode_coding_iso_2022, encode_invocation_designation)
+ (encode_designation_at_bol, encode_coding_iso_2022)
+ (detect_coding_sjis, detect_coding_big5, decode_coding_sjis)
+ (decode_coding_big5, encode_coding_sjis, encode_coding_big5)
+ (detect_coding_ccl, encode_coding_ccl, decode_coding_raw_text)
+ (encode_coding_raw_text, detect_coding_charset)
+ (decode_coding_charset, encode_coding_charset, detect_eol)
+ (detect_coding, get_translation_table, produce_chars)
+ (consume_chars, reused_workbuf_in_use)
+ (make_conversion_work_buffer, code_conversion_save)
+ (decode_coding_object, encode_coding_object)
+ (detect_coding_system, char_encodable_p)
+ (Funencodable_char_position, code_convert_region)
+ (code_convert_string, code_convert_string_norecord)
+ (Fset_coding_system_priority):
+ * fileio.c (Finsert_file_contents):
+ Use bool for booleans.
+ * coding.h, lisp.h: Reflect above API changes.
+ * coding.c: Remove unnecessary static function decls.
+ (detect_coding): Use unsigned, not signed, to copy an unsigned field.
+ (decode_coding, encode_coding, decode_coding_gap): Return 'void',
+ not a boolean 'int', since callers never look at the return value.
+ (ALLOC_CONVERSION_WORK_AREA): Assume caller returns 'void', not 'int'.
+ * coding.h (decoding_buffer_size, encoding_buffer_size)
+ (emacs_mule_string_char): Remove unused extern decls.
+ (struct iso_2022_spec, struct coding_system):
+ Use 'unsigned int : 1' for boolean fields, since there's more than one.
+ (struct emacs_mule_spec): Remove unused field 'full_support'.
+ All initializations removed.
+ * cmds.c (internal_self_insert): Don't assume EMACS_INT fits in 'int'.
+
+2012-08-27 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Fix spare memory change (Bug#12286).
+ * alloc.c (mark_maybe_pointer): Handle MEM_TYPE_SPARE.
+ (valid_lisp_object_p): Likewise.
+
+2012-08-27 Martin Rudalics <rudalics@gmx.at>
+
+ * window.c (Fset_window_configuration): Record any window's old
+ buffer if it's replaced (see Bug#8789). If the new current
+ buffer doesn't appear in the selected window, go to its old
+ point (Bug#12208).
+
+2012-08-27 Dmitry Antipov <dmantipov@yandex.ru>
+
+ Special MEM_TYPE_SPARE to denote reserved memory.
+ * alloc.c (enum mem_type): New memory type.
+ (refill_memory_reserve): Use new type for spare memory.
+ This prevents live_cons_p and live_string_p from incorrect
+ detection of uninitialized objects from spare memory as live.
+
+2012-08-26 Paul Eggert <eggert@cs.ucla.edu>
+
+ Spelling fixes.
+ * Makefile.in (.PHONY): versioclean -> versionclean.
+
+ Remove unused external symbols.
+ * 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.
+
+ * character.c, charset.c, chartab.c: Use bool for booleans.
+ * character.c (lisp_string_width, string_count_byte8)
+ (string_escape_byte8):
+ * charset.c (charset_map_loaded, load_charset_map, read_hex):
+ (load_charset_map_from_file, map_charset_chars)
+ (Fdefine_charset_internal, define_charset_internal)
+ (Fdeclare_equiv_charset, find_charsets_in_text)
+ (Ffind_charset_region, char_charset, Fiso_charset):
+ * chartab.c (sub_char_table_ref, sub_char_table_ref_and_range)
+ (sub_char_table_set, sub_char_table_set_range)
+ (char_table_set_range, optimize_sub_char_table)
+ (map_sub_char_table):
+ Use bool for boolean.
+ * character.c (str_to_unibyte): Omit last boolean argument; it was
+ always 0. All callers changed.
+ * character.h, charset.h: Adjust to match previous changes.
+ * character.h (char_printable_p): Remove decl of nonexistent function.
+ * charset.h (struct charset): Members code_linear_p, iso_chars_96,
+ ascii_compatible_p, supplementary_p, compact_codes_p, unified_p
+ are all boolean, so make them single-bit bitfields.
+
+ * lisp.h (ASET): Remove attempt to detect side effects.
+ It was meant to be temporary and it often doesn't work,
+ because when IDX has side effects the behavior of IDX==IDX
+ is undefined. See Stefan Monnier in
+ <http://lists.gnu.org/archive/html/emacs-devel/2012-08/msg00762.html>.
+
+2012-08-26 Barry OReilly <gundaetiapo@gmail.com> (tiny change)
+
+ * lisp.h (functionp): New function (extracted from Ffunctionp).
+ (FUNCTIONP): Use it.
+ * eval.c (Ffunctionp): Use it.
+
+2012-08-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ * xgselect.c (xg_select): Use auto storage for the GPollFD buffer
+ as that's faster and simpler than static storage. Don't bother
+ with the g_main_context_query overhead if g_main_context_pending
+ says no events are pending.
+ (gfds, gfds_size): Remove these static vars.
+ (xgselect_initialize): Remove; no longer needed.
+ All uses and decls removed.
+
+ * emacs.c (fatal_error_signal_hook): Remove.
+ All uses removed. This leftover from old code was always 0.
+
+ * casefiddle.c, casetab.c, category.c: Use bool for boolean.
+ * casefiddle.c (casify_object, casify_region):
+ * casetab.c (set_case_table):
+ * category.c, category.h (word_boundary_p):
+ * category.h (CHAR_HAS_CATEGORY):
+ Use bool for booleans, instead of int.
+
+2012-08-25 Eli Zaretskii <eliz@gnu.org>
+
+ * makefile.w32-in ($(BLD)/alloc.$(O)): Depend on $(GNU_LIB)/execinfo.h.
+
+2012-08-25 Paul Eggert <eggert@cs.ucla.edu>
+
+ On assertion failure, print backtrace if available.
+ * alloc.c [ENABLE_CHECKING]: Include <execinfo.h>.
+ (die) [ENABLE_CHECKING]: Print a backtrace if available.
+ * Makefile.in (LIB_EXECINFO): New macro.
+ (LIBES): Use it.
+
+ * bytecode.c, callint.c, callproc.c: Use bool for boolean.
+ * bytecode.c (exec_byte_code):
+ * callint.c (check_mark, Fcall_interactively):
+ * callproc.c (Fcall_process, add_env, child_setup, getenv_internal_1)
+ (getenv_internal, sync_process_alive, call_process_exited):
+ * lisp.h (USE_SAFE_ALLOCA):
+ Use bool for booleans, instead of int.
+ * lisp.h, process.h: Adjust prototypes to match above changes.
+ * callint.c (Fcall_interactively): Don't assume the mark's
+ offset fits in 'int'.
+
+2012-08-24 Paul Eggert <eggert@cs.ucla.edu>
+
+ * buffer.c, buffer.h: Use bool for boolean.
+ * buffer.c (reset_buffer_local_variables)
+ (buffer_lisp_local_variables, Fset_buffer_modified_p)
+ (Frestore_buffer_modified_p, Fset_buffer_multibyte):
+ (overlays_at, overlays_in, mouse_face_overlay_overlaps)
+ (overlay_touches_p, overlay_strings, Foverlay_put)
+ (report_overlay_modification, call_overlay_mod_hooks):
+ (mmap_enlarge, mmap_set_vars):
+ * buffer.h (buffer_has_overlays, uppercasep, lowercasep):
+ Use bool for booleans, instead of int.
+ * buffer.c (compact_buffer, mmap_free_1): Return void, not int,
+ since the 1-or-0 return value is always ignored anyway.
+ (mmap_initialized_p):
+ * buffer.h (struct buffer_text.inhibit_shrinking): Now bool, not int.
+ * buffer.h, lisp.h: Adjust prototypes to match above changes.
+
+2012-08-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * bidi.c: Use bool for boolean.
+ This is a bit more readable, and makes the text segment of bidi.o
+ 0.4% smaller on my platform (GCC 4.7.1 x86-64, Fedora 15).
+ Presumably it's faster too.
+ (bidi_initialized, bidi_ignore_explicit_marks_for_paragraph_level):
+ Now bool.
+ (bidi_cache_find_level_change, bidi_cache_iterator_state)
+ (bidi_unshelve_cache, bidi_init_it, bidi_count_bytes)
+ (bidi_char_at_pos, bidi_fetch_char, bidi_paragraph_init)
+ (bidi_explicit_dir_char, bidi_level_of_next_char)
+ (bidi_find_other_level_edge, bidi_move_to_visually_next):
+ Use bool for booleans, instead of int.
+ * dispextern.h (bidi_init_it, bidi_paragraph_init)
+ (bidi_unshelve_cache): Adjust decls to match code.
+
+2012-08-23 Martin Rudalics <rudalics@gmx.at>
+
+ * keyboard.c (Fposn_at_x_y): Do not allow internal window as
+ argument.
+
+2012-08-23 Paul Eggert <eggert@cs.ucla.edu>
+
+ * atimer.c, atimer.h (turn_on_atimers): Use bool for boolean.
+ * atimer.h: Include <stdbool.h>.
+
+2012-08-22 Dan Nicolaescu <dann@gnu.org>
+
+ * frame.h (FRAME_W32_P, FRAME_MSDOS_P, FRAME_NS_P): Change to
+ compile time tests instead of run time tests on systems that do
+ not use them.
+ (FRAME_MAC_P): Remove leftover from deleted code.
+ * frame.c (syms_of_frame): Remove leftover from deleted code.
+
+2012-08-22 Jan Djärv <jan.h.d@swipnet.se>
+
+ * nsterm.m (insertText:): Don't clear modifiers if code is space.
-2012-09-15 Tomohiro Matsuyama <tomo@cx4a.org>
+2012-08-22 Paul Eggert <eggert@cs.ucla.edu>
- * alloc.c (emacs_blocked_malloc): Remove redundant MALLOC_PROBE.
+ * fontset.c (FONTSET_ADD): Return void, not Lisp_Object.
+ Otherwise, the compiler complains about (A?B:C) where B is void
+ and C is Lisp_Object. This fixes an incompatibility with Sun C 5.12.
+ (fontset_add): Return void, for FONTSET_ADD.
2012-08-21 Paul Eggert <eggert@cs.ucla.edu>
process.o gnutls.o callproc.o \
region-cache.o sound.o atimer.o \
doprnt.o intervals.o textprop.o composite.o xml.o \
- $(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ)
+ profiler.o \
+ $(MSDOS_OBJ) $(MSDOS_X_OBJ) $(NS_OBJ) $(CYGWIN_OBJ) $(FONT_OBJ) \
+ $(WINDOW_SYSTEM_OBJ)
obj = $(base_obj) $(NS_OBJC_OBJ)
## Object files used on some machine or other.
#define free overrun_check_free
#endif
-#ifdef SYNC_INPUT
-/* When using SYNC_INPUT, we don't call malloc from a signal handler, so
- there's no need to block input around malloc. */
-#define MALLOC_BLOCK_INPUT ((void)0)
-#define MALLOC_UNBLOCK_INPUT ((void)0)
+/* If compiled with XMALLOC_BLOCK_INPUT_CHECK, define a symbol
+ BLOCK_INPUT_IN_MEMORY_ALLOCATORS that is visible to the debugger.
+ If that variable is set, block input while in one of Emacs's memory
+ allocation functions. There should be no need for this debugging
+ option, since signal handlers do not allocate memory, but Emacs
+ formerly allocated memory in signal handlers and this compile-time
+ option remains as a way to help debug the issue should it rear its
+ ugly head again. */
+#ifdef XMALLOC_BLOCK_INPUT_CHECK
+bool block_input_in_memory_allocators EXTERNALLY_VISIBLE;
+static void
+malloc_block_input (void)
+{
+ if (block_input_in_memory_allocators)
+ block_input ();
+}
+static void
+malloc_unblock_input (void)
+{
+ if (block_input_in_memory_allocators)
+ unblock_input ();
+}
+# define MALLOC_BLOCK_INPUT malloc_block_input ()
+# define MALLOC_UNBLOCK_INPUT malloc_unblock_input ()
#else
-#define MALLOC_BLOCK_INPUT BLOCK_INPUT
-#define MALLOC_UNBLOCK_INPUT UNBLOCK_INPUT
+# define MALLOC_BLOCK_INPUT ((void) 0)
+# define MALLOC_UNBLOCK_INPUT ((void) 0)
#endif
++#define MALLOC_PROBE(size) \
++ do { \
++ if (profiler_memory_running) \
++ malloc_probe (size); \
++ } while (0)
++
++
/* Like malloc but check for no memory and block interrupt input.. */
void *
ptrdiff_t count = SPECPDL_INDEX ();
EMACS_TIME start;
Lisp_Object retval = Qnil;
+ size_t tot_before = 0;
+ struct backtrace backtrace;
if (abort_on_gc)
- abort ();
+ emacs_abort ();
/* Can't GC if pure storage overflowed because we can't determine
if something is a pure object or not. */
#define SPECPDL_INDEX() (specpdl_ptr - specpdl)
-/* Everything needed to describe an active condition case. */
+ struct backtrace
+ {
+ struct backtrace *next;
+ Lisp_Object *function;
+ Lisp_Object *args; /* Points to vector of args. */
+ ptrdiff_t nargs; /* Length of vector. */
+ /* Nonzero means call value of debugger when done with this operation. */
+ unsigned int debug_on_exit : 1;
+ };
+
+ extern struct backtrace *backtrace_list;
+
+/* Everything needed to describe an active condition case.
+
+ Members are volatile if their values need to survive _longjmp when
+ a 'struct handler' is a local variable. */
struct handler
{
/* The handler clauses and variable from the condition-case form. */
void syms_of_dbusbind (void);
#endif
-#define MALLOC_PROBE(size) \
- do { \
- if (profiler_memory_running) \
- malloc_probe (size); \
- } while (0)
+
+ /* Defined in profiler.c. */
+ extern bool profiler_memory_running;
+ extern void malloc_probe (size_t);
+ extern void syms_of_profiler (void);
+
+
#ifdef DOS_NT
-/* Defined in msdos.c, w32.c */
+/* Defined in msdos.c, w32.c. */
extern char *emacs_root_dir (void);
#endif /* DOS_NT */
\f
$(CONFIG_H) \
$(LISP_H)
+ $(BLD)/profiler.$(O) : \
+ $(SRC)/profiler.c \
+ $(CONFIG_H) \
+ $(LISP_H)
+
$(BLD)/image.$(O) : \
$(SRC)/image.c \
+ $(SRC)/blockinput.h \
$(SRC)/epaths.h \
$(SRC)/w32.h \
$(NT_INC)/unistd.h \
--- /dev/null
+ /* Profiler implementation.
+
+ Copyright (C) 2012 Free Software Foundation, Inc.
+
+ This file is part of GNU Emacs.
+
+ GNU Emacs is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ GNU Emacs is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
+
+ #include <config.h>
+ #include <stdio.h>
+ #include <limits.h>
+ #include <sys/time.h>
+ #include <signal.h>
+ #include <setjmp.h>
+ #include "lisp.h"
+
+ /* Logs. */
+
+ typedef struct Lisp_Hash_Table log_t;
+
+ static Lisp_Object
+ make_log (int heap_size, int max_stack_depth)
+ {
+ /* We use a standard Elisp hash-table object, but we use it in
+ a special way. This is OK as long as the object is not exposed
+ to Elisp, i.e. until it is returned by *-profiler-log, after which
+ it can't be used any more. */
+ Lisp_Object log = make_hash_table (Qequal, make_number (heap_size),
+ make_float (DEFAULT_REHASH_SIZE),
+ make_float (DEFAULT_REHASH_THRESHOLD),
+ Qnil, Qnil, Qnil);
+ struct Lisp_Hash_Table *h = XHASH_TABLE (log);
+
+ /* What is special about our hash-tables is that the keys are pre-filled
+ with the vectors we'll put in them. */
+ int i = ASIZE (h->key_and_value) / 2;
+ while (0 < i)
+ set_hash_key_slot (h, --i,
+ Fmake_vector (make_number (max_stack_depth), Qnil));
+ return log;
+ }
+
+ /* Evict the least used half of the hash_table.
+
+ When the table is full, we have to evict someone.
+ The easiest and most efficient is to evict the value we're about to add
+ (i.e. once the table is full, stop sampling).
+
+ We could also pick the element with the lowest count and evict it,
+ but finding it is O(N) and for that amount of work we get very
+ little in return: for the next sample, this latest sample will have
+ count==1 and will hence be a prime candidate for eviction :-(
+
+ So instead, we take O(N) time to eliminate more or less half of the
+ entries (the half with the lowest counts). So we get an amortized
+ cost of O(1) and we get O(N) time for a new entry to grow larger
+ than the other least counts before a new round of eviction. */
+
+ static EMACS_INT approximate_median (log_t *log,
+ ptrdiff_t start, ptrdiff_t size)
+ {
+ eassert (size > 0);
+ if (size < 2)
+ return XINT (HASH_VALUE (log, start));
+ if (size < 3)
+ /* Not an actual median, but better for our application than
+ choosing either of the two numbers. */
+ return ((XINT (HASH_VALUE (log, start))
+ + XINT (HASH_VALUE (log, start + 1)))
+ / 2);
+ else
+ {
+ ptrdiff_t newsize = size / 3;
+ ptrdiff_t start2 = start + newsize;
+ EMACS_INT i1 = approximate_median (log, start, newsize);
+ EMACS_INT i2 = approximate_median (log, start2, newsize);
+ EMACS_INT i3 = approximate_median (log, start2 + newsize,
+ size - 2 * newsize);
+ return (i1 < i2
+ ? (i2 < i3 ? i2 : (i1 < i3 ? i3 : i1))
+ : (i1 < i3 ? i1 : (i2 < i3 ? i3 : i2)));
+ }
+ }
+
+ static void evict_lower_half (log_t *log)
+ {
+ ptrdiff_t size = ASIZE (log->key_and_value) / 2;
+ EMACS_INT median = approximate_median (log, 0, size);
+ ptrdiff_t i;
+
+ for (i = 0; i < size; i++)
+ /* Evict not only values smaller but also values equal to the median,
+ so as to make sure we evict something no matter what. */
+ if (XINT (HASH_VALUE (log, i)) <= median)
+ {
+ Lisp_Object key = HASH_KEY (log, i);
+ { /* FIXME: we could make this more efficient. */
+ Lisp_Object tmp;
+ XSET_HASH_TABLE (tmp, log); /* FIXME: Use make_lisp_ptr. */
+ Fremhash (key, tmp);
+ }
+ eassert (EQ (log->next_free, make_number (i)));
+ {
+ int j;
+ eassert (VECTORP (key));
+ for (j = 0; j < ASIZE (key); j++)
+ ASET (key, j, Qnil);
+ }
+ set_hash_key_slot (log, i, key);
+ }
+ }
+
+ /* Record the current backtrace in LOG. BASE is a special name for
+ describing which the backtrace come from. BASE can be nil. COUNT is
+ a number how many times the profiler sees the backtrace at the
+ time. ELAPSED is a elapsed time in millisecond that the backtrace
+ took. */
+
+ static void
+ record_backtrace (log_t *log, size_t count)
+ {
+ struct backtrace *backlist = backtrace_list;
+ Lisp_Object backtrace;
+ ptrdiff_t index, i = 0;
+ ptrdiff_t asize;
+
+ if (!INTEGERP (log->next_free))
+ /* FIXME: transfer the evicted counts to a special entry rather
+ than dropping them on the floor. */
+ evict_lower_half (log);
+ index = XINT (log->next_free);
+
+ /* Get a "working memory" vector. */
+ backtrace = HASH_KEY (log, index);
+ asize = ASIZE (backtrace);
+
+ /* Copy the backtrace contents into working memory. */
+ for (; i < asize && backlist; i++, backlist = backlist->next)
+ /* FIXME: For closures we should ignore the environment. */
+ ASET (backtrace, i, *backlist->function);
+
+ /* Make sure that unused space of working memory is filled with nil. */
+ for (; i < asize; i++)
+ ASET (backtrace, i, Qnil);
+
+ { /* We basically do a `gethash+puthash' here, except that we have to be
+ careful to avoid memory allocation since we're in a signal
+ handler, and we optimize the code to try and avoid computing the
+ hash+lookup twice. See fns.c:Fputhash for reference. */
+ EMACS_UINT hash;
+ ptrdiff_t j = hash_lookup (log, backtrace, &hash);
+ if (j >= 0)
+ set_hash_value_slot (log, j,
+ make_number (count + XINT (HASH_VALUE (log, j))));
+ else
+ { /* BEWARE! hash_put in general can allocate memory.
+ But currently it only does that if log->next_free is nil. */
+ int j;
+ eassert (!NILP (log->next_free));
+ j = hash_put (log, backtrace, make_number (count), hash);
+ /* Let's make sure we've put `backtrace' right where it
+ already was to start with. */
+ eassert (index == j);
+
+ /* FIXME: If the hash-table is almost full, we should set
+ some global flag so that some Elisp code can offload its
+ data elsewhere, so as to avoid the eviction code.
+ There are 2 ways to do that, AFAICT:
+ - Set a flag checked in QUIT, such that QUIT can then call
+ Fprofiler_cpu_log and stash the full log for later use.
+ - Set a flag check in post-gc-hook, so that Elisp code can call
+ profiler-cpu-log. That gives us more flexibility since that
+ Elisp code can then do all kinds of fun stuff like write
+ the log to disk. Or turn it right away into a call tree.
+ Of course, using Elisp is generally preferable, but it may
+ take longer until we get a chance to run the Elisp code, so
+ there's more risk that the table will get full before we
+ get there. */
+ }
+ }
+ }
+ \f
+ /* Sample profiler. */
+
++/* FIXME: Add support for the CPU profiler in W32. */
++/* FIXME: the sigprof_handler suffers from race-conditions if the signal
++ is delivered to a thread other than the main Emacs thread. */
++
+ #if defined SIGPROF && defined HAVE_SETITIMER
+ #define PROFILER_CPU_SUPPORT
+
+ /* True if sampling profiler is running. */
+ static bool profiler_cpu_running;
+
+ static Lisp_Object cpu_log;
+ /* Separate counter for the time spent in the GC. */
+ static EMACS_INT cpu_gc_count;
+
+ /* The current sample interval in millisecond. */
+
+ static int current_sample_interval;
+
+ /* Signal handler for sample profiler. */
+
+ static void
+ sigprof_handler (int signal, siginfo_t *info, void *ctx)
+ {
+ eassert (HASH_TABLE_P (cpu_log));
+ if (backtrace_list && EQ (*backtrace_list->function, Qautomatic_gc))
+ /* Special case the time-count inside GC because the hash-table
+ code is not prepared to be used while the GC is running.
+ More specifically it uses ASIZE at many places where it does
+ not expect the ARRAY_MARK_FLAG to be set. We could try and
+ harden the hash-table code, but it doesn't seem worth the
+ effort. */
+ cpu_gc_count += current_sample_interval;
+ else
+ record_backtrace (XHASH_TABLE (cpu_log), current_sample_interval);
+ }
+
+ DEFUN ("profiler-cpu-start", Fprofiler_cpu_start, Sprofiler_cpu_start,
+ 1, 1, 0,
+ doc: /* Start or restart the cpu profiler.
+ The cpu profiler will take call-stack samples each SAMPLE-INTERVAL (expressed in milliseconds).
+ See also `profiler-log-size' and `profiler-max-stack-depth'. */)
+ (Lisp_Object sample_interval)
+ {
+ struct sigaction sa;
+ struct itimerval timer;
+
+ if (profiler_cpu_running)
+ error ("Sample profiler is already running");
+
+ if (NILP (cpu_log))
+ {
+ cpu_gc_count = 0;
+ cpu_log = make_log (profiler_log_size,
+ profiler_max_stack_depth);
+ }
+
+ current_sample_interval = XINT (sample_interval);
+
+ sa.sa_sigaction = sigprof_handler;
+ sa.sa_flags = SA_RESTART | SA_SIGINFO;
+ sigemptyset (&sa.sa_mask);
+ sigaction (SIGPROF, &sa, 0);
+
+ timer.it_interval.tv_sec = 0;
+ timer.it_interval.tv_usec = current_sample_interval * 1000;
+ timer.it_value = timer.it_interval;
+ setitimer (ITIMER_PROF, &timer, 0);
+
+ profiler_cpu_running = true;
+
+ return Qt;
+ }
+
+ DEFUN ("profiler-cpu-stop", Fprofiler_cpu_stop, Sprofiler_cpu_stop,
+ 0, 0, 0,
+ doc: /* Stop the cpu profiler. The profiler log is not affected.
+ Return non-nil if the profiler was running. */)
+ (void)
+ {
+ if (!profiler_cpu_running)
+ return Qnil;
+ profiler_cpu_running = false;
+
+ setitimer (ITIMER_PROF, 0, 0);
+
+ return Qt;
+ }
+
+ DEFUN ("profiler-cpu-running-p",
+ Fprofiler_cpu_running_p, Sprofiler_cpu_running_p,
+ 0, 0, 0,
+ doc: /* Return non-nil iff cpu profiler is running. */)
+ (void)
+ {
+ return profiler_cpu_running ? Qt : Qnil;
+ }
+
+ DEFUN ("profiler-cpu-log", Fprofiler_cpu_log, Sprofiler_cpu_log,
+ 0, 0, 0,
+ doc: /* Return the current cpu profiler log.
+ The log is a hash-table mapping backtraces to counters which represent
+ the amount of time spent at those points. Every backtrace is a vector
+ of functions, where the last few elements may be nil.
+ Before returning, a new log is allocated for future samples. */)
+ (void)
+ {
+ Lisp_Object result = cpu_log;
+ /* Here we're making the log visible to Elisp , so it's not safe any
+ more for our use afterwards since we can't rely on its special
+ pre-allocated keys anymore. So we have to allocate a new one. */
+ cpu_log = (profiler_cpu_running
+ ? make_log (profiler_log_size, profiler_max_stack_depth)
+ : Qnil);
+ Fputhash (Fmake_vector (make_number (1), Qautomatic_gc),
+ make_number (cpu_gc_count),
+ result);
+ cpu_gc_count = 0;
+ return result;
+ }
+ #endif /* not defined PROFILER_CPU_SUPPORT */
+ \f
+ /* Memory profiler. */
+
+ /* True if memory profiler is running. */
+ bool profiler_memory_running;
+
+ static Lisp_Object memory_log;
+
+ DEFUN ("profiler-memory-start", Fprofiler_memory_start, Sprofiler_memory_start,
+ 0, 0, 0,
+ doc: /* Start/restart the memory profiler.
+ The memory profiler will take samples of the call-stack whenever a new
+ allocation takes place. Note that most small allocations only trigger
+ the profiler occasionally.
+ See also `profiler-log-size' and `profiler-max-stack-depth'. */)
+ (void)
+ {
+ if (profiler_memory_running)
+ error ("Memory profiler is already running");
+
+ if (NILP (memory_log))
+ memory_log = make_log (profiler_log_size,
+ profiler_max_stack_depth);
+
+ profiler_memory_running = true;
+
+ return Qt;
+ }
+
+ DEFUN ("profiler-memory-stop",
+ Fprofiler_memory_stop, Sprofiler_memory_stop,
+ 0, 0, 0,
+ doc: /* Stop the memory profiler. The profiler log is not affected.
+ Return non-nil if the profiler was running. */)
+ (void)
+ {
+ if (!profiler_memory_running)
+ return Qnil;
+ profiler_memory_running = false;
+ return Qt;
+ }
+
+ DEFUN ("profiler-memory-running-p",
+ Fprofiler_memory_running_p, Sprofiler_memory_running_p,
+ 0, 0, 0,
+ doc: /* Return non-nil if memory profiler is running. */)
+ (void)
+ {
+ return profiler_memory_running ? Qt : Qnil;
+ }
+
+ DEFUN ("profiler-memory-log",
+ Fprofiler_memory_log, Sprofiler_memory_log,
+ 0, 0, 0,
+ doc: /* Return the current memory profiler log.
+ The log is a hash-table mapping backtraces to counters which represent
+ the amount of memory allocated at those points. Every backtrace is a vector
+ of functions, where the last few elements may be nil.
+ Before returning, a new log is allocated for future samples. */)
+ (void)
+ {
+ Lisp_Object result = memory_log;
+ /* Here we're making the log visible to Elisp , so it's not safe any
+ more for our use afterwards since we can't rely on its special
+ pre-allocated keys anymore. So we have to allocate a new one. */
+ memory_log = (profiler_memory_running
+ ? make_log (profiler_log_size, profiler_max_stack_depth)
+ : Qnil);
+ return result;
+ }
+
+ \f
+ /* Signals and probes. */
+
+ /* Record that the current backtrace allocated SIZE bytes. */
+ void
+ malloc_probe (size_t size)
+ {
+ eassert (HASH_TABLE_P (memory_log));
+ record_backtrace (XHASH_TABLE (memory_log), size);
+ }
+
+ void
+ syms_of_profiler (void)
+ {
+ DEFVAR_INT ("profiler-max-stack-depth", profiler_max_stack_depth,
+ doc: /* Number of elements from the call-stack recorded in the log. */);
+ profiler_max_stack_depth = 16;
+ DEFVAR_INT ("profiler-log-size", profiler_log_size,
+ doc: /* Number of distinct call-stacks that can be recorded in a profiler log.
+ If the log gets full, some of the least-seen call-stacks will be evicted
+ to make room for new entries. */);
+ profiler_log_size = 10000;
+
+ #ifdef PROFILER_CPU_SUPPORT
+ profiler_cpu_running = false;
+ cpu_log = Qnil;
+ staticpro (&cpu_log);
+ defsubr (&Sprofiler_cpu_start);
+ defsubr (&Sprofiler_cpu_stop);
+ defsubr (&Sprofiler_cpu_running_p);
+ defsubr (&Sprofiler_cpu_log);
+ #endif
+ profiler_memory_running = false;
+ memory_log = Qnil;
+ staticpro (&memory_log);
+ defsubr (&Sprofiler_memory_start);
+ defsubr (&Sprofiler_memory_stop);
+ defsubr (&Sprofiler_memory_running_p);
+ defsubr (&Sprofiler_memory_log);
+ }
if (redisplaying_p)
return;
- /* Record a function that resets redisplaying_p to its old value
+ /* Record a function that clears redisplaying_p
when we leave this function. */
count = SPECPDL_INDEX ();
- record_unwind_protect (unwind_redisplay,
- Fcons (make_number (redisplaying_p), selected_frame));
- ++redisplaying_p;
+ record_unwind_protect (unwind_redisplay, selected_frame);
+ redisplaying_p = 1;
specbind (Qinhibit_free_realized_faces, Qnil);
+ /* Record this function, so it appears on the profiler's backtraces. */
+ backtrace.next = backtrace_list;
+ backtrace.function = &Qautomatic_redisplay;
+ backtrace.args = &Qautomatic_redisplay;
+ backtrace.nargs = 0;
+ backtrace.debug_on_exit = 0;
+ backtrace_list = &backtrace;
+
{
Lisp_Object tail, frame;