diff options
| author | Joakim Verona | 2015-01-16 22:29:10 +0100 |
|---|---|---|
| committer | Joakim Verona | 2015-01-16 22:29:10 +0100 |
| commit | 5e2255017323c54feeaaee220175d7761a3b6ed1 (patch) | |
| tree | 3f843af60b826b63e12482301ce20745a95ede3e | |
| parent | b64675500decba1c707bc5d5c6d57f633934778f (diff) | |
| parent | 78e6ccc4a5006272b14f352e459a6d3bf52ed07b (diff) | |
| download | emacs-5e2255017323c54feeaaee220175d7761a3b6ed1.tar.gz emacs-5e2255017323c54feeaaee220175d7761a3b6ed1.zip | |
merge master
48 files changed, 655 insertions, 227 deletions
| @@ -1,3 +1,11 @@ | |||
| 1 | 2015-01-16 Paul Eggert <eggert@cs.ucla.edu> | ||
| 2 | |||
| 3 | Give up on -Wsuggest-attribute=const | ||
| 4 | The attribute doesn't help performance significantly, and the | ||
| 5 | warning seems to be more trouble than it's worth. See the thread at: | ||
| 6 | http://lists.gnu.org/archive/html/emacs-devel/2015-01/msg00361.html | ||
| 7 | * configure.ac (WERROR_CFLAGS): Don't use -Wsuggest-attribute=const. | ||
| 8 | |||
| 1 | 2015-01-11 Paul Eggert <eggert@cs.ucla.edu> | 9 | 2015-01-11 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 10 | ||
| 3 | Default to 'configure --enable-silent-rules' | 11 | Default to 'configure --enable-silent-rules' |
diff --git a/admin/ChangeLog b/admin/ChangeLog index 2b04281f400..70d1714f8eb 100644 --- a/admin/ChangeLog +++ b/admin/ChangeLog | |||
| @@ -1,3 +1,8 @@ | |||
| 1 | 2015-01-15 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * unidata/uvs.el (uvs-print-table-ivd): Call set-binary-mode on | ||
| 4 | stdout. | ||
| 5 | |||
| 1 | 2015-01-12 Paul Eggert <eggert@cs.ucla.edu> | 6 | 2015-01-12 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 7 | ||
| 3 | Say "ELC foo.elc" instead of "GEN foo.elc" | 8 | Say "ELC foo.elc" instead of "GEN foo.elc" |
diff --git a/admin/unidata/uvs.el b/admin/unidata/uvs.el index 8bad523ce35..a6beac97db4 100644 --- a/admin/unidata/uvs.el +++ b/admin/unidata/uvs.el | |||
| @@ -200,6 +200,7 @@ corresponding number." | |||
| 200 | (insert-file-contents filename) | 200 | (insert-file-contents filename) |
| 201 | (uvs-alist-from-ivd collection-id | 201 | (uvs-alist-from-ivd collection-id |
| 202 | sequence-id-to-glyph-func)))) | 202 | sequence-id-to-glyph-func)))) |
| 203 | (set-binary-mode 'stdout t) | ||
| 203 | (princ "/* Automatically generated by uvs.el. */\n") | 204 | (princ "/* Automatically generated by uvs.el. */\n") |
| 204 | (princ | 205 | (princ |
| 205 | (format "static const unsigned char mac_uvs_table_%s_bytes[] =\n {\n" | 206 | (format "static const unsigned char mac_uvs_table_%s_bytes[] =\n {\n" |
diff --git a/configure.ac b/configure.ac index 1b2dd3dbd31..1d206dbc5a0 100644 --- a/configure.ac +++ b/configure.ac | |||
| @@ -894,6 +894,10 @@ else | |||
| 894 | # Emacs's use of alloca inhibits protecting the stack. | 894 | # Emacs's use of alloca inhibits protecting the stack. |
| 895 | nw="$nw -Wstack-protector" | 895 | nw="$nw -Wstack-protector" |
| 896 | 896 | ||
| 897 | # Emacs's use of partly-const functions such as Fgnutls_available_p | ||
| 898 | # make this option problematic. | ||
| 899 | nw="$nw -Wsuggest-attribute=const" | ||
| 900 | |||
| 897 | # Emacs's use of partly-pure functions such as CHECK_TYPE make this | 901 | # Emacs's use of partly-pure functions such as CHECK_TYPE make this |
| 898 | # option problematic. | 902 | # option problematic. |
| 899 | nw="$nw -Wsuggest-attribute=pure" | 903 | nw="$nw -Wsuggest-attribute=pure" |
| @@ -1976,7 +1980,6 @@ fi | |||
| 1976 | if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then | 1980 | if test "$window_system" = none && test "$gl_gcc_warnings" = yes; then |
| 1977 | # Too many warnings for now. | 1981 | # Too many warnings for now. |
| 1978 | nw= | 1982 | nw= |
| 1979 | nw="$nw -Wsuggest-attribute=const" | ||
| 1980 | nw="$nw -Wsuggest-attribute=noreturn" | 1983 | nw="$nw -Wsuggest-attribute=noreturn" |
| 1981 | gl_MANYWARN_COMPLEMENT([WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) | 1984 | gl_MANYWARN_COMPLEMENT([WARN_CFLAGS], [$WARN_CFLAGS], [$nw]) |
| 1982 | 1985 | ||
diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index 941be3cf582..4c0c116ba5a 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog | |||
| @@ -1,3 +1,9 @@ | |||
| 1 | 2015-01-15 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * streams.texi (Input Functions): Document 'set-binary-mode'. | ||
| 4 | (Output Functions): Cross-reference to documentation of | ||
| 5 | 'set-binary-mode'. | ||
| 6 | |||
| 1 | 2015-01-04 Paul Eggert <eggert@cs.ucla.edu> | 7 | 2015-01-04 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 8 | ||
| 3 | batch write-region no longer says "Wrote FOO" | 9 | batch write-region no longer says "Wrote FOO" |
diff --git a/doc/lispref/streams.texi b/doc/lispref/streams.texi index 5e4df009b73..e52a543110b 100644 --- a/doc/lispref/streams.texi +++ b/doc/lispref/streams.texi | |||
| @@ -339,6 +339,25 @@ shared structures. @xref{Circular Objects}. Its default value is | |||
| 339 | @code{t}. | 339 | @code{t}. |
| 340 | @end defvar | 340 | @end defvar |
| 341 | 341 | ||
| 342 | @cindex binary I/O in batch mode | ||
| 343 | When reading or writing from the standard input/output streams of the | ||
| 344 | Emacs process in batch mode, it is sometimes required to make sure any | ||
| 345 | arbitrary binary data will be read/written verbatim, and/or that no | ||
| 346 | translation of newlines to or from CR-LF pairs are performed. This | ||
| 347 | issue does not exist on Posix hosts, only on MS-Windows and MS-DOS. | ||
| 348 | The following function allows to control the I/O mode of any standard | ||
| 349 | stream of the Emacs process. | ||
| 350 | |||
| 351 | @defun set-binary-mode stream mode | ||
| 352 | Switch @var{stream} into binary or text I/O mode. If @var{mode} is | ||
| 353 | non-@code{nil}, switch to binary mode, otherwise switch to text mode. | ||
| 354 | The value of @var{stream} can be one of @code{stdin}, @code{stdout}, | ||
| 355 | or @code{stderr}. This function flushes any pending output data of | ||
| 356 | @var{stream} as a side effect, and returns the previous value of I/O | ||
| 357 | mode for @var{stream}. On Posix hosts, it always returns a | ||
| 358 | non-@code{nil} value and does nothing except flushing pending output. | ||
| 359 | @end defun | ||
| 360 | |||
| 342 | @node Output Streams | 361 | @node Output Streams |
| 343 | @section Output Streams | 362 | @section Output Streams |
| 344 | @cindex stream (for printing) | 363 | @cindex stream (for printing) |
| @@ -686,6 +705,11 @@ This function outputs @var{object} to @var{stream}, just like | |||
| 686 | indent and fill the object to make it more readable for humans. | 705 | indent and fill the object to make it more readable for humans. |
| 687 | @end defun | 706 | @end defun |
| 688 | 707 | ||
| 708 | If you need to use binary I/O in batch mode, e.g., use the functions | ||
| 709 | described in this section to write out arbitrary binary data or avoid | ||
| 710 | conversion of newlines on non-Posix hosts, see @ref{Input Functions, | ||
| 711 | set-binary-mode}. | ||
| 712 | |||
| 689 | @node Output Variables | 713 | @node Output Variables |
| 690 | @section Variables Affecting Output | 714 | @section Variables Affecting Output |
| 691 | @cindex output-controlling variables | 715 | @cindex output-controlling variables |
diff --git a/doc/lispref/text.texi b/doc/lispref/text.texi index 472aedb8ee4..1b8897f59e7 100644 --- a/doc/lispref/text.texi +++ b/doc/lispref/text.texi | |||
| @@ -4507,6 +4507,9 @@ which is a regular expression. | |||
| 4507 | Return all nodes in @var{dom} that have IDs that match @var{match}, | 4507 | Return all nodes in @var{dom} that have IDs that match @var{match}, |
| 4508 | which is a regular expression. | 4508 | which is a regular expression. |
| 4509 | 4509 | ||
| 4510 | @item dom-strings @var{dom} | ||
| 4511 | Return all strings in @var{DOM}. | ||
| 4512 | |||
| 4510 | @end table | 4513 | @end table |
| 4511 | 4514 | ||
| 4512 | Utility functions: | 4515 | Utility functions: |
diff --git a/etc/ChangeLog b/etc/ChangeLog index 20f88bdecc3..681858e5977 100644 --- a/etc/ChangeLog +++ b/etc/ChangeLog | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | 2015-01-15 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * NEWS: Mention 'set-binary-mode'. | ||
| 4 | |||
| 1 | 2015-01-11 Paul Eggert <eggert@cs.ucla.edu> | 5 | 2015-01-11 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 6 | ||
| 3 | Default to 'configure --enable-silent-rules' | 7 | Default to 'configure --enable-silent-rules' |
| @@ -588,6 +588,10 @@ been obsoleted. | |||
| 588 | undocumented integer-pair format. Instead, they return a list of two | 588 | undocumented integer-pair format. Instead, they return a list of two |
| 589 | integers. | 589 | integers. |
| 590 | 590 | ||
| 591 | +++ | ||
| 592 | ** New function `set-binary-mode' allows to switch a standard stream | ||
| 593 | of the Emacs process to binary I/O mode. | ||
| 594 | |||
| 591 | 595 | ||
| 592 | * Changes in Frames and Windows Code in Emacs 25.1 | 596 | * Changes in Frames and Windows Code in Emacs 25.1 |
| 593 | 597 | ||
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog index e9205fdd12a..37f037ef324 100644 --- a/lib-src/ChangeLog +++ b/lib-src/ChangeLog | |||
| @@ -1,3 +1,15 @@ | |||
| 1 | 2015-01-16 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * Makefile.in (AM_V_RC, am__v_RC_, am__v_RC_0, am__v_RC_1): New | ||
| 4 | macros. | ||
| 5 | (emacsclient.res): Use $(AM_V_RC). | ||
| 6 | |||
| 7 | 2015-01-16 Paul Eggert <eggert@cs.ucla.edu> | ||
| 8 | |||
| 9 | Give up on -Wsuggest-attribute=const | ||
| 10 | * make-docfile.c (write_globals): | ||
| 11 | Remove special hack for Fnext_read_file_uses_dialog_p | ||
| 12 | |||
| 1 | 2015-01-13 Paul Eggert <eggert@cs.ucla.edu> | 13 | 2015-01-13 Paul Eggert <eggert@cs.ucla.edu> |
| 2 | 14 | ||
| 3 | Don't say Fnext_read_file_uses_dialog_p is const | 15 | Don't say Fnext_read_file_uses_dialog_p is const |
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in index 22a5ecad8d8..01592bd21a5 100644 --- a/lib-src/Makefile.in +++ b/lib-src/Makefile.in | |||
| @@ -58,6 +58,11 @@ am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) | |||
| 58 | am__v_CCLD_0 = @echo " CCLD " $@; | 58 | am__v_CCLD_0 = @echo " CCLD " $@; |
| 59 | am__v_CCLD_1 = | 59 | am__v_CCLD_1 = |
| 60 | 60 | ||
| 61 | AM_V_RC = $(am__v_RC_@AM_V@) | ||
| 62 | am__v_RC_ = $(am__v_RC_@AM_DEFAULT_V@) | ||
| 63 | am__v_RC_0 = @echo " RC " $@; | ||
| 64 | am__v_RC_1 = | ||
| 65 | |||
| 61 | # ==================== Where To Install Things ==================== | 66 | # ==================== Where To Install Things ==================== |
| 62 | 67 | ||
| 63 | # Location to install Emacs.app under GNUstep / Mac OS X. | 68 | # Location to install Emacs.app under GNUstep / Mac OS X. |
| @@ -381,6 +386,6 @@ update-game-score${EXEEXT}: ${srcdir}/update-game-score.c $(NTLIB) $(config_h) | |||
| 381 | $< $(NTLIB) $(LOADLIBES) -o $@ | 386 | $< $(NTLIB) $(LOADLIBES) -o $@ |
| 382 | 387 | ||
| 383 | emacsclient.res: ../nt/emacsclient.rc $(NTINC)/../icons/emacs.ico | 388 | emacsclient.res: ../nt/emacsclient.rc $(NTINC)/../icons/emacs.ico |
| 384 | $(WINDRES) -O coff --include-dir=$(NTINC)/.. -o $@ $< | 389 | $(AM_V_RC)$(WINDRES) -O coff --include-dir=$(NTINC)/.. -o $@ $< |
| 385 | 390 | ||
| 386 | ## Makefile ends here. | 391 | ## Makefile ends here. |
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c index 741fa4bfa42..79d421a0a8e 100644 --- a/lib-src/make-docfile.c +++ b/lib-src/make-docfile.c | |||
| @@ -729,18 +729,6 @@ write_globals (void) | |||
| 729 | 729 | ||
| 730 | if (globals[i].flags & DEFUN_const) | 730 | if (globals[i].flags & DEFUN_const) |
| 731 | fputs (" ATTRIBUTE_CONST", stdout); | 731 | fputs (" ATTRIBUTE_CONST", stdout); |
| 732 | else if (strcmp (globals[i].name, "Fnext_read_file_uses_dialog_p") | ||
| 733 | == 0) | ||
| 734 | { | ||
| 735 | /* It would be nice to have a cleaner way to deal with this | ||
| 736 | special hack. */ | ||
| 737 | fputs (("\n" | ||
| 738 | "#if ! (defined USE_GTK || defined USE_MOTIF \\\n" | ||
| 739 | " || defined HAVE_NS || defined HAVE_NTGUI)\n" | ||
| 740 | "\tATTRIBUTE_CONST\n" | ||
| 741 | "#endif\n"), | ||
| 742 | stdout); | ||
| 743 | } | ||
| 744 | 732 | ||
| 745 | puts (";"); | 733 | puts (";"); |
| 746 | } | 734 | } |
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index b7a38af9609..57aaea0f4ce 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,41 @@ | |||
| 1 | 2015-01-16 Jorgen Schaefer <contact@jorgenschaefer.de> | ||
| 2 | |||
| 3 | * emacs-lisp/package.el: Provide repository priorities. | ||
| 4 | (package-archive-priorities): New variable. | ||
| 5 | (package--add-to-alist): New function. | ||
| 6 | (package--add-to-archive-contents): Use it. | ||
| 7 | (package-menu--find-upgrades): Use it as well. Small clean up to | ||
| 8 | make the use of the package name here explicit. | ||
| 9 | (package-archive-priority): New function. | ||
| 10 | (package-desc-priority-version): New function. | ||
| 11 | |||
| 12 | 2015-01-16 Daniel Colascione <dancol@dancol.org> | ||
| 13 | |||
| 14 | * cus-start.el (all): Make `ring-bell-function' customizable. | ||
| 15 | |||
| 16 | 2015-01-16 Dmitry Gutov <dgutov@yandex.ru> | ||
| 17 | |||
| 18 | * vc/vc-svn.el (vc-svn-dir-status-files): Pass t as | ||
| 19 | vc-svn-after-dir-status's second argument. (Bug#19429) | ||
| 20 | |||
| 21 | 2015-01-16 Samer Masterson <samer@samertm.com> (tiny change) | ||
| 22 | |||
| 23 | * pcomplete.el (pcomplete-parse-arguments): Parse arguments | ||
| 24 | regardless of pcomplete-cycle-completions's value. (Bug#18950) | ||
| 25 | |||
| 26 | 2015-01-16 Lars Magne Ingebrigtsen <larsi@gnus.org> | ||
| 27 | |||
| 28 | * dom.el (dom-strings): New function. | ||
| 29 | |||
| 30 | * files.el (directory-files-recursively): Don't use the word | ||
| 31 | "path" for a file name. | ||
| 32 | |||
| 33 | 2015-01-15 Wolfgang Jenkner <wjenkner@inode.at> | ||
| 34 | |||
| 35 | * calc/calc-units.el (math-units-in-expr-p) | ||
| 36 | (math-single-units-in-expr-p, math-find-compatible-unit-rec) | ||
| 37 | (math-extract-units): Handle the `neg' operator. (Bug#19582) | ||
| 38 | |||
| 1 | 2015-01-15 Stefan Monnier <monnier@iro.umontreal.ca> | 39 | 2015-01-15 Stefan Monnier <monnier@iro.umontreal.ca> |
| 2 | 40 | ||
| 3 | * emacs-lisp/eieio-core.el: Provide support for cl-generic. | 41 | * emacs-lisp/eieio-core.el: Provide support for cl-generic. |
| @@ -28,27 +66,22 @@ | |||
| 28 | 66 | ||
| 29 | 2015-01-13 Alan Mackenzie <acm@muc.de> | 67 | 2015-01-13 Alan Mackenzie <acm@muc.de> |
| 30 | 68 | ||
| 31 | Allow compilation during loading of Modes derived from a CC Mode mode. | 69 | Allow compilation during loading of CC Mode-derived modes (bug#19206). |
| 32 | Fixes debbugs#19206. | ||
| 33 | |||
| 34 | * progmodes/cc-bytecomp.el (cc-bytecomp-compiling-or-loading): | 70 | * progmodes/cc-bytecomp.el (cc-bytecomp-compiling-or-loading): |
| 35 | New function which walks the stack to discover whether we're compiling | 71 | New function which walks the stack to discover whether we're compiling |
| 36 | or loading. | 72 | or loading. |
| 37 | (cc-bytecomp-is-compiling): Reformulate, and move towards | 73 | (cc-bytecomp-is-compiling): Reformulate, and move towards beginning. |
| 38 | beginning. | ||
| 39 | (cc-bytecomp-is-loading): New defsubst. | 74 | (cc-bytecomp-is-loading): New defsubst. |
| 40 | (cc-bytecomp-setup-environment, cc-bytecomp-restore-environment): | 75 | (cc-bytecomp-setup-environment, cc-bytecomp-restore-environment): |
| 41 | Use the above defsubsts. | 76 | Use the above defsubsts. |
| 42 | (cc-require-when-compile, cc-bytecomp-defvar) | 77 | (cc-require-when-compile, cc-bytecomp-defvar) |
| 43 | (cc-bytecomp-defun): Simplify conditionals. | 78 | (cc-bytecomp-defun): Simplify conditionals. |
| 44 | |||
| 45 | * progmodes/cc-defs.el (cc-bytecomp-compiling-or-loading): | 79 | * progmodes/cc-defs.el (cc-bytecomp-compiling-or-loading): |
| 46 | "Borrow" this function from cc-bytecomp.el. | 80 | "Borrow" this function from cc-bytecomp.el. |
| 47 | (c-get-current-file): Reformulate using the above. | 81 | (c-get-current-file): Reformulate using the above. |
| 48 | (c-lang-defconst): Prevent duplicate entries of file names in a | 82 | (c-lang-defconst): Prevent duplicate entries of file names in a |
| 49 | symbol's 'source property. | 83 | symbol's 'source property. |
| 50 | (c-lang-const): Use cc-bytecomp-is-compiling. | 84 | (c-lang-const): Use cc-bytecomp-is-compiling. |
| 51 | |||
| 52 | * progmodes/cc-langs.el (c-make-init-lang-vars-fun): | 85 | * progmodes/cc-langs.el (c-make-init-lang-vars-fun): |
| 53 | Use cc-bytecomp-is-compiling. | 86 | Use cc-bytecomp-is-compiling. |
| 54 | 87 | ||
diff --git a/lisp/calc/calc-units.el b/lisp/calc/calc-units.el index 26a644a29ba..05950864a52 100644 --- a/lisp/calc/calc-units.el +++ b/lisp/calc/calc-units.el | |||
| @@ -904,10 +904,12 @@ If COMP or STD is non-nil, put that in the units table instead." | |||
| 904 | (and (consp expr) | 904 | (and (consp expr) |
| 905 | (if (eq (car expr) 'var) | 905 | (if (eq (car expr) 'var) |
| 906 | (math-check-unit-name expr) | 906 | (math-check-unit-name expr) |
| 907 | (and (or sub-exprs | 907 | (if (eq (car expr) 'neg) |
| 908 | (memq (car expr) '(* / ^))) | 908 | (math-units-in-expr-p (nth 1 expr) sub-exprs) |
| 909 | (or (math-units-in-expr-p (nth 1 expr) sub-exprs) | 909 | (and (or sub-exprs |
| 910 | (math-units-in-expr-p (nth 2 expr) sub-exprs)))))) | 910 | (memq (car expr) '(* / ^))) |
| 911 | (or (math-units-in-expr-p (nth 1 expr) sub-exprs) | ||
| 912 | (math-units-in-expr-p (nth 2 expr) sub-exprs))))))) | ||
| 911 | 913 | ||
| 912 | (defun math-only-units-in-expr-p (expr) | 914 | (defun math-only-units-in-expr-p (expr) |
| 913 | (and (consp expr) | 915 | (and (consp expr) |
| @@ -924,6 +926,8 @@ If COMP or STD is non-nil, put that in the units table instead." | |||
| 924 | (cond ((math-scalarp expr) nil) | 926 | (cond ((math-scalarp expr) nil) |
| 925 | ((eq (car expr) 'var) | 927 | ((eq (car expr) 'var) |
| 926 | (math-check-unit-name expr)) | 928 | (math-check-unit-name expr)) |
| 929 | ((eq (car expr) 'neg) | ||
| 930 | (math-single-units-in-expr-p (nth 1 expr))) | ||
| 927 | ((eq (car expr) '*) | 931 | ((eq (car expr) '*) |
| 928 | (let ((u1 (math-single-units-in-expr-p (nth 1 expr))) | 932 | (let ((u1 (math-single-units-in-expr-p (nth 1 expr))) |
| 929 | (u2 (math-single-units-in-expr-p (nth 2 expr)))) | 933 | (u2 (math-single-units-in-expr-p (nth 2 expr)))) |
| @@ -1079,6 +1083,8 @@ If COMP or STD is non-nil, put that in the units table instead." | |||
| 1079 | ((eq (car-safe expr) '/) | 1083 | ((eq (car-safe expr) '/) |
| 1080 | (or (math-find-compatible-unit-rec (nth 1 expr) pow) | 1084 | (or (math-find-compatible-unit-rec (nth 1 expr) pow) |
| 1081 | (math-find-compatible-unit-rec (nth 2 expr) (- pow)))) | 1085 | (math-find-compatible-unit-rec (nth 2 expr) (- pow)))) |
| 1086 | ((eq (car-safe expr) 'neg) | ||
| 1087 | (math-find-compatible-unit-rec (nth 1 expr) pow)) | ||
| 1082 | ((and (eq (car-safe expr) '^) | 1088 | ((and (eq (car-safe expr) '^) |
| 1083 | (integerp (nth 2 expr))) | 1089 | (integerp (nth 2 expr))) |
| 1084 | (math-find-compatible-unit-rec (nth 1 expr) (* pow (nth 2 expr)))) | 1090 | (math-find-compatible-unit-rec (nth 1 expr) (* pow (nth 2 expr)))) |
| @@ -1497,6 +1503,8 @@ If COMP or STD is non-nil, put that in the units table instead." | |||
| 1497 | ((memq (car-safe expr) '(* /)) | 1503 | ((memq (car-safe expr) '(* /)) |
| 1498 | (cons (car expr) | 1504 | (cons (car expr) |
| 1499 | (mapcar 'math-extract-units (cdr expr)))) | 1505 | (mapcar 'math-extract-units (cdr expr)))) |
| 1506 | ((eq (car-safe expr) 'neg) | ||
| 1507 | (math-extract-units (nth 1 expr))) | ||
| 1500 | ((eq (car-safe expr) '^) | 1508 | ((eq (car-safe expr) '^) |
| 1501 | (list '^ (math-extract-units (nth 1 expr)) (nth 2 expr))) | 1509 | (list '^ (math-extract-units (nth 1 expr)) (nth 2 expr))) |
| 1502 | ((math-check-unit-name expr) expr) | 1510 | ((math-check-unit-name expr) expr) |
diff --git a/lisp/cus-start.el b/lisp/cus-start.el index 299b18d0118..71506cb680e 100644 --- a/lisp/cus-start.el +++ b/lisp/cus-start.el | |||
| @@ -421,6 +421,12 @@ Leaving \"Default\" unchecked is equivalent with specifying a default of | |||
| 421 | "21.1") | 421 | "21.1") |
| 422 | ;; term.c | 422 | ;; term.c |
| 423 | (visible-cursor cursor boolean "22.1") | 423 | (visible-cursor cursor boolean "22.1") |
| 424 | ;; terminal.c | ||
| 425 | (ring-bell-function display | ||
| 426 | (choice | ||
| 427 | (const :tag "Default" nil) | ||
| 428 | (const :tag "Silent" ignore) | ||
| 429 | function)) | ||
| 424 | ;; undo.c | 430 | ;; undo.c |
| 425 | (undo-limit undo integer) | 431 | (undo-limit undo integer) |
| 426 | (undo-strong-limit undo integer) | 432 | (undo-strong-limit undo integer) |
diff --git a/lisp/dom.el b/lisp/dom.el index 527b8e61f2e..11357e88804 100644 --- a/lisp/dom.el +++ b/lisp/dom.el | |||
| @@ -103,6 +103,14 @@ A name is a symbol like `td'." | |||
| 103 | (cons dom matches) | 103 | (cons dom matches) |
| 104 | matches))) | 104 | matches))) |
| 105 | 105 | ||
| 106 | (defun dom-strings (dom) | ||
| 107 | "Return elements in DOM that are strings." | ||
| 108 | (cl-loop for child in (dom-children dom) | ||
| 109 | if (stringp child) | ||
| 110 | collect child | ||
| 111 | else | ||
| 112 | append (dom-strings child))) | ||
| 113 | |||
| 106 | (defun dom-by-class (dom match) | 114 | (defun dom-by-class (dom match) |
| 107 | "Return elements in DOM that have a class name that matches regexp MATCH." | 115 | "Return elements in DOM that have a class name that matches regexp MATCH." |
| 108 | (dom-elements dom 'class match)) | 116 | (dom-elements dom 'class match)) |
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el index 79f8b65d43c..5336271b65b 100644 --- a/lisp/emacs-lisp/package.el +++ b/lisp/emacs-lisp/package.el | |||
| @@ -228,6 +228,22 @@ a package can run arbitrary code." | |||
| 228 | :group 'package | 228 | :group 'package |
| 229 | :version "24.1") | 229 | :version "24.1") |
| 230 | 230 | ||
| 231 | (defcustom package-archive-priorities nil | ||
| 232 | "An alist of priorities for packages. | ||
| 233 | |||
| 234 | Each element has the form (ARCHIVE-ID . PRIORITY). | ||
| 235 | |||
| 236 | When installing packages, the package with the highest version | ||
| 237 | number from the archive with the highest priority is | ||
| 238 | selected. When higher versions are available from archives with | ||
| 239 | lower priorities, the user has to select those manually. | ||
| 240 | |||
| 241 | Archives not in this list have the priority 0." | ||
| 242 | :type 'integer | ||
| 243 | :risky t | ||
| 244 | :group 'package | ||
| 245 | :version "25.1") | ||
| 246 | |||
| 231 | (defcustom package-pinned-packages nil | 247 | (defcustom package-pinned-packages nil |
| 232 | "An alist of packages that are pinned to specific archives. | 248 | "An alist of packages that are pinned to specific archives. |
| 233 | This can be useful if you have multiple package archives enabled, | 249 | This can be useful if you have multiple package archives enabled, |
| @@ -1114,23 +1130,32 @@ Also, add the originating archive to the `package-desc' structure." | |||
| 1114 | ;; Older archive-contents files have only 4 | 1130 | ;; Older archive-contents files have only 4 |
| 1115 | ;; elements here. | 1131 | ;; elements here. |
| 1116 | (package--ac-desc-extras (cdr package))))) | 1132 | (package--ac-desc-extras (cdr package))))) |
| 1117 | (existing-packages (assq name package-archive-contents)) | ||
| 1118 | (pinned-to-archive (assoc name package-pinned-packages))) | 1133 | (pinned-to-archive (assoc name package-pinned-packages))) |
| 1119 | (cond | 1134 | ;; Skip entirely if pinned to another archive. |
| 1120 | ;; Skip entirely if pinned to another archive. | 1135 | (when (not (and pinned-to-archive |
| 1121 | ((and pinned-to-archive | 1136 | (not (equal (cdr pinned-to-archive) archive)))) |
| 1122 | (not (equal (cdr pinned-to-archive) archive))) | 1137 | (setq package-archive-contents |
| 1123 | nil) | 1138 | (package--add-to-alist pkg-desc package-archive-contents))))) |
| 1124 | ((not existing-packages) | 1139 | |
| 1125 | (push (list name pkg-desc) package-archive-contents)) | 1140 | (defun package--add-to-alist (pkg-desc alist) |
| 1126 | (t | 1141 | "Add PKG-DESC to ALIST. |
| 1127 | (while | 1142 | |
| 1128 | (if (and (cdr existing-packages) | 1143 | Packages are grouped by name. The package descriptions are sorted |
| 1129 | (version-list-< | 1144 | by version number." |
| 1130 | version (package-desc-version (cadr existing-packages)))) | 1145 | (let* ((name (package-desc-name pkg-desc)) |
| 1131 | (setq existing-packages (cdr existing-packages)) | 1146 | (priority-version (package-desc-priority-version pkg-desc)) |
| 1132 | (push pkg-desc (cdr existing-packages)) | 1147 | (existing-packages (assq name alist))) |
| 1133 | nil)))))) | 1148 | (if (not existing-packages) |
| 1149 | (cons (list name pkg-desc) | ||
| 1150 | alist) | ||
| 1151 | (while (if (and (cdr existing-packages) | ||
| 1152 | (version-list-< priority-version | ||
| 1153 | (package-desc-priority-version | ||
| 1154 | (cadr existing-packages)))) | ||
| 1155 | (setq existing-packages (cdr existing-packages)) | ||
| 1156 | (push pkg-desc (cdr existing-packages)) | ||
| 1157 | nil)) | ||
| 1158 | alist))) | ||
| 1134 | 1159 | ||
| 1135 | (defun package-download-transaction (packages) | 1160 | (defun package-download-transaction (packages) |
| 1136 | "Download and install all the packages in PACKAGES. | 1161 | "Download and install all the packages in PACKAGES. |
| @@ -1319,6 +1344,25 @@ The file can either be a tar file or an Emacs Lisp file." | |||
| 1319 | "Return the archive containing the package NAME." | 1344 | "Return the archive containing the package NAME." |
| 1320 | (cdr (assoc (package-desc-archive desc) package-archives))) | 1345 | (cdr (assoc (package-desc-archive desc) package-archives))) |
| 1321 | 1346 | ||
| 1347 | (defun package-archive-priority (archive) | ||
| 1348 | "Return the priority of ARCHIVE. | ||
| 1349 | |||
| 1350 | The archive priorities are specified in | ||
| 1351 | `package-archive-priorities'. If not given there, the priority | ||
| 1352 | defaults to 0." | ||
| 1353 | (or (cdr (assoc archive package-archive-priorities)) | ||
| 1354 | 0)) | ||
| 1355 | |||
| 1356 | (defun package-desc-priority-version (pkg-desc) | ||
| 1357 | "Return the version PKG-DESC with the archive priority prepended. | ||
| 1358 | |||
| 1359 | This allows for easy comparison of package versions from | ||
| 1360 | different archives if archive priorities are meant to be taken in | ||
| 1361 | consideration." | ||
| 1362 | (cons (package-archive-priority | ||
| 1363 | (package-desc-archive pkg-desc)) | ||
| 1364 | (package-desc-version pkg-desc))) | ||
| 1365 | |||
| 1322 | (defun package--download-one-archive (archive file) | 1366 | (defun package--download-one-archive (archive file) |
| 1323 | "Retrieve an archive file FILE from ARCHIVE, and cache it. | 1367 | "Retrieve an archive file FILE from ARCHIVE, and cache it. |
| 1324 | ARCHIVE should be a cons cell of the form (NAME . LOCATION), | 1368 | ARCHIVE should be a cons cell of the form (NAME . LOCATION), |
| @@ -1991,18 +2035,18 @@ If optional arg BUTTON is non-nil, describe its associated package." | |||
| 1991 | ;; ENTRY is (PKG-DESC [NAME VERSION STATUS DOC]) | 2035 | ;; ENTRY is (PKG-DESC [NAME VERSION STATUS DOC]) |
| 1992 | (let ((pkg-desc (car entry)) | 2036 | (let ((pkg-desc (car entry)) |
| 1993 | (status (aref (cadr entry) 2))) | 2037 | (status (aref (cadr entry) 2))) |
| 1994 | (cond ((member status '("installed" "unsigned")) | 2038 | (cond ((member status '("installed" "unsigned")) |
| 1995 | (push pkg-desc installed)) | 2039 | (push pkg-desc installed)) |
| 1996 | ((member status '("available" "new")) | 2040 | ((member status '("available" "new")) |
| 1997 | (push (cons (package-desc-name pkg-desc) pkg-desc) | 2041 | (setq available (package--add-to-alist pkg-desc available)))))) |
| 1998 | available))))) | ||
| 1999 | ;; Loop through list of installed packages, finding upgrades. | 2042 | ;; Loop through list of installed packages, finding upgrades. |
| 2000 | (dolist (pkg-desc installed) | 2043 | (dolist (pkg-desc installed) |
| 2001 | (let ((avail-pkg (assq (package-desc-name pkg-desc) available))) | 2044 | (let* ((name (package-desc-name pkg-desc)) |
| 2002 | (and avail-pkg | 2045 | (avail-pkg (cadr (assq name available)))) |
| 2003 | (version-list-< (package-desc-version pkg-desc) | 2046 | (and avail-pkg |
| 2004 | (package-desc-version (cdr avail-pkg))) | 2047 | (version-list-< (package-desc-priority-version pkg-desc) |
| 2005 | (push avail-pkg upgrades)))) | 2048 | (package-desc-priority-version avail-pkg)) |
| 2049 | (push (cons name avail-pkg) upgrades)))) | ||
| 2006 | upgrades)) | 2050 | upgrades)) |
| 2007 | 2051 | ||
| 2008 | (defun package-menu-mark-upgrades () | 2052 | (defun package-menu-mark-upgrades () |
diff --git a/lisp/files.el b/lisp/files.el index 175f85b29d0..f8318d8a34d 100644 --- a/lisp/files.el +++ b/lisp/files.el | |||
| @@ -749,14 +749,15 @@ If INCLUDE-DIRECTORIES, also include directories that have matching names." | |||
| 749 | (unless (member file '("./" "../")) | 749 | (unless (member file '("./" "../")) |
| 750 | (if (directory-name-p file) | 750 | (if (directory-name-p file) |
| 751 | (let* ((leaf (substring file 0 (1- (length file)))) | 751 | (let* ((leaf (substring file 0 (1- (length file)))) |
| 752 | (path (expand-file-name leaf dir))) | 752 | (full-file (expand-file-name leaf dir))) |
| 753 | ;; Don't follow symlinks to other directories. | 753 | ;; Don't follow symlinks to other directories. |
| 754 | (unless (file-symlink-p path) | 754 | (unless (file-symlink-p full-file) |
| 755 | (setq result (nconc result (directory-files-recursively | 755 | (setq result |
| 756 | path match include-directories)))) | 756 | (nconc result (directory-files-recursively |
| 757 | full-file match include-directories)))) | ||
| 757 | (when (and include-directories | 758 | (when (and include-directories |
| 758 | (string-match match leaf)) | 759 | (string-match match leaf)) |
| 759 | (setq result (nconc result (list path))))) | 760 | (setq result (nconc result (list full-file))))) |
| 760 | (when (string-match match file) | 761 | (when (string-match match file) |
| 761 | (push (expand-file-name file dir) files))))) | 762 | (push (expand-file-name file dir) files))))) |
| 762 | (nconc result (nreverse files)))) | 763 | (nconc result (nreverse files)))) |
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog index 20de9aea136..5a61a211661 100644 --- a/lisp/gnus/ChangeLog +++ b/lisp/gnus/ChangeLog | |||
| @@ -1,3 +1,7 @@ | |||
| 1 | 2015-01-15 Lars Magne Ingebrigtsen <larsi@gnus.org> | ||
| 2 | |||
| 3 | * nntp.el (nntp-send-authinfo): Error out if the password is wrong. | ||
| 4 | |||
| 1 | 2015-01-08 Stefan Monnier <monnier@iro.umontreal.ca> | 5 | 2015-01-08 Stefan Monnier <monnier@iro.umontreal.ca> |
| 2 | 6 | ||
| 3 | * registry.el: Don't use <class> as a variable. | 7 | * registry.el: Don't use <class> as a variable. |
diff --git a/lisp/gnus/nntp.el b/lisp/gnus/nntp.el index e071368401b..0891dba0387 100644 --- a/lisp/gnus/nntp.el +++ b/lisp/gnus/nntp.el | |||
| @@ -1219,14 +1219,17 @@ If SEND-IF-FORCE, only send authinfo to the server if the | |||
| 1219 | nntp-authinfo-user user)) | 1219 | nntp-authinfo-user user)) |
| 1220 | (unless (member user '(nil "")) | 1220 | (unless (member user '(nil "")) |
| 1221 | (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" user) | 1221 | (nntp-send-command "^3.*\r?\n" "AUTHINFO USER" user) |
| 1222 | (when t ;???Should check if AUTHINFO succeeded | 1222 | (let ((result |
| 1223 | (nntp-send-command | 1223 | (nntp-send-command |
| 1224 | "^2.*\r?\n" "AUTHINFO PASS" | 1224 | "^2.*\r?\n" "AUTHINFO PASS" |
| 1225 | (or passwd | 1225 | (or passwd |
| 1226 | nntp-authinfo-password | 1226 | nntp-authinfo-password |
| 1227 | (setq nntp-authinfo-password | 1227 | (setq nntp-authinfo-password |
| 1228 | (read-passwd (format "NNTP (%s@%s) password: " | 1228 | (read-passwd (format "NNTP (%s@%s) password: " |
| 1229 | user nntp-address)))))))))) | 1229 | user nntp-address))))))) |
| 1230 | (if (not result) | ||
| 1231 | (signal 'nntp-authinfo-rejected "Password rejected") | ||
| 1232 | result)))))) | ||
| 1230 | 1233 | ||
| 1231 | ;;; Internal functions. | 1234 | ;;; Internal functions. |
| 1232 | 1235 | ||
diff --git a/lisp/pcomplete.el b/lisp/pcomplete.el index 17327ea5c95..7bcf2c1759e 100644 --- a/lisp/pcomplete.el +++ b/lisp/pcomplete.el | |||
| @@ -755,8 +755,7 @@ this is `comint-dynamic-complete-functions'." | |||
| 755 | pcomplete-index 0 | 755 | pcomplete-index 0 |
| 756 | pcomplete-stub (pcomplete-arg 'last)) | 756 | pcomplete-stub (pcomplete-arg 'last)) |
| 757 | (let ((begin (pcomplete-begin 'last))) | 757 | (let ((begin (pcomplete-begin 'last))) |
| 758 | (if (and pcomplete-cycle-completions | 758 | (if (and (listp pcomplete-stub) ;?? |
| 759 | (listp pcomplete-stub) ;?? | ||
| 760 | (not pcomplete-expand-only-p)) | 759 | (not pcomplete-expand-only-p)) |
| 761 | (let* ((completions pcomplete-stub) ;?? | 760 | (let* ((completions pcomplete-stub) ;?? |
| 762 | (common-stub (car completions)) | 761 | (common-stub (car completions)) |
diff --git a/lisp/vc/vc-svn.el b/lisp/vc/vc-svn.el index bae178df3f7..d74daf9c36f 100644 --- a/lisp/vc/vc-svn.el +++ b/lisp/vc/vc-svn.el | |||
| @@ -164,6 +164,7 @@ If you want to force an empty list of arguments, use t." | |||
| 164 | 164 | ||
| 165 | ;; FIXME it would be better not to have the "remote" argument, | 165 | ;; FIXME it would be better not to have the "remote" argument, |
| 166 | ;; but to distinguish the two output formats based on content. | 166 | ;; but to distinguish the two output formats based on content. |
| 167 | ;; FIXME: the local format isn't used by the (sole) caller anymore. | ||
| 167 | (defun vc-svn-after-dir-status (callback &optional remote) | 168 | (defun vc-svn-after-dir-status (callback &optional remote) |
| 168 | (let ((state-map '((?A . added) | 169 | (let ((state-map '((?A . added) |
| 169 | (?C . conflict) | 170 | (?C . conflict) |
| @@ -208,7 +209,7 @@ CALLBACK is called as (CALLBACK RESULT BUFFER), where | |||
| 208 | RESULT is a list of conses (FILE . STATE) for directory DIR." | 209 | RESULT is a list of conses (FILE . STATE) for directory DIR." |
| 209 | ;; FIXME shouldn't this rather default to all the files in dir? | 210 | ;; FIXME shouldn't this rather default to all the files in dir? |
| 210 | (apply #'vc-svn-command (current-buffer) 'async nil "status" "-u" files) | 211 | (apply #'vc-svn-command (current-buffer) 'async nil "status" "-u" files) |
| 211 | (vc-run-delayed (vc-svn-after-dir-status callback))) | 212 | (vc-run-delayed (vc-svn-after-dir-status callback t))) |
| 212 | 213 | ||
| 213 | (defun vc-svn-dir-extra-headers (_dir) | 214 | (defun vc-svn-dir-extra-headers (_dir) |
| 214 | "Generate extra status headers for a Subversion working copy." | 215 | "Generate extra status headers for a Subversion working copy." |
diff --git a/nt/ChangeLog b/nt/ChangeLog index 5f6104296c8..b9966fb27d8 100644 --- a/nt/ChangeLog +++ b/nt/ChangeLog | |||
| @@ -1,3 +1,12 @@ | |||
| 1 | 2015-01-16 Eli Zaretskii <eliz@gnu.org> | ||
| 2 | |||
| 3 | * Makefile.in (AM_V_CC, am__v_CC_, am__v_CC_0, am__v_CC_1) | ||
| 4 | (AM_V_CCLD, am__v_CCLD_, am__v_CCLD_0, am__v_CCLD_1, AM_V_RC) | ||
| 5 | (am__v_RC_, am__v_RC_0, am__v_RC_1): New macros. | ||
| 6 | (addpm${EXEEXT}, ddeclient${EXEEXT}, cmdproxy${EXEEXT}) | ||
| 7 | (runemacs${EXEEXT}): Use $(AM_V_CCLD). | ||
| 8 | (emacs.res, ../src/emacs.res): Use $(AM_V_RC). | ||
| 9 | |||
| 1 | 2014-12-26 Eli Zaretskii <eliz@gnu.org> | 10 | 2014-12-26 Eli Zaretskii <eliz@gnu.org> |
| 2 | 11 | ||
| 3 | * gnulib.mk (stpcpy, string): Sync with the latest change in | 12 | * gnulib.mk (stpcpy, string): Sync with the latest change in |
diff --git a/nt/Makefile.in b/nt/Makefile.in index 01631d8ba3f..fc6887f163e 100644 --- a/nt/Makefile.in +++ b/nt/Makefile.in | |||
| @@ -41,6 +41,24 @@ WERROR_CFLAGS = @WERROR_CFLAGS@ | |||
| 41 | # Program name transformation. | 41 | # Program name transformation. |
| 42 | TRANSFORM = @program_transform_name@ | 42 | TRANSFORM = @program_transform_name@ |
| 43 | 43 | ||
| 44 | # 'make' verbosity. | ||
| 45 | AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ | ||
| 46 | |||
| 47 | AM_V_CC = $(am__v_CC_@AM_V@) | ||
| 48 | am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) | ||
| 49 | am__v_CC_0 = @echo " CC " $@; | ||
| 50 | am__v_CC_1 = | ||
| 51 | |||
| 52 | AM_V_CCLD = $(am__v_CCLD_@AM_V@) | ||
| 53 | am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) | ||
| 54 | am__v_CCLD_0 = @echo " CCLD " $@; | ||
| 55 | am__v_CCLD_1 = | ||
| 56 | |||
| 57 | AM_V_RC = $(am__v_RC_@AM_V@) | ||
| 58 | am__v_RC_ = $(am__v_RC_@AM_DEFAULT_V@) | ||
| 59 | am__v_RC_0 = @echo " RC " $@; | ||
| 60 | am__v_RC_1 = | ||
| 61 | |||
| 44 | # ==================== Where To Install Things ==================== | 62 | # ==================== Where To Install Things ==================== |
| 45 | 63 | ||
| 46 | # The default location for installation. Everything is placed in | 64 | # The default location for installation. Everything is placed in |
| @@ -213,18 +231,18 @@ TAGS: ${EXE_FILES:${EXEEXT}=.c} | |||
| 213 | 231 | ||
| 214 | ## Build the programs | 232 | ## Build the programs |
| 215 | addpm${EXEEXT}: ${srcdir}/addpm.c ../src/epaths.h | 233 | addpm${EXEEXT}: ${srcdir}/addpm.c ../src/epaths.h |
| 216 | $(CC) ${ALL_CFLAGS} $< $(LIBS_ADDPM) -o $@ | 234 | $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< $(LIBS_ADDPM) -o $@ |
| 217 | 235 | ||
| 218 | ddeclient${EXEEXT}: ${srcdir}/ddeclient.c | 236 | ddeclient${EXEEXT}: ${srcdir}/ddeclient.c |
| 219 | $(CC) ${ALL_CFLAGS} $< -o $@ | 237 | $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< -o $@ |
| 220 | 238 | ||
| 221 | cmdproxy${EXEEXT}: ${srcdir}/cmdproxy.c | 239 | cmdproxy${EXEEXT}: ${srcdir}/cmdproxy.c |
| 222 | $(CC) ${ALL_CFLAGS} $< -o $@ | 240 | $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $< -o $@ |
| 223 | 241 | ||
| 224 | runemacs${EXEEXT}: ${srcdir}/runemacs.c $(EMACSRES) | 242 | runemacs${EXEEXT}: ${srcdir}/runemacs.c $(EMACSRES) |
| 225 | $(CC) ${ALL_CFLAGS} $^ -mwindows -o $@ | 243 | $(AM_V_CCLD)$(CC) ${ALL_CFLAGS} $^ -mwindows -o $@ |
| 226 | 244 | ||
| 227 | ## Also used in ../src/Makefile. | 245 | ## Also used in ../src/Makefile. |
| 228 | emacs.res ../src/emacs.res: emacs.rc ${srcdir}/icons/emacs.ico \ | 246 | emacs.res ../src/emacs.res: emacs.rc ${srcdir}/icons/emacs.ico \ |
| 229 | ${srcdir}/icons/hand.cur ${srcdir}/$(EMACS_MANIFEST) | 247 | ${srcdir}/icons/hand.cur ${srcdir}/$(EMACS_MANIFEST) |
| 230 | ${WINDRES} -I ${srcdir} -O coff -o $@ $< | 248 | $(AM_V_RC)${WINDRES} -I ${srcdir} -O coff -o $@ $< |
diff --git a/src/ChangeLog b/src/ChangeLog index b2588f1451f..16e2fa19626 100644 --- a/src/ChangeLog +++ b/src/ChangeLog | |||
| @@ -1,3 +1,59 @@ | |||
| 1 | 2015-01-16 Dmitry Antipov <dmantipov@yandex.ru> | ||
| 2 | |||
| 3 | Tune pseudovector allocation assuming Qnil == 0. | ||
| 4 | * alloc.c (allocate_pseudovector): Use memset for both | ||
| 5 | Lisp_Objects and regular slots. Add zerolen arg. | ||
| 6 | * lisp.h (allocate_pseudovector): Adjust prototype. | ||
| 7 | (ALLOCATE_PSEUDOVECTOR): Adjust user. | ||
| 8 | (ALLOCATE_ZEROED_PSEUDOVECTOR): New macro. | ||
| 9 | (allocate_hash_table, allocate_window, allocate_frame) | ||
| 10 | (allocate_process, allocate_terminal): Remove prototypes. | ||
| 11 | * fns.c (allocate_hash_table): Now static here. | ||
| 12 | * frame.c (allocate_frame): | ||
| 13 | * process.c (allocate_process): | ||
| 14 | * terminal.c (allocate_terminal): | ||
| 15 | * window.c (allocate_window): Now static here. | ||
| 16 | Use ALLOCATE_ZEROED_PSEUDOVECTOR. Add comment. | ||
| 17 | |||
| 18 | * lisp.h (XTERMINAL): Add eassert. | ||
| 19 | * process.c (make_lisp_proc): Now static here. | ||
| 20 | |||
| 21 | Prefer INLINE functions in font.h to match style used in lisp.h. | ||
| 22 | * font.h (FONTP, FONT_SPEC_P, FONT_ENTITY_P, FONT_OBJECT_P) | ||
| 23 | (CHECK_FONT, CHECK_FONT_SPEC, CHECK_FONT_ENTITY, CHECK_FONT_OBJECT) | ||
| 24 | (XFONT_SPEC, XFONT_ENTITY, XFONT_OBJECT, CHECK_FONT_GET_OBJECT): | ||
| 25 | Now functions. | ||
| 26 | * font.c (Ffont_otf_alternates, Fquery_font, Ffont_get_glyphs): | ||
| 27 | * ftfont.c (ftfont_shape): | ||
| 28 | * macfont.m (macfont_shape): | ||
| 29 | * w32uniscribe.c (uniscribe_shape): | ||
| 30 | * xftfont.c (xftfont_shape): Adjust CHECK_FONT_GET_OBJECT users. | ||
| 31 | |||
| 32 | 2015-01-16 Paul Eggert <eggert@cs.ucla.edu> | ||
| 33 | |||
| 34 | Give up on -Wsuggest-attribute=const | ||
| 35 | * decompress.c (Fzlib_available_p): | ||
| 36 | * gnutls.c (Fgnutls_available_p): | ||
| 37 | * gtkutil.h (xg_uses_old_file_dialog): | ||
| 38 | * xdisp.c (Ftool_bar_height): | ||
| 39 | * xmenu.c (popup_activated): | ||
| 40 | No longer const, since it's not const on at lest some | ||
| 41 | configurations, and we shouldn't lie to the compiler. | ||
| 42 | |||
| 43 | 2015-01-15 Eli Zaretskii <eliz@gnu.org> | ||
| 44 | |||
| 45 | * fileio.c: Include binary-io.h. | ||
| 46 | (Fset_binary_mode): New function. | ||
| 47 | (syms_of_fileio): Defsubr it. | ||
| 48 | (syms_of_fileio) <Qstdin, Qstdout, Qstderr>: DEFSYM them. | ||
| 49 | |||
| 50 | 2015-01-15 Teodor Zlatanov <tzz@lifelogs.com> | ||
| 51 | |||
| 52 | * gnutls.c (init_gnutls_functions): Import gnutls_x509_crt_check_issuer. | ||
| 53 | (Fgnutls_peer_status): Use it to set the :self-signed flag. | ||
| 54 | Rename the previous :self-signed to :unknown-ca. (Bug#19404) | ||
| 55 | (Fgnutls_peer_status_warning_describe): Explain :unknown-ca flag. | ||
| 56 | |||
| 1 | 2015-01-14 Eli Zaretskii <eliz@gnu.org> | 57 | 2015-01-14 Eli Zaretskii <eliz@gnu.org> |
| 2 | 58 | ||
| 3 | * w32fns.c (w32_wnd_proc): Ignore MENUITEMINFO's dwItemData data | 59 | * w32fns.c (w32_wnd_proc): Ignore MENUITEMINFO's dwItemData data |
diff --git a/src/alloc.c b/src/alloc.c index 7c937332407..22a15b4ac59 100644 --- a/src/alloc.c +++ b/src/alloc.c | |||
| @@ -3163,19 +3163,19 @@ allocate_vector (EMACS_INT len) | |||
| 3163 | /* Allocate other vector-like structures. */ | 3163 | /* Allocate other vector-like structures. */ |
| 3164 | 3164 | ||
| 3165 | struct Lisp_Vector * | 3165 | struct Lisp_Vector * |
| 3166 | allocate_pseudovector (int memlen, int lisplen, enum pvec_type tag) | 3166 | allocate_pseudovector (int memlen, int lisplen, |
| 3167 | int zerolen, enum pvec_type tag) | ||
| 3167 | { | 3168 | { |
| 3168 | struct Lisp_Vector *v = allocate_vectorlike (memlen); | 3169 | struct Lisp_Vector *v = allocate_vectorlike (memlen); |
| 3169 | int i; | ||
| 3170 | 3170 | ||
| 3171 | /* Catch bogus values. */ | 3171 | /* Catch bogus values. */ |
| 3172 | eassert (tag <= PVEC_FONT); | 3172 | eassert (tag <= PVEC_FONT); |
| 3173 | eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1); | 3173 | eassert (memlen - lisplen <= (1 << PSEUDOVECTOR_REST_BITS) - 1); |
| 3174 | eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1); | 3174 | eassert (lisplen <= (1 << PSEUDOVECTOR_SIZE_BITS) - 1); |
| 3175 | 3175 | ||
| 3176 | /* Only the first lisplen slots will be traced normally by the GC. */ | 3176 | /* Only the first lisplen slots will be traced normally by the GC. |
| 3177 | for (i = 0; i < lisplen; ++i) | 3177 | But since Qnil == 0, we can memset Lisp_Object slots as well. */ |
| 3178 | v->contents[i] = Qnil; | 3178 | memset (v->contents, 0, zerolen * word_size); |
| 3179 | 3179 | ||
| 3180 | XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen); | 3180 | XSETPVECTYPESIZE (v, tag, lisplen, memlen - lisplen); |
| 3181 | return v; | 3181 | return v; |
| @@ -3194,60 +3194,6 @@ allocate_buffer (void) | |||
| 3194 | return b; | 3194 | return b; |
| 3195 | } | 3195 | } |
| 3196 | 3196 | ||
| 3197 | struct Lisp_Hash_Table * | ||
| 3198 | allocate_hash_table (void) | ||
| 3199 | { | ||
| 3200 | return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table, count, PVEC_HASH_TABLE); | ||
| 3201 | } | ||
| 3202 | |||
| 3203 | struct window * | ||
| 3204 | allocate_window (void) | ||
| 3205 | { | ||
| 3206 | struct window *w; | ||
| 3207 | |||
| 3208 | w = ALLOCATE_PSEUDOVECTOR (struct window, current_matrix, PVEC_WINDOW); | ||
| 3209 | /* Users assumes that non-Lisp data is zeroed. */ | ||
| 3210 | memset (&w->current_matrix, 0, | ||
| 3211 | sizeof (*w) - offsetof (struct window, current_matrix)); | ||
| 3212 | return w; | ||
| 3213 | } | ||
| 3214 | |||
| 3215 | struct terminal * | ||
| 3216 | allocate_terminal (void) | ||
| 3217 | { | ||
| 3218 | struct terminal *t; | ||
| 3219 | |||
| 3220 | t = ALLOCATE_PSEUDOVECTOR (struct terminal, next_terminal, PVEC_TERMINAL); | ||
| 3221 | /* Users assumes that non-Lisp data is zeroed. */ | ||
| 3222 | memset (&t->next_terminal, 0, | ||
| 3223 | sizeof (*t) - offsetof (struct terminal, next_terminal)); | ||
| 3224 | return t; | ||
| 3225 | } | ||
| 3226 | |||
| 3227 | struct frame * | ||
| 3228 | allocate_frame (void) | ||
| 3229 | { | ||
| 3230 | struct frame *f; | ||
| 3231 | |||
| 3232 | f = ALLOCATE_PSEUDOVECTOR (struct frame, face_cache, PVEC_FRAME); | ||
| 3233 | /* Users assumes that non-Lisp data is zeroed. */ | ||
| 3234 | memset (&f->face_cache, 0, | ||
| 3235 | sizeof (*f) - offsetof (struct frame, face_cache)); | ||
| 3236 | return f; | ||
| 3237 | } | ||
| 3238 | |||
| 3239 | struct Lisp_Process * | ||
| 3240 | allocate_process (void) | ||
| 3241 | { | ||
| 3242 | struct Lisp_Process *p; | ||
| 3243 | |||
| 3244 | p = ALLOCATE_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS); | ||
| 3245 | /* Users assumes that non-Lisp data is zeroed. */ | ||
| 3246 | memset (&p->pid, 0, | ||
| 3247 | sizeof (*p) - offsetof (struct Lisp_Process, pid)); | ||
| 3248 | return p; | ||
| 3249 | } | ||
| 3250 | |||
| 3251 | DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0, | 3197 | DEFUN ("make-vector", Fmake_vector, Smake_vector, 2, 2, 0, |
| 3252 | doc: /* Return a newly created vector of length LENGTH, with each element being INIT. | 3198 | doc: /* Return a newly created vector of length LENGTH, with each element being INIT. |
| 3253 | See also the function `vector'. */) | 3199 | See also the function `vector'. */) |
diff --git a/src/decompress.c b/src/decompress.c index b78dacee207..b14f0a2cd79 100644 --- a/src/decompress.c +++ b/src/decompress.c | |||
| @@ -88,8 +88,7 @@ unwind_decompress (void *ddata) | |||
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | DEFUN ("zlib-available-p", Fzlib_available_p, Szlib_available_p, 0, 0, 0, | 90 | DEFUN ("zlib-available-p", Fzlib_available_p, Szlib_available_p, 0, 0, 0, |
| 91 | doc: /* Return t if zlib decompression is available in this instance of Emacs. */ | 91 | doc: /* Return t if zlib decompression is available in this instance of Emacs. */) |
| 92 | attributes: const) | ||
| 93 | (void) | 92 | (void) |
| 94 | { | 93 | { |
| 95 | #ifdef WINDOWSNT | 94 | #ifdef WINDOWSNT |
diff --git a/src/fileio.c b/src/fileio.c index 6c443c91db7..dc67a00ed2a 100644 --- a/src/fileio.c +++ b/src/fileio.c | |||
| @@ -86,6 +86,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 86 | #include <careadlinkat.h> | 86 | #include <careadlinkat.h> |
| 87 | #include <stat-time.h> | 87 | #include <stat-time.h> |
| 88 | 88 | ||
| 89 | #include <binary-io.h> | ||
| 90 | |||
| 89 | #ifdef HPUX | 91 | #ifdef HPUX |
| 90 | #include <netio.h> | 92 | #include <netio.h> |
| 91 | #endif | 93 | #endif |
| @@ -5754,6 +5756,48 @@ before any other event (mouse or keypress) is handled. */) | |||
| 5754 | return Qnil; | 5756 | return Qnil; |
| 5755 | } | 5757 | } |
| 5756 | 5758 | ||
| 5759 | |||
| 5760 | DEFUN ("set-binary-mode", Fset_binary_mode, Sset_binary_mode, 2, 2, 0, | ||
| 5761 | doc: /* Switch STREAM to binary I/O mode or text I/O mode. | ||
| 5762 | STREAM can be one of the symbols `stdin', `stdout', or `stderr'. | ||
| 5763 | If MODE is non-nil, switch STREAM to binary mode, otherwise switch | ||
| 5764 | it to text mode. | ||
| 5765 | |||
| 5766 | As a side effect, this function flushes any pending STREAM's data. | ||
| 5767 | |||
| 5768 | Value is the previous value of STREAM's I/O mode, nil for text mode, | ||
| 5769 | non-nil for binary mode. | ||
| 5770 | |||
| 5771 | On MS-Windows and MS-DOS, binary mode is needed to read or write | ||
| 5772 | arbitrary binary data, and for disabling translation between CR-LF | ||
| 5773 | pairs and a single newline character. Examples include generation | ||
| 5774 | of text files with Unix-style end-of-line format using `princ' in | ||
| 5775 | batch mode, with standard output redirected to a file. | ||
| 5776 | |||
| 5777 | On Posix systems, this function always returns non-nil, and has no | ||
| 5778 | effect except for flushing STREAM's data. */) | ||
| 5779 | (Lisp_Object stream, Lisp_Object mode) | ||
| 5780 | { | ||
| 5781 | FILE *fp = NULL; | ||
| 5782 | int binmode; | ||
| 5783 | |||
| 5784 | CHECK_SYMBOL (stream); | ||
| 5785 | if (EQ (stream, Qstdin)) | ||
| 5786 | fp = stdin; | ||
| 5787 | else if (EQ (stream, Qstdout)) | ||
| 5788 | fp = stdout; | ||
| 5789 | else if (EQ (stream, Qstderr)) | ||
| 5790 | fp = stderr; | ||
| 5791 | else | ||
| 5792 | xsignal2 (Qerror, build_string ("unsupported stream"), stream); | ||
| 5793 | |||
| 5794 | binmode = NILP (mode) ? O_TEXT : O_BINARY; | ||
| 5795 | if (fp != stdin) | ||
| 5796 | fflush (fp); | ||
| 5797 | |||
| 5798 | return (set_binary_mode (fileno (fp), binmode) == O_BINARY) ? Qt : Qnil; | ||
| 5799 | } | ||
| 5800 | |||
| 5757 | void | 5801 | void |
| 5758 | init_fileio (void) | 5802 | init_fileio (void) |
| 5759 | { | 5803 | { |
| @@ -6040,6 +6084,10 @@ This includes interactive calls to `delete-file' and | |||
| 6040 | DEFSYM (Qsubstitute_env_in_file_name, "substitute-env-in-file-name"); | 6084 | DEFSYM (Qsubstitute_env_in_file_name, "substitute-env-in-file-name"); |
| 6041 | DEFSYM (Qget_buffer_window_list, "get-buffer-window-list"); | 6085 | DEFSYM (Qget_buffer_window_list, "get-buffer-window-list"); |
| 6042 | 6086 | ||
| 6087 | DEFSYM (Qstdin, "stdin"); | ||
| 6088 | DEFSYM (Qstdout, "stdout"); | ||
| 6089 | DEFSYM (Qstderr, "stderr"); | ||
| 6090 | |||
| 6043 | defsubr (&Sfind_file_name_handler); | 6091 | defsubr (&Sfind_file_name_handler); |
| 6044 | defsubr (&Sfile_name_directory); | 6092 | defsubr (&Sfile_name_directory); |
| 6045 | defsubr (&Sfile_name_nondirectory); | 6093 | defsubr (&Sfile_name_nondirectory); |
| @@ -6089,6 +6137,8 @@ This includes interactive calls to `delete-file' and | |||
| 6089 | 6137 | ||
| 6090 | defsubr (&Snext_read_file_uses_dialog_p); | 6138 | defsubr (&Snext_read_file_uses_dialog_p); |
| 6091 | 6139 | ||
| 6140 | defsubr (&Sset_binary_mode); | ||
| 6141 | |||
| 6092 | #ifdef HAVE_SYNC | 6142 | #ifdef HAVE_SYNC |
| 6093 | defsubr (&Sunix_sync); | 6143 | defsubr (&Sunix_sync); |
| 6094 | #endif | 6144 | #endif |
| @@ -3814,6 +3814,15 @@ hashfn_user_defined (struct hash_table_test *ht, Lisp_Object key) | |||
| 3814 | return hashfn_eq (ht, hash); | 3814 | return hashfn_eq (ht, hash); |
| 3815 | } | 3815 | } |
| 3816 | 3816 | ||
| 3817 | /* Allocate basically initialized hash table. */ | ||
| 3818 | |||
| 3819 | static struct Lisp_Hash_Table * | ||
| 3820 | allocate_hash_table (void) | ||
| 3821 | { | ||
| 3822 | return ALLOCATE_PSEUDOVECTOR (struct Lisp_Hash_Table, | ||
| 3823 | count, PVEC_HASH_TABLE); | ||
| 3824 | } | ||
| 3825 | |||
| 3817 | /* An upper bound on the size of a hash table index. It must fit in | 3826 | /* An upper bound on the size of a hash table index. It must fit in |
| 3818 | ptrdiff_t and be a valid Emacs fixnum. */ | 3827 | ptrdiff_t and be a valid Emacs fixnum. */ |
| 3819 | #define INDEX_SIZE_BOUND \ | 3828 | #define INDEX_SIZE_BOUND \ |
diff --git a/src/font.c b/src/font.c index a68c3c707c8..56a27821718 100644 --- a/src/font.c +++ b/src/font.c | |||
| @@ -156,7 +156,7 @@ font_make_spec (void) | |||
| 156 | struct font_spec *spec | 156 | struct font_spec *spec |
| 157 | = ((struct font_spec *) | 157 | = ((struct font_spec *) |
| 158 | allocate_pseudovector (VECSIZE (struct font_spec), | 158 | allocate_pseudovector (VECSIZE (struct font_spec), |
| 159 | FONT_SPEC_MAX, PVEC_FONT)); | 159 | FONT_SPEC_MAX, FONT_SPEC_MAX, PVEC_FONT)); |
| 160 | XSETFONT (font_spec, spec); | 160 | XSETFONT (font_spec, spec); |
| 161 | return font_spec; | 161 | return font_spec; |
| 162 | } | 162 | } |
| @@ -168,7 +168,7 @@ font_make_entity (void) | |||
| 168 | struct font_entity *entity | 168 | struct font_entity *entity |
| 169 | = ((struct font_entity *) | 169 | = ((struct font_entity *) |
| 170 | allocate_pseudovector (VECSIZE (struct font_entity), | 170 | allocate_pseudovector (VECSIZE (struct font_entity), |
| 171 | FONT_ENTITY_MAX, PVEC_FONT)); | 171 | FONT_ENTITY_MAX, FONT_ENTITY_MAX, PVEC_FONT)); |
| 172 | XSETFONT (font_entity, entity); | 172 | XSETFONT (font_entity, entity); |
| 173 | return font_entity; | 173 | return font_entity; |
| 174 | } | 174 | } |
| @@ -181,7 +181,8 @@ font_make_object (int size, Lisp_Object entity, int pixelsize) | |||
| 181 | { | 181 | { |
| 182 | Lisp_Object font_object; | 182 | Lisp_Object font_object; |
| 183 | struct font *font | 183 | struct font *font |
| 184 | = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX, PVEC_FONT); | 184 | = (struct font *) allocate_pseudovector (size, FONT_OBJECT_MAX, |
| 185 | FONT_OBJECT_MAX, PVEC_FONT); | ||
| 185 | int i; | 186 | int i; |
| 186 | 187 | ||
| 187 | /* GC can happen before the driver is set up, | 188 | /* GC can happen before the driver is set up, |
| @@ -4532,12 +4533,11 @@ character code corresponding to the glyph or nil if there's no | |||
| 4532 | corresponding character. */) | 4533 | corresponding character. */) |
| 4533 | (Lisp_Object font_object, Lisp_Object character, Lisp_Object otf_features) | 4534 | (Lisp_Object font_object, Lisp_Object character, Lisp_Object otf_features) |
| 4534 | { | 4535 | { |
| 4535 | struct font *font; | 4536 | struct font *font = CHECK_FONT_GET_OBJECT (font_object); |
| 4536 | Lisp_Object gstring_in, gstring_out, g; | 4537 | Lisp_Object gstring_in, gstring_out, g; |
| 4537 | Lisp_Object alternates; | 4538 | Lisp_Object alternates; |
| 4538 | int i, num; | 4539 | int i, num; |
| 4539 | 4540 | ||
| 4540 | CHECK_FONT_GET_OBJECT (font_object, font); | ||
| 4541 | if (! font->driver->otf_drive) | 4541 | if (! font->driver->otf_drive) |
| 4542 | error ("Font backend %s can't drive OpenType GSUB table", | 4542 | error ("Font backend %s can't drive OpenType GSUB table", |
| 4543 | SDATA (SYMBOL_NAME (font->driver->type))); | 4543 | SDATA (SYMBOL_NAME (font->driver->type))); |
| @@ -4647,12 +4647,9 @@ FEATURE is a symbol representing OpenType feature tag. | |||
| 4647 | If the font is not OpenType font, CAPABILITY is nil. */) | 4647 | If the font is not OpenType font, CAPABILITY is nil. */) |
| 4648 | (Lisp_Object font_object) | 4648 | (Lisp_Object font_object) |
| 4649 | { | 4649 | { |
| 4650 | struct font *font; | 4650 | struct font *font = CHECK_FONT_GET_OBJECT (font_object); |
| 4651 | Lisp_Object val; | 4651 | Lisp_Object val = make_uninit_vector (9); |
| 4652 | 4652 | ||
| 4653 | CHECK_FONT_GET_OBJECT (font_object, font); | ||
| 4654 | |||
| 4655 | val = make_uninit_vector (9); | ||
| 4656 | ASET (val, 0, AREF (font_object, FONT_NAME_INDEX)); | 4653 | ASET (val, 0, AREF (font_object, FONT_NAME_INDEX)); |
| 4657 | ASET (val, 1, AREF (font_object, FONT_FILE_INDEX)); | 4654 | ASET (val, 1, AREF (font_object, FONT_FILE_INDEX)); |
| 4658 | ASET (val, 2, make_number (font->pixel_size)); | 4655 | ASET (val, 2, make_number (font->pixel_size)); |
| @@ -4691,12 +4688,11 @@ the corresponding element is nil. */) | |||
| 4691 | (Lisp_Object font_object, Lisp_Object from, Lisp_Object to, | 4688 | (Lisp_Object font_object, Lisp_Object from, Lisp_Object to, |
| 4692 | Lisp_Object object) | 4689 | Lisp_Object object) |
| 4693 | { | 4690 | { |
| 4694 | struct font *font; | 4691 | struct font *font = CHECK_FONT_GET_OBJECT (font_object); |
| 4695 | ptrdiff_t i, len; | 4692 | ptrdiff_t i, len; |
| 4696 | Lisp_Object *chars, vec; | 4693 | Lisp_Object *chars, vec; |
| 4697 | USE_SAFE_ALLOCA; | 4694 | USE_SAFE_ALLOCA; |
| 4698 | 4695 | ||
| 4699 | CHECK_FONT_GET_OBJECT (font_object, font); | ||
| 4700 | if (NILP (object)) | 4696 | if (NILP (object)) |
| 4701 | { | 4697 | { |
| 4702 | ptrdiff_t charpos, bytepos; | 4698 | ptrdiff_t charpos, bytepos; |
diff --git a/src/font.h b/src/font.h index 5a3e38a2a6e..efc184eef77 100644 --- a/src/font.h +++ b/src/font.h | |||
| @@ -413,46 +413,91 @@ struct font_bitmap | |||
| 413 | /* Predicates to check various font-related objects. */ | 413 | /* Predicates to check various font-related objects. */ |
| 414 | 414 | ||
| 415 | /* True iff X is one of font-spec, font-entity, and font-object. */ | 415 | /* True iff X is one of font-spec, font-entity, and font-object. */ |
| 416 | #define FONTP(x) PSEUDOVECTORP (x, PVEC_FONT) | 416 | INLINE bool |
| 417 | FONTP (Lisp_Object x) | ||
| 418 | { | ||
| 419 | return PSEUDOVECTORP (x, PVEC_FONT); | ||
| 420 | } | ||
| 421 | |||
| 417 | /* True iff X is font-spec. */ | 422 | /* True iff X is font-spec. */ |
| 418 | #define FONT_SPEC_P(x) \ | 423 | INLINE bool |
| 419 | (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX) | 424 | FONT_SPEC_P (Lisp_Object x) |
| 425 | { | ||
| 426 | return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_SPEC_MAX; | ||
| 427 | } | ||
| 428 | |||
| 420 | /* True iff X is font-entity. */ | 429 | /* True iff X is font-entity. */ |
| 421 | #define FONT_ENTITY_P(x) \ | 430 | INLINE bool |
| 422 | (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX) | 431 | FONT_ENTITY_P (Lisp_Object x) |
| 432 | { | ||
| 433 | return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_ENTITY_MAX; | ||
| 434 | } | ||
| 435 | |||
| 423 | /* True iff X is font-object. */ | 436 | /* True iff X is font-object. */ |
| 424 | #define FONT_OBJECT_P(x) \ | 437 | INLINE bool |
| 425 | (FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX) | 438 | FONT_OBJECT_P (Lisp_Object x) |
| 426 | 439 | { | |
| 427 | /* Check macros for various font-related objects. */ | 440 | return FONTP (x) && (ASIZE (x) & PSEUDOVECTOR_SIZE_MASK) == FONT_OBJECT_MAX; |
| 428 | 441 | } | |
| 429 | #define CHECK_FONT(x) \ | 442 | |
| 430 | do { if (! FONTP (x)) wrong_type_argument (Qfont, x); } while (false) | 443 | /* Type checking functions for various font-related objects. */ |
| 431 | #define CHECK_FONT_SPEC(x) \ | 444 | |
| 432 | do { if (! FONT_SPEC_P (x)) wrong_type_argument (Qfont_spec, x); } \ | 445 | INLINE void |
| 433 | while (false) | 446 | CHECK_FONT (Lisp_Object x) |
| 434 | #define CHECK_FONT_ENTITY(x) \ | 447 | { |
| 435 | do { if (! FONT_ENTITY_P (x)) wrong_type_argument (Qfont_entity, x); } \ | 448 | CHECK_TYPE (FONTP (x), Qfont, x); |
| 436 | while (false) | 449 | } |
| 437 | #define CHECK_FONT_OBJECT(x) \ | 450 | |
| 438 | do { if (! FONT_OBJECT_P (x)) wrong_type_argument (Qfont_object, x); } \ | 451 | INLINE void |
| 439 | while (false) | 452 | CHECK_FONT_SPEC (Lisp_Object x) |
| 440 | 453 | { | |
| 441 | #define CHECK_FONT_GET_OBJECT(x, font) \ | 454 | CHECK_TYPE (FONT_SPEC_P (x), Qfont_spec, x); |
| 442 | do { \ | 455 | } |
| 443 | CHECK_FONT_OBJECT (x); \ | 456 | |
| 444 | font = XFONT_OBJECT (x); \ | 457 | INLINE void |
| 445 | } while (false) | 458 | CHECK_FONT_ENTITY (Lisp_Object x) |
| 459 | { | ||
| 460 | CHECK_TYPE (FONT_ENTITY_P (x), Qfont_entity, x); | ||
| 461 | } | ||
| 462 | |||
| 463 | INLINE void | ||
| 464 | CHECK_FONT_OBJECT (Lisp_Object x) | ||
| 465 | { | ||
| 466 | CHECK_TYPE (FONT_OBJECT_P (x), Qfont_object, x); | ||
| 467 | } | ||
| 468 | |||
| 469 | /* C pointer extraction functions for various font-related objects. */ | ||
| 470 | |||
| 471 | INLINE struct font_spec * | ||
| 472 | XFONT_SPEC (Lisp_Object p) | ||
| 473 | { | ||
| 474 | eassert (FONT_SPEC_P (p)); | ||
| 475 | return XUNTAG (p, Lisp_Vectorlike); | ||
| 476 | } | ||
| 477 | |||
| 478 | INLINE struct font_entity * | ||
| 479 | XFONT_ENTITY (Lisp_Object p) | ||
| 480 | { | ||
| 481 | eassert (FONT_ENTITY_P (p)); | ||
| 482 | return XUNTAG (p, Lisp_Vectorlike); | ||
| 483 | } | ||
| 484 | |||
| 485 | INLINE struct font * | ||
| 486 | XFONT_OBJECT (Lisp_Object p) | ||
| 487 | { | ||
| 488 | eassert (FONT_OBJECT_P (p)); | ||
| 489 | return XUNTAG (p, Lisp_Vectorlike); | ||
| 490 | } | ||
| 446 | 491 | ||
| 447 | #define XFONT_SPEC(p) \ | ||
| 448 | (eassert (FONT_SPEC_P (p)), (struct font_spec *) XUNTAG (p, Lisp_Vectorlike)) | ||
| 449 | #define XFONT_ENTITY(p) \ | ||
| 450 | (eassert (FONT_ENTITY_P (p)), \ | ||
| 451 | (struct font_entity *) XUNTAG (p, Lisp_Vectorlike)) | ||
| 452 | #define XFONT_OBJECT(p) \ | ||
| 453 | (eassert (FONT_OBJECT_P (p)), (struct font *) XUNTAG (p, Lisp_Vectorlike)) | ||
| 454 | #define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT)) | 492 | #define XSETFONT(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_FONT)) |
| 455 | 493 | ||
| 494 | INLINE struct font * | ||
| 495 | CHECK_FONT_GET_OBJECT (Lisp_Object x) | ||
| 496 | { | ||
| 497 | CHECK_FONT_OBJECT (x); | ||
| 498 | return XFONT_OBJECT (x); | ||
| 499 | } | ||
| 500 | |||
| 456 | /* Number of pt per inch (from the TeXbook). */ | 501 | /* Number of pt per inch (from the TeXbook). */ |
| 457 | #define PT_PER_INCH 72.27 | 502 | #define PT_PER_INCH 72.27 |
| 458 | 503 | ||
diff --git a/src/frame.c b/src/frame.c index ec580f37c5b..2ce5a623853 100644 --- a/src/frame.c +++ b/src/frame.c | |||
| @@ -570,6 +570,13 @@ adjust_frame_size (struct frame *f, int new_width, int new_height, int inhibit, | |||
| 570 | run_window_configuration_change_hook (f); | 570 | run_window_configuration_change_hook (f); |
| 571 | } | 571 | } |
| 572 | 572 | ||
| 573 | /* Allocate basically initialized frame. */ | ||
| 574 | |||
| 575 | static struct frame * | ||
| 576 | allocate_frame (void) | ||
| 577 | { | ||
| 578 | return ALLOCATE_ZEROED_PSEUDOVECTOR (struct frame, face_cache, PVEC_FRAME); | ||
| 579 | } | ||
| 573 | 580 | ||
| 574 | struct frame * | 581 | struct frame * |
| 575 | make_frame (bool mini_p) | 582 | make_frame (bool mini_p) |
diff --git a/src/ftfont.c b/src/ftfont.c index 9707b6c1b71..053b95fc69f 100644 --- a/src/ftfont.c +++ b/src/ftfont.c | |||
| @@ -2576,13 +2576,10 @@ ftfont_shape_by_flt (Lisp_Object lgstring, struct font *font, | |||
| 2576 | Lisp_Object | 2576 | Lisp_Object |
| 2577 | ftfont_shape (Lisp_Object lgstring) | 2577 | ftfont_shape (Lisp_Object lgstring) |
| 2578 | { | 2578 | { |
| 2579 | struct font *font; | 2579 | struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring)); |
| 2580 | struct ftfont_info *ftfont_info; | 2580 | struct ftfont_info *ftfont_info = (struct ftfont_info *) font; |
| 2581 | OTF *otf; | 2581 | OTF *otf = ftfont_get_otf (ftfont_info); |
| 2582 | 2582 | ||
| 2583 | CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font); | ||
| 2584 | ftfont_info = (struct ftfont_info *) font; | ||
| 2585 | otf = ftfont_get_otf (ftfont_info); | ||
| 2586 | if (! otf) | 2583 | if (! otf) |
| 2587 | return make_number (0); | 2584 | return make_number (0); |
| 2588 | return ftfont_shape_by_flt (lgstring, font, ftfont_info->ft_size->face, otf, | 2585 | return ftfont_shape_by_flt (lgstring, font, ftfont_info->ft_size->face, otf, |
diff --git a/src/gnutls.c b/src/gnutls.c index 5e6c6353b45..35f0eb48bc1 100644 --- a/src/gnutls.c +++ b/src/gnutls.c | |||
| @@ -122,6 +122,8 @@ DEF_DLL_FN (void, gnutls_transport_set_push_function, | |||
| 122 | (gnutls_session_t, gnutls_push_func)); | 122 | (gnutls_session_t, gnutls_push_func)); |
| 123 | DEF_DLL_FN (int, gnutls_x509_crt_check_hostname, | 123 | DEF_DLL_FN (int, gnutls_x509_crt_check_hostname, |
| 124 | (gnutls_x509_crt_t, const char *)); | 124 | (gnutls_x509_crt_t, const char *)); |
| 125 | DEF_DLL_FN (int, gnutls_x509_crt_check_issuer, | ||
| 126 | (gnutls_x509_crt_t, gnutls_x509_crt_t)); | ||
| 125 | DEF_DLL_FN (void, gnutls_x509_crt_deinit, (gnutls_x509_crt_t)); | 127 | DEF_DLL_FN (void, gnutls_x509_crt_deinit, (gnutls_x509_crt_t)); |
| 126 | DEF_DLL_FN (int, gnutls_x509_crt_import, | 128 | DEF_DLL_FN (int, gnutls_x509_crt_import, |
| 127 | (gnutls_x509_crt_t, const gnutls_datum_t *, | 129 | (gnutls_x509_crt_t, const gnutls_datum_t *, |
| @@ -236,6 +238,7 @@ init_gnutls_functions (void) | |||
| 236 | LOAD_DLL_FN (library, gnutls_transport_set_pull_function); | 238 | LOAD_DLL_FN (library, gnutls_transport_set_pull_function); |
| 237 | LOAD_DLL_FN (library, gnutls_transport_set_push_function); | 239 | LOAD_DLL_FN (library, gnutls_transport_set_push_function); |
| 238 | LOAD_DLL_FN (library, gnutls_x509_crt_check_hostname); | 240 | LOAD_DLL_FN (library, gnutls_x509_crt_check_hostname); |
| 241 | LOAD_DLL_FN (library, gnutls_x509_crt_check_issuer); | ||
| 239 | LOAD_DLL_FN (library, gnutls_x509_crt_deinit); | 242 | LOAD_DLL_FN (library, gnutls_x509_crt_deinit); |
| 240 | LOAD_DLL_FN (library, gnutls_x509_crt_import); | 243 | LOAD_DLL_FN (library, gnutls_x509_crt_import); |
| 241 | LOAD_DLL_FN (library, gnutls_x509_crt_init); | 244 | LOAD_DLL_FN (library, gnutls_x509_crt_init); |
| @@ -329,6 +332,7 @@ init_gnutls_functions (void) | |||
| 329 | # define gnutls_transport_set_pull_function fn_gnutls_transport_set_pull_function | 332 | # define gnutls_transport_set_pull_function fn_gnutls_transport_set_pull_function |
| 330 | # define gnutls_transport_set_push_function fn_gnutls_transport_set_push_function | 333 | # define gnutls_transport_set_push_function fn_gnutls_transport_set_push_function |
| 331 | # define gnutls_x509_crt_check_hostname fn_gnutls_x509_crt_check_hostname | 334 | # define gnutls_x509_crt_check_hostname fn_gnutls_x509_crt_check_hostname |
| 335 | # define gnutls_x509_crt_check_issuer fn_gnutls_x509_crt_check_issuer | ||
| 332 | # define gnutls_x509_crt_deinit fn_gnutls_x509_crt_deinit | 336 | # define gnutls_x509_crt_deinit fn_gnutls_x509_crt_deinit |
| 333 | # define gnutls_x509_crt_get_activation_time fn_gnutls_x509_crt_get_activation_time | 337 | # define gnutls_x509_crt_get_activation_time fn_gnutls_x509_crt_get_activation_time |
| 334 | # define gnutls_x509_crt_get_dn fn_gnutls_x509_crt_get_dn | 338 | # define gnutls_x509_crt_get_dn fn_gnutls_x509_crt_get_dn |
| @@ -982,6 +986,10 @@ DEFUN ("gnutls-peer-status-warning-describe", Fgnutls_peer_status_warning_descri | |||
| 982 | if (EQ (status_symbol, intern (":self-signed"))) | 986 | if (EQ (status_symbol, intern (":self-signed"))) |
| 983 | return build_string ("certificate signer was not found (self-signed)"); | 987 | return build_string ("certificate signer was not found (self-signed)"); |
| 984 | 988 | ||
| 989 | if (EQ (status_symbol, intern (":unknown-ca"))) | ||
| 990 | return build_string ("the certificate was signed by an unknown " | ||
| 991 | "and therefore untrusted authority"); | ||
| 992 | |||
| 985 | if (EQ (status_symbol, intern (":not-ca"))) | 993 | if (EQ (status_symbol, intern (":not-ca"))) |
| 986 | return build_string ("certificate signer is not a CA"); | 994 | return build_string ("certificate signer is not a CA"); |
| 987 | 995 | ||
| @@ -1026,7 +1034,7 @@ The return value is a property list with top-level keys :warnings and | |||
| 1026 | warnings = Fcons (intern (":revoked"), warnings); | 1034 | warnings = Fcons (intern (":revoked"), warnings); |
| 1027 | 1035 | ||
| 1028 | if (verification & GNUTLS_CERT_SIGNER_NOT_FOUND) | 1036 | if (verification & GNUTLS_CERT_SIGNER_NOT_FOUND) |
| 1029 | warnings = Fcons (intern (":self-signed"), warnings); | 1037 | warnings = Fcons (intern (":unknown-ca"), warnings); |
| 1030 | 1038 | ||
| 1031 | if (verification & GNUTLS_CERT_SIGNER_NOT_CA) | 1039 | if (verification & GNUTLS_CERT_SIGNER_NOT_CA) |
| 1032 | warnings = Fcons (intern (":not-ca"), warnings); | 1040 | warnings = Fcons (intern (":not-ca"), warnings); |
| @@ -1044,6 +1052,13 @@ The return value is a property list with top-level keys :warnings and | |||
| 1044 | CERTIFICATE_NOT_MATCHING) | 1052 | CERTIFICATE_NOT_MATCHING) |
| 1045 | warnings = Fcons (intern (":no-host-match"), warnings); | 1053 | warnings = Fcons (intern (":no-host-match"), warnings); |
| 1046 | 1054 | ||
| 1055 | /* This could get called in the INIT stage, when the certificate is | ||
| 1056 | not yet set. */ | ||
| 1057 | if (XPROCESS (proc)->gnutls_certificate != NULL && | ||
| 1058 | gnutls_x509_crt_check_issuer(XPROCESS (proc)->gnutls_certificate, | ||
| 1059 | XPROCESS (proc)->gnutls_certificate)) | ||
| 1060 | warnings = Fcons (intern (":self-signed"), warnings); | ||
| 1061 | |||
| 1047 | if (!NILP (warnings)) | 1062 | if (!NILP (warnings)) |
| 1048 | result = list2 (intern (":warnings"), warnings); | 1063 | result = list2 (intern (":warnings"), warnings); |
| 1049 | 1064 | ||
| @@ -1604,8 +1619,7 @@ This function may also return `gnutls-e-again', or | |||
| 1604 | #endif /* HAVE_GNUTLS */ | 1619 | #endif /* HAVE_GNUTLS */ |
| 1605 | 1620 | ||
| 1606 | DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0, | 1621 | DEFUN ("gnutls-available-p", Fgnutls_available_p, Sgnutls_available_p, 0, 0, 0, |
| 1607 | doc: /* Return t if GnuTLS is available in this instance of Emacs. */ | 1622 | doc: /* Return t if GnuTLS is available in this instance of Emacs. */) |
| 1608 | attributes: const) | ||
| 1609 | (void) | 1623 | (void) |
| 1610 | { | 1624 | { |
| 1611 | #ifdef HAVE_GNUTLS | 1625 | #ifdef HAVE_GNUTLS |
diff --git a/src/gtkutil.h b/src/gtkutil.h index 7d712c92e0d..0ac49ca7db5 100644 --- a/src/gtkutil.h +++ b/src/gtkutil.h | |||
| @@ -78,7 +78,7 @@ typedef struct xg_menu_item_cb_data_ | |||
| 78 | 78 | ||
| 79 | } xg_menu_item_cb_data; | 79 | } xg_menu_item_cb_data; |
| 80 | 80 | ||
| 81 | extern bool xg_uses_old_file_dialog (void) ATTRIBUTE_CONST; | 81 | extern bool xg_uses_old_file_dialog (void); |
| 82 | 82 | ||
| 83 | extern char *xg_get_file_name (struct frame *f, | 83 | extern char *xg_get_file_name (struct frame *f, |
| 84 | char *prompt, | 84 | char *prompt, |
diff --git a/src/lisp.h b/src/lisp.h index b6608daa20e..e94e39a5d01 100644 --- a/src/lisp.h +++ b/src/lisp.h | |||
| @@ -608,6 +608,7 @@ INLINE bool SUBRP (Lisp_Object); | |||
| 608 | INLINE bool (SYMBOLP) (Lisp_Object); | 608 | INLINE bool (SYMBOLP) (Lisp_Object); |
| 609 | INLINE bool (VECTORLIKEP) (Lisp_Object); | 609 | INLINE bool (VECTORLIKEP) (Lisp_Object); |
| 610 | INLINE bool WINDOWP (Lisp_Object); | 610 | INLINE bool WINDOWP (Lisp_Object); |
| 611 | INLINE bool TERMINALP (Lisp_Object); | ||
| 611 | INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object); | 612 | INLINE struct Lisp_Save_Value *XSAVE_VALUE (Lisp_Object); |
| 612 | INLINE struct Lisp_Symbol *(XSYMBOL) (Lisp_Object); | 613 | INLINE struct Lisp_Symbol *(XSYMBOL) (Lisp_Object); |
| 613 | INLINE void *(XUNTAG) (Lisp_Object, int); | 614 | INLINE void *(XUNTAG) (Lisp_Object, int); |
| @@ -1003,6 +1004,7 @@ XWINDOW (Lisp_Object a) | |||
| 1003 | INLINE struct terminal * | 1004 | INLINE struct terminal * |
| 1004 | XTERMINAL (Lisp_Object a) | 1005 | XTERMINAL (Lisp_Object a) |
| 1005 | { | 1006 | { |
| 1007 | eassert (TERMINALP (a)); | ||
| 1006 | return XUNTAG (a, Lisp_Vectorlike); | 1008 | return XUNTAG (a, Lisp_Vectorlike); |
| 1007 | } | 1009 | } |
| 1008 | 1010 | ||
| @@ -1065,12 +1067,6 @@ builtin_lisp_symbol (int index) | |||
| 1065 | return make_lisp_symbol (lispsym + index); | 1067 | return make_lisp_symbol (lispsym + index); |
| 1066 | } | 1068 | } |
| 1067 | 1069 | ||
| 1068 | INLINE Lisp_Object | ||
| 1069 | make_lisp_proc (struct Lisp_Process *p) | ||
| 1070 | { | ||
| 1071 | return make_lisp_ptr (p, Lisp_Vectorlike); | ||
| 1072 | } | ||
| 1073 | |||
| 1074 | #define XSETINT(a, b) ((a) = make_number (b)) | 1070 | #define XSETINT(a, b) ((a) = make_number (b)) |
| 1075 | #define XSETFASTINT(a, b) ((a) = make_natnum (b)) | 1071 | #define XSETFASTINT(a, b) ((a) = make_natnum (b)) |
| 1076 | #define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Lisp_Cons)) | 1072 | #define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Lisp_Cons)) |
| @@ -3785,16 +3781,25 @@ make_uninit_sub_char_table (int depth, int min_char) | |||
| 3785 | return v; | 3781 | return v; |
| 3786 | } | 3782 | } |
| 3787 | 3783 | ||
| 3788 | extern struct Lisp_Vector *allocate_pseudovector (int, int, enum pvec_type); | 3784 | extern struct Lisp_Vector *allocate_pseudovector (int, int, int, |
| 3789 | #define ALLOCATE_PSEUDOVECTOR(typ,field,tag) \ | 3785 | enum pvec_type); |
| 3790 | ((typ*) \ | 3786 | |
| 3791 | allocate_pseudovector \ | 3787 | /* Allocate partially initialized pseudovector where all Lisp_Object |
| 3792 | (VECSIZE (typ), PSEUDOVECSIZE (typ, field), tag)) | 3788 | slots are set to Qnil but the rest (if any) is left uninitialized. */ |
| 3793 | extern struct Lisp_Hash_Table *allocate_hash_table (void); | 3789 | |
| 3794 | extern struct window *allocate_window (void); | 3790 | #define ALLOCATE_PSEUDOVECTOR(type, field, tag) \ |
| 3795 | extern struct frame *allocate_frame (void); | 3791 | ((type *) allocate_pseudovector (VECSIZE (type), \ |
| 3796 | extern struct Lisp_Process *allocate_process (void); | 3792 | PSEUDOVECSIZE (type, field), \ |
| 3797 | extern struct terminal *allocate_terminal (void); | 3793 | PSEUDOVECSIZE (type, field), tag)) |
| 3794 | |||
| 3795 | /* Allocate fully initialized pseudovector where all Lisp_Object | ||
| 3796 | slots are set to Qnil and the rest (if any) is zeroed. */ | ||
| 3797 | |||
| 3798 | #define ALLOCATE_ZEROED_PSEUDOVECTOR(type, field, tag) \ | ||
| 3799 | ((type *) allocate_pseudovector (VECSIZE (type), \ | ||
| 3800 | PSEUDOVECSIZE (type, field), \ | ||
| 3801 | VECSIZE (type), tag)) | ||
| 3802 | |||
| 3798 | extern bool gc_in_progress; | 3803 | extern bool gc_in_progress; |
| 3799 | extern bool abort_on_gc; | 3804 | extern bool abort_on_gc; |
| 3800 | extern Lisp_Object make_float (double); | 3805 | extern Lisp_Object make_float (double); |
diff --git a/src/macfont.m b/src/macfont.m index f569934128f..cbf1b07bc94 100644 --- a/src/macfont.m +++ b/src/macfont.m | |||
| @@ -2788,9 +2788,9 @@ macfont_draw (struct glyph_string *s, int from, int to, int x, int y, | |||
| 2788 | static Lisp_Object | 2788 | static Lisp_Object |
| 2789 | macfont_shape (Lisp_Object lgstring) | 2789 | macfont_shape (Lisp_Object lgstring) |
| 2790 | { | 2790 | { |
| 2791 | struct font *font; | 2791 | struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring)); |
| 2792 | struct macfont_info *macfont_info; | 2792 | struct macfont_info *macfont_info = (struct macfont_info *) font; |
| 2793 | FontRef macfont; | 2793 | FontRef macfont = macfont_info->macfont; |
| 2794 | ptrdiff_t glyph_len, len, i, j; | 2794 | ptrdiff_t glyph_len, len, i, j; |
| 2795 | CFIndex nonbmp_len; | 2795 | CFIndex nonbmp_len; |
| 2796 | UniChar *unichars; | 2796 | UniChar *unichars; |
| @@ -2799,10 +2799,6 @@ macfont_shape (Lisp_Object lgstring) | |||
| 2799 | CFIndex used = 0; | 2799 | CFIndex used = 0; |
| 2800 | struct mac_glyph_layout *glyph_layouts; | 2800 | struct mac_glyph_layout *glyph_layouts; |
| 2801 | 2801 | ||
| 2802 | CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font); | ||
| 2803 | macfont_info = (struct macfont_info *) font; | ||
| 2804 | macfont = macfont_info->macfont; | ||
| 2805 | |||
| 2806 | glyph_len = LGSTRING_GLYPH_LEN (lgstring); | 2802 | glyph_len = LGSTRING_GLYPH_LEN (lgstring); |
| 2807 | nonbmp_len = 0; | 2803 | nonbmp_len = 0; |
| 2808 | for (i = 0; i < glyph_len; i++) | 2804 | for (i = 0; i < glyph_len; i++) |
diff --git a/src/process.c b/src/process.c index 77c94f29211..0789f20f1d2 100644 --- a/src/process.c +++ b/src/process.c | |||
| @@ -422,6 +422,11 @@ pset_write_queue (struct Lisp_Process *p, Lisp_Object val) | |||
| 422 | } | 422 | } |
| 423 | 423 | ||
| 424 | 424 | ||
| 425 | static Lisp_Object | ||
| 426 | make_lisp_proc (struct Lisp_Process *p) | ||
| 427 | { | ||
| 428 | return make_lisp_ptr (p, Lisp_Vectorlike); | ||
| 429 | } | ||
| 425 | 430 | ||
| 426 | static struct fd_callback_data | 431 | static struct fd_callback_data |
| 427 | { | 432 | { |
| @@ -687,7 +692,15 @@ allocate_pty (char pty_name[PTY_NAME_SIZE]) | |||
| 687 | #endif /* HAVE_PTYS */ | 692 | #endif /* HAVE_PTYS */ |
| 688 | return -1; | 693 | return -1; |
| 689 | } | 694 | } |
| 690 | 695 | ||
| 696 | /* Allocate basically initialized process. */ | ||
| 697 | |||
| 698 | static struct Lisp_Process * | ||
| 699 | allocate_process (void) | ||
| 700 | { | ||
| 701 | return ALLOCATE_ZEROED_PSEUDOVECTOR (struct Lisp_Process, pid, PVEC_PROCESS); | ||
| 702 | } | ||
| 703 | |||
| 691 | static Lisp_Object | 704 | static Lisp_Object |
| 692 | make_process (Lisp_Object name) | 705 | make_process (Lisp_Object name) |
| 693 | { | 706 | { |
diff --git a/src/terminal.c b/src/terminal.c index 92befd28543..b48d0623e12 100644 --- a/src/terminal.c +++ b/src/terminal.c | |||
| @@ -254,6 +254,15 @@ get_named_terminal (const char *name) | |||
| 254 | return NULL; | 254 | return NULL; |
| 255 | } | 255 | } |
| 256 | 256 | ||
| 257 | /* Allocate basically initialized terminal. */ | ||
| 258 | |||
| 259 | static struct terminal * | ||
| 260 | allocate_terminal (void) | ||
| 261 | { | ||
| 262 | return ALLOCATE_ZEROED_PSEUDOVECTOR | ||
| 263 | (struct terminal, next_terminal, PVEC_TERMINAL); | ||
| 264 | } | ||
| 265 | |||
| 257 | /* Create a new terminal object of TYPE and add it to the terminal list. RIF | 266 | /* Create a new terminal object of TYPE and add it to the terminal list. RIF |
| 258 | may be NULL if this terminal type doesn't support window-based redisplay. */ | 267 | may be NULL if this terminal type doesn't support window-based redisplay. */ |
| 259 | 268 | ||
diff --git a/src/w32uniscribe.c b/src/w32uniscribe.c index 2a7fe2e6f91..9cd97e28616 100644 --- a/src/w32uniscribe.c +++ b/src/w32uniscribe.c | |||
| @@ -183,8 +183,9 @@ uniscribe_otf_capability (struct font *font) | |||
| 183 | static Lisp_Object | 183 | static Lisp_Object |
| 184 | uniscribe_shape (Lisp_Object lgstring) | 184 | uniscribe_shape (Lisp_Object lgstring) |
| 185 | { | 185 | { |
| 186 | struct font * font; | 186 | struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring)); |
| 187 | struct uniscribe_font_info * uniscribe_font; | 187 | struct uniscribe_font_info *uniscribe_font |
| 188 | = (struct uniscribe_font_info *) font; | ||
| 188 | EMACS_UINT nchars; | 189 | EMACS_UINT nchars; |
| 189 | int nitems, max_items, i, max_glyphs, done_glyphs; | 190 | int nitems, max_items, i, max_glyphs, done_glyphs; |
| 190 | wchar_t *chars; | 191 | wchar_t *chars; |
| @@ -199,9 +200,6 @@ uniscribe_shape (Lisp_Object lgstring) | |||
| 199 | HDC context = NULL; | 200 | HDC context = NULL; |
| 200 | HFONT old_font = NULL; | 201 | HFONT old_font = NULL; |
| 201 | 202 | ||
| 202 | CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font); | ||
| 203 | uniscribe_font = (struct uniscribe_font_info *) font; | ||
| 204 | |||
| 205 | /* Get the chars from lgstring in a form we can use with uniscribe. */ | 203 | /* Get the chars from lgstring in a form we can use with uniscribe. */ |
| 206 | max_glyphs = nchars = LGSTRING_GLYPH_LEN (lgstring); | 204 | max_glyphs = nchars = LGSTRING_GLYPH_LEN (lgstring); |
| 207 | done_glyphs = 0; | 205 | done_glyphs = 0; |
diff --git a/src/window.c b/src/window.c index 60ba3750f5b..d14a0f74fa0 100644 --- a/src/window.c +++ b/src/window.c | |||
| @@ -3645,7 +3645,16 @@ temp_output_buffer_show (register Lisp_Object buf) | |||
| 3645 | } | 3645 | } |
| 3646 | } | 3646 | } |
| 3647 | } | 3647 | } |
| 3648 | 3648 | ||
| 3649 | /* Allocate basically initialized window. */ | ||
| 3650 | |||
| 3651 | static struct window * | ||
| 3652 | allocate_window (void) | ||
| 3653 | { | ||
| 3654 | return ALLOCATE_ZEROED_PSEUDOVECTOR | ||
| 3655 | (struct window, current_matrix, PVEC_WINDOW); | ||
| 3656 | } | ||
| 3657 | |||
| 3649 | /* Make new window, have it replace WINDOW in window-tree, and make | 3658 | /* Make new window, have it replace WINDOW in window-tree, and make |
| 3650 | WINDOW its only vertical child (HORFLAG 1 means make WINDOW its only | 3659 | WINDOW its only vertical child (HORFLAG 1 means make WINDOW its only |
| 3651 | horizontal child). */ | 3660 | horizontal child). */ |
diff --git a/src/xdisp.c b/src/xdisp.c index a37575778e8..b38e8a64c5d 100644 --- a/src/xdisp.c +++ b/src/xdisp.c | |||
| @@ -12332,8 +12332,7 @@ DEFUN ("tool-bar-height", Ftool_bar_height, Stool_bar_height, | |||
| 12332 | 0, 2, 0, | 12332 | 0, 2, 0, |
| 12333 | doc: /* Return the number of lines occupied by the tool bar of FRAME. | 12333 | doc: /* Return the number of lines occupied by the tool bar of FRAME. |
| 12334 | If FRAME is nil or omitted, use the selected frame. Optional argument | 12334 | If FRAME is nil or omitted, use the selected frame. Optional argument |
| 12335 | PIXELWISE non-nil means return the height of the tool bar in pixels. */ | 12335 | PIXELWISE non-nil means return the height of the tool bar in pixels. */) |
| 12336 | attributes: const) | ||
| 12337 | (Lisp_Object frame, Lisp_Object pixelwise) | 12336 | (Lisp_Object frame, Lisp_Object pixelwise) |
| 12338 | { | 12337 | { |
| 12339 | int height = 0; | 12338 | int height = 0; |
diff --git a/src/xftfont.c b/src/xftfont.c index c587d814efa..054b38e120f 100644 --- a/src/xftfont.c +++ b/src/xftfont.c | |||
| @@ -640,13 +640,11 @@ xftfont_draw (struct glyph_string *s, int from, int to, int x, int y, | |||
| 640 | static Lisp_Object | 640 | static Lisp_Object |
| 641 | xftfont_shape (Lisp_Object lgstring) | 641 | xftfont_shape (Lisp_Object lgstring) |
| 642 | { | 642 | { |
| 643 | struct font *font; | 643 | struct font *font = CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring)); |
| 644 | struct xftfont_info *xftfont_info; | 644 | struct xftfont_info *xftfont_info = (struct xftfont_info *) font; |
| 645 | FT_Face ft_face; | 645 | FT_Face ft_face; |
| 646 | Lisp_Object val; | 646 | Lisp_Object val; |
| 647 | 647 | ||
| 648 | CHECK_FONT_GET_OBJECT (LGSTRING_FONT (lgstring), font); | ||
| 649 | xftfont_info = (struct xftfont_info *) font; | ||
| 650 | ft_face = XftLockFace (xftfont_info->xftfont); | 648 | ft_face = XftLockFace (xftfont_info->xftfont); |
| 651 | xftfont_info->ft_size = ft_face->size; | 649 | xftfont_info->ft_size = ft_face->size; |
| 652 | val = ftfont_driver.shape (lgstring); | 650 | val = ftfont_driver.shape (lgstring); |
diff --git a/src/xmenu.c b/src/xmenu.c index 9063a8a2a52..fdf1f6f4d84 100644 --- a/src/xmenu.c +++ b/src/xmenu.c | |||
| @@ -2288,7 +2288,7 @@ x_menu_show (struct frame *f, int x, int y, int menuflags, | |||
| 2288 | /* Detect if a dialog or menu has been posted. MSDOS has its own | 2288 | /* Detect if a dialog or menu has been posted. MSDOS has its own |
| 2289 | implementation on msdos.c. */ | 2289 | implementation on msdos.c. */ |
| 2290 | 2290 | ||
| 2291 | int ATTRIBUTE_CONST | 2291 | int |
| 2292 | popup_activated (void) | 2292 | popup_activated (void) |
| 2293 | { | 2293 | { |
| 2294 | return popup_activated_flag; | 2294 | return popup_activated_flag; |
diff --git a/test/ChangeLog b/test/ChangeLog index a33ec8793f4..8ed02ee341b 100644 --- a/test/ChangeLog +++ b/test/ChangeLog | |||
| @@ -1,3 +1,19 @@ | |||
| 1 | 2015-01-16 Jorgen Schaefer <contact@jorgenschaefer.de> | ||
| 2 | |||
| 3 | * automated/package-test.el (package-test-install-prioritized): | ||
| 4 | New test. | ||
| 5 | |||
| 6 | 2015-01-15 Wolfgang Jenkner <wjenkner@inode.at> | ||
| 7 | |||
| 8 | * automated/calc-tests.el (calc-tests-equal, calc-tests-simple): | ||
| 9 | New functions. | ||
| 10 | (test-calc-remove-units, test-calc-extract-units) | ||
| 11 | (test-calc-convert-units): New tests. | ||
| 12 | |||
| 13 | 2015-01-15 Wolfgang Jenkner <wjenkner@inode.at> | ||
| 14 | |||
| 15 | * automated/Makefile.in (WRITE_LOG): Use POSIX redirection. | ||
| 16 | |||
| 1 | 2015-01-15 Stefan Monnier <monnier@iro.umontreal.ca> | 17 | 2015-01-15 Stefan Monnier <monnier@iro.umontreal.ca> |
| 2 | 18 | ||
| 3 | * automated/eieio-test-methodinvoke.el (eieio-test-method-store): Add | 19 | * automated/eieio-test-methodinvoke.el (eieio-test-method-store): Add |
diff --git a/test/automated/Makefile.in b/test/automated/Makefile.in index ed757817ae0..7243e8af14a 100644 --- a/test/automated/Makefile.in +++ b/test/automated/Makefile.in | |||
| @@ -64,7 +64,7 @@ all: check | |||
| 64 | 64 | ||
| 65 | ## Ignore any test errors so we can continue to test other files. | 65 | ## Ignore any test errors so we can continue to test other files. |
| 66 | ## But compilation errors are always fatal. | 66 | ## But compilation errors are always fatal. |
| 67 | WRITE_LOG = >& $@ || { stat=ERROR; cat $@; }; echo $$stat: $@ | 67 | WRITE_LOG = > $@ 2>&1 || { stat=ERROR; cat $@; }; echo $$stat: $@ |
| 68 | 68 | ||
| 69 | ## I'd prefer to use -emacs -f ert-run-tests-batch-and-exit rather | 69 | ## I'd prefer to use -emacs -f ert-run-tests-batch-and-exit rather |
| 70 | ## than || true, since the former makes problems more obvious. | 70 | ## than || true, since the former makes problems more obvious. |
diff --git a/test/automated/calc-tests.el b/test/automated/calc-tests.el index 331e01e4640..d5252ea62a9 100644 --- a/test/automated/calc-tests.el +++ b/test/automated/calc-tests.el | |||
| @@ -27,6 +27,40 @@ | |||
| 27 | (require 'cl-lib) | 27 | (require 'cl-lib) |
| 28 | (require 'ert) | 28 | (require 'ert) |
| 29 | (require 'calc) | 29 | (require 'calc) |
| 30 | (require 'calc-ext) | ||
| 31 | (require 'calc-units) | ||
| 32 | |||
| 33 | ;; XXX The order in which calc libraries (in particular calc-units) | ||
| 34 | ;; are loaded influences whether a calc integer in an expression | ||
| 35 | ;; involving units is represented as a lisp integer or a calc float, | ||
| 36 | ;; see bug#19582. Until this will be fixed the following function can | ||
| 37 | ;; be used to compare such calc expressions. | ||
| 38 | (defun calc-tests-equal (a b) | ||
| 39 | "Like `equal' but allow for different representations of numbers. | ||
| 40 | For example: (calc-tests-equal 10 '(float 1 1)) => t. | ||
| 41 | A and B should be calc expressions." | ||
| 42 | (cond ((math-numberp a) | ||
| 43 | (and (math-numberp b) | ||
| 44 | (math-equal a b))) | ||
| 45 | ((atom a) | ||
| 46 | (equal a b)) | ||
| 47 | ((consp b) | ||
| 48 | ;; Can't be dotted or circular. | ||
| 49 | (and (= (length a) (length b)) | ||
| 50 | (equal (car a) (car b)) | ||
| 51 | (cl-every #'calc-tests-equal (cdr a) (cdr b)))))) | ||
| 52 | |||
| 53 | (defun calc-tests-simple (fun string &rest args) | ||
| 54 | "Push STRING on the calc stack, then call FUN and return the new top. | ||
| 55 | The result is a calc (i.e., lisp) expression, not its string representation. | ||
| 56 | Also pop the entire stack afterwards. | ||
| 57 | An existing calc stack is reused, otherwise a new one is created." | ||
| 58 | (calc-eval string 'push) | ||
| 59 | (prog1 | ||
| 60 | (ignore-errors | ||
| 61 | (apply fun args) | ||
| 62 | (calc-top-n 1)) | ||
| 63 | (calc-pop 0))) | ||
| 30 | 64 | ||
| 31 | (ert-deftest test-math-bignum () | 65 | (ert-deftest test-math-bignum () |
| 32 | ;; bug#17556 | 66 | ;; bug#17556 |
| @@ -34,6 +68,24 @@ | |||
| 34 | (should (math-negp n)) | 68 | (should (math-negp n)) |
| 35 | (should (cl-notany #'cl-minusp (cdr n))))) | 69 | (should (cl-notany #'cl-minusp (cdr n))))) |
| 36 | 70 | ||
| 71 | (ert-deftest test-calc-remove-units () | ||
| 72 | (should (calc-tests-equal (calc-tests-simple #'calc-remove-units "-1 m") -1))) | ||
| 73 | |||
| 74 | (ert-deftest test-calc-extract-units () | ||
| 75 | (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m") | ||
| 76 | '(var m var-m))) | ||
| 77 | (should (calc-tests-equal (calc-tests-simple #'calc-extract-units "-1 m*cm") | ||
| 78 | '(* (float 1 -2) (^ (var m var-m) 2))))) | ||
| 79 | |||
| 80 | (ert-deftest test-calc-convert-units () | ||
| 81 | ;; Used to ask for `(The expression is unitless when simplified) Old Units: '. | ||
| 82 | (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m" nil "cm") | ||
| 83 | '(* -100 (var cm var-cm)))) | ||
| 84 | ;; Gave wrong result. | ||
| 85 | (should (calc-tests-equal (calc-tests-simple #'calc-convert-units "-1 m" | ||
| 86 | (math-read-expr "1m") "cm") | ||
| 87 | '(* -100 (var cm var-cm))))) | ||
| 88 | |||
| 37 | (provide 'calc-tests) | 89 | (provide 'calc-tests) |
| 38 | ;;; calc-tests.el ends here | 90 | ;;; calc-tests.el ends here |
| 39 | 91 | ||
diff --git a/test/automated/package-test.el b/test/automated/package-test.el index 27a71c528c6..c33a1ba0232 100644 --- a/test/automated/package-test.el +++ b/test/automated/package-test.el | |||
| @@ -230,6 +230,23 @@ Must called from within a `tar-mode' buffer." | |||
| 230 | (package-refresh-contents) | 230 | (package-refresh-contents) |
| 231 | (package-install 'simple-single))) | 231 | (package-install 'simple-single))) |
| 232 | 232 | ||
| 233 | (ert-deftest package-test-install-prioritized () | ||
| 234 | "Install a lower version from a higher-prioritized archive." | ||
| 235 | (with-package-test () | ||
| 236 | (let* ((newer-version (expand-file-name "data/package/newer-versions" | ||
| 237 | package-test-file-dir)) | ||
| 238 | (package-archives `(("older" . ,package-test-data-dir) | ||
| 239 | ("newer" . ,newer-version))) | ||
| 240 | (package-archive-priorities '(("newer" . 100)))) | ||
| 241 | |||
| 242 | (package-initialize) | ||
| 243 | (package-refresh-contents) | ||
| 244 | (package-install 'simple-single) | ||
| 245 | |||
| 246 | (let ((installed (cadr (assq 'simple-single package-alist)))) | ||
| 247 | (should (version-list-= '(1 3) | ||
| 248 | (package-desc-version installed))))))) | ||
| 249 | |||
| 233 | (ert-deftest package-test-install-multifile () | 250 | (ert-deftest package-test-install-multifile () |
| 234 | "Check properties of the installed multi-file package." | 251 | "Check properties of the installed multi-file package." |
| 235 | (with-package-test (:basedir "data/package" :install '(multi-file)) | 252 | (with-package-test (:basedir "data/package" :install '(multi-file)) |