emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] xwidget_mvp 8cffeb5 2/3: merge master


From: Joakim Verona
Subject: [Emacs-diffs] xwidget_mvp 8cffeb5 2/3: merge master
Date: Thu, 26 Feb 2015 13:48:24 +0000

branch: xwidget_mvp
commit 8cffeb5e4d548398c5c8c26e191e6f237c47cf2b
Merge: f3644c0 7a77ed9
Author: Joakim Verona <address@hidden>
Commit: Joakim Verona <address@hidden>

    merge master
---
 ChangeLog                      |   16 +++
 doc/misc/ChangeLog             |    4 +
 doc/misc/auth.texi             |    4 +-
 doc/misc/texinfo.tex           |   55 +++++++--
 etc/NEWS                       |    5 +
 etc/TODO                       |   15 +++
 leim/ChangeLog                 |    7 +
 leim/Makefile.in               |    2 +-
 lib-src/ChangeLog              |   17 +++
 lib-src/Makefile.in            |    2 +-
 lib-src/etags.c                |    8 +-
 lib-src/make-docfile.c         |    2 +-
 lib/getdtablesize.c            |   35 +++---
 lib/getopt.c                   |   52 ++++++--
 lib/signal.in.h                |    8 +-
 lib/tempname.c                 |  118 ++++++++++--------
 lib/tempname.h                 |   15 +++
 lisp/ChangeLog                 |  173 ++++++++++++++++++++++++--
 lisp/Makefile.in               |    2 +-
 lisp/autorevert.el             |  115 +++++++++++------
 lisp/bindings.el               |    2 +-
 lisp/calendar/solar.el         |   22 +---
 lisp/cedet/ChangeLog           |    7 +
 lisp/cedet/semantic/doc.el     |    9 +-
 lisp/cedet/srecode/document.el |    2 +-
 lisp/comint.el                 |    6 +
 lisp/dom.el                    |   10 ++
 lisp/emacs-lisp/cl-generic.el  |    2 +-
 lisp/emacs-lisp/cl-macs.el     |   41 +++----
 lisp/emacs-lisp/eieio-opt.el   |    1 +
 lisp/emacs-lisp/eieio.el       |    2 +-
 lisp/emacs-lisp/macroexp.el    |   19 ++--
 lisp/emacs-lisp/package.el     |   13 +-
 lisp/emacs-lisp/pcase.el       |    2 +-
 lisp/emacs-lisp/smie.el        |    7 +-
 lisp/filecache.el              |    3 +-
 lisp/files.el                  |    9 +-
 lisp/gnus/ChangeLog            |   19 +++-
 lisp/gnus/gnus-art.el          |    2 +-
 lisp/gnus/mailcap.el           |    5 +
 lisp/gnus/nnimap.el            |    7 +-
 lisp/mail/rmailsum.el          |    9 +-
 lisp/net/sasl-scram-rfc.el     |   47 ++++----
 lisp/net/sasl.el               |    2 +-
 lisp/org/ChangeLog             |    2 +-
 lisp/progmodes/f90.el          |   25 +++-
 lisp/progmodes/verilog-mode.el |   37 +++---
 lisp/progmodes/vhdl-mode.el    |  273 +++++++++++++++++++++++++++++++++-------
 lisp/progmodes/xref.el         |   23 ++++
 lisp/url/ChangeLog             |    5 +
 m4/dup2.m4                     |   76 ++++++------
 m4/fcntl.m4                    |   52 ++++----
 m4/getdtablesize.m4            |    6 +-
 src/ChangeLog                  |   74 +++++++++++
 src/buffer.c                   |    8 +-
 src/bytecode.c                 |    8 +-
 src/callint.c                  |    8 +-
 src/callproc.c                 |    2 +-
 src/charset.c                  |    4 +-
 src/coding.c                   |    8 +-
 src/editfns.c                  |    3 +-
 src/emacs.c                    |    8 +-
 src/fns.c                      |    2 +-
 src/frame.c                    |    4 +-
 src/ftfont.c                   |    1 -
 src/keyboard.c                 |    6 +-
 src/keymap.c                   |    4 +-
 src/lisp.h                     |    6 +-
 src/lread.c                    |   11 +--
 src/minibuf.c                  |    6 +-
 src/nsfns.m                    |   88 +++++++++++++-
 src/sysstdio.h                 |   29 +++++
 src/textprop.c                 |    3 +-
 src/w32fns.c                   |   12 +-
 src/w32font.c                  |    8 +-
 src/w32inevt.c                 |    2 +-
 src/w32term.c                  |    2 +-
 src/xdisp.c                    |    5 +-
 src/xfaces.c                   |    2 +-
 src/xfns.c                     |    5 +-
 src/xml.c                      |    3 +-
 test/ChangeLog                 |   10 ++
 test/automated/f90.el          |   16 +++
 test/automated/tramp-tests.el  |    5 +-
 test/automated/vc-tests.el     |    4 +-
 test/cedet/srecode-tests.el    |    2 +-
 86 files changed, 1303 insertions(+), 458 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4365668..41bff0e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,19 @@
+2015-02-21  Paul Eggert  <address@hidden>
+
+       Merge from gnulib
+       * lib/getdtablesize.c, lib/getopt.c, lib/signal.in.h, lib/tempname.c:
+       * lib/tempname.h, m4/dup2.m4, m4/fcntl.m4, m4/getdtablesize.m4:
+       Update from gnulib, incorporating:
+       2015-02-20 getdtablesize: port better for Android
+       2015-02-19 fcntl: Fix cross compiling
+       2015-02-18 dup2, fcntl: cross-compile better for Android
+       2015-02-18 getopt: don't crash on memory exhaustion
+       2015-02-17 tempname: allow compilation with C++ (trivial)
+       2015-02-17 dup2, fcntl: port to AIX
+       2015-02-16 getdtablesize, dup2, fcntl: port to Android
+       2015-02-11 getdtablesize, signal_h: Fix Android build
+       2015-02-11 maint: various whitespace cleanups in tempname
+
 2015-02-13  Jan Djärv  <address@hidden>
 
        * configure.ac: Set locallisppath to empty for NS self contained,
diff --git a/doc/misc/ChangeLog b/doc/misc/ChangeLog
index c796b75..d04a8bb 100644
--- a/doc/misc/ChangeLog
+++ b/doc/misc/ChangeLog
@@ -1,3 +1,7 @@
+2015-02-21  Paul Eggert  <address@hidden>
+
+       * texinfo.tex: Update from gnulib.
+
 2015-02-10  Lars Ingebrigtsen  <address@hidden>
 
        * eww.texi (Basics): Mention eww-toggle-fonts.
diff --git a/doc/misc/auth.texi b/doc/misc/auth.texi
index 7c0254a..8dbde4d 100644
--- a/doc/misc/auth.texi
+++ b/doc/misc/auth.texi
@@ -247,8 +247,8 @@ names:
 Your netrc entries will then be:
 
 @example
-machine gmail login account@@gmail.com password "accountpassword" port imap
-machine gmail2 login account2@@gmail.com password "account2password" port imap
+machine gmail login account@@gmail.com password "account password" port imap
+machine gmail2 login account2@@gmail.com password "account2 password" port imap
 @end example
 
 @node Secret Service API
diff --git a/doc/misc/texinfo.tex b/doc/misc/texinfo.tex
index 96b212d..8236d7d 100644
--- a/doc/misc/texinfo.tex
+++ b/doc/misc/texinfo.tex
@@ -3,7 +3,7 @@
 % Load plain if necessary, i.e., if running under initex.
 \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
 %
-\def\texinfoversion{2015-01-31.10}
+\def\texinfoversion{2015-02-05.16}
 %
 % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
 % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
@@ -4489,7 +4489,6 @@ end
 % Called from \indexdummies and \atdummies.
 %
 \def\commondummies{%
-  %
   % \definedummyword defines \#1 as \string\#1\space, thus effectively
   % preventing its expansion.  This is used only for control words,
   % not control letters, because the \space would be incorrect for
@@ -4566,6 +4565,7 @@ end
   \definedummyword\guilsinglright
   \definedummyword\lbracechar
   \definedummyword\leq
+  \definedummyword\mathopsup
   \definedummyword\minus
   \definedummyword\ogonek
   \definedummyword\pounds
@@ -4579,6 +4579,8 @@ end
   \definedummyword\quotesinglbase
   \definedummyword\rbracechar
   \definedummyword\result
+  \definedummyword\sub
+  \definedummyword\sup
   \definedummyword\textdegree
   %
   % We want to disable all macros so that they are not expanded by \write.
@@ -4653,6 +4655,7 @@ end
   \definedummyword\samp
   \definedummyword\strong
   \definedummyword\tie
+  \definedummyword\U
   \definedummyword\uref
   \definedummyword\url
   \definedummyword\var
@@ -8335,14 +8338,7 @@ end
   \catcode`\\=\other
   %
   % Make the characters 128-255 be printing characters.
-  {%
-    \count1=128
-    \def\loop{%
-      \catcode\count1=\other
-      \advance\count1 by 1
-      \ifnum \count1<256 \loop \fi
-    }%
-  }%
+  {\setnonasciicharscatcodenonglobal\other}%
   %
   % @ is our escape character in .aux files, and we need braces.
   \catcode`\{=1
@@ -9831,15 +9827,51 @@ directory should work if nowhere else does.}
   \DeclareUnicodeCharacter{2261}{\equiv}
 }% end of \utfeightchardefs
 
-
 % US-ASCII character definitions.
 \def\asciichardefs{% nothing need be done
    \relax
 }
 
+% Latin1 (ISO-8859-1) character definitions.
+\def\nonasciistringdefs{%
+  \setnonasciicharscatcode\active
+  \def\defstringchar##1{\def##1{\string##1}}%
+  \defstringchar^^a0\defstringchar^^a1\defstringchar^^a2\defstringchar^^a3%
+  \defstringchar^^a4\defstringchar^^a5\defstringchar^^a6\defstringchar^^a7%
+  \defstringchar^^a8\defstringchar^^a9\defstringchar^^aa\defstringchar^^ab%
+  \defstringchar^^ac\defstringchar^^ad\defstringchar^^ae\defstringchar^^af%
+  %
+  \defstringchar^^b0\defstringchar^^b1\defstringchar^^b2\defstringchar^^b3%
+  \defstringchar^^b4\defstringchar^^b5\defstringchar^^b6\defstringchar^^b7%
+  \defstringchar^^b8\defstringchar^^b9\defstringchar^^ba\defstringchar^^bb%
+  \defstringchar^^bc\defstringchar^^bd\defstringchar^^be\defstringchar^^bf%
+  %
+  \defstringchar^^c0\defstringchar^^c1\defstringchar^^c2\defstringchar^^c3%
+  \defstringchar^^c4\defstringchar^^c5\defstringchar^^c6\defstringchar^^c7%
+  \defstringchar^^c8\defstringchar^^c9\defstringchar^^ca\defstringchar^^cb%
+  \defstringchar^^cc\defstringchar^^cd\defstringchar^^ce\defstringchar^^cf%
+  %
+  \defstringchar^^d0\defstringchar^^d1\defstringchar^^d2\defstringchar^^d3%
+  \defstringchar^^d4\defstringchar^^d5\defstringchar^^d6\defstringchar^^d7%
+  \defstringchar^^d8\defstringchar^^d9\defstringchar^^da\defstringchar^^db%
+  \defstringchar^^dc\defstringchar^^dd\defstringchar^^de\defstringchar^^df%
+  %
+  \defstringchar^^e0\defstringchar^^e1\defstringchar^^e2\defstringchar^^e3%
+  \defstringchar^^e4\defstringchar^^e5\defstringchar^^e6\defstringchar^^e7%
+  \defstringchar^^e8\defstringchar^^e9\defstringchar^^ea\defstringchar^^eb%
+  \defstringchar^^ec\defstringchar^^ed\defstringchar^^ee\defstringchar^^ef%
+  %
+  \defstringchar^^f0\defstringchar^^f1\defstringchar^^f2\defstringchar^^f3%
+  \defstringchar^^f4\defstringchar^^f5\defstringchar^^f6\defstringchar^^f7%
+  \defstringchar^^f8\defstringchar^^f9\defstringchar^^fa\defstringchar^^fb%
+  \defstringchar^^fc\defstringchar^^fd\defstringchar^^fe\defstringchar^^ff%
+}
+
+
 % define all the unicode characters we know about, for the sake of @U.
 \utfeightchardefs
 
+
 % Make non-ASCII characters printable again for compatibility with
 % existing Texinfo documents that may use them, even without declaring a
 % document encoding.
@@ -10193,6 +10225,7 @@ directory should work if nowhere else does.}
 %
 address@hidden = @active
  @address@hidden
+   @nonasciistringdefs
    @address@hidden
    @let"address@hidden
    @address@hidden %$ font-lock fix
diff --git a/etc/NEWS b/etc/NEWS
index f359f91..3f88d3d 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -467,6 +467,8 @@ allows to customize this.
 *** Two new faces `compare-windows-removed' and `compare-windows-added'
 replace the obsolete face `compare-windows'.
 
+** VHDL mode supports VHDL'08.
+
 ** Calculator: decimal display mode uses "," groups, so it's more
 fitting for use in money calculations; factorial works with
 non-integer inputs.
@@ -556,6 +558,9 @@ command line's password prompt.
 ** tar-mode: new `tar-new-entry' command, allowing for new members to
 be added to the archive.
 
+** Autorevert: dired buffers are also auto-reverted via file
+notifications, if Emacs is compiled with file notification support.
+
 ** Obsolete packages
 
 ---
diff --git a/etc/TODO b/etc/TODO
index 68a3792..79996e2 100644
--- a/etc/TODO
+++ b/etc/TODO
@@ -102,6 +102,21 @@ make it.
   "FOO-tab -> ?\FOO-\t", "uppercase -> lowercase", "[fringe KEY...] ->
   [KEY]", "H-FOO -> M-FOO", "C-x C-y FOO -> H-FOO", ...
 
+* Things related to elpa.gnu.org.
+
+** Move idlwave to elpa.gnu.org.
+Need to sync up the Emacs and external versions.
+See <http://lists.gnu.org/archive/html/emacs-devel/2014-07/msg00008.html>
+
+** Move Org mode to elpa.gnu.org.
+See <http://lists.gnu.org/archive/html/emacs-devel/2014-08/msg00300.html>
+<http://lists.gnu.org/archive/html/emacs-devel/2014-11/msg00257.html>
+
+** Move verilog-mode to elpa.gnu.org.
+See <http://lists.gnu.org/archive/html/emacs-devel/2015-02/msg01180.html>
+
+** Move vhdl-mode to elpa.gnu.org.
+See <http://lists.gnu.org/archive/html/emacs-devel/2015-02/msg01180.html>
 
 * Simple tasks. These don't require much Emacs knowledge, they are
 suitable for anyone from beginners to experts.
diff --git a/leim/ChangeLog b/leim/ChangeLog
index 4bda9a6..a8dbca2 100644
--- a/leim/ChangeLog
+++ b/leim/ChangeLog
@@ -1,3 +1,10 @@
+2015-02-23  Pete Williamson  <address@hidden>  (tiny change)
+
+       Use ${EXEEXT} more uniformly in makefiles
+       When porting Emacs to run on NaCl, we need to make sure that we always
+       call it with the proper extension (.nexe in this case) during the build.
+       * Makefile.in (EMACS): Append ${EXEEXT}.
+
 2015-01-04  Paul Eggert  <address@hidden>
 
        Less 'make' chatter for leim
diff --git a/leim/Makefile.in b/leim/Makefile.in
index 573acf7..2ec03db 100644
--- a/leim/Makefile.in
+++ b/leim/Makefile.in
@@ -47,7 +47,7 @@ unexport EMACSDATA EMACSDOC EMACSPATH
 
 # Which Emacs to use to convert TIT files to Emacs Lisp files,
 # and generate the file leim-list.el.
-EMACS = ../src/emacs
+EMACS = ../src/emacs${EXEEXT}
 
 # How to run Emacs.
 # Prevent any setting of EMACSLOADPATH in user environment causing problems.
diff --git a/lib-src/ChangeLog b/lib-src/ChangeLog
index 534d253..5c55bce 100644
--- a/lib-src/ChangeLog
+++ b/lib-src/ChangeLog
@@ -1,3 +1,20 @@
+2015-02-23  Pete Williamson  <address@hidden>  (tiny change)
+
+       Use ${EXEEXT} more uniformly in makefiles
+       * Makefile.in (EMACS): Append ${EXEEXT}.
+
+2015-02-20  Paul Eggert  <address@hidden>
+
+       Simplify binary I/O configuration
+       * etags.c: Include <sysstdio.h> rather than <stdio.h>.
+       (process_file_name, analyze_regex): Use FOPEN_BINARY rather than
+       hard-coded "b".
+
+2015-02-19  Eli Zaretskii  <address@hidden>
+
+       * etags.c (process_file_name) [!DOS_NT]: Use "r", not "rb" in the
+       call to 'popen'.  (Bug#19735)
+
 2015-02-13  Paul Eggert  <address@hidden>
 
        Better support for future plugins
diff --git a/lib-src/Makefile.in b/lib-src/Makefile.in
index d2705e7..6b5d379 100644
--- a/lib-src/Makefile.in
+++ b/lib-src/Makefile.in
@@ -21,7 +21,7 @@
 SHELL = @SHELL@
 
 # Following ../lisp/Makefile.in.
-EMACS = ../src/emacs
+EMACS = ../src/emacs${EXEEXT}
 EMACSOPT = -batch --no-site-file --no-site-lisp
 
 # ==================== Things `configure' will edit ====================
diff --git a/lib-src/etags.c b/lib-src/etags.c
index dc2ced5..7f18755 100644
--- a/lib-src/etags.c
+++ b/lib-src/etags.c
@@ -122,7 +122,7 @@ char pot_etags_version[] = "@(#) pot revision number is 
17.38.1.4";
 #include <stdarg.h>
 #include <stdlib.h>
 #include <string.h>
-#include <stdio.h>
+#include <sysstdio.h>
 #include <ctype.h>
 #include <errno.h>
 #include <sys/types.h>
@@ -1532,11 +1532,11 @@ process_file_name (char *file, language *lang)
   if (real_name == compressed_name)
     {
       char *cmd = concat (compr->command, " ", real_name);
-      inf = popen (cmd, "rb");
+      inf = popen (cmd, "r" FOPEN_BINARY);
       free (cmd);
     }
   else
-    inf = fopen (real_name, "rb");
+    inf = fopen (real_name, "r" FOPEN_BINARY);
   if (inf == NULL)
     {
       perror (real_name);
@@ -5600,7 +5600,7 @@ analyze_regex (char *regex_arg)
        char *regexfile = regex_arg + 1;
 
        /* regexfile is a file containing regexps, one per line. */
-       regexfp = fopen (regexfile, "rb");
+       regexfp = fopen (regexfile, "r" FOPEN_BINARY);
        if (regexfp == NULL)
          pfatal (regexfile);
        linebuffer_init (&regexbuf);
diff --git a/lib-src/make-docfile.c b/lib-src/make-docfile.c
index a7943e3..bada8df 100644
--- a/lib-src/make-docfile.c
+++ b/lib-src/make-docfile.c
@@ -743,7 +743,7 @@ write_globals (void)
   puts ("#endif");
 
   puts ("#define Qnil builtin_lisp_symbol (0)");
-  puts ("#if DEFINE_NONNIL_Q_SYMBOL_MACROS");
+  puts ("#if DEFINE_NON_NIL_Q_SYMBOL_MACROS");
   num_symbols = 0;
   for (int i = 0; i < num_globals; i++)
     if (globals[i].type == SYMBOL && num_symbols++ != 0)
diff --git a/lib/getdtablesize.c b/lib/getdtablesize.c
index 59b9736..bad45f7 100644
--- a/lib/getdtablesize.c
+++ b/lib/getdtablesize.c
@@ -84,32 +84,31 @@ getdtablesize (void)
   return dtablesize;
 }
 
-#elif HAVE_GETDTABLESIZE
+#else
 
+# include <limits.h>
 # include <sys/resource.h>
-# undef getdtablesize
+
+# ifdef __CYGWIN__
+  /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it
+     hits the compile-time constant hard limit of 3200.  We might as
+     well just report the hard limit.  */
+#  define rlim_cur rlim_max
+# endif
 
 int
-rpl_getdtablesize(void)
+getdtablesize (void)
 {
-  /* To date, this replacement is only compiled for Cygwin 1.7.25,
-     which auto-increased the RLIMIT_NOFILE soft limit until it
-     hits the compile-time constant hard limit of 3200.  Although
-     that version of cygwin supported a child process inheriting
-     a smaller soft limit, the smaller limit is not enforced, so
-     we might as well just report the hard limit.  */
   struct rlimit lim;
-  if (!getrlimit (RLIMIT_NOFILE, &lim) && lim.rlim_max != RLIM_INFINITY)
-    return lim.rlim_max;
-  return getdtablesize ();
-}
 
-#elif defined _SC_OPEN_MAX
+  if (getrlimit (RLIMIT_NOFILE, &lim) == 0
+      && 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX
+      && lim.rlim_cur != RLIM_INFINITY
+      && lim.rlim_cur != RLIM_SAVED_CUR
+      && lim.rlim_cur != RLIM_SAVED_MAX)
+    return lim.rlim_cur;
 
-int
-getdtablesize (void)
-{
-  return sysconf (_SC_OPEN_MAX);
+  return INT_MAX;
 }
 
 #endif
diff --git a/lib/getopt.c b/lib/getopt.c
index 3b9c585..212cbf7 100644
--- a/lib/getopt.c
+++ b/lib/getopt.c
@@ -487,7 +487,20 @@ _getopt_internal_r (int argc, char **argv, const char 
*optstring,
         const struct option *p;
         struct option_list *next;
       } *ambig_list = NULL;
+#ifdef _LIBC
+/* malloc() not used for _LIBC to simplify failure messages.  */
+# define free_option_list(l)
+#else
+# define free_option_list(l)                   \
+      while (l != NULL)                                \
+        {                                      \
+          struct option_list *pn = l->next;    \
+          free (l);                            \
+          l = pn;                              \
+        }
+#endif
       int exact = 0;
+      int ambig = 0;
       int indfound = -1;
       int option_index;
 
@@ -514,22 +527,37 @@ _getopt_internal_r (int argc, char **argv, const char 
*optstring,
                 pfound = p;
                 indfound = option_index;
               }
+            else if (ambig)
+              ; /* Taking simpler path to handling ambiguities.  */
             else if (long_only
                      || pfound->has_arg != p->has_arg
                      || pfound->flag != p->flag
                      || pfound->val != p->val)
               {
                 /* Second or later nonexact match found.  */
+#ifdef _LIBC
+                struct option_list *newp = alloca (sizeof (*newp));
+#else
                 struct option_list *newp = malloc (sizeof (*newp));
-                newp->p = p;
-                newp->next = ambig_list;
-                ambig_list = newp;
+                if (newp == NULL)
+                  {
+                    free_option_list (ambig_list);
+                    ambig_list = NULL;
+                    ambig = 1; /* Use simpler fallback message.  */
+                  }
+                else
+#endif
+                  {
+                    newp->p = p;
+                    newp->next = ambig_list;
+                    ambig_list = newp;
+                  }
               }
           }
 
-      if (ambig_list != NULL && !exact)
+      if ((ambig || ambig_list) && !exact)
         {
-          if (print_errors)
+          if (print_errors && ambig_list)
             {
               struct option_list first;
               first.p = pfound;
@@ -585,18 +613,20 @@ _getopt_internal_r (int argc, char **argv, const char 
*optstring,
               fputc ('\n', stderr);
 #endif
             }
+          else if (print_errors && ambig)
+            {
+              fprintf (stderr,
+                       _("%s: option '%s' is ambiguous\n"),
+                       argv[0], argv[d->optind]);
+            }
           d->__nextchar += strlen (d->__nextchar);
           d->optind++;
           d->optopt = 0;
+          free_option_list (ambig_list);
           return '?';
         }
 
-      while (ambig_list != NULL)
-        {
-          struct option_list *pn = ambig_list->next;
-          free (ambig_list);
-          ambig_list = pn;
-        }
+      free_option_list (ambig_list);
 
       if (pfound != NULL)
         {
diff --git a/lib/signal.in.h b/lib/signal.in.h
index 0f2ff5a..265b72a 100644
--- a/lib/signal.in.h
+++ b/lib/signal.in.h
@@ -55,11 +55,13 @@
 #ifndef address@hidden@_SIGNAL_H
 #define address@hidden@_SIGNAL_H
 
-/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6 declare
-   pthread_sigmask in <pthread.h>, not in <signal.h>.
+/* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6, Android
+   declare pthread_sigmask in <pthread.h>, not in <signal.h>.
    But avoid namespace pollution on glibc systems.*/
 #if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \
-    && ((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || 
defined __OpenBSD__ || defined __osf__ || defined __sun) \
+    && ((defined __APPLE__ && defined __MACH__) \
+        || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ \
+        || defined __sun || defined __ANDROID__) \
     && ! defined __GLIBC__
 # include <pthread.h>
 #endif
diff --git a/lib/tempname.c b/lib/tempname.c
index 088b224..8e6d26c 100644
--- a/lib/tempname.c
+++ b/lib/tempname.c
@@ -62,6 +62,7 @@
 # define struct_stat64 struct stat64
 #else
 # define struct_stat64 struct stat
+# define __try_tempname try_tempname
 # define __gen_tempname gen_tempname
 # define __getpid getpid
 # define __gettimeofday gettimeofday
@@ -176,21 +177,9 @@ __path_search (char *tmpl, size_t tmpl_len, const char 
*dir, const char *pfx,
 static const char letters[] =
 "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
 
-/* Generate a temporary file name based on TMPL.  TMPL must match the
-   rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix).
-   The name constructed does not exist at the time of the call to
-   __gen_tempname.  TMPL is overwritten with the result.
-
-   KIND may be one of:
-   __GT_NOCREATE:       simply verify that the name does not exist
-                        at the time of the call.
-   __GT_FILE:           create the file using open(O_CREAT|O_EXCL)
-                        and return a read-write fd.  The file is mode 0600.
-   __GT_DIR:            create a directory, which will be mode 0700.
-
-   We use a clever algorithm to get hard-to-predict names. */
 int
-__gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
+__try_tempname (char *tmpl, int suffixlen, void *args,
+                int (*tryfunc) (char *, void *))
 {
   int len;
   char *XXXXXX;
@@ -199,7 +188,6 @@ __gen_tempname (char *tmpl, int suffixlen, int flags, int 
kind)
   unsigned int count;
   int fd = -1;
   int save_errno = errno;
-  struct_stat64 st;
 
   /* A lower bound on the number of temporary files to attempt to
      generate.  The maximum total number of temporary file names that
@@ -256,41 +244,7 @@ __gen_tempname (char *tmpl, int suffixlen, int flags, int 
kind)
       v /= 62;
       XXXXXX[5] = letters[v % 62];
 
-      switch (kind)
-        {
-        case __GT_FILE:
-          fd = __open (tmpl,
-                       (flags & ~O_ACCMODE)
-                       | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
-          break;
-
-        case __GT_DIR:
-          fd = __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
-          break;
-
-        case __GT_NOCREATE:
-          /* This case is backward from the other three.  __gen_tempname
-             succeeds if __xstat fails because the name does not exist.
-             Note the continue to bypass the common logic at the bottom
-             of the loop.  */
-          if (__lxstat64 (_STAT_VER, tmpl, &st) < 0)
-            {
-              if (errno == ENOENT)
-                {
-                  __set_errno (save_errno);
-                  return 0;
-                }
-              else
-                /* Give up now. */
-                return -1;
-            }
-          continue;
-
-        default:
-          assert (! "invalid KIND in __gen_tempname");
-          abort ();
-        }
-
+      fd = tryfunc (tmpl, args);
       if (fd >= 0)
         {
           __set_errno (save_errno);
@@ -304,3 +258,67 @@ __gen_tempname (char *tmpl, int suffixlen, int flags, int 
kind)
   __set_errno (EEXIST);
   return -1;
 }
+
+static int
+try_file (char *tmpl, void *flags)
+{
+  int *openflags = flags;
+  return __open (tmpl,
+                 (*openflags & ~O_ACCMODE)
+                 | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);
+}
+
+static int
+try_dir (char *tmpl, void *flags)
+{
+  return __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR);
+}
+
+static int
+try_nocreate (char *tmpl, void *flags)
+{
+  struct_stat64 st;
+
+  if (__lxstat64 (_STAT_VER, tmpl, &st) == 0)
+    __set_errno (EEXIST);
+  return errno == ENOENT ? 0 : -1;
+}
+
+/* Generate a temporary file name based on TMPL.  TMPL must match the
+   rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix).
+   The name constructed does not exist at the time of the call to
+   __gen_tempname.  TMPL is overwritten with the result.
+
+   KIND may be one of:
+   __GT_NOCREATE:       simply verify that the name does not exist
+                        at the time of the call.
+   __GT_FILE:           create the file using open(O_CREAT|O_EXCL)
+                        and return a read-write fd.  The file is mode 0600.
+   __GT_DIR:            create a directory, which will be mode 0700.
+
+   We use a clever algorithm to get hard-to-predict names. */
+int
+__gen_tempname (char *tmpl, int suffixlen, int flags, int kind)
+{
+  int (*tryfunc) (char *, void *);
+
+  switch (kind)
+    {
+    case __GT_FILE:
+      tryfunc = try_file;
+      break;
+
+    case __GT_DIR:
+      tryfunc = try_dir;
+      break;
+
+    case __GT_NOCREATE:
+      tryfunc = try_nocreate;
+      break;
+
+    default:
+      assert (! "invalid KIND in __gen_tempname");
+      abort ();
+    }
+  return __try_tempname (tmpl, suffixlen, &flags, tryfunc);
+}
diff --git a/lib/tempname.h b/lib/tempname.h
index b560ee5..e609360 100644
--- a/lib/tempname.h
+++ b/lib/tempname.h
@@ -32,6 +32,10 @@
 #  define GT_NOCREATE 2
 # endif
 
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* Generate a temporary file name based on TMPL.  TMPL must match the
    rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix).
    The name constructed does not exist at the time of the call to
@@ -47,4 +51,15 @@
    We use a clever algorithm to get hard-to-predict names. */
 extern int gen_tempname (char *tmpl, int suffixlen, int flags, int kind);
 
+/* Similar to gen_tempname, but TRYFUNC is called for each temporary
+   name to try.  If TRYFUNC returns a non-negative number, TRY_GEN_TEMPNAME
+   returns with this value.  Otherwise, if errno is set to EEXIST, another
+   name is tried, or else TRY_GEN_TEMPNAME returns -1. */
+extern int try_tempname (char *tmpl, int suffixlen, void *args,
+                         int (*tryfunc) (char *, void *));
+
+#ifdef __cplusplus
+}
+#endif
+
 #endif /* GL_TEMPNAME_H */
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index b71b55d..b0a07df 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,163 @@
+2015-02-24  Johan Claesson  <address@hidden>  (tiny change)
+
+       * filecache.el (file-cache-filter-regexps):
+       Add lock files.  (Bug#19516)
+
+2015-02-24  Glenn Morris  <address@hidden>
+
+       * mail/rmailsum.el (rmail-summary-next-all)
+       (rmail-summary-previous-all, rmail-summary-next-msg):
+       Fix handling of optional argument.  (Bug#19916)
+
+       * progmodes/f90.el (f90-beginning-of-subprogram)
+       (f90-end-of-subprogram, f90-match-end):
+       Handle continued strings where the continuation does not start
+       with "&" and happens to match our regexp.  (Bug#19809)
+
+2015-02-24  Bozhidar Batsov  <address@hidden>
+
+       * comint.el (comint-clear-buffer): New command.
+       (comint-mode-map): Bind `comint-clear-buffer' to 'C-c M-o'.
+
+2015-02-23  Pete Williamson  <address@hidden>  (tiny change)
+
+       Use ${EXEEXT} more uniformly in makefiles
+       * Makefile.in (EMACS): Append ${EXEEXT}.
+
+2015-02-23  Sam Steingold  <address@hidden>
+
+       * files.el (recover-session): Handle `auto-save-list-file-prefix'
+       being a directory (empty non-directory part).
+
+2015-02-23  Magnus Henoch  <address@hidden>
+
+       * net/sasl.el (sasl-mechanism-alist): Refer to sasl-scram-rfc
+       instead of sasl-scram-sha-1, as the former is the name that can be
+       required.
+
+       * net/sasl-scram-rfc.el (sasl-scram-sha-1-steps)
+       (sasl-scram-sha-1-client-final-message)
+       (sasl-scram-sha-1-authenticate-server): Move to end of file.
+
+2015-02-23  Paul Eggert  <address@hidden>
+
+       Fix the desired binding for comment-line
+       * bindings.el (ctl-x-map): Use [?\C-\;] to get the desired binding.
+       Fixes: bug#19826
+
+2015-02-23  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/macroexp.el (macroexp-parse-body): Handle cl-declare
+       and :documentation.  Change return value format accordingly.
+       * emacs-lisp/cl-generic.el (cl--generic-lambda):
+       * emacs-lisp/pcase.el (pcase-lambda): Adjust accordingly.
+       * emacs-lisp/cl-macs.el (cl--transform-lambda): Use macroexp-parse-body.
+
+2015-02-23  Dmitry Gutov  <address@hidden>
+
+       Introduce `xref-etags-mode'.
+       * progmodes/xref.el (xref-etags-mode--saved): New variable.
+       (xref-etags-mode): New minor mode.  (Bug#19466)
+
+2015-02-22  Lars Magne Ingebrigtsen  <address@hidden>
+
+       * dom.el (dom-previous-sibling): New function.
+
+2015-02-21  Paul Eggert  <address@hidden>
+
+       * bindings.el (ctl-x-map): There is no 'C-;'.
+       For now, make do with 'M-;'; this allows 'make bootstrap' to work.
+       Perhaps some other binding should be chosen.
+       Fixes: bug#19826
+
+2015-02-21  Artur Malabarba  <address@hidden>
+
+       * bindings.el (ctl-x-map): Fix `comment-line' binding.  (Bug#19826)
+
+2015-02-21  Michael Albinus  <address@hidden>
+
+       * autorevert.el (auto-revert-notify-add-watch)
+       (auto-revert-notify-handler, auto-revert-buffers): Handle also
+       buffers without an associated file, like dired buffers.  (Bug#16112)
+
+2015-02-21  Dima Kogan  <address@hidden>
+
+       * autorevert.el (auto-revert-mode, auto-revert-tail-mode)
+       (global-auto-revert-mode): Remove (let (auto-revert-use-notify) ... )
+       wrappers.  Call (auto-revert-buffers) consequently in order to
+       install handlers.
+
+2015-02-21  Wilson Snyder  <address@hidden>
+
+       Sync with upstream verilog-mode revision 0d6420b.
+       * progmodes/verilog-mode.el (verilog-mode-version): Update.
+       (vector-skip-list): Remove.
+       (verilog-auto-inst-port, verilog-auto-inst-port-list)
+       (verilog-auto-inst, verilog-auto-inst-param):
+       Use arguments rather than vector-skip.
+       (verilog-auto-inst-port): Fix AUTOINST interfaces to not show
+       modport if signal attachment is itself a modport.  Reported by
+       Matthew Lovell.
+
+2015-02-21  Reto Zimmermann  <address@hidden>
+
+       Sync with upstream vhdl mode v3.37.1.  Add VHDL'08 support.
+       * progmodes/vhdl-mode.el (vhdl-version, vhdl-time-stamp)
+       (vhdl-doc-release-notes): Update.
+       (vhdl-standard): Add VHDL'08 option.
+       (vhdl-sensitivity-list-all): New option.
+       (vhdl-directive-keywords): Add psl.
+       (vhdl-offsets-alist-default, vhdl-mode-abbrev-table-init)
+       (vhdl-template-construct-alist-init, vhdl-create-mode-menu):
+       (vhdl-imenu-generic-expression): Add context, directive.
+       (vhdl-offsets-alist, vhdl-mode, vhdl-doc-keywords): Doc fixes.
+       (vhdl-template-map-init): Add vhdl-template-context.
+       (vhdl-mode-syntax-table): Support VHDL'08 block comments.
+       (vhdl-create-mode-menu): Add some entries.
+       (vhdl-08-keywords, vhdl-08-types, vhdl-08-attributes)
+       (vhdl-08-functions, vhdl-08-packages, vhdl-08-directives):
+       New constants.
+       (vhdl-directives): New variable.
+       (vhdl-words-init, vhdl-template-process)
+       (vhdl-template-replace-header-keywords): Support VHDL'08.
+       (vhdl-abbrev-list-init): Add vhdl-directives.
+       (vhdl-in-comment-p, vhdl-in-literal, vhdl-win-il)
+       (vhdl-forward-syntactic-ws, vhdl-get-syntactic-context)
+       (vhdl-lineup-comment): Handle block comments and directives.
+       (vhdl-beginning-of-directive, vhdl-template-context)
+       (vhdl-template-context-hook): New functions.
+       (vhdl-libunit-re, vhdl-defun-re, vhdl-begin-p)
+       (vhdl-corresponding-begin, vhdl-get-library-unit, vhdl-regress-line)
+       (vhdl-align-declarations, vhdl-beginning-of-block, vhdl-end-of-block)
+       (vhdl-font-lock-keywords-2, vhdl-get-end-of-unit)
+       (vhdl-scan-context-clause): Add context.
+
+2015-02-20  Glenn Morris  <address@hidden>
+
+       * calendar/solar.el (solar-sunrise-sunset-string):
+       Shorten message a little.
+       (sunrise-sunset): Use message rather than a window.  (Bug#19859)
+
+       * progmodes/f90.el (f90-keywords-re, f90-procedures-re)
+       (f90-font-lock-keywords-2): Some F2008 additions.
+
+2015-02-19  Dima Kogan  <address@hidden>
+
+       * autorevert.el (auto-revert-buffers-counter)
+       (auto-revert-buffers-counter-lockedout): New variables.
+       (auto-revert-buffers): Increase `auto-revert-buffers-counter'.
+       (auto-revert-notify-handler): Apply `auto-revert-handler' if not
+       suppressed by lockout.  (Bug#18958)
+
+2015-02-19  Stefan Monnier  <address@hidden>
+
+       * emacs-lisp/eieio-opt.el (eieio-help-class): `eieio-class-parents'
+       returns classes, not class names (bug#19891).
+
+       * emacs-lisp/cl-macs.el (cl-struct-slot-value): Handle a nil type.
+
+       * emacs-lisp/smie.el (smie-prec2->grammar): Fix corner case problem.
+
 2015-02-18  Kelly Dean  <address@hidden>
 
        * register.el (jump-to-register):
@@ -20,7 +180,7 @@
        * files.el (find-alternate-file, abort-if-file-too-large, write-file)
        (set-visited-file-name):
        * emacs-lisp/lisp.el (kill-backward-up-list):
-       Use user-error instead of error. (Bug#14480)
+       Use user-error instead of error.  (Bug#14480)
 
 2015-02-18  Stefan Monnier  <address@hidden>
 
@@ -36,12 +196,12 @@
        * emacs-lisp/easy-mmode.el (define-minor-mode): Process macro
        arguments correctly. (Bug#19685)
        (define-minor-mode): Clarify docstring.
-       Clarify mode switch messages for minor modes. (Bug#19690)
+       Clarify mode switch messages for minor modes.  (Bug#19690)
 
 2015-02-16  Kelly Dean  <address@hidden>
 
        * emacs-lisp/package-x.el (package-upload-buffer-internal):
-       Create valid tar files. (Bug#19536)
+       Create valid tar files.  (Bug#19536)
 
 2015-02-16  Kelly Dean  <address@hidden>
 
@@ -51,7 +211,7 @@
 2015-02-16  Kelly Dean  <address@hidden>
 
        * help-mode.el (help-do-xref): Prevent duplicated display of Info
-       buffer, and prevent interference with existing buffer. (Bug#13190)
+       buffer, and prevent interference with existing buffer.  (Bug#13190)
 
 2015-02-16  Fabián Ezequiel Gallina  <address@hidden>
 
@@ -438,7 +598,7 @@
        (package--sort-deps-in-alist): New function.
        (package-menu-mark-install): Can mark dependencies.
        (package--newest-p): New function.
-       (package-delete): Don't delesect when deleting an older version of
+       (package-delete): Don't deselect when deleting an older version of
        an upgraded package.
 
        * emacs-lisp/package.el: Add missing (require 'subr-x)
@@ -1325,9 +1485,6 @@
 
 2015-01-17  Ivan Shmakov  <address@hidden>
 
-       * url/url-cookie.el (url-cookie-write-file): Let-bind print-length
-       and print-level to nil to avoid writing a garbled list.  (Bug#16805)
-
        * files.el (find-file-other-window, find-file-other-frame):
        Use mapc instead of mapcar.  (Bug#18175)
 
diff --git a/lisp/Makefile.in b/lisp/Makefile.in
index e5cfc63..22d5ddc 100644
--- a/lisp/Makefile.in
+++ b/lisp/Makefile.in
@@ -47,7 +47,7 @@ am__v_GEN_1 =
 # We never change directory before running Emacs, so a relative file
 # name is fine, and makes life easier.  If we need to change
 # directory, we can use emacs --chdir.
-EMACS = ../src/emacs
+EMACS = ../src/emacs${EXEEXT}
 
 # Command line flags for Emacs.
 
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index 8c8c617..6489a3e 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -361,9 +361,8 @@ without being changed in the part that is already in the 
buffer."
          (delq (current-buffer) auto-revert-buffer-list)))
   (auto-revert-set-timer)
   (when auto-revert-mode
-    (let (auto-revert-use-notify)
-      (auto-revert-buffers)
-      (setq auto-revert-tail-mode nil))))
+    (auto-revert-buffers)
+    (setq auto-revert-tail-mode nil)))
 
 
 ;;;###autoload
@@ -417,8 +416,7 @@ Use `auto-revert-mode' for changes other than appends!"
            (y-or-n-p "File changed on disk, content may be missing.  \
 Perform a full revert? ")
            ;; Use this (not just revert-buffer) for point-preservation.
-          (let (auto-revert-use-notify)
-            (auto-revert-handler)))
+           (auto-revert-buffers))
       ;; else we might reappend our own end when we save
       (add-hook 'before-save-hook (lambda () (auto-revert-tail-mode 0)) nil t)
       (or (local-variable-p 'auto-revert-tail-pos) ; don't lose prior position
@@ -463,8 +461,7 @@ specifies in the mode line."
   :global t :group 'auto-revert :lighter global-auto-revert-mode-text
   (auto-revert-set-timer)
   (if global-auto-revert-mode
-      (let (auto-revert-use-notify)
-       (auto-revert-buffers))
+      (auto-revert-buffers)
     (dolist (buf (buffer-list))
       (with-current-buffer buf
        (when auto-revert-use-notify
@@ -508,16 +505,22 @@ will use an up-to-date value of `auto-revert-interval'"
   ;; `auto-revert-use-notify' are non-nil.
   (when (or (string-match auto-revert-notify-exclude-dir-regexp
                          (expand-file-name default-directory))
-           (file-symlink-p buffer-file-name))
+           (file-symlink-p (or buffer-file-name default-directory)))
     ;; Fallback to file checks.
     (set (make-local-variable 'auto-revert-use-notify) nil))
 
   (when (not auto-revert-notify-watch-descriptor)
     (setq auto-revert-notify-watch-descriptor
          (ignore-errors
-           (file-notify-add-watch
-            (expand-file-name buffer-file-name default-directory)
-            '(change attribute-change) 'auto-revert-notify-handler)))
+           (if buffer-file-name
+               (file-notify-add-watch
+                (expand-file-name buffer-file-name default-directory)
+                '(change attribute-change)
+                'auto-revert-notify-handler)
+             (file-notify-add-watch
+              (expand-file-name default-directory)
+              '(change)
+              'auto-revert-notify-handler))))
     (if auto-revert-notify-watch-descriptor
        (progn
          (puthash
@@ -531,6 +534,30 @@ will use an up-to-date value of `auto-revert-interval'"
       ;; Fallback to file checks.
       (set (make-local-variable 'auto-revert-use-notify) nil))))
 
+;; If we have file notifications, we want to update the auto-revert buffers
+;; immediately when a notification occurs. Since file updates can happen very
+;; often, we want to skip some revert operations so that we don't spend all our
+;; time reverting the buffer.
+;;
+;; We do this by reverting immediately in response to the first in a flurry of
+;; notifications. We suppress subsequent notifications until the next time
+;; `auto-revert-buffers' is called (this happens on a timer with a period set 
by
+;; `auto-revert-interval').
+(defvar auto-revert-buffers-counter 1
+  "Incremented each time `auto-revert-buffers' is called")
+(defvar-local auto-revert-buffers-counter-lockedout 0
+  "Buffer-local value to indicate whether we should immediately
+update the buffer on a notification event or not. If
+
+  (= auto-revert-buffers-counter-lockedout
+     auto-revert-buffers-counter)
+
+then the updates are locked out, and we wait until the next call
+of `auto-revert-buffers' to revert the buffer. If no lockout is
+present, then we revert immediately and set the lockout, so that
+no more reverts are possible until the next call of
+`auto-revert-buffers'")
+
 (defun auto-revert-notify-handler (event)
   "Handle an EVENT returned from file notification."
   (with-demoted-errors
@@ -542,32 +569,40 @@ will use an up-to-date value of `auto-revert-interval'"
                             auto-revert-notify-watch-descriptor-hash-list)))
       ;; Check, that event is meant for us.
       (cl-assert descriptor)
-      ;; We do not handle `deleted', because nothing has to be refreshed.
-      (unless (eq action 'deleted)
-        (cl-assert (memq action '(attribute-changed changed created renamed))
-                   t)
-        ;; Since we watch a directory, a file name must be returned.
-        (cl-assert (stringp file))
-        (when (eq action 'renamed) (cl-assert (stringp file1)))
-        ;; Loop over all buffers, in order to find the intended one.
-        (cl-dolist (buffer buffers)
-          (when (buffer-live-p buffer)
-            (with-current-buffer buffer
-              (when (and (stringp buffer-file-name)
-                         (or
-                          (and (memq action '(attribute-changed changed
-                                              created))
-                               (string-equal
-                                (file-name-nondirectory file)
-                                (file-name-nondirectory buffer-file-name)))
-                          (and (eq action 'renamed)
-                               (string-equal
-                                (file-name-nondirectory file1)
-                                (file-name-nondirectory buffer-file-name)))))
-                ;; Mark buffer modified.
-                (setq auto-revert-notify-modified-p t)
-                ;; No need to check other buffers.
-                (cl-return)))))))))
+      ;; Since we watch a directory, a file name must be returned.
+      (cl-assert (stringp file))
+      (when (eq action 'renamed) (cl-assert (stringp file1)))
+      ;; Loop over all buffers, in order to find the intended one.
+      (cl-dolist (buffer buffers)
+       (when (buffer-live-p buffer)
+         (with-current-buffer buffer
+           (when (or
+                  ;; A buffer associated with a file.
+                  (and (stringp buffer-file-name)
+                       (or
+                        (and (memq action '(attribute-changed changed created))
+                             (string-equal
+                              (file-name-nondirectory file)
+                              (file-name-nondirectory buffer-file-name)))
+                        (and (eq action 'renamed)
+                             (string-equal
+                              (file-name-nondirectory file1)
+                              (file-name-nondirectory buffer-file-name)))))
+                  ;; A buffer w/o a file, like dired.
+                  (and (null buffer-file-name)
+                       (memq action '(created renamed deleted))))
+             ;; Mark buffer modified.
+             (setq auto-revert-notify-modified-p t)
+
+             ;; Revert the buffer now if we're not locked out.
+             (when (/= auto-revert-buffers-counter-lockedout
+                       auto-revert-buffers-counter)
+               (auto-revert-handler)
+               (setq auto-revert-buffers-counter-lockedout
+                     auto-revert-buffers-counter))
+
+             ;; No need to check other buffers.
+             (cl-return))))))))
 
 (defun auto-revert-active-p ()
   "Check if auto-revert is active (in current buffer or globally)."
@@ -686,6 +721,10 @@ are checked first the next time this function is called.
 This function is also responsible for removing buffers no longer in
 Auto-Revert mode from `auto-revert-buffer-list', and for canceling
 the timer when no buffers need to be checked."
+
+  (setq auto-revert-buffers-counter
+        (1+ auto-revert-buffers-counter))
+
   (save-match-data
     (let ((bufs (if global-auto-revert-mode
                    (buffer-list)
@@ -717,7 +756,7 @@ the timer when no buffers need to be checked."
                          (delq buf auto-revert-buffer-list)))
                (when (auto-revert-active-p)
                  ;; Enable file notification.
-                 (when (and auto-revert-use-notify buffer-file-name
+                 (when (and auto-revert-use-notify
                             (not auto-revert-notify-watch-descriptor))
                    (auto-revert-notify-add-watch))
                  (auto-revert-handler)))
diff --git a/lisp/bindings.el b/lisp/bindings.el
index 4cc9f6a..b658914 100644
--- a/lisp/bindings.el
+++ b/lisp/bindings.el
@@ -1130,7 +1130,7 @@ if `inhibit-field-text-motion' is non-nil."
 (define-key esc-map "j" 'indent-new-comment-line)
 (define-key esc-map "\C-j" 'indent-new-comment-line)
 (define-key ctl-x-map ";" 'comment-set-column)
-(define-key ctl-x-map "C-;" 'comment-line)
+(define-key ctl-x-map [?\C-\;] 'comment-line)
 (define-key ctl-x-map "f" 'set-fill-column)
 (define-key ctl-x-map "$" 'set-selective-display)
 
diff --git a/lisp/calendar/solar.el b/lisp/calendar/solar.el
index 46cd8d3..25a24ee 100644
--- a/lisp/calendar/solar.el
+++ b/lisp/calendar/solar.el
@@ -657,7 +657,7 @@ Corresponding value is nil if there is no sunrise/sunset."
 Optional NOLOCATION non-nil means do not print the location."
   (let ((l (solar-sunrise-sunset date)))
     (format
-     "%s, %s%s (%s hours daylight)"
+     "%s, %s%s (%s hrs daylight)"
      (if (car l)
          (concat "Sunrise " (apply 'solar-time-string (car l)))
        "No sunrise")
@@ -847,20 +847,12 @@ This function is suitable for execution in an init file."
          (date (if (< arg 4) (calendar-current-date) (calendar-read-date)))
          (date-string (calendar-date-string date t))
          (time-string (solar-sunrise-sunset-string date))
-         (msg (format "%s: %s" date-string time-string))
-         (one-window (one-window-p t)))
-    (if (<= (length msg) (frame-width))
-        (message "%s" msg)
-      (with-output-to-temp-buffer "*temp*"
-        (princ (concat date-string "\n" time-string)))
-      (message "%s"
-               (substitute-command-keys
-                (if one-window
-                    (if pop-up-windows
-                        "Type \\[delete-other-windows] to remove temp window."
-                      "Type \\[switch-to-buffer] RET to remove temp window.")
-                  "Type \\[switch-to-buffer-other-window] RET to restore old \
-contents of temp window."))))))
+         (msg (format "%s%s"
+                      (if (< arg 4) ""  ; don't print date if it's today's
+                        (format "%s: " date-string))
+                      time-string)))
+    (message "%s" msg)
+    msg))
 
 ;;;###cal-autoload
 (defun calendar-sunrise-sunset (&optional event)
diff --git a/lisp/cedet/ChangeLog b/lisp/cedet/ChangeLog
index 838a269..c9ddc38 100644
--- a/lisp/cedet/ChangeLog
+++ b/lisp/cedet/ChangeLog
@@ -1,3 +1,10 @@
+2015-02-22  Paul Eggert  <address@hidden>
+
+       Spelling fixes
+       * semantic/doc.el (semantic-documentation-comment-preceding-tag):
+       Rename from semantic-documentation-comment-preceeding-tag.  All
+       uses changed.  Leave an obsolete alias behind.
+
 2015-02-16  Stefan Monnier  <address@hidden>
 
        * semantic/db-el.el (semanticdb-elisp-sym->tag): Fix copy&paste error
diff --git a/lisp/cedet/semantic/doc.el b/lisp/cedet/semantic/doc.el
index 874763f..3ceb351 100644
--- a/lisp/cedet/semantic/doc.el
+++ b/lisp/cedet/semantic/doc.el
@@ -56,13 +56,12 @@ If nosnarf if 'lex, then only return the lex token."
          doctmp
          ;; Check just before the definition.
          (when (semantic-tag-with-position-p tag)
-           (semantic-documentation-comment-preceeding-tag tag nosnarf))
+           (semantic-documentation-comment-preceding-tag tag nosnarf))
          ;;  Let's look for comments either after the definition, but before 
code:
          ;; Not sure yet.  Fill in something clever later....
          nil))))))
 
-;; FIXME this is not how you spell "preceding".
-(defun semantic-documentation-comment-preceeding-tag (&optional tag nosnarf)
+(defun semantic-documentation-comment-preceding-tag (&optional tag nosnarf)
   "Find a comment preceding TAG.
 If TAG is nil.  use the tag under point.
 Searches the space between TAG and the preceding tag for a comment,
@@ -84,6 +83,10 @@ just the lexical token and not the string."
        ;; of a function.
        (semantic-doc-snarf-comment-for-tag nosnarf)))
     ))
+(define-obsolete-function-alias
+  'semantic-documentation-comment-preceeding-tag
+  'semantic-documentation-comment-preceding-tag
+  "25.1")
 
 (defun semantic-doc-snarf-comment-for-tag (nosnarf)
   "Snarf up the comment at POINT for `semantic-documentation-for-tag'.
diff --git a/lisp/cedet/srecode/document.el b/lisp/cedet/srecode/document.el
index 9f106a4..4757784 100644
--- a/lisp/cedet/srecode/document.el
+++ b/lisp/cedet/srecode/document.el
@@ -395,7 +395,7 @@ It is assumed that the comment occurs just in front of 
FCN-IN."
     (beginning-of-line)
     (forward-char -1)
 
-    (let ((lextok (semantic-documentation-comment-preceeding-tag fcn-in 'lex))
+    (let ((lextok (semantic-documentation-comment-preceding-tag fcn-in 'lex))
          (doctext
           (srecode-document-function-name-comment fcn-in))
          )
diff --git a/lisp/comint.el b/lisp/comint.el
index 30c4dda..30aece1 100644
--- a/lisp/comint.el
+++ b/lisp/comint.el
@@ -472,6 +472,7 @@ executed once when the buffer is created."
     (define-key map "\C-c\C-\\"   'comint-quit-subjob)
     (define-key map "\C-c\C-m"           'comint-copy-old-input)
     (define-key map "\C-c\C-o"           'comint-delete-output)
+    (defile-key map "\C-c\M-o"    'comint-clear-buffer)
     (define-key map "\C-c\C-r"           'comint-show-output)
     (define-key map "\C-c\C-e"           'comint-show-maximum-output)
     (define-key map "\C-c\C-l"           'comint-dynamic-list-input-ring)
@@ -2428,6 +2429,11 @@ Sets mark to the value of point when this command is 
run."
           (goto-char (field-beginning pos))
           (set-window-start (selected-window) (point))))))
 
+(defun comint-clear-buffer ()
+  "Clear the comint buffer."
+  (interactive)
+  (let ((comint-buffer-maximum-size 0))
+    (comint-truncate-buffer)))
 
 (defun comint-interrupt-subjob ()
   "Interrupt the current subjob.
diff --git a/lisp/dom.el b/lisp/dom.el
index 11357e8..4213107 100644
--- a/lisp/dom.el
+++ b/lisp/dom.el
@@ -149,6 +149,16 @@ ATTRIBUTE would typically be `class', `id' or the like."
          (setq result (dom-parent elem node))))
       result)))
 
+(defun dom-previous-sibling (dom node)
+  (when-let (parent (dom-parent dom node))
+    (let ((siblings (dom-children parent))
+         (previous nil))
+      (while siblings
+       (when (eq (cadr siblings) node)
+         (setq previous (car siblings)))
+       (pop siblings))
+      previous)))
+
 (defun dom-node (tag &optional attributes &rest children)
   "Return a DOM node with TAG and ATTRIBUTES."
   (if children
diff --git a/lisp/emacs-lisp/cl-generic.el b/lisp/emacs-lisp/cl-generic.el
index ccd5bec..99924ba 100644
--- a/lisp/emacs-lisp/cl-generic.el
+++ b/lisp/emacs-lisp/cl-generic.el
@@ -278,7 +278,7 @@ This macro can only be used within the lexical scope of a 
cl-generic method."
                   (uses-cnm (cl--generic-fgrep (list cnm nmp) nbody)))
              (cons (not (not uses-cnm))
                    `#'(lambda (,@(if uses-cnm (list cnm)) ,@args)
-                        ,@(delq nil (car parsed-body))
+                        ,@(car parsed-body)
                         ,(if (not (memq nmp uses-cnm))
                              nbody
                            `(let ((,nmp (lambda ()
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index caaf768..c3da091 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -234,10 +234,9 @@ FORM is of the form (ARGS . BODY)."
   (let* ((args (car form)) (body (cdr form)) (orig-args args)
         (cl--bind-block bind-block) (cl--bind-defs nil) (cl--bind-enquote nil)
          (cl--bind-lets nil) (cl--bind-forms nil)
-        (header nil) (simple-args nil))
-    (while (or (stringp (car body))
-              (memq (car-safe (car body)) '(interactive declare cl-declare)))
-      (push (pop body) header))
+         (parsed-body (macroexp-parse-body body))
+        (header (car parsed-body)) (simple-args nil))
+    (setq body (cdr parsed-body))
     (setq args (if (listp args) (cl-copy-list args) (list '&rest args)))
     (let ((p (last args))) (if (cdr p) (setcdr p (list '&rest (cdr p)))))
     (if (setq cl--bind-defs (cadr (memq '&cl-defs args)))
@@ -258,7 +257,7 @@ FORM is of the form (ARGS . BODY)."
     (or (eq cl--bind-block 'cl-none)
        (setq body (list `(cl-block ,cl--bind-block ,@body))))
     (if (null args)
-       (cl-list* nil (nreverse simple-args) (nconc (nreverse header) body))
+       (cl-list* nil (nreverse simple-args) (nconc header body))
       (if (memq '&optional simple-args) (push '&optional args))
       (cl--do-arglist args nil (- (length simple-args)
                                   (if (memq '&optional simple-args) 1 0)))
@@ -266,20 +265,18 @@ FORM is of the form (ARGS . BODY)."
       (cl-list* nil
             (nconc (nreverse simple-args)
                    (list '&rest (car (pop cl--bind-lets))))
-            (nconc (let ((hdr (nreverse header)))
-                      ;; Macro expansion can take place in the middle of
-                      ;; apparently harmless computation, so it should not
-                      ;; touch the match-data.
-                      (save-match-data
-                        (require 'help-fns)
-                        (cons (help-add-fundoc-usage
-                               (if (stringp (car hdr)) (pop hdr))
-                               ;; Be careful with make-symbol and (back)quote,
-                               ;; see bug#12884.
-                               (let ((print-gensym nil) (print-quoted t))
-                                 (format "%S" (cons 'fn (cl--make-usage-args
-                                                         orig-args)))))
-                              hdr)))
+            (nconc (save-match-data ;; Macro expansion can take place in the
+                      ;; middle of apparently harmless computation, so it
+                      ;; should not touch the match-data.
+                      (require 'help-fns)
+                      (cons (help-add-fundoc-usage
+                             (if (stringp (car header)) (pop header))
+                             ;; Be careful with make-symbol and (back)quote,
+                             ;; see bug#12884.
+                             (let ((print-gensym nil) (print-quoted t))
+                               (format "%S" (cons 'fn (cl--make-usage-args
+                                                       orig-args)))))
+                            header))
                    (list `(let* ,cl--bind-lets
                              ,@(nreverse cl--bind-forms)
                              ,@body)))))))
@@ -2978,9 +2975,9 @@ STRUCT and SLOT-NAME are symbols.  INST is a structure 
instance."
        ;; We could use `elt', but since the byte compiler will resolve the
        ;; branch below at compile time, it's more efficient to use the
        ;; type-specific accessor.
-       (if (eq (cl-struct-sequence-type ,struct-type) 'vector)
-           (aref ,inst (cl-struct-slot-offset ,struct-type ,slot-name))
-         (nth (cl-struct-slot-offset ,struct-type ,slot-name) ,inst))))))
+       (if (eq (cl-struct-sequence-type ,struct-type) 'list)
+           (nth (cl-struct-slot-offset ,struct-type ,slot-name) ,inst)
+         (aref ,inst (cl-struct-slot-offset ,struct-type ,slot-name)))))))
 
 (run-hooks 'cl-macs-load-hook)
 
diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el
index 304ee36..a769ca7 100644
--- a/lisp/emacs-lisp/eieio-opt.el
+++ b/lisp/emacs-lisp/eieio-opt.el
@@ -99,6 +99,7 @@ If CLASS is actually an object, then also display current 
values of that object.
     (when pl
       (insert " Inherits from ")
       (while (setq cur (pop pl))
+       (setq cur (eieio--class-symbol cur))
        (insert "`")
        (help-insert-xref-button (symbol-name cur)
                                 'help-function cur)
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index 4f6b6d7..cdf1992 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -930,7 +930,7 @@ Optional argument GROUP is the sub-group of slots to 
display.
 
 ;;;***
 
-;;;### (autoloads nil "eieio-opt" "eieio-opt.el" 
"ff1097f185bc2c253276a7d19fe2f54a")
+;;;### (autoloads nil "eieio-opt" "eieio-opt.el" 
"d1910eb455f102989fc33bb3f5a9b614")
 ;;; Generated autoloads from eieio-opt.el
 
 (autoload 'eieio-browse "eieio-opt" "\
diff --git a/lisp/emacs-lisp/macroexp.el b/lisp/emacs-lisp/macroexp.el
index b75c8cc..68bf4f6 100644
--- a/lisp/emacs-lisp/macroexp.el
+++ b/lisp/emacs-lisp/macroexp.el
@@ -297,15 +297,16 @@ definitions to shadow the loaded ones for use in file 
byte-compilation."
 
 ;;; Handy functions to use in macros.
 
-(defun macroexp-parse-body (exps)
-  "Parse EXPS into ((DOC DECLARE-FORM INTERACTIVE-FORM) . BODY)."
-  `((,(and (stringp (car exps))
-           (pop exps))
-     ,(and (eq (car-safe (car exps)) 'declare)
-           (pop exps))
-     ,(and (eq (car-safe (car exps)) 'interactive)
-           (pop exps)))
-    ,@exps))
+(defun macroexp-parse-body (body)
+  "Parse a function BODY into (DECLARATIONS . EXPS)."
+  (let ((decls ()))
+    (while (and (cdr body)
+                (let ((e (car body)))
+                  (or (stringp e)
+                      (memq (car-safe e)
+                            '(:documentation declare interactive 
cl-declare)))))
+      (push (pop body) decls))
+    (cons (nreverse decls) body)))
 
 (defun macroexp-progn (exps)
   "Return an expression equivalent to `(progn ,@EXPS)."
diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el
index d8a4fc9..de1158d 100644
--- a/lisp/emacs-lisp/package.el
+++ b/lisp/emacs-lisp/package.el
@@ -335,11 +335,10 @@ contents of the archive."
   :version "24.4")
 
 (defcustom package-selected-packages nil
-  "Store here packages installed explicitely by user.
-This variable will be feeded automatically by emacs,
-when installing a new package.
-This variable will be used by `package-autoremove' to decide
-which packages are no more needed.
+  "Store here packages installed explicitly by user.
+This variable is fed automatically by Emacs when installing a new package.
+This variable is used by `package-autoremove' to decide
+which packages are no longer needed.
 You can use it to (re)install packages on other machines
 by running `package-user-selected-packages-install'.
 
@@ -1280,7 +1279,7 @@ to install it but still mark it as selected."
 ;;;###autoload
 (defun package-reinstall (pkg)
   "Reinstall package PKG.
-PKG shoul be either a symbol, the package name, or a package-desc
+PKG should be either a symbol, the package name, or a package-desc
 object."
   (interactive (list (intern (completing-read
                               "Reinstall package: "
@@ -1547,7 +1546,7 @@ If NOSAVE is non-nil, the package is not removed from
     ;; `package-selected-packages' even if it can't be deleted.
     (when (and (null nosave)
                (package--user-selected-p name)
-               ;; Don't delesect if this is an older version of an
+               ;; Don't deselect if this is an older version of an
                ;; upgraded package.
                (package--newest-p pkg-desc))
       (customize-save-variable
diff --git a/lisp/emacs-lisp/pcase.el b/lisp/emacs-lisp/pcase.el
index 057b128..4706be5 100644
--- a/lisp/emacs-lisp/pcase.el
+++ b/lisp/emacs-lisp/pcase.el
@@ -180,7 +180,7 @@ like `(,a . ,(pred (< a))) or, with more checks:
     (when (eq nil (car (last pats 2)))
       (setq pats (append (butlast pats 2) (car (last pats)))))
     `(lambda (&rest ,args)
-       ,@(remq nil (car body))
+       ,@(car body)
        (pcase ,args
          (,(list '\` pats) . ,(cdr body))))))
 
diff --git a/lisp/emacs-lisp/smie.el b/lisp/emacs-lisp/smie.el
index 5b9dc64..48bded4 100644
--- a/lisp/emacs-lisp/smie.el
+++ b/lisp/emacs-lisp/smie.el
@@ -612,8 +612,11 @@ PREC2 is a table as returned by `smie-precs->prec2' or
              (cons (pcase (cdr x)
                      (`closer (cddr (assoc token table)))
                      (`opener (cdr (assoc token table))))))
-        (cl-assert (numberp (car cons)))
-        (setf (car cons) (list (car cons)))))
+        ;; `cons' can be nil for openers/closers which only contain
+        ;; "atomic" elements.
+        (when cons
+          (cl-assert (numberp (car cons)))
+          (setf (car cons) (list (car cons))))))
     (let ((ca (gethash :smie-closer-alist prec2)))
       (when ca (push (cons :smie-closer-alist ca) table)))
     ;; (smie-check-grammar table prec2 'step3)
diff --git a/lisp/filecache.el b/lisp/filecache.el
index d036107..fd99ee0 100644
--- a/lisp/filecache.el
+++ b/lisp/filecache.el
@@ -154,11 +154,12 @@
   ;; These are also used in buffers containing lines of file names,
   ;; so the end-of-name is matched with $ rather than \\'.
   (list "~$" "\\.o$" "\\.exe$" "\\.a$" "\\.elc$" ",v$" "\\.output$"
-       "\\.$" "#$" "\\.class$")
+       "\\.$" "#$" "\\.class$" "/\\.#")
   "List of regular expressions used as filters by the file cache.
 File names which match these expressions will not be added to the cache.
 Note that the functions `file-cache-add-file' and `file-cache-add-file-list'
 do not use this variable."
+  :version "25.1"                       ; added "/\\.#"
   :type '(repeat regexp)
   :group 'file-cache)
 
diff --git a/lisp/files.el b/lisp/files.el
index 1914ad8..42b00ac 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -5664,13 +5664,14 @@ Then you'll be asked about a number of files to 
recover."
   (interactive)
   (if (null auto-save-list-file-prefix)
       (error "You set `auto-save-list-file-prefix' to disable making session 
files"))
-  (let ((dir (file-name-directory auto-save-list-file-prefix)))
+  (let ((dir (file-name-directory auto-save-list-file-prefix))
+        (nd (file-name-nondirectory auto-save-list-file-prefix)))
     (unless (file-directory-p dir)
       (make-directory dir t))
     (unless (directory-files dir nil
-                            (concat "\\`" (regexp-quote
-                                           (file-name-nondirectory
-                                            auto-save-list-file-prefix)))
+                             (if (string= "" nd)
+                                 directory-files-no-dot-files-regexp
+                               (concat "\\`" (regexp-quote nd)))
                             t)
       (error "No previous sessions to recover")))
   (let ((ls-lisp-support-shell-wildcards t))
diff --git a/lisp/gnus/ChangeLog b/lisp/gnus/ChangeLog
index 7910d74..7a4c463 100644
--- a/lisp/gnus/ChangeLog
+++ b/lisp/gnus/ChangeLog
@@ -1,3 +1,18 @@
+2015-02-23  Tassilo Horn  <address@hidden>
+
+       * mailcap.el (mailcap-mime-data): Support `pdf-view-mode' (from PDF
+       Tools: https://github.com/politza/pdf-tools) for viewing PDF
+       attachments in emacs.
+
+2015-02-23  Katsumi Yamaoka  <address@hidden>
+
+       * gnus-art.el (gnus-mime-display-single): Avoid "End of buffer" error.
+
+2015-02-18  Eric Abrahamsen  <address@hidden>
+
+       * nnimap.el (nnimap-get-groups): Correctly read unquoted group names
+       from the server LIST response.
+
 2015-02-14  Lars Ingebrigtsen  <address@hidden>
 
        * nnimap.el (nnimap-retrieve-headers): If the server closes connection
@@ -822,7 +837,7 @@
 2014-01-30  Lars Ingebrigtsen  <address@hidden>
 
        * nnmail.el (nnmail-split-it): Instead of redoing the search to restore
-       the match data, just save and restore it explictly (bug#12375).
+       the match data, just save and restore it explicitly (bug#12375).
 
        * gnus-sum.el (gnus-summary-read-group-1): Initialize the spam code if
        that's needed.
@@ -24079,7 +24094,7 @@
        (spam-ham-copy-or-move-routine): Return the number of processed
        ham messages.
        (spam-summary-prepare-exit): Use the above values to decide
-       whether status messages shouled be displayed.
+       whether status messages should be displayed.
 
 2004-05-20  Katsumi Yamaoka  <address@hidden>
 
diff --git a/lisp/gnus/gnus-art.el b/lisp/gnus/gnus-art.el
index 8503095..83a2f94 100644
--- a/lisp/gnus/gnus-art.el
+++ b/lisp/gnus/gnus-art.el
@@ -6101,7 +6101,7 @@ If nil, don't show those extra buttons."
              (gnus-article-insert-newline)
            (if (prog1
                    (= (skip-chars-backward "\n") -1)
-                 (forward-char 1))
+                 (unless (eobp) (forward-char 1)))
                (gnus-article-insert-newline)
              (put-text-property (point) (point-max) 'gnus-undeletable t))
            (goto-char (point-max)))
diff --git a/lisp/gnus/mailcap.el b/lisp/gnus/mailcap.el
index 01d8587..9f84413 100644
--- a/lisp/gnus/mailcap.el
+++ b/lisp/gnus/mailcap.el
@@ -153,6 +153,11 @@ This is a compatibility function for different Emacsen."
       (type   . "application/zip")
       ("copiousoutput"))
      ("pdf"
+      (viewer . pdf-view-mode)
+      (type . "application/pdf")
+      (test . (and (fboundp 'pdf-view-mode)
+                  (eq window-system 'x))))
+     ("pdf"
       (viewer . doc-view-mode)
       (type . "application/pdf")
       (test . (eq window-system 'x)))
diff --git a/lisp/gnus/nnimap.el b/lisp/gnus/nnimap.el
index 4a9ca74..369d9d3 100644
--- a/lisp/gnus/nnimap.el
+++ b/lisp/gnus/nnimap.el
@@ -1262,7 +1262,12 @@ If LIMIT, first try to limit the search to the N last 
articles."
     (while (search-forward "* LIST " nil t)
       (let ((flags (read (current-buffer)))
            (separator (read (current-buffer)))
-           (group (read (current-buffer))))
+           (group (buffer-substring-no-properties
+                   (progn (skip-chars-forward " \"")
+                          (point))
+                   (progn (end-of-line)
+                          (skip-chars-backward " 
\"")
+                          (point)))))
        (unless (member '%NoSelect flags)
          (push (utf7-decode (if (stringp group)
                                 group
diff --git a/lisp/mail/rmailsum.el b/lisp/mail/rmailsum.el
index 7ac147b..bfcd81c 100644
--- a/lisp/mail/rmailsum.el
+++ b/lisp/mail/rmailsum.el
@@ -791,7 +791,7 @@ the message being processed."
                 (forward-line 1)
                 (setq str (buffer-substring pos (1- (point))))
                 (while (looking-at "[ \t]")
-                  (setq str (concat str " " 
+                  (setq str (concat str " "
                                     (buffer-substring (match-end 0)
                                                       (line-end-position))))
                   (forward-line 1))
@@ -804,7 +804,8 @@ the message being processed."
 
 (defun rmail-summary-next-all (&optional number)
   (interactive "p")
-  (forward-line (if number number 1))
+  (or number (setq number 1))
+  (forward-line number)
   ;; It doesn't look nice to move forward past the last message line.
   (and (eobp) (> number 0)
        (forward-line -1))
@@ -812,7 +813,8 @@ the message being processed."
 
 (defun rmail-summary-previous-all (&optional number)
   (interactive "p")
-  (forward-line (- (if number number 1)))
+  (or number (setq number 1))
+  (forward-line (- number))
   ;; It doesn't look nice to move forward past the last message line.
   (and (eobp) (< number 0)
        (forward-line -1))
@@ -823,6 +825,7 @@ the message being processed."
 With optional prefix argument NUMBER, moves forward this number of non-deleted
 messages, or backward if NUMBER is negative."
   (interactive "p")
+  (or number (setq number 1))
   (forward-line 0)
   (and (> number 0) (end-of-line))
   (let ((count (if (< number 0) (- number) number))
diff --git a/lisp/net/sasl-scram-rfc.el b/lisp/net/sasl-scram-rfc.el
index 6c8c009..18d7a6b 100644
--- a/lisp/net/sasl-scram-rfc.el
+++ b/lisp/net/sasl-scram-rfc.el
@@ -39,31 +39,9 @@
 
 (require 'cl-lib)
 (require 'sasl)
-
-;;; SCRAM-SHA-1
-
 (require 'hex-util)
 (require 'rfc2104)
 
-(defconst sasl-scram-sha-1-steps
-  '(sasl-scram-client-first-message
-    sasl-scram-sha-1-client-final-message
-    sasl-scram-sha-1-authenticate-server))
-
-(defun sasl-scram-sha-1-client-final-message (client step)
-  (sasl-scram--client-final-message
-   ;; HMAC-SHA1 uses block length 64 and hash length 20; see RFC 2104.
-   'sha1 64 20 client step))
-
-(defun sasl-scram-sha-1-authenticate-server (client step)
-  (sasl-scram--authenticate-server
-   'sha1 64 20 client step))
-
-(put 'sasl-scram-sha-1 'sasl-mechanism
-     (sasl-make-mechanism "SCRAM-SHA-1" sasl-scram-sha-1-steps))
-
-(provide 'sasl-scram-sha-1)
-
 ;;; Generic for SCRAM-*
 
 (defun sasl-scram-client-first-message (client _step)
@@ -156,5 +134,30 @@
    (t
     (sasl-error "Invalid response from server"))))
 
+;;; SCRAM-SHA-1
+
+(defconst sasl-scram-sha-1-steps
+  '(sasl-scram-client-first-message
+    sasl-scram-sha-1-client-final-message
+    sasl-scram-sha-1-authenticate-server))
+
+(defun sasl-scram-sha-1-client-final-message (client step)
+  (sasl-scram--client-final-message
+   ;; HMAC-SHA1 uses block length 64 and hash length 20; see RFC 2104.
+   'sha1 64 20 client step))
+
+(defun sasl-scram-sha-1-authenticate-server (client step)
+  (sasl-scram--authenticate-server
+   'sha1 64 20 client step))
+
+;; This needs to be at the end, because of how `sasl-make-mechanism'
+;; handles step function names.
+(put 'sasl-scram-sha-1 'sasl-mechanism
+     (sasl-make-mechanism "SCRAM-SHA-1" sasl-scram-sha-1-steps))
+
+(put 'sasl-scram-rfc 'sasl-mechanism (get 'sasl-scram-sha-1 'sasl-mechanism))
+
+(provide 'sasl-scram-sha-1)
+
 (provide 'sasl-scram-rfc)
 ;;; sasl-scram-rfc.el ends here
diff --git a/lisp/net/sasl.el b/lisp/net/sasl.el
index e59ed5d..9321efd 100644
--- a/lisp/net/sasl.el
+++ b/lisp/net/sasl.el
@@ -45,7 +45,7 @@
     ("LOGIN" sasl-login)
     ("ANONYMOUS" sasl-anonymous)
     ("NTLM" sasl-ntlm)
-    ("SCRAM-SHA-1" sasl-scram-sha-1)))
+    ("SCRAM-SHA-1" sasl-scram-rfc)))
 
 (defvar sasl-unique-id-function #'sasl-unique-id-function)
 
diff --git a/lisp/org/ChangeLog b/lisp/org/ChangeLog
index 081da5d..ce39bb7 100644
--- a/lisp/org/ChangeLog
+++ b/lisp/org/ChangeLog
@@ -852,7 +852,7 @@
        in a table.el table last.
 
        * org.el (org-delete-property): Don't suggest to delete the
-       CATEGORY property when the category is not explicitely set in the
+       CATEGORY property when the category is not explicitly set in the
        property drawer.  Also enforce matching when completing.
        (org-insert-heading): Fix regression: with two universal prefixes,
        insert heading at the end of the subtree.
diff --git a/lisp/progmodes/f90.el b/lisp/progmodes/f90.el
index aeb4dde..6264d3b 100644
--- a/lisp/progmodes/f90.el
+++ b/lisp/progmodes/f90.el
@@ -342,8 +342,10 @@ The options are 'downcase-word, 'upcase-word, 
'capitalize-word and nil."
                  "final" "generic" "import" "non_intrinsic" "non_overridable"
                  "nopass" "pass" "protected" "same_type_as" "value" "volatile"
                  ;; F2008.
+                 ;; FIXME f90-change-keywords does not work right if
+                 ;; there are spaces.
                  "contiguous" "submodule" "concurrent" "codimension"
-                 "sync all" "sync memory" "critical" "image_index"
+                 "sync all" "sync memory" "critical" "image_index" "error stop"
                  ))
    "\\_>")
   "Regexp used by the function `f90-change-keywords'.")
@@ -417,6 +419,8 @@ The options are 'downcase-word, 'upcase-word, 
'capitalize-word and nil."
              "norm2" "parity" "findloc" "is_contiguous"
              "sync images" "lock" "unlock" "image_index"
              "lcobound" "ucobound" "num_images" "this_image"
+             "acosh" "asinh" "atanh"
+             "atomic_define" "atomic_ref" "execute_command_line"
              ;; F2008 iso_fortran_env module.
              "compiler_options" "compiler_version"
              ;; F2008 iso_c_binding module.
@@ -649,7 +653,8 @@ logical\\|double[ \t]*precision\\|type[ 
\t]*(\\(?:\\sw\\|\\s_\\)+)\\|none\\)[ \t
       (1 font-lock-keyword-face) (2 font-lock-constant-face nil t))
     "\\_<else\\([ \t]*if\\|where\\)?\\_>"
     '("\\(&\\)[ \t]*\\(!\\|$\\)"  (1 font-lock-keyword-face))
-    "\\_<\\(then\\|continue\\|format\\|include\\|stop\\|return\\)\\_>"
+    "\\_<\\(then\\|continue\\|format\\|include\\|\\(?:error[ \t]+\\)?stop\\|\
+return\\)\\_>"
     '("\\_<\\(exit\\|cycle\\)[ \t]*\\(\\(?:\\sw\\|\\s_\\)+\\)?\\_>"
       (1 font-lock-keyword-face) (2 font-lock-constant-face nil t))
     '("\\_<\\(case\\)[ \t]*\\(default\\|(\\)" . 1)
@@ -1629,7 +1634,10 @@ Return (TYPE NAME), or nil if not found."
                 (re-search-backward f90-program-block-re nil 'move))
       (beginning-of-line)
       (skip-chars-forward " \t0-9")
-      (cond ((setq matching-beg (f90-looking-at-program-block-start))
+      ;; Check if in string in case using non-standard feature where
+      ;; continued strings do not need "&" at start of continuations.
+      (cond ((f90-in-string))
+            ((setq matching-beg (f90-looking-at-program-block-start))
              (setq count (1- count)))
             ((f90-looking-at-program-block-end)
              (setq count (1+ count)))))
@@ -1654,7 +1662,8 @@ Return (TYPE NAME), or nil if not found."
                 (re-search-forward f90-program-block-re nil 'move))
       (beginning-of-line)
       (skip-chars-forward " \t0-9")
-      (cond ((f90-looking-at-program-block-start)
+      (cond ((f90-in-string))
+            ((f90-looking-at-program-block-start)
              (setq count (1+ count)))
             ((setq matching-end (f90-looking-at-program-block-end))
              (setq count (1- count))))
@@ -2194,8 +2203,12 @@ Leave point at the end of line."
         (end-point (point))
         (case-fold-search t)
         matching-beg beg-name end-name beg-block end-block end-struct)
+    ;; Check if in string in case using non-standard feature where
+    ;; continued strings do not need "&" at start of continuations.
     (when (save-excursion (beginning-of-line) (skip-chars-forward " \t0-9")
-                          (setq end-struct (f90-looking-at-program-block-end)))
+                          (unless (f90-in-string)
+                            (setq end-struct
+                                  (f90-looking-at-program-block-end))))
       (setq end-block (car end-struct)
             end-name  (cadr end-struct))
       (save-excursion
@@ -2338,6 +2351,8 @@ CHANGE-WORD should be one of 'upcase-word, 
'downcase-word, 'capitalize-word."
                             (skip-chars-forward " \t0-9")
                             (looking-at "#"))))
               (setq ref-point (point)
+                    ;; FIXME this does not work for constructs with
+                    ;; embedded space, eg "sync all".
                     back-point (save-excursion (backward-word 1) (point))
                     saveword (buffer-substring back-point ref-point))
               (funcall change-word -1)
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index 7b6f2d3..5720654 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -123,7 +123,7 @@
 ;;; Code:
 
 ;; This variable will always hold the version number of the mode
-(defconst verilog-mode-version "2014-11-12-aa4b777-vpo"
+(defconst verilog-mode-version "2015-02-20-0d6420b-vpo"
   "Version of this Verilog mode.")
 (defconst verilog-mode-release-emacs t
   "If non-nil, this version of Verilog mode was released with Emacs itself.")
@@ -8419,7 +8419,6 @@ Return an array of [outputs inouts inputs wire reg assign 
const]."
   (defvar sigs-temp)
   ;; These are known to be from other packages and may not be defined
   (defvar diff-command nil)
-  (defvar vector-skip-list)
   ;; There are known to be from newer versions of Emacs
   (defvar create-lockfiles))
 
@@ -10884,7 +10883,7 @@ See the example in `verilog-auto-inout-modport'."
 (defvar vl-bits  nil "See `verilog-auto-inst'.") ; Prevent compile warning
 (defvar vl-mbits nil "See `verilog-auto-inst'.") ; Prevent compile warning
 
-(defun verilog-auto-inst-port (port-st indent-pt tpl-list tpl-num for-star 
par-values)
+(defun verilog-auto-inst-port (port-st indent-pt moddecls tpl-list tpl-num 
for-star par-values)
   "Print out an instantiation connection for this PORT-ST.
 Insert to INDENT-PT, use template TPL-LIST.
 @ are instantiation numbers, replaced with TPL-NUM.
@@ -10901,9 +10900,10 @@ If PAR-VALUES replace final strings with these 
parameter values."
         (vl-mbits (if (verilog-sig-multidim port-st)
                        (verilog-sig-multidim-string port-st) ""))
         (vl-bits (if (or verilog-auto-inst-vector
-                         (not (assoc port vector-skip-list))
+                         (not (assoc port (verilog-decls-get-signals 
moddecls)))
                          (not (equal (verilog-sig-bits port-st)
-                                     (verilog-sig-bits (assoc port 
vector-skip-list)))))
+                                     (verilog-sig-bits
+                                      (assoc port (verilog-decls-get-signals 
moddecls))))))
                      (or (verilog-sig-bits port-st) "")
                    ""))
         (case-fold-search nil)
@@ -10932,7 +10932,12 @@ If PAR-VALUES replace final strings with these 
parameter values."
                        (concat "/*" vl-mbits vl-bits "*/")
                      (concat vl-bits))
          tpl-net (concat port
-                         (if vl-modport (concat "." vl-modport) "")
+                         (if (and vl-modport
+                                  ;; .modport cannot be added if attachment is
+                                  ;; already declared as modport, VCS croaks
+                                  (let ((sig (assoc port 
(verilog-decls-get-interfaces moddecls))))
+                                    (not (and sig (verilog-sig-modport sig)))))
+                             (concat "." vl-modport) "")
                          dflt-bits))
     ;; Find template
     (cond (tpl-ass         ; Template of exact port name
@@ -11002,12 +11007,12 @@ If PAR-VALUES replace final strings with these 
parameter values."
 ;;(x "address@hidden"(+ (* 8 @) 7)\":@\"(* 8 @)\"]")
 ;;(x ".out (address@hidden"(concat (+ (* 8 @) 7) \\\":\\\" ( * 8 @))\"]));")
 
-(defun verilog-auto-inst-port-list (sig-list indent-pt tpl-list tpl-num 
for-star par-values)
+(defun verilog-auto-inst-port-list (sig-list indent-pt moddecls tpl-list 
tpl-num for-star par-values)
   "For `verilog-auto-inst' print a list of ports using 
`verilog-auto-inst-port'."
   (when verilog-auto-inst-sort
     (setq sig-list (sort (copy-alist sig-list) `verilog-signals-sort-compare)))
   (mapc (lambda (port)
-         (verilog-auto-inst-port port indent-pt
+         (verilog-auto-inst-port port indent-pt moddecls
                                  tpl-list tpl-num for-star par-values))
        sig-list))
 
@@ -11366,8 +11371,6 @@ For more information see the \\[verilog-faq] and forums 
at URL
                                          (+ 16 (* 8 (/ (+ indent-pt 7) 8)))))
           (modi (verilog-modi-current))
           (moddecls (verilog-modi-get-decls modi))
-          (vector-skip-list (unless verilog-auto-inst-vector
-                              (verilog-decls-get-signals moddecls)))
           submod submodi submoddecls
           inst skip-pins tpl-list tpl-num did-first par-values)
 
@@ -11409,7 +11412,7 @@ For more information see the \\[verilog-faq] and forums 
at URL
            (when (not did-first) (verilog-auto-inst-first) (setq did-first t))
             ;; Note these are searched for in verilog-read-sub-decls.
            (verilog-insert-indent "// Interfaced\n")
-           (verilog-auto-inst-port-list sig-list indent-pt
+           (verilog-auto-inst-port-list sig-list indent-pt moddecls
                                         tpl-list tpl-num for-star par-values)))
        (let ((sig-list (verilog-signals-not-in
                         (verilog-decls-get-interfaces submoddecls)
@@ -11419,7 +11422,7 @@ For more information see the \\[verilog-faq] and forums 
at URL
            (when (not did-first) (verilog-auto-inst-first) (setq did-first t))
             ;; Note these are searched for in verilog-read-sub-decls.
            (verilog-insert-indent "// Interfaces\n")
-           (verilog-auto-inst-port-list sig-list indent-pt
+           (verilog-auto-inst-port-list sig-list indent-pt moddecls
                                         tpl-list tpl-num for-star par-values)))
        (let ((sig-list (verilog-signals-not-in
                         (verilog-decls-get-outputs submoddecls)
@@ -11428,7 +11431,7 @@ For more information see the \\[verilog-faq] and forums 
at URL
          (when sig-list
            (when (not did-first) (verilog-auto-inst-first) (setq did-first t))
            (verilog-insert-indent "// Outputs\n")
-           (verilog-auto-inst-port-list sig-list indent-pt
+           (verilog-auto-inst-port-list sig-list indent-pt moddecls
                                         tpl-list tpl-num for-star par-values)))
        (let ((sig-list (verilog-signals-not-in
                         (verilog-decls-get-inouts submoddecls)
@@ -11437,7 +11440,7 @@ For more information see the \\[verilog-faq] and forums 
at URL
          (when sig-list
            (when (not did-first) (verilog-auto-inst-first) (setq did-first t))
            (verilog-insert-indent "// Inouts\n")
-           (verilog-auto-inst-port-list sig-list indent-pt
+           (verilog-auto-inst-port-list sig-list indent-pt moddecls
                                         tpl-list tpl-num for-star par-values)))
        (let ((sig-list (verilog-signals-not-in
                         (verilog-decls-get-inputs submoddecls)
@@ -11446,7 +11449,7 @@ For more information see the \\[verilog-faq] and forums 
at URL
          (when sig-list
            (when (not did-first) (verilog-auto-inst-first) (setq did-first t))
            (verilog-insert-indent "// Inputs\n")
-           (verilog-auto-inst-port-list sig-list indent-pt
+           (verilog-auto-inst-port-list sig-list indent-pt moddecls
                                         tpl-list tpl-num for-star par-values)))
        ;; Kill extra semi
        (save-excursion
@@ -11509,8 +11512,6 @@ Templates:
                                          (+ 16 (* 8 (/ (+ indent-pt 7) 8)))))
           (modi (verilog-modi-current))
           (moddecls (verilog-modi-get-decls modi))
-          (vector-skip-list (unless verilog-auto-inst-vector
-                              (verilog-decls-get-signals moddecls)))
           submod submodi submoddecls
           inst skip-pins tpl-list tpl-num did-first)
       ;; Find module name that is instantiated
@@ -11550,7 +11551,7 @@ Templates:
            (when (not did-first) (verilog-auto-inst-first) (setq did-first t))
             ;; Note these are searched for in verilog-read-sub-decls.
            (verilog-insert-indent "// Parameters\n")
-           (verilog-auto-inst-port-list sig-list indent-pt
+           (verilog-auto-inst-port-list sig-list indent-pt moddecls
                                         tpl-list tpl-num nil nil)))
        ;; Kill extra semi
        (save-excursion
diff --git a/lisp/progmodes/vhdl-mode.el b/lisp/progmodes/vhdl-mode.el
index 875de3b..8d6d2a2 100644
--- a/lisp/progmodes/vhdl-mode.el
+++ b/lisp/progmodes/vhdl-mode.el
@@ -13,10 +13,10 @@
 ;; filed in the Emacs bug reporting system against this file, a copy
 ;; of the bug report be sent to the maintainer's email address.
 
-(defconst vhdl-version "3.36.1"
+(defconst vhdl-version "3.37.1"
   "VHDL Mode version number.")
 
-(defconst vhdl-time-stamp "2014-11-27"
+(defconst vhdl-time-stamp "2015-01-15"
   "VHDL Mode time stamp for last update.")
 
 ;; This file is part of GNU Emacs.
@@ -59,7 +59,7 @@
 ;;   - Block commenting
 ;;   - Code fixing/alignment/beautification
 ;;   - PostScript printing
-;;   - VHDL'87/'93 and VHDL-AMS supported
+;;   - VHDL'87/'93/'02/'08 and VHDL-AMS supported
 ;;   - Comprehensive menu
 ;;   - Fully customizable
 ;;   - Works under GNU Emacs (recommended) and XEmacs
@@ -716,6 +716,7 @@ A project setup file can be obtained by exporting a project 
(see menu).
 Basic standard:
   VHDL'87      : IEEE Std 1076-1987
   VHDL'93/02   : IEEE Std 1076-1993/2002
+  VHDL'08      : IEEE Std 1076-2008
 Additional standards:
   VHDL-AMS     : IEEE Std 1076.1 (analog-mixed-signal)
   Math packages: IEEE Std 1076.2 (`math_real', `math_complex')
@@ -724,7 +725,8 @@ NOTE: Activate the new setting in a VHDL buffer by using 
the menu entry
       \"Activate Options\"."
   :type '(list (choice :tag "Basic standard"
                       (const :tag "VHDL'87" 87)
-                      (const :tag "VHDL'93/02" 93))
+                      (const :tag "VHDL'93/02" 93)
+                      (const :tag "VHDL'08" 08))
               (set :tag "Additional standards" :indent 2
                    (const :tag "VHDL-AMS" ams)
                    (const :tag "Math packages" math)))
@@ -942,6 +944,12 @@ If nil, only a list of actual parameters is entered."
   :type 'boolean
   :group 'vhdl-template)
 
+(defcustom vhdl-sensitivity-list-all t
+  "Non-nil means use 'all' keyword in sensitivity list."
+  :version "25.1"
+  :type 'boolean
+  :group 'vhdl-template)
+
 (defcustom vhdl-zero-string "'0'"
   "String to use for a logic zero."
   :type 'string
@@ -1728,7 +1736,7 @@ NOTE: Activate the new setting in a VHDL buffer by 
re-fontifying it (menu
                          'vhdl-words-init 'vhdl-font-lock-init))
   :group 'vhdl-highlight)
 
-(defcustom vhdl-directive-keywords '("pragma" "synopsys")
+(defcustom vhdl-directive-keywords '("psl" "pragma" "synopsys")
   "List of compiler directive keywords recognized for highlighting.
 
 NOTE: Activate the new setting in a VHDL buffer by re-fontifying it (menu
@@ -2001,6 +2009,8 @@ reported and the syntactic symbol is ignored.")
     (package              . 0)
     (architecture         . 0)
     (package-body         . 0)
+    (context              . 0)
+    (directive            . 0)
     )
   "Default settings for offsets of syntactic elements.
 Do not change this constant!  See the variable `vhdl-offsets-alist' for
@@ -2065,7 +2075,8 @@ Here is the current list of valid syntactic element 
symbols:
  configuration          -- inside a configuration declaration
  package                -- inside a package declaration
  architecture           -- inside an architecture body
- package-body           -- inside a package body")
+ package-body           -- inside a package body
+ context                -- inside a context declaration")
 
 (defvar vhdl-comment-only-line-offset 0
   "Extra offset for line which contains only the start of a comment.
@@ -2684,6 +2695,7 @@ elements > `vhdl-menu-max-size'."
   (define-key vhdl-template-map "Cd"   'vhdl-template-configuration-decl)
   (define-key vhdl-template-map "Cs"   'vhdl-template-configuration-spec)
   (define-key vhdl-template-map "co"   'vhdl-template-constant)
+  (define-key vhdl-template-map "ct"   'vhdl-template-context)
   (define-key vhdl-template-map "di"   'vhdl-template-disconnect)
   (define-key vhdl-template-map "el"   'vhdl-template-else)
   (define-key vhdl-template-map "ei"   'vhdl-template-elsif)
@@ -2963,7 +2975,7 @@ STRING are replaced by `-' and substrings are converted 
to lower case."
     (modify-syntax-entry ?\* "."    st)
     (modify-syntax-entry ?\+ "."    st)
     (modify-syntax-entry ?\. "."    st)
-    (modify-syntax-entry ?\/ "."    st)
+;;;    (modify-syntax-entry ?\/ "."    st)
     (modify-syntax-entry ?\: "."    st)
     (modify-syntax-entry ?\; "."    st)
     (modify-syntax-entry ?\< "."    st)
@@ -2975,11 +2987,13 @@ STRING are replaced by `-' and substrings are converted 
to lower case."
     (modify-syntax-entry ?\" "\""   st)
     ;; define underscore
     (modify-syntax-entry ?\_ (if vhdl-underscore-is-part-of-word "w" "_") st)
-    ;; a single hyphen is punctuation, but a double hyphen starts a comment
-    (modify-syntax-entry ?\- ". 12" st)
-    ;; and \n and \^M end a comment
-    (modify-syntax-entry ?\n ">"    st)
-    (modify-syntax-entry ?\^M ">"   st)
+    ;; single-line comments
+    (modify-syntax-entry ?\- ". 12b" st)
+    ;; multi-line comments
+    (modify-syntax-entry ?\/ ". 14b" st)
+    (modify-syntax-entry ?*  ". 23" st)
+    (modify-syntax-entry ?\n "> b"  st)
+    (modify-syntax-entry ?\^M "> b"   st)
     ;; define parentheses to match
     (modify-syntax-entry ?\( "()"   st)
     (modify-syntax-entry ?\) ")("   st)
@@ -3044,6 +3058,7 @@ STRING are replaced by `-' and substrings are converted 
to lower case."
                  ("configuration" . vhdl-template-configuration-hook)
                  ("cons"         . vhdl-template-constant-hook)
                  ("constant"     . vhdl-template-constant-hook)
+                 ("context"      . vhdl-template-context-hook)
                  ("disconnect"   . vhdl-template-disconnect-hook)
                  ("downto"       . vhdl-template-default-hook)
                  ("else"         . vhdl-template-else-hook)
@@ -3191,6 +3206,7 @@ STRING are replaced by `-' and substrings are converted 
to lower case."
       ("configuration declaration"        vhdl-template-configuration-decl)
       ("configuration specification"      vhdl-template-configuration-spec)
       ("constant declaration"             vhdl-template-constant)
+      ("context declaration"              vhdl-template-context)
       ("disconnection specification"      vhdl-template-disconnect)
       ("entity declaration"               vhdl-template-entity)
       ("exit statement"                           vhdl-template-exit)
@@ -3367,6 +3383,7 @@ STRING are replaced by `-' and substrings are converted 
to lower case."
         ["Configuration (Decl)"        vhdl-template-configuration-decl t]
         ["Configuration (Spec)"        vhdl-template-configuration-spec t]
         ["Constant"            vhdl-template-constant t]
+        ["Context"             vhdl-template-context t]
         ["Disconnect"          vhdl-template-disconnect t]
         ["Else"                vhdl-template-else t]
         ["Elsif"               vhdl-template-elsif t]
@@ -3708,6 +3725,11 @@ STRING are replaced by `-' and substrings are converted 
to lower case."
                                       (list '93 (cadr vhdl-standard)))
               (vhdl-activate-customizations))
        :style radio :selected (eq '93 (car vhdl-standard))]
+       ["VHDL'08"
+       (progn (customize-set-variable 'vhdl-standard
+                                      (list '08 (cadr vhdl-standard)))
+              (vhdl-activate-customizations))
+       :style radio :selected (eq '08 (car vhdl-standard))]
        "--"
        ["VHDL-AMS"
        (progn (customize-set-variable
@@ -3830,6 +3852,10 @@ STRING are replaced by `-' and substrings are converted 
to lower case."
        (customize-set-variable 'vhdl-conditions-in-parenthesis
                               (not vhdl-conditions-in-parenthesis))
        :style toggle :selected vhdl-conditions-in-parenthesis]
+      ["Sensitivity List uses 'all'"
+       (customize-set-variable 'vhdl-sensitivity-list-all
+                              (not vhdl-sensitivity-list-all))
+       :style toggle :selected vhdl-sensitivity-list-all]
       ["Zero String..." (customize-option 'vhdl-zero-string) t]
       ["One String..." (customize-option 'vhdl-one-string) t]
       ("File Header"
@@ -4224,6 +4250,9 @@ STRING are replaced by `-' and substrings are converted 
to lower case."
     ("Entity"
      "^\\s-*\\(entity\\)\\s-+\\(\\(\\w\\|\\s_\\)+\\)"
      2)
+    ("Context"
+     "^\\s-*\\(context\\)\\s-+\\(\\(\\w\\|\\s_\\)+\\)"
+     2)
     )
   "Imenu generic expression for VHDL Mode.  See `imenu-generic-expression'.")
 
@@ -4677,7 +4706,7 @@ Usage:
 
   VHDL STANDARDS:
     The VHDL standards to be used are specified in option `vhdl-standard'.
-    Available standards are: VHDL'87/'93(02), VHDL-AMS, and Math Packages.
+    Available standards are: VHDL'87/'93(02)/'08, VHDL-AMS, and Math Packages.
 
 
   KEYWORD CASE:
@@ -4987,6 +5016,12 @@ Key bindings:
     )
   "List of VHDL'02 keywords.")
 
+(defconst vhdl-08-keywords
+  '(
+    "context" "force" "property" "release" "sequence"
+    )
+  "List of VHDL'08 keywords.")
+
 (defconst vhdl-ams-keywords
   '(
     "across" "break" "limit" "nature" "noise" "procedural" "quantity"
@@ -5028,6 +5063,12 @@ Key bindings:
     )
   "List of VHDL'02 standardized types.")
 
+(defconst vhdl-08-types
+  '(
+    "boolean_vector" "integer_vector" "real_vector" "time_vector"
+    )
+  "List of VHDL'08 standardized types.")
+
 (defconst vhdl-ams-types
   ;; standards: IEEE Std 1076.1-2007, IEEE Std 1076.1.1-2004
   '(
@@ -5103,6 +5144,12 @@ Key bindings:
     )
   "List of VHDL'02 standardized attributes.")
 
+(defconst vhdl-08-attributes
+  '(
+    "instance_name" "path_name"
+    )
+  "List of VHDL'08 standardized attributes.")
+
 (defconst vhdl-ams-attributes
   '(
     "across" "through"
@@ -5174,6 +5221,15 @@ Key bindings:
     )
   "List of VHDL'02 standardized functions.")
 
+(defconst vhdl-08-functions
+  '(
+    "finish" "flush" "justify" "maximum" "minimum"
+    "resolution_limit" "rising_edge" "stop" "swrite"
+    "tee" "to_binarystring" "to_bstring" "to_hexstring" "to_hstring"
+    "to_octalstring" "to_ostring" "to_string"
+    )
+  "List of VHDL'08 standardized functions.")
+
 (defconst vhdl-ams-functions
   '(
     ;; package `standard'
@@ -5202,6 +5258,13 @@ Key bindings:
     )
   "List of VHDL'02 standardized packages and libraries.")
 
+(defconst vhdl-08-packages
+  '(
+    "env" "numeric_std_signed" "numeric_std_unsigned"
+    "ieee_bit_context" "ieee_std_context"  ;; contexts
+    )
+  "List of VHDL'08 standardized packages and libraries.")
+
 (defconst vhdl-ams-packages
   '(
     "fundamental_constants" "material_constants" "energy_systems"
@@ -5216,6 +5279,18 @@ Key bindings:
     )
   "List of Math Packages standardized packages and libraries.")
 
+(defconst vhdl-08-directives
+  '(
+    "author" "author_info" "begin" "begin_protected" "comment"
+    "data_block" "data_keyname" "data_keyowner" "data_method"
+    "decrypt_license" "digest_block" "digest_key_method" "digest_keyname"
+    "digest_keyowner" "digest_method"
+    "encoding" "encrypt_agent" "encrypt_agent_info" "end" "end_protected"
+    "key_block" "key_keyname" "key_keyowner" "key_method"
+    "runtime_license" "viewport"
+    )
+  "List of VHDL'08 standardized tool directives.")
+
 (defvar vhdl-keywords nil
   "List of VHDL keywords.")
 
@@ -5237,6 +5312,9 @@ Key bindings:
 (defvar vhdl-packages nil
   "List of VHDL standardized packages and libraries.")
 
+(defvar vhdl-directives nil
+  "List of VHDL standardized packages and libraries.")
+
 (defvar vhdl-reserved-words nil
   "List of additional reserved words.")
 
@@ -5282,17 +5360,20 @@ Key bindings:
        (vhdl-upcase-list
         (and vhdl-highlight-case-sensitive vhdl-upper-case-keywords)
         (append vhdl-02-keywords
+                (when (vhdl-standard-p '08) vhdl-08-keywords)
                 (when (vhdl-standard-p 'ams) vhdl-ams-keywords))))
   (setq vhdl-types
        (vhdl-upcase-list
         (and vhdl-highlight-case-sensitive vhdl-upper-case-types)
         (append vhdl-02-types
+                (when (vhdl-standard-p '08) vhdl-08-types)
                 (when (vhdl-standard-p 'ams) vhdl-ams-types)
                 (when (vhdl-standard-p 'math) vhdl-math-types))))
   (setq vhdl-attributes
        (vhdl-upcase-list
         (and vhdl-highlight-case-sensitive vhdl-upper-case-attributes)
         (append vhdl-02-attributes
+                (when (vhdl-standard-p '08) vhdl-08-attributes)
                 (when (vhdl-standard-p 'ams) vhdl-ams-attributes))))
   (setq vhdl-enum-values
        (vhdl-upcase-list
@@ -5307,12 +5388,16 @@ Key bindings:
                 '(""))))
   (setq vhdl-functions
        (append vhdl-02-functions
+               (when (vhdl-standard-p '08) vhdl-08-functions)
                (when (vhdl-standard-p 'ams) vhdl-ams-functions)
                (when (vhdl-standard-p 'math) vhdl-math-functions)))
   (setq vhdl-packages
        (append vhdl-02-packages
+               (when (vhdl-standard-p '08) vhdl-08-packages)
                (when (vhdl-standard-p 'ams) vhdl-ams-packages)
                (when (vhdl-standard-p 'math) vhdl-math-packages)))
+  (setq vhdl-directives
+       (append (when (vhdl-standard-p '08) vhdl-08-directives)))
   (setq vhdl-reserved-words
        (append (when vhdl-highlight-forbidden-words vhdl-forbidden-words)
                (when vhdl-highlight-verilog-keywords vhdl-verilog-keywords)
@@ -5357,7 +5442,8 @@ Key bindings:
         (list vhdl-upper-case-enum-values) vhdl-enum-values
         (list vhdl-upper-case-constants) vhdl-constants
         (list nil) vhdl-functions
-        (list nil) vhdl-packages)))
+        (list nil) vhdl-packages
+        (list nil) vhdl-directives)))
 
 ;; initialize reserved words for VHDL Mode
 (vhdl-words-init)
@@ -5598,9 +5684,24 @@ the offset is simply returned."
 
 ;; Syntactic support functions:
 
-(defun vhdl-in-comment-p ()
-  "Check if point is in a comment."
-  (eq (vhdl-in-literal) 'comment))
+(defun vhdl-in-comment-p (&optional pos)
+  "Check if point is in a comment (include multi-line comments)."
+  (let ((parse (lambda (p)
+                (let ((c (char-after p)))
+                  (or (and c (eq (char-syntax c) ?<))
+                      (nth 4 (parse-partial-sexp
+                              (save-excursion
+                                (beginning-of-defun)
+                                (point)) p)))))))
+    (save-excursion
+      (goto-char (or pos (point)))
+      (or (funcall parse (point))
+         ;; `parse-partial-sexp's notion of comments doesn't span lines
+         (progn
+           (back-to-indentation)
+           (unless (eolp)
+             (forward-char)
+             (funcall parse (point))))))))
 
 (defun vhdl-in-string-p ()
   "Check if point is in a string."
@@ -5625,6 +5726,9 @@ the offset is simply returned."
        ((nth 3 state) 'string)
        ((nth 4 state) 'comment)
        ((vhdl-beginning-of-macro) 'pound)
+       ((vhdl-beginning-of-directive) 'directive)
+       ;; for multi-line comments
+       ((and (vhdl-standard-p '08) (vhdl-in-comment-p)) 'comment)
        (t nil)))))
 
 (defun vhdl-in-extended-identifier-p ()
@@ -5675,7 +5779,7 @@ negative, skip forward otherwise."
       (goto-char lim )
       (while (< (point) here)
        (setq match
-             (and (re-search-forward "--\\|[\"']"
+             (and (re-search-forward "--\\|[\"']\\|`"
                                      here 'move)
                   (buffer-substring (match-beginning 0) (match-end 0))))
        (setq state
@@ -5685,6 +5789,9 @@ negative, skip forward otherwise."
               ;; looking at the opening of a VHDL style comment
               ((string= "--" match)
                (if (<= here (progn (end-of-line) (point))) 'comment))
+              ;; looking at a directive
+              ((string= "`" match)
+               (if (<= here (progn (end-of-line) (point))) 'directive))
               ;; looking at the opening of a double quote string
               ((string= "\"" match)
                (if (not (save-restriction
@@ -5729,7 +5836,7 @@ negative, skip forward otherwise."
       (setq here (point))
       (vhdl-forward-comment hugenum)
       ;; skip preprocessor directives
-      (when (and (eq (char-after) ?#)
+      (when (and (or (eq (char-after) ?#) (eq (char-after) ?`))
                 (= (vhdl-point 'boi) (point)))
        (while (and (eq (char-before (vhdl-point 'eol)) ?\\)
                    (= (forward-line 1) 0)))
@@ -5766,6 +5873,19 @@ negative, skip forward otherwise."
       (goto-char here)
       nil)))
 
+(defun vhdl-beginning-of-directive (&optional lim)
+  "Go to the beginning of a directive (nicked from `cc-engine')."
+  (let ((here (point)))
+    (beginning-of-line)
+    (while (eq (char-before (1- (point))) ?\\)
+      (forward-line -1))
+    (back-to-indentation)
+    (if (and (<= (point) here)
+            (eq (char-after) ?`))
+       t
+      (goto-char here)
+      nil)))
+
 (defun vhdl-backward-syntactic-ws (&optional lim)
   "Backward skip over syntactic whitespace."
   (let* ((here (point-min))
@@ -5822,7 +5942,7 @@ that point, else nil."
 ;; Core syntactic evaluation functions:
 
 (defconst vhdl-libunit-re
-  "\\b\\(architecture\\|configuration\\|entity\\|package\\)\\b[^_]")
+  "\\b\\(architecture\\|configuration\\|context\\|entity\\|package\\)\\b[^_]")
 
 (defun vhdl-libunit-p ()
   (and
@@ -5840,7 +5960,7 @@ that point, else nil."
    ))
 
 (defconst vhdl-defun-re
-  
"\\b\\(architecture\\|block\\|configuration\\|entity\\|package\\|process\\|procedural\\|procedure\\|function\\)\\b[^_]")
+  
"\\b\\(architecture\\|block\\|configuration\\|context\\|entity\\|package\\|process\\|procedural\\|procedure\\|function\\)\\b[^_]")
 
 (defun vhdl-defun-p ()
   (save-excursion
@@ -5849,7 +5969,7 @@ that point, else nil."
        (save-excursion
          (backward-sexp)
          (not (looking-at "end\\s-+\\w")))
-      ;; "architecture", "configuration", "entity",
+      ;; "architecture", "configuration", "context", "entity",
       ;; "package", "procedure", "function":
       t)))
 
@@ -5863,7 +5983,7 @@ corresponding \"begin\" keyword, else return nil."
         (if (looking-at "block\\|process\\|procedural")
             ;; "block", "process". "procedural:
             (buffer-substring (match-beginning 0) (match-end 0))
-          ;; "architecture", "configuration", "entity", "package",
+          ;; "architecture", "configuration", "context", "entity", "package",
           ;; "procedure", "function":
           "is"))))
 
@@ -5884,7 +6004,7 @@ vhdl-begin-fwd-re, and are not inside a literal, and that 
we are not in
 the middle of an identifier that just happens to contain a \"begin\"
 keyword."
   (cond
-   ;; "[architecture|case|configuration|entity|package|
+   ;; "[architecture|case|configuration|context|entity|package|
    ;;   procedure|function] ... is":
    ((and (looking-at "i")
         (save-excursion
@@ -5897,7 +6017,7 @@ keyword."
           (let (foundp)
             (while (and (not foundp)
                         (re-search-backward
-                         
";\\|\\b\\(architecture\\|case\\|configuration\\|entity\\|package\\|procedure\\|return\\|is\\|begin\\|process\\|procedural\\|block\\)\\b[^_]"
+                         
";\\|\\b\\(architecture\\|case\\|configuration\\|context\\|entity\\|package\\|procedure\\|return\\|is\\|begin\\|process\\|procedural\\|block\\)\\b[^_]"
                          lim 'move))
               (if (or (= (preceding-char) ?_)
                       (vhdl-in-literal))
@@ -6092,7 +6212,7 @@ of an identifier that just happens to contain an \"end\" 
keyword."
              (vector "for" (vhdl-first-word pos) nil nil))
             ;; "end [id]":
             (t
-             (vector 
"begin\\|architecture\\|configuration\\|entity\\|package\\|procedure\\|function"
+             (vector 
"begin\\|architecture\\|configuration\\|context\\|entity\\|package\\|procedure\\|function"
                      (vhdl-first-word pos)
                      ;; return an alist of (statement . keyword) mappings
                      '(
@@ -6102,6 +6222,8 @@ of an identifier that just happens to contain an \"end\" 
keyword."
                        ("architecture"   . "is")
                        ;; "configuration ... is ... end [id]":
                        ("configuration"  . "is")
+                       ;; "context ... is ... end [id]":
+                       ("context"        . "is")
                        ;; "entity ... is ... end [id]":
                        ("entity"         . "is")
                        ;; "package ... is ... end [id]":
@@ -6716,7 +6838,8 @@ keyword at PLACEHOLDER, then return the library unit 
type."
          (cond
           ((looking-at "e") 'entity)
           ((looking-at "a") 'architecture)
-          ((looking-at "c") 'configuration)
+          ((looking-at "conf") 'configuration)
+          ((looking-at "cont") 'context)
           ((looking-at "p")
            (save-excursion
              (goto-char bod)
@@ -6992,7 +7115,7 @@ is not moved."
                   (goto-char (1+ containing-sexp))
                   (skip-chars-forward " \t")
                   (not (eolp))
-                  (not (looking-at "--")))
+                  (not (looking-at "--\\|`")))
                 (save-excursion
                   (vhdl-beginning-of-statement-1 containing-sexp)
                   (skip-chars-backward " \t(")
@@ -7141,8 +7264,10 @@ is not moved."
        ;; now we need to look at any modifiers
        (goto-char indent-point)
        (skip-chars-forward " \t")
-       (if (looking-at "--")
+       (if (or (looking-at "--") (looking-at "/\\*"))
            (vhdl-add-syntax 'comment))
+       (if (looking-at "`")
+           (vhdl-add-syntax 'directive))
        (if (eq literal 'pound)
            (vhdl-add-syntax 'cpp-macro))
        ;; return the syntax
@@ -7216,8 +7341,12 @@ only-lines."
        (vhdl-comment-indent)
       ;; otherwise, indent as specified by vhdl-comment-only-line-offset
       (if (not (bolp))
+         ;; inside multi-line comment
+         (if (looking-at "\\*")
+             1
+           ;; otherwise
          (or (car-safe vhdl-comment-only-line-offset)
-             vhdl-comment-only-line-offset)
+               vhdl-comment-only-line-offset))
        (or (cdr-safe vhdl-comment-only-line-offset)
            (car-safe vhdl-comment-only-line-offset)
            -1000                       ;jam it against the left side
@@ -7457,7 +7586,7 @@ ENDPOS is encountered."
     (mapc
      (function
       (lambda (elt)
-       (if (memq (car elt) '(entity configuration package
+       (if (memq (car elt) '(entity configuration context package
                                     package-body architecture))
            nil
          (setq expurgated (append expurgated (list elt))))))
@@ -7787,7 +7916,7 @@ the token in MATCH."
     (vhdl-prepare-search-2
      (save-excursion
        ;; search for declarative part
-       (when (and (re-search-backward 
"^\\(architecture\\|begin\\|configuration\\|end\\|entity\\|package\\)\\>" nil t)
+       (when (and (re-search-backward 
"^\\(architecture\\|begin\\|configuration\\|context\\|end\\|entity\\|package\\)\\>"
 nil t)
                  (not (member (upcase (match-string 1)) '("BEGIN" "END"))))
         (setq beg (point))
         (re-search-forward "^\\(begin\\|end\\)\\>" nil t)
@@ -9137,6 +9266,27 @@ a configuration declaration if not within a design unit."
          (insert ";")
          (vhdl-comment-insert-inline))))))
 
+(defun vhdl-template-context ()
+  "Insert a context declaration."
+  (interactive)
+  (let ((margin (current-indentation))
+       (start (point))
+       entity-exists string name position)
+    (vhdl-insert-keyword "CONTEXT ")
+    (when (setq name (vhdl-template-field "name" nil t start (point)))
+      (vhdl-insert-keyword " IS\n")
+      (when (memq vhdl-insert-empty-lines '(unit all)) (insert "\n"))
+      (indent-to (+ margin vhdl-basic-offset))
+      (setq position (point))
+      (insert "\n")
+      (when (memq vhdl-insert-empty-lines '(unit all)) (insert "\n"))
+      (indent-to margin)
+      (vhdl-insert-keyword "END ")
+      (unless (vhdl-standard-p '87)
+       (vhdl-insert-keyword "CONTEXT "))
+      (insert name ";")
+      (goto-char position))))
+
 (defun vhdl-template-default ()
   "Insert nothing."
   (interactive)
@@ -9798,8 +9948,10 @@ otherwise."
       (forward-char 1))
     (insert "(")
     (if (not seq)
-       (unless (setq input-signals
-                     (vhdl-template-field "[sensitivity list]" ")" t))
+       (unless (or (and (vhdl-standard-p '08) vhdl-sensitivity-list-all
+                        (progn (insert "all)") (setq input-signals "all")))
+                   (setq input-signals
+                         (vhdl-template-field "[sensitivity list]" ")" t)))
          (setq input-signals "")
          (delete-char -2))
       (setq clock (or (and (not (equal "" vhdl-clock-name))
@@ -10533,7 +10685,8 @@ specification, if not already there."
        (while (search-forward "<standard>" end t)
         (replace-match
          (concat "VHDL" (cond ((vhdl-standard-p '87) "'87")
-                              ((vhdl-standard-p '93) "'93/02"))
+                              ((vhdl-standard-p '93) "'93/02")
+                              ((vhdl-standard-p '08) "'08"))
                  (when (vhdl-standard-p 'ams) ", VHDL-AMS")
                  (when (vhdl-standard-p 'math) ", Math Packages")) t t))
        (goto-char beg)
@@ -11071,7 +11224,7 @@ else insert tab (used for word completion in VHDL 
minibuffer)."
      (save-excursion
        (beginning-of-line)
        ;; search backward for block beginning or end
-       (while (or (while (and (setq pos (re-search-backward 
"^\\s-*\\(\\(end\\)\\|\\(\\(impure\\|pure\\)[ 
\t\n\r\f]+\\)?\\(function\\|procedure\\)\\|\\(for\\)\\|\\(architecture\\|component\\|configuration\\|entity\\|package\\(\\s-+body\\)?\\|type[
 \t\n\r\f]+\\w+[ \t\n\r\f]+is[ 
\t\n\r\f]+\\(record\\|protected\\(\\s-+body\\)?\\)\\|units\\)\\|\\(\\w+[ 
\t\n\r\f]*:[ \t\n\r\f]*\\)?\\(postponed[ 
\t\n\r\f]+\\)?\\(block\\|case\\|for\\|if\\|procedural\\|process\\|while\\|loop\\)\\)\\>"
 nil t))
+       (while (or (while (and (setq pos (re-search-backward 
"^\\s-*\\(\\(end\\)\\|\\(\\(impure\\|pure\\)[ 
\t\n\r\f]+\\)?\\(function\\|procedure\\)\\|\\(for\\)\\|\\(architecture\\|component\\|configuration\\|context\\|entity\\|package\\(\\s-+body\\)?\\|type[
 \t\n\r\f]+\\w+[ \t\n\r\f]+is[ 
\t\n\r\f]+\\(record\\|protected\\(\\s-+body\\)?\\)\\|units\\)\\|\\(\\w+[ 
\t\n\r\f]*:[ \t\n\r\f]*\\)?\\(postponed[ 
\t\n\r\f]+\\)?\\(block\\|case\\|for\\|if\\|procedural\\|process\\|while\\|loop\\)\\)\\>"
 nil t))
                              ;; not consider subprogram declarations
                              (or (and (match-string 5)
                                       (save-match-data
@@ -11102,7 +11255,7 @@ else insert tab (used for word completion in VHDL 
minibuffer)."
      (save-excursion
        (end-of-line)
        ;; search forward for block beginning or end
-       (while (or (while (and (setq pos (re-search-forward 
"^\\s-*\\(\\(end\\)\\|\\(\\(impure\\|pure\\)[ 
\t\n\r\f]+\\)?\\(function\\|procedure\\)\\|\\(for\\)\\|\\(architecture\\|component\\|configuration\\|entity\\|package\\(\\s-+body\\)?\\|type[
 \t\n\r\f]+\\w+[ \t\n\r\f]+is[ 
\t\n\r\f]+\\(record\\|protected\\(\\s-+body\\)?\\)\\|units\\)\\|\\(\\w+[ 
\t\n\r\f]*:[ \t\n\r\f]*\\)?\\(postponed[ 
\t\n\r\f]+\\)?\\(block\\|case\\|for\\|if\\|procedural\\|process\\|while\\|loop\\)\\)\\>"
 nil t))
+       (while (or (while (and (setq pos (re-search-forward 
"^\\s-*\\(\\(end\\)\\|\\(\\(impure\\|pure\\)[ 
\t\n\r\f]+\\)?\\(function\\|procedure\\)\\|\\(for\\)\\|\\(architecture\\|component\\|configuration\\|context\\|entity\\|package\\(\\s-+body\\)?\\|type[
 \t\n\r\f]+\\w+[ \t\n\r\f]+is[ 
\t\n\r\f]+\\(record\\|protected\\(\\s-+body\\)?\\)\\|units\\)\\|\\(\\w+[ 
\t\n\r\f]*:[ \t\n\r\f]*\\)?\\(postponed[ 
\t\n\r\f]+\\)?\\(block\\|case\\|for\\|if\\|procedural\\|process\\|while\\|loop\\)\\)\\>"
 nil t))
                              ;; not consider subprogram declarations
                              (or (and (match-string 5)
                                       (save-match-data
@@ -11203,6 +11356,8 @@ but not if inside a comment or quote."
   (vhdl-hooked-abbrev 'vhdl-template-configuration))
 (defun vhdl-template-constant-hook ()
   (vhdl-hooked-abbrev 'vhdl-template-constant))
+(defun vhdl-template-context-hook ()
+  (vhdl-hooked-abbrev 'vhdl-template-context))
 (defun vhdl-template-disconnect-hook ()
   (vhdl-hooked-abbrev 'vhdl-template-disconnect))
 (defun vhdl-template-display-comment-hook ()
@@ -13190,7 +13345,8 @@ This does highlighting of keywords and standard 
identifiers.")
    (list
     (concat
      "^\\s-*\\("
-     "architecture\\|configuration\\|entity\\|package\\(\\s-+body\\)?\\|"
+     "architecture\\|configuration\\|context\\|entity\\|package"
+     "\\(\\s-+body\\)?\\|"
      "\\(\\(impure\\|pure\\)\\s-+\\)?function\\|procedure\\|component"
      "\\)\\s-+\\(\\w+\\)")
     5 'font-lock-function-name-face)
@@ -13232,9 +13388,9 @@ This does highlighting of keywords and standard 
identifiers.")
    (list
     (concat
      "^\\s-*end\\s-+\\(\\("
-     "architecture\\|block\\|case\\|component\\|configuration\\|entity\\|"
-     "for\\|function\\|generate\\|if\\|loop\\|package\\(\\s-+body\\)?\\|"
-     "procedure\\|\\(postponed\\s-+\\)?process\\|"
+     "architecture\\|block\\|case\\|component\\|configuration\\|context\\|"
+     "entity\\|for\\|function\\|generate\\|if\\|loop\\|package"
+     "\\(\\s-+body\\)?\\|procedure\\|\\(postponed\\s-+\\)?process\\|"
      (when (vhdl-standard-p 'ams) "procedural\\|")
      "units"
      "\\)\\s-+\\)?\\(\\w*\\)")
@@ -13266,10 +13422,10 @@ This does highlighting of keywords and standard 
identifiers.")
    ;; highlight names in use clauses
    (list
     (concat
-     "\\<use\\s-+\\(\\(entity\\|configuration\\)\\s-+\\)?"
+     "\\<\\(context\\|use\\)\\s-+\\(\\(entity\\|configuration\\)\\s-+\\)?"
      "\\(\\w+\\)\\(\\.\\(\\w+\\)\\)?\\((\\(\\w+\\))\\)?")
-    '(3 font-lock-function-name-face) '(5 font-lock-function-name-face nil t)
-    '(7 font-lock-function-name-face nil t))
+    '(4 font-lock-function-name-face) '(6 font-lock-function-name-face nil t)
+    '(8 font-lock-function-name-face nil t))
 
    ;; highlight attribute name in attribute declarations/specifications
    (list
@@ -13316,6 +13472,12 @@ This does highlighting of keywords and standard 
identifiers.")
         '(vhdl-font-lock-match-item
           (progn (goto-char (match-end 1)) (match-beginning 2))
           nil (1 font-lock-variable-name-face)))
+
+   ;; highlight tool directives
+   (list
+    (concat
+     "^\\s-*\\(`\\w+\\)")
+    1 'font-lock-preprocessor-face)
    )
   "For consideration as a value of `vhdl-font-lock-keywords'.
 This does context sensitive highlighting of names and labels.")
@@ -13661,7 +13823,7 @@ hierarchy otherwise.")
   "Return position of end of current unit."
   (let ((pos (point)))
     (save-excursion
-      (while (and (re-search-forward "^[ 
\t]*\\(architecture\\|configuration\\|entity\\|package\\)\\>" nil 1)
+      (while (and (re-search-forward "^[ 
\t]*\\(architecture\\|configuration\\|context\\|entity\\|package\\)\\>" nil 1)
                  (save-excursion
                    (goto-char (match-beginning 0))
                    (vhdl-backward-syntactic-ws)
@@ -13682,7 +13844,7 @@ hierarchy otherwise.")
   "Scan the context clause that precedes a design unit."
   (let (lib-alist)
     (save-excursion
-      (when (re-search-backward "^[ 
\t]*\\(architecture\\|configuration\\|entity\\|package\\)\\>" nil t)
+      (when (re-search-backward "^[ 
\t]*\\(architecture\\|configuration\\|context\\|entity\\|package\\)\\>" nil t)
        (while (and (re-search-backward "^[ \t]*\\(end\\|use\\)\\>" nil t)
                    (equal "USE" (upcase (match-string 1))))
          (when (looking-at "^[ \t]*use[ 
\t\n\r\f]*\\(\\w+\\)\\.\\(\\w+\\)\\.\\w+")
@@ -17502,6 +17664,7 @@ specified by a target."
        'vhdl-argument-list-indent
        'vhdl-association-list-with-formals
        'vhdl-conditions-in-parenthesis
+       'vhdl-sensitivity-list-all
        'vhdl-zero-string
        'vhdl-one-string
        'vhdl-file-header
@@ -17606,6 +17769,17 @@ specified by a target."
 
 (defconst vhdl-doc-release-notes nil
   "\
+Release Notes for VHDL Mode 3.37
+================================
+
+- Added support for VHDL'08:
+  - New keywords, types, functions, attributes, operators, packages
+  - Context declaration
+  - Block comments
+  - Directives
+  - 'all' keyword in sensitivity list
+
+
 Release Notes for VHDL Mode 3.34
 ================================
 
@@ -17667,6 +17841,13 @@ User Options
 Reserved words in VHDL
 ----------------------
 
+VHDL'08 (IEEE Std 1076-2008):
+  `vhdl-08-keywords'      : keywords
+  `vhdl-08-types'         : standardized types
+  `vhdl-08-attributes'    : standardized attributes
+  `vhdl-08-functions'     : standardized functions
+  `vhdl-08-packages'      : standardized packages and libraries
+
 VHDL'93/02 (IEEE Std 1076-1993/2002):
   `vhdl-02-keywords'      : keywords
   `vhdl-02-types'         : standardized types
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index 55405b6..fe72b3f 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -628,6 +628,29 @@ The argument has the same meaning as in `apropos'."
 ;;;###autoload (define-key ctl-x-5-map "." #'xref-find-definitions-other-frame)
 
 
+;;; Helper functions
+
+(defvar xref-etags-mode--saved nil)
+
+(define-minor-mode xref-etags-mode
+  "Minor mode to make xref use etags again.
+
+Certain major modes install their own mechanisms for listing
+identifiers and navigation.  Turn this on to undo those settings
+and just use etags."
+  :lighter ""
+  (if xref-etags-mode
+      (progn
+        (setq xref-etags-mode--saved
+              (cons xref-find-function
+                    xref-identifier-completion-table-function))
+        (kill-local-variable 'xref-find-function)
+        (kill-local-variable 'xref-identifier-completion-table-function))
+    (setq-local xref-find-function (car xref-etags-mode--saved))
+    (setq-local xref-identifier-completion-table-function
+                (cdr xref-etags-mode--saved))))
+
+
 (provide 'xref)
 
 ;;; xref.el ends here
diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog
index 920d692..0f46413 100644
--- a/lisp/url/ChangeLog
+++ b/lisp/url/ChangeLog
@@ -4,6 +4,11 @@
        * url-dav.el (url-dav-delete-directory, url-dav-delete-file)
        (url-dav-directory-files): Keep diagnostics consistent with system's.
 
+2015-01-17  Ivan Shmakov  <address@hidden>
+
+       * url-cookie.el (url-cookie-write-file): Let-bind print-length
+       and print-level to nil to avoid writing a garbled list.  (Bug#16805)
+
 2014-12-12  Lars Magne Ingebrigtsen  <address@hidden>
 
        * url-http.el (url-http-parse-headers): `gnutls-available-p' is
diff --git a/m4/dup2.m4 b/m4/dup2.m4
index 0354c6a..9aa2ea8 100644
--- a/m4/dup2.m4
+++ b/m4/dup2.m4
@@ -1,4 +1,4 @@
-#serial 20
+#serial 22
 dnl Copyright (C) 2002, 2005, 2007, 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -8,7 +8,6 @@ AC_DEFUN([gl_FUNC_DUP2],
 [
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
   AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_CHECK_FUNCS_ONCE([getdtablesize])
   m4_ifdef([gl_FUNC_DUP2_OBSOLETE], [
     AC_CHECK_FUNCS_ONCE([dup2])
     if test $ac_cv_func_dup2 = no; then
@@ -20,38 +19,44 @@ AC_DEFUN([gl_FUNC_DUP2],
   if test $HAVE_DUP2 = 1; then
     AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works],
       [AC_RUN_IFELSE([
-         AC_LANG_PROGRAM([[#include <unistd.h>
-#include <fcntl.h>
-#include <errno.h>]],
-           [int result = 0;
-#ifdef HAVE_GETDTABLESIZE
-            int bad_fd = getdtablesize ();
-#else
-            int bad_fd = 1000000;
-#endif
-#ifdef FD_CLOEXEC
-            if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1)
-              result |= 1;
-#endif
-            if (dup2 (1, 1) == 0)
-              result |= 2;
-#ifdef FD_CLOEXEC
-            if (fcntl (1, F_GETFD) != FD_CLOEXEC)
-              result |= 4;
-#endif
-            close (0);
-            if (dup2 (0, 0) != -1)
-              result |= 8;
-            /* Many gnulib modules require POSIX conformance of EBADF.  */
-            if (dup2 (2, bad_fd) == -1 && errno != EBADF)
-              result |= 16;
-            /* Flush out some cygwin core dumps.  */
-            if (dup2 (2, -1) != -1 || errno != EBADF)
-              result |= 32;
-            dup2 (2, 255);
-            dup2 (2, 256);
-            return result;
-           ])
+         AC_LANG_PROGRAM(
+           [[#include <errno.h>
+             #include <fcntl.h>
+             #include <limits.h>
+             #include <sys/resource.h>
+             #include <unistd.h>
+           ]],
+           [[int result = 0;
+             int bad_fd = INT_MAX;
+             struct rlimit rlim;
+             if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
+                 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX
+                 && rlim.rlim_cur != RLIM_INFINITY
+                 && rlim.rlim_cur != RLIM_SAVED_MAX
+                 && rlim.rlim_cur != RLIM_SAVED_CUR)
+               bad_fd = rlim.rlim_cur;
+             #ifdef FD_CLOEXEC
+               if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1)
+                 result |= 1;
+             #endif
+             if (dup2 (1, 1) == 0)
+               result |= 2;
+             #ifdef FD_CLOEXEC
+               if (fcntl (1, F_GETFD) != FD_CLOEXEC)
+                 result |= 4;
+             #endif
+             close (0);
+             if (dup2 (0, 0) != -1)
+               result |= 8;
+             /* Many gnulib modules require POSIX conformance of EBADF.  */
+             if (dup2 (2, bad_fd) == -1 && errno != EBADF)
+               result |= 16;
+             /* Flush out some cygwin core dumps.  */
+             if (dup2 (2, -1) != -1 || errno != EBADF)
+               result |= 32;
+             dup2 (2, 255);
+             dup2 (2, 256);
+             return result;]])
         ],
         [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no],
         [case "$host_os" in
@@ -59,9 +64,6 @@ AC_DEFUN([gl_FUNC_DUP2],
              gl_cv_func_dup2_works="guessing no" ;;
            cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0
              gl_cv_func_dup2_works="guessing no" ;;
-           linux*) # On linux between 2008-07-27 and 2009-05-11, dup2 of a
-                   # closed fd may yield -EBADF instead of -1 / errno=EBADF.
-             gl_cv_func_dup2_works="guessing no" ;;
            aix* | freebsd*)
                    # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE,
                    # not EBADF.
diff --git a/m4/fcntl.m4 b/m4/fcntl.m4
index 733cd2d..218e786 100644
--- a/m4/fcntl.m4
+++ b/m4/fcntl.m4
@@ -1,4 +1,4 @@
-# fcntl.m4 serial 5
+# fcntl.m4 serial 7
 dnl Copyright (C) 2009-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -19,7 +19,7 @@ AC_DEFUN([gl_FUNC_FCNTL],
   AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
   AC_REQUIRE([gl_FCNTL_H_DEFAULTS])
   AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_CHECK_FUNCS_ONCE([fcntl getdtablesize])
+  AC_CHECK_FUNCS_ONCE([fcntl])
   if test $ac_cv_func_fcntl = no; then
     gl_REPLACE_FCNTL
   else
@@ -27,30 +27,34 @@ AC_DEFUN([gl_FUNC_FCNTL],
     dnl haiku alpha 2 F_DUPFD has wrong errno
     AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly],
       [gl_cv_func_fcntl_f_dupfd_works],
-      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
-#ifdef HAVE_GETDTABLESIZE
-# include <unistd.h>
-#endif
-#include <fcntl.h>
-#include <errno.h>
-]], [[int result = 0;
-#ifdef HAVE_GETDTABLESIZE
-      int bad_fd = getdtablesize ();
-#else
-      int bad_fd = 1000000;
-#endif
-      if (fcntl (0, F_DUPFD, -1) != -1) result |= 1;
-      if (errno != EINVAL) result |= 2;
-      if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4;
-      if (errno != EINVAL) result |= 8;
-      return result;
-         ]])],
+      [AC_RUN_IFELSE(
+         [AC_LANG_PROGRAM(
+            [[#include <errno.h>
+              #include <fcntl.h>
+              #include <limits.h>
+              #include <sys/resource.h>
+              #include <unistd.h>
+            ]],
+            [[int result = 0;
+              int bad_fd = INT_MAX;
+              struct rlimit rlim;
+              if (getrlimit (RLIMIT_NOFILE, &rlim) == 0
+                  && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX
+                  && rlim.rlim_cur != RLIM_INFINITY
+                  && rlim.rlim_cur != RLIM_SAVED_MAX
+                  && rlim.rlim_cur != RLIM_SAVED_CUR)
+                bad_fd = rlim.rlim_cur;
+              if (fcntl (0, F_DUPFD, -1) != -1) result |= 1;
+              if (errno != EINVAL) result |= 2;
+              if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4;
+              if (errno != EINVAL) result |= 8;
+              return result;]])],
          [gl_cv_func_fcntl_f_dupfd_works=yes],
          [gl_cv_func_fcntl_f_dupfd_works=no],
-         [# Guess that it works on glibc systems
-          case $host_os in #((
-            *-gnu*) gl_cv_func_fcntl_f_dupfd_works="guessing yes";;
-            *)      gl_cv_func_fcntl_f_dupfd_works="guessing no";;
+         [case $host_os in
+            aix* | cygwin* | haiku*)
+               gl_cv_func_fcntl_f_dupfd_works="guessing no" ;;
+            *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;;
           esac])])
     case $gl_cv_func_fcntl_f_dupfd_works in
       *yes) ;;
diff --git a/m4/getdtablesize.m4 b/m4/getdtablesize.m4
index a6b6c1b..25e9968 100644
--- a/m4/getdtablesize.m4
+++ b/m4/getdtablesize.m4
@@ -1,4 +1,4 @@
-# getdtablesize.m4 serial 5
+# getdtablesize.m4 serial 6
 dnl Copyright (C) 2008-2015 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
@@ -9,7 +9,9 @@ AC_DEFUN([gl_FUNC_GETDTABLESIZE],
   AC_REQUIRE([gl_UNISTD_H_DEFAULTS])
   AC_REQUIRE([AC_CANONICAL_HOST])
   AC_CHECK_FUNCS_ONCE([getdtablesize])
-  if test $ac_cv_func_getdtablesize = yes; then
+  AC_CHECK_DECLS_ONCE([getdtablesize])
+  if test $ac_cv_func_getdtablesize = yes &&
+     test $ac_cv_have_decl_getdtablesize = yes; then
     # Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft limit
     # up to an unchangeable hard limit; all other platforms correctly
     # require setrlimit before getdtablesize() can report a larger value.
diff --git a/src/ChangeLog b/src/ChangeLog
index 1c4758f..6ef5746 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,77 @@
+2015-02-22  Jan Djärv  <address@hidden>
+
+       * nsfns.m (Fx_frame_geometry): New function.
+       (syms_of_nsfns): Defsubr Sx_frame_geometry.
+
+2015-02-22  Paul Eggert  <address@hidden>
+
+       Spelling fixes
+       * lisp.h (DEFINE_NON_NIL_Q_SYMBOL_MACROS):
+       Rename from DEFINE_NONNIL_Q_SYMBOL_MACROS.  All uses changed.
+
+2015-02-21  Eli Zaretskii  <address@hidden>
+
+       * w32term.c (queue_notifications):
+       * w32inevt.c (handle_file_notifications):
+       * w32font.c (w32_enumfont_pattern_entity): Prefer 'Qfoo' to
+       'intern ("foo")'.
+
+2015-02-21  Paul Eggert  <address@hidden>
+
+       Prefer 'Qfoo' to 'intern ("foo")'
+       * buffer.c (syms_of_buffer):
+       * bytecode.c (exec_byte_code):
+       * callint.c (Fcall_interactively):
+       * callproc.c (create_temp_file):
+       * charset.c (define_charset_internal):
+       * coding.c (syms_of_coding):
+       * editfns.c (syms_of_editfns):
+       * emacs.c (main):
+       * fns.c (syms_of_fns):
+       * frame.c (delete_frame, Fframe_parameters):
+       * keyboard.c (syms_of_keyboard):
+       * keymap.c (syms_of_keymap):
+       * minibuf.c (read_minibuf, syms_of_minibuf):
+       * nsfns.m (ns_cursor_type_to_lisp):
+       * textprop.c (syms_of_textprop):
+       * xdisp.c (Fformat_mode_line, syms_of_xdisp):
+       * xfns.c (x_create_tip_frame, Fx_select_font):
+       * xml.c (parse_region):
+       Prefer constants like 'Qfoo' to calls like 'intern ("foo")'.
+       * buffer.c (syms_of_buffer): OK to do (put 'erase-buffer 'disabled
+       t) here now ...
+       (keys_of_buffer): ... instead of here.
+       * ftfont.c (syms_of_ftfont): Move DEFSYM of Qmono from here ...
+       * xfns.c (syms_of_xfns): ... to here, since ftfont.c is more
+       optional than xfns.c.
+
+2015-02-20  Jan Djärv  <address@hidden>
+
+       * emacs.c (terminate_due_to_signal): Move totally_unblock_input after
+       setting fatal_error_in_progress, so gobble_input and *read_socket are
+       not read if there are pending_signals.
+
+2015-02-20  Paul Eggert  <address@hidden>
+
+       Simplify binary I/O configuration
+       * lread.c (Fload): Prefer FOPEN_TEXT and FOPEN_BINARY to #ifdef DOS_NT.
+       * sysstdio.h: Add copyright notice.  Include <fcntl.h>.
+       (FOPEN_BINARY, FOPEN_TEXT): New macros.
+       * xfaces.c (Fx_load_color_file): Use FOPEN_TEXT, since POSIX
+       doesn't guarantee that "t" will work.
+
+2015-02-19  Eli Zaretskii  <address@hidden>
+
+       * keyboard.c (read_char): Make sure this_single_command_key_start
+       is in sync with this_command_key_count, around the call to
+       input-method-function.  (Bug#19774)
+
+2015-02-19  Fujii Hironori  <address@hidden>  (tiny change)
+
+       * w32fns.c (w32_wnd_proc) <WM_IME_STARTCOMPOSITION>: Pass the
+       message to DefWindowProc, after positioning the IME window, to
+       trigger its display.  (Bug#11732)
+
 2015-02-18  Eli Zaretskii  <address@hidden>
 
        * emacs.c (Fkill_emacs): Exit with specified exit code even if
diff --git a/src/buffer.c b/src/buffer.c
index bc06e17..279735c 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -5416,7 +5416,7 @@ syms_of_buffer (void)
   DEFSYM (Qoverwrite_mode, "overwrite-mode");
   Fput (Qoverwrite_mode, Qchoice,
        list3 (Qnil, intern ("overwrite-mode-textual"),
-              intern ("overwrite-mode-binary")));
+              Qoverwrite_mode_binary));
 
   Fput (Qprotected_field, Qerror_conditions,
        listn (CONSTYPE_PURE, 2, Qprotected_field, Qerror));
@@ -6334,6 +6334,8 @@ Functions running this hook are, `get-buffer-create',
   defsubr (&Soverlay_get);
   defsubr (&Soverlay_put);
   defsubr (&Srestore_buffer_modified_p);
+
+  Fput (intern_c_string ("erase-buffer"), Qdisabled, Qt);
 }
 
 void
@@ -6341,8 +6343,4 @@ keys_of_buffer (void)
 {
   initial_define_key (control_x_map, 'b', "switch-to-buffer");
   initial_define_key (control_x_map, 'k', "kill-buffer");
-
-  /* This must not be in syms_of_buffer, because Qdisabled is not
-     initialized when that function gets called.  */
-  Fput (intern_c_string ("erase-buffer"), Qdisabled, Qt);
 }
diff --git a/src/bytecode.c b/src/bytecode.c
index b458367..55789b4 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -1945,10 +1945,10 @@ exec_byte_code (Lisp_Object bytestr, Lisp_Object 
vector, Lisp_Object maxdepth,
          /* Actually this is Bstack_ref with offset 0, but we use Bdup
             for that instead.  */
          /* CASE (Bstack_ref): */
-         call3 (intern ("error"),
-                build_string ("Invalid byte opcode: op=%s, ptr=%d"),
-                make_number (op),
-                make_number ((stack.pc - 1) - stack.byte_string_start));
+         call3 (Qerror,
+                build_string ("Invalid byte opcode: op=%s, ptr=%d"),
+                make_number (op),
+                make_number ((stack.pc - 1) - stack.byte_string_start));
 
          /* Handy byte-codes for lexical binding.  */
        CASE (Bstack_ref1):
diff --git a/src/callint.c b/src/callint.c
index 60021fd..0c6c030 100644
--- a/src/callint.c
+++ b/src/callint.c
@@ -615,9 +615,9 @@ invoke it.  If KEYS is omitted or nil, the return value of
              {
                Lisp_Object tem2;
 
-               teml = Fget (teml, intern ("event-symbol-elements"));
+               teml = Fget (teml, Qevent_symbol_elements);
                /* Ignore first element, which is the base key.  */
-               tem2 = Fmemq (intern ("down"), Fcdr (teml));
+               tem2 = Fmemq (Qdown, Fcdr (teml));
                if (! NILP (tem2))
                  up_event = Fread_event (Qnil, Qnil, Qnil);
              }
@@ -647,9 +647,9 @@ invoke it.  If KEYS is omitted or nil, the return value of
              {
                Lisp_Object tem2;
 
-               teml = Fget (teml, intern ("event-symbol-elements"));
+               teml = Fget (teml, Qevent_symbol_elements);
                /* Ignore first element, which is the base key.  */
-               tem2 = Fmemq (intern ("down"), Fcdr (teml));
+               tem2 = Fmemq (Qdown, Fcdr (teml));
                if (! NILP (tem2))
                  up_event = Fread_event (Qnil, Qnil, Qnil);
              }
diff --git a/src/callproc.c b/src/callproc.c
index 63ab9bf..e1fe8ed 100644
--- a/src/callproc.c
+++ b/src/callproc.c
@@ -1020,7 +1020,7 @@ create_temp_file (ptrdiff_t nargs, Lisp_Object *args,
     specbind (intern ("coding-system-for-write"), val);
     /* POSIX lets mk[s]temp use "."; don't invoke jka-compr if we
        happen to get a ".Z" suffix.  */
-    specbind (intern ("file-name-handler-alist"), Qnil);
+    specbind (Qfile_name_handler_alist, Qnil);
     write_region (start, end, filename_string, Qnil, Qlambda, Qnil, Qnil, fd);
 
     unbind_to (count1, Qnil);
diff --git a/src/charset.c b/src/charset.c
index 9080840..f1aa074 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -1268,7 +1268,7 @@ define_charset_internal (Lisp_Object name,
 
   args[charset_arg_plist] =
     listn (CONSTYPE_HEAP, 14,
-          intern_c_string (":name"),
+          QCname,
           args[charset_arg_name],
           intern_c_string (":dimension"),
           args[charset_arg_dimension],
@@ -1278,7 +1278,7 @@ define_charset_internal (Lisp_Object name,
           args[charset_arg_iso_final],
           intern_c_string (":emacs-mule-id"),
           args[charset_arg_emacs_mule_id],
-          intern_c_string (":ascii-compatible-p"),
+          QCascii_compatible_p,
           args[charset_arg_ascii_compatible_p],
           intern_c_string (":code-offset"),
           args[charset_arg_code_offset]);
diff --git a/src/coding.c b/src/coding.c
index 1a0e1279..4b41355 100644
--- a/src/coding.c
+++ b/src/coding.c
@@ -11281,15 +11281,15 @@ internal character representation.  */);
 
   Lisp_Object plist[] =
     {
-      intern_c_string (":name"),
+      QCname,
       args[coding_arg_name] = Qno_conversion,
-      intern_c_string (":mnemonic"),
+      QCmnemonic,
       args[coding_arg_mnemonic] = make_number ('='),
       intern_c_string (":coding-type"),
       args[coding_arg_coding_type] = Qraw_text,
-      intern_c_string (":ascii-compatible-p"),
+      QCascii_compatible_p,
       args[coding_arg_ascii_compatible_p] = Qt,
-      intern_c_string (":default-char"),
+      QCdefault_char,
       args[coding_arg_default_char] = make_number (0),
       intern_c_string (":for-unibyte"),
       args[coding_arg_for_unibyte] = Qt,
diff --git a/src/editfns.c b/src/editfns.c
index c205ca3..dbcb316 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -4973,8 +4973,7 @@ of the buffer being accessed.  */);
     /* Do this here, because init_buffer_once is too early--it won't work.  */
     Fset_buffer (Vprin1_to_string_buffer);
     /* Make sure buffer-access-fontify-functions is nil in this buffer.  */
-    Fset (Fmake_local_variable (intern_c_string 
("buffer-access-fontify-functions")),
-         Qnil);
+    Fset (Fmake_local_variable (Qbuffer_access_fontify_functions), Qnil);
     Fset_buffer (obuf);
   }
 
diff --git a/src/emacs.c b/src/emacs.c
index 897433d..76ddd5d 100644
--- a/src/emacs.c
+++ b/src/emacs.c
@@ -348,13 +348,13 @@ _Noreturn void
 terminate_due_to_signal (int sig, int backtrace_limit)
 {
   signal (sig, SIG_DFL);
-  totally_unblock_input ();
 
   /* If fatal error occurs in code below, avoid infinite recursion.  */
   if (! fatal_error_in_progress)
     {
       fatal_error_in_progress = 1;
 
+      totally_unblock_input ();
       if (sig == SIGTERM || sig == SIGHUP || sig == SIGINT)
         Fkill_emacs (make_number (sig));
 
@@ -1576,13 +1576,11 @@ Using an Emacs configured with --with-x-toolkit=lucid 
does not have this problem
          if (filename_from_ansi (file, file_utf8) == 0)
            file = file_utf8;
 #endif
-         Vtop_level = list2 (intern_c_string ("load"),
-                             build_unibyte_string (file));
+         Vtop_level = list2 (Qload, build_unibyte_string (file));
        }
       /* Unless next switch is -nl, load "loadup.el" first thing.  */
       if (! no_loadup)
-       Vtop_level = list2 (intern_c_string ("load"),
-                           build_string ("loadup.el"));
+       Vtop_level = list2 (Qload, build_string ("loadup.el"));
     }
 
   /* Set up for profiling.  This is known to work on FreeBSD,
diff --git a/src/fns.c b/src/fns.c
index 4c70951..51f61d2 100644
--- a/src/fns.c
+++ b/src/fns.c
@@ -5093,7 +5093,7 @@ syms_of_fns (void)
   DEFVAR_LISP ("features", Vfeatures,
     doc: /* A list of symbols which are the features of the executing Emacs.
 Used by `featurep' and `require', and altered by `provide'.  */);
-  Vfeatures = list1 (intern_c_string ("emacs"));
+  Vfeatures = list1 (Qemacs);
   DEFSYM (Qsubfeatures, "subfeatures");
   DEFSYM (Qfuncall, "funcall");
 
diff --git a/src/frame.c b/src/frame.c
index 92b6b7c..d82df09 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -1544,7 +1544,7 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
        }
     }
 
-  is_tooltip_frame = !NILP (Fframe_parameter (frame, intern ("tooltip")));
+  is_tooltip_frame = !NILP (Fframe_parameter (frame, Qtooltip));
 
   /* Run `delete-frame-functions' unless FORCE is `noelisp' or
      frame is a tooltip.  FORCE is set to `noelisp' when handling
@@ -2533,7 +2533,7 @@ If FRAME is omitted or nil, return information on the 
currently selected frame.
       else
        store_in_alist (&alist, Qbackground_color,
                        tty_color_name (f, FRAME_BACKGROUND_PIXEL (f)));
-      store_in_alist (&alist, intern ("font"),
+      store_in_alist (&alist, Qfont,
                      build_string (FRAME_MSDOS_P (f)
                                    ? "ms-dos"
                                    : FRAME_W32_P (f) ? "w32term"
diff --git a/src/ftfont.c b/src/ftfont.c
index adf1888..26740c2 100644
--- a/src/ftfont.c
+++ b/src/ftfont.c
@@ -2659,7 +2659,6 @@ syms_of_ftfont (void)
   DEFSYM (Qmonospace, "monospace");
   DEFSYM (Qsans_serif, "sans-serif");
   DEFSYM (Qserif, "serif");
-  DEFSYM (Qmono, "mono");
   DEFSYM (Qsans, "sans");
   DEFSYM (Qsans__serif, "sans serif");
 
diff --git a/src/keyboard.c b/src/keyboard.c
index 7a458a4..3cd37f9 100644
--- a/src/keyboard.c
+++ b/src/keyboard.c
@@ -3034,6 +3034,7 @@ read_char (int commandflag, Lisp_Object map,
       Lisp_Object keys;
       ptrdiff_t key_count;
       bool key_count_reset;
+      ptrdiff_t command_key_start;
       struct gcpro gcpro1;
       ptrdiff_t count = SPECPDL_INDEX ();
 
@@ -3057,6 +3058,7 @@ read_char (int commandflag, Lisp_Object map,
       /* Save the this_command_keys status.  */
       key_count = this_command_key_count;
       key_count_reset = this_command_key_count_reset;
+      command_key_start = this_single_command_key_start;
 
       if (key_count > 0)
        keys = Fcopy_sequence (this_command_keys);
@@ -3067,6 +3069,7 @@ read_char (int commandflag, Lisp_Object map,
       /* Clear out this_command_keys.  */
       this_command_key_count = 0;
       this_command_key_count_reset = 0;
+      this_single_command_key_start = 0;
 
       /* Now wipe the echo area.  */
       if (!NILP (echo_area_buffer[0]))
@@ -3090,6 +3093,7 @@ read_char (int commandflag, Lisp_Object map,
         and this_command_keys state.  */
       this_command_key_count = key_count;
       this_command_key_count_reset = key_count_reset;
+      this_single_command_key_start = command_key_start;
       if (key_count > 0)
        this_command_keys = keys;
 
@@ -11613,7 +11617,7 @@ and the minor mode maps regardless of 
`overriding-local-map'.  */);
 
   DEFVAR_LISP ("special-event-map", Vspecial_event_map,
               doc: /* Keymap defining bindings for special events to execute 
at low level.  */);
-  Vspecial_event_map = list1 (intern_c_string ("keymap"));
+  Vspecial_event_map = list1 (Qkeymap);
 
   DEFVAR_LISP ("track-mouse", do_mouse_tracking,
               doc: /* Non-nil means generate motion events for mouse motion.  
*/);
diff --git a/src/keymap.c b/src/keymap.c
index 34fe1cb..d10c004 100644
--- a/src/keymap.c
+++ b/src/keymap.c
@@ -3730,8 +3730,8 @@ be preferred.  */);
   staticpro (&Vmouse_events);
   Vmouse_events = listn (CONSTYPE_PURE, 9,
                         Qmenu_bar,
-                        intern_c_string ("tool-bar"),
-                        intern_c_string ("header-line"),
+                        Qtool_bar,
+                        Qheader_line,
                         Qmode_line,
                         intern_c_string ("mouse-1"),
                         intern_c_string ("mouse-2"),
diff --git a/src/lisp.h b/src/lisp.h
index 01295c2..75f0ccf 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -746,10 +746,10 @@ struct Lisp_Symbol
 
 /* By default, define macros for Qt, etc., as this leads to a bit
    better performance in the core Emacs interpreter.  A plugin can
-   define DEFINE_NONNIL_Q_SYMBOL_MACROS to be false, to be portable to
+   define DEFINE_NON_NIL_Q_SYMBOL_MACROS to be false, to be portable to
    other Emacs instances that assign different values to Qt, etc.  */
-#ifndef DEFINE_NONNIL_Q_SYMBOL_MACROS
-# define DEFINE_NONNIL_Q_SYMBOL_MACROS true
+#ifndef DEFINE_NON_NIL_Q_SYMBOL_MACROS
+# define DEFINE_NON_NIL_Q_SYMBOL_MACROS true
 #endif
 
 #include "globals.h"
diff --git a/src/lread.c b/src/lread.c
index b42849f..ae17529 100644
--- a/src/lread.c
+++ b/src/lread.c
@@ -1033,13 +1033,9 @@ Return t if the file exists and loads successfully.  */)
   bool compiled = 0;
   Lisp_Object handler;
   bool safe_p = 1;
-  const char *fmode = "r";
+  const char *fmode = "r" FOPEN_TEXT;
   int version;
 
-#ifdef DOS_NT
-  fmode = "rt";
-#endif /* DOS_NT */
-
   CHECK_STRING (file);
 
   /* If file name is magic, call the handler.  */
@@ -1223,10 +1219,7 @@ Return t if the file exists and loads successfully.  */)
          compiled = 1;
 
          efound = ENCODE_FILE (found);
-
-#ifdef DOS_NT
-         fmode = "rb";
-#endif /* DOS_NT */
+         fmode = "r" FOPEN_BINARY;
 
           /* openp already checked for newness, no point doing it again.
              FIXME would be nice to get a message when openp
diff --git a/src/minibuf.c b/src/minibuf.c
index 3408bb9..2dc5c54 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -395,7 +395,7 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, 
Lisp_Object prompt,
   Lisp_Object dummy, frame;
 
   specbind (Qminibuffer_default, defalt);
-  specbind (intern ("inhibit-read-only"), Qnil);
+  specbind (Qinhibit_read_only, Qnil);
 
   /* If Vminibuffer_completing_file_name is `lambda' on entry, it was t
      in previous recursive minibuffer, but was not set explicitly
@@ -2070,9 +2070,7 @@ with completion; they always discard text properties.  
*/);
               doc: /* Text properties that are added to minibuffer prompts.
 These are in addition to the basic `field' property, and stickiness
 properties.  */);
-  /* We use `intern' here instead of Qread_only to avoid
-     initialization-order problems.  */
-  Vminibuffer_prompt_properties = list2 (intern_c_string ("read-only"), Qt);
+  Vminibuffer_prompt_properties = list2 (Qread_only, Qt);
 
   DEFVAR_LISP ("read-hide-char", Vread_hide_char,
               doc: /* Whether to hide input characters in noninteractive mode.
diff --git a/src/nsfns.m b/src/nsfns.m
index cc2e496..f8863e6 100644
--- a/src/nsfns.m
+++ b/src/nsfns.m
@@ -849,9 +849,9 @@ ns_cursor_type_to_lisp (int arg)
   switch (arg)
     {
     case FILLED_BOX_CURSOR: return Qbox;
-    case HOLLOW_BOX_CURSOR: return intern ("hollow");
-    case HBAR_CURSOR:      return intern ("hbar");
-    case BAR_CURSOR:       return intern ("bar");
+    case HOLLOW_BOX_CURSOR: return Qhollow;
+    case HBAR_CURSOR:      return Qhbar;
+    case BAR_CURSOR:       return Qbar;
     case NO_CURSOR:
     default:               return intern ("no");
     }
@@ -2806,6 +2806,87 @@ Value is t if tooltip was open, nil otherwise.  */)
   return Qt;
 }
 
+DEFUN ("x-frame-geometry", Fx_frame_geometry, Sx_frame_geometry, 0, 1, 0,
+       doc: /* Return geometric attributes of frame FRAME.
+
+FRAME must be a live frame and defaults to the selected one.
+
+The return value is an association list containing the following
+elements (all size values are in pixels).
+
+- `frame-outer-size' is a cons of the outer width and height of FRAME.
+  The outer size include the title bar and the external borders as well
+  as any menu and/or tool bar of frame.
+
+- `border' is a cons of the horizontal and vertical width of FRAME's
+  external borders.
+
+- `title-bar-height' is the height of the title bar of FRAME.
+
+- `menu-bar-external' if `t' means the menu bar is external (not
+  included in the inner edges of FRAME).
+
+- `menu-bar-size' is a cons of the width and height of the menu bar of
+  FRAME.
+
+- `tool-bar-external' if `t' means the tool bar is external (not
+  included in the inner edges of FRAME).
+
+- `tool-bar-side' tells tells on which side the tool bar on FRAME is and
+  can be one of `left', `top', `right' or `bottom'.
+
+- `tool-bar-size' is a cons of the width and height of the tool bar of
+  FRAME.
+
+- `frame-inner-size' is a cons of the inner width and height of FRAME.
+  This excludes FRAME's title bar and external border as well as any
+  external menu and/or tool bar.  */)
+  (Lisp_Object frame)
+{
+  struct frame *f = decode_live_frame (frame);
+  int inner_width = FRAME_PIXEL_WIDTH (f);
+  int inner_height = FRAME_PIXEL_HEIGHT (f);
+  Lisp_Object fullscreen = Fframe_parameter (frame, Qfullscreen);
+  int border = f->border_width;
+  int title = FRAME_NS_TITLEBAR_HEIGHT (f);
+  int outer_width = FRAME_PIXEL_WIDTH (f) + 2 * border;
+  int outer_height = FRAME_PIXEL_HEIGHT (f) + 2 * border;
+  int tool_bar_height = FRAME_TOOLBAR_HEIGHT (f);
+  int tool_bar_width = tool_bar_height > 0
+    ? outer_width - 2 * FRAME_INTERNAL_BORDER_WIDTH (f)
+    : 0;
+  // Always 0 on NS.
+  int menu_bar_height = 0;
+  int menu_bar_width = 0;
+
+  return
+    listn (CONSTYPE_HEAP, 10,
+          Fcons (Qframe_position,
+                 Fcons (make_number (f->left_pos), make_number (f->top_pos))),
+          Fcons (Qframe_outer_size,
+                 Fcons (make_number (outer_width), make_number 
(outer_height))),
+          Fcons (Qexternal_border_size,
+                 ((EQ (fullscreen, Qfullboth) || EQ (fullscreen, Qfullscreen))
+                  ? Fcons (make_number (0), make_number (0))
+                  : Fcons (make_number (border), make_number (border)))),
+           Fcons (Qtitle_height,
+                 ((EQ (fullscreen, Qfullboth) || EQ (fullscreen, Qfullscreen))
+                  ? make_number (0)
+                  : make_number (title))),
+          Fcons (Qmenu_bar_external, FRAME_EXTERNAL_MENU_BAR (f) ? Qt : Qnil),
+          Fcons (Qmenu_bar_size,
+                 Fcons (make_number (menu_bar_width),
+                        make_number (menu_bar_height))),
+          Fcons (Qtool_bar_external, FRAME_EXTERNAL_TOOL_BAR (f) ? Qt : Qnil),
+          Fcons (Qtool_bar_position, FRAME_TOOL_BAR_POSITION (f)),
+          Fcons (Qtool_bar_size,
+                 Fcons (make_number (tool_bar_width),
+                        make_number (tool_bar_height))),
+          Fcons (Qframe_inner_size,
+                 Fcons (make_number (inner_width),
+                        make_number (inner_height))));
+}
+
 
 /* ==========================================================================
 
@@ -2989,6 +3070,7 @@ be used as the image of the icon representing the frame.  
*/);
   defsubr (&Sx_display_pixel_width);
   defsubr (&Sx_display_pixel_height);
   defsubr (&Sns_display_monitor_attributes_list);
+  defsubr (&Sx_frame_geometry);
   defsubr (&Sx_display_mm_width);
   defsubr (&Sx_display_mm_height);
   defsubr (&Sx_display_screens);
diff --git a/src/sysstdio.h b/src/sysstdio.h
index e9dfb69..c97c4f8 100644
--- a/src/sysstdio.h
+++ b/src/sysstdio.h
@@ -1,2 +1,31 @@
+/* Standard I/O for Emacs.
+
+Copyright 2013-2015 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 <fcntl.h>
 #include <stdio.h>
+
 extern FILE *emacs_fopen (char const *, char const *);
+
+#if O_BINARY
+# define FOPEN_BINARY "b"
+# define FOPEN_TEXT "t"
+#else
+# define FOPEN_BINARY ""
+# define FOPEN_TEXT ""
+#endif
diff --git a/src/textprop.c b/src/textprop.c
index 35f22bf..740b962 100644
--- a/src/textprop.c
+++ b/src/textprop.c
@@ -2356,8 +2356,7 @@ inherits it if NONSTICKINESS is nil.  The `front-sticky' 
and
   /* Text properties `syntax-table'and `display' should be nonsticky
      by default.  */
   Vtext_property_default_nonsticky
-    = list2 (Fcons (intern_c_string ("syntax-table"), Qt),
-            Fcons (intern_c_string ("display"), Qt));
+    = list2 (Fcons (Qsyntax_table, Qt), Fcons (Qdisplay, Qt));
 
   staticpro (&interval_insert_behind_hooks);
   staticpro (&interval_insert_in_front_hooks);
diff --git a/src/w32fns.c b/src/w32fns.c
index 08000d8..1e685ad 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -3295,12 +3295,12 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, 
LPARAM lParam)
             field being reset to nil.  */
          f = x_window_to_frame (dpyinfo, hwnd);
          if (!(f && FRAME_LIVE_P (f)))
-           break;
+           goto dflt;
          w = XWINDOW (FRAME_SELECTED_WINDOW (f));
          /* Punt if someone changed the frame's selected window
             behind our back. */
          if (w != w32_system_caret_window)
-           break;
+           goto dflt;
 
          form.dwStyle = CFS_RECT;
          form.ptCurrentPos.x = w32_system_caret_x;
@@ -3318,17 +3318,19 @@ w32_wnd_proc (HWND hwnd, UINT msg, WPARAM wParam, 
LPARAM lParam)
 
          /* Punt if the window was deleted behind our back.  */
          if (!BUFFERP (w->contents))
-           break;
+           goto dflt;
 
          context = get_ime_context_fn (hwnd);
 
          if (!context)
-           break;
+           goto dflt;
 
          set_ime_composition_window_fn (context, &form);
          release_ime_context_fn (hwnd, context);
        }
-      break;
+      /* Pass WM_IME_STARTCOMPOSITION to DefWindowProc, so that the
+        composition window will actually be displayed.  */
+      goto dflt;
 
     case WM_IME_ENDCOMPOSITION:
       ignore_ime_char = 0;
diff --git a/src/w32font.c b/src/w32font.c
index 360ad3f..422f082 100644
--- a/src/w32font.c
+++ b/src/w32font.c
@@ -1072,11 +1072,11 @@ w32_enumfont_pattern_entity (Lisp_Object frame,
      truetype so that this information is not any worse than we could
      have obtained later.  */
   if (EQ (backend, Quniscribe) && (full_type & NTMFLAGS_OPENTYPE))
-    tem = intern ("opentype");
+    tem = Qopentype;
   else if (font_type & TRUETYPE_FONTTYPE)
     tem = intern ("truetype");
   else if (full_type & NTM_PS_OPENTYPE)
-    tem = intern ("postscript");
+    tem = Qpostscript;
   else if (full_type & NTM_TYPE1)
     tem = intern ("type1");
   else if (font_type & RASTER_FONTTYPE)
@@ -1875,10 +1875,10 @@ static Lisp_Object
 w32_to_fc_weight (int n)
 {
   if (n >= FW_EXTRABOLD) return intern ("black");
-  if (n >= FW_BOLD)      return intern ("bold");
+  if (n >= FW_BOLD)      return Qbold;
   if (n >= FW_SEMIBOLD)  return intern ("demibold");
   if (n >= FW_NORMAL)    return intern ("medium");
-  return intern ("light");
+  return Qlight;
 }
 
 /* Fill in all the available details of LOGFONT from FONT_SPEC.  */
diff --git a/src/w32inevt.c b/src/w32inevt.c
index e09903f..ea2db26 100644
--- a/src/w32inevt.c
+++ b/src/w32inevt.c
@@ -631,7 +631,7 @@ handle_file_notifications (struct input_event *hold_quit)
   if (notification_buffer_in_use)
     {
       DWORD info_size = notifications_size;
-      Lisp_Object cs = intern ("utf-16le");
+      Lisp_Object cs = Qutf_16le;
       Lisp_Object obj = w32_get_watch_object (notifications_desc);
 
       /* notifications_size could be zero when the buffer of
diff --git a/src/w32term.c b/src/w32term.c
index a9ed2a8..d415b13 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -3223,7 +3223,7 @@ queue_notifications (struct input_event *event, W32Msg 
*msg, struct frame *f,
   if (notification_buffer_in_use)
     {
       DWORD info_size = notifications_size;
-      Lisp_Object cs = intern ("utf-16le");
+      Lisp_Object cs = Qutf_16le;
       Lisp_Object obj = w32_get_watch_object (notifications_desc);
 
       /* notifications_size could be zero when the buffer of
diff --git a/src/xdisp.c b/src/xdisp.c
index 0808b02..0aa20b3 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -22729,7 +22729,7 @@ are the selected window and the WINDOW's buffer).  */)
   else
     {
       mode_line_string_list = Fnreverse (mode_line_string_list);
-      str = Fmapconcat (intern ("identity"), mode_line_string_list,
+      str = Fmapconcat (Qidentity, mode_line_string_list,
                        empty_unibyte_string);
     }
 
@@ -30729,8 +30729,7 @@ syms_of_xdisp (void)
 
   DEFSYM (Qinhibit_free_realized_faces, "inhibit-free-realized-faces");
 
-  list_of_error = list1 (list2 (intern_c_string ("error"),
-                               intern_c_string ("void-variable")));
+  list_of_error = list1 (list2 (Qerror, Qvoid_variable));
   staticpro (&list_of_error);
 
   /* Values of those variables at last redisplay are stored as
diff --git a/src/xfaces.c b/src/xfaces.c
index d0fe872..fcfdbc0 100644
--- a/src/xfaces.c
+++ b/src/xfaces.c
@@ -6187,7 +6187,7 @@ where R,G,B are numbers between 0 and 255 and name is an 
arbitrary string.  */)
   abspath = Fexpand_file_name (filename, Qnil);
 
   block_input ();
-  fp = emacs_fopen (SSDATA (abspath), "rt");
+  fp = emacs_fopen (SSDATA (abspath), "r" FOPEN_TEXT);
   if (fp)
     {
       char buf[512];
diff --git a/src/xfns.c b/src/xfns.c
index 629ac4b..80be6ac 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -5185,7 +5185,7 @@ x_create_tip_frame (struct x_display_info *dpyinfo,
     Lisp_Object disptype;
 
     if (FRAME_DISPLAY_INFO (f)->n_planes == 1)
-      disptype = intern ("mono");
+      disptype = Qmono;
     else if (FRAME_DISPLAY_INFO (f)->visual->class == GrayScale
              || FRAME_DISPLAY_INFO (f)->visual->class == StaticGray)
       disptype = intern ("grayscale");
@@ -6007,7 +6007,7 @@ nil, it defaults to the selected frame. */)
   GCPRO2 (font_param, font);
 
   XSETFONT (font, FRAME_FONT (f));
-  font_param = Ffont_get (font, intern (":name"));
+  font_param = Ffont_get (font, QCname);
   if (STRINGP (font_param))
     default_name = xlispstrdup (font_param);
   else
@@ -6194,6 +6194,7 @@ syms_of_xfns (void)
   DEFSYM (Qcompound_text, "compound-text");
   DEFSYM (Qcancel_timer, "cancel-timer");
   DEFSYM (Qfont_param, "font-parameter");
+  DEFSYM (Qmono, "mono");
 
   Fput (Qundefined_color, Qerror_conditions,
        listn (CONSTYPE_PURE, 2, Qundefined_color, Qerror));
diff --git a/src/xml.c b/src/xml.c
index e324177..a3f9239 100644
--- a/src/xml.c
+++ b/src/xml.c
@@ -237,8 +237,7 @@ parse_region (Lisp_Object start, Lisp_Object end, 
Lisp_Object base_url,
        if (node != NULL)
          result = make_dom (node);
       } else
-       result = Fcons (intern ("top"),
-                       Fcons (Qnil, Fnreverse (Fcons (r, result))));
+       result = Fcons (Qtop, Fcons (Qnil, Fnreverse (Fcons (r, result))));
 
       xmlFreeDoc (doc);
     }
diff --git a/test/ChangeLog b/test/ChangeLog
index 87425a6..7ba1496 100644
--- a/test/ChangeLog
+++ b/test/ChangeLog
@@ -1,3 +1,13 @@
+2015-02-24  Glenn Morris  <address@hidden>
+
+       * automated/f90.el (f90-test-bug-19809): New test.
+
+2015-02-22  Michael Albinus  <address@hidden>
+
+       * automated/tramp-tests.el (tramp-test17-insert-directory):
+       Suppress localized settings in order to have a proper check for
+       the summary line.
+
 2015-02-16  Stefan Monnier  <address@hidden>
 
        * automated/eieio-test-methodinvoke.el (make-instance): Add methods
diff --git a/test/automated/f90.el b/test/automated/f90.el
index c6bc41f..1cb2f03 100644
--- a/test/automated/f90.el
+++ b/test/automated/f90.el
@@ -173,4 +173,20 @@ end program prog")
     (f90-indent-subprogram)
     (should (= 0 (current-indentation)))))
 
+(ert-deftest f90-test-bug-19809 ()
+  "Test for http://debbugs.gnu.org/19809 ."
+  (with-temp-buffer
+    (f90-mode)
+    ;; The Fortran standard says that continued strings should have
+    ;; '&' at the start of continuation lines, but it seems gfortran
+    ;; allows them to be absent (albeit with a warning).
+    (insert "program prog
+  write (*,*), '&
+end program prog'
+end program prog")
+    (goto-char (point-min))
+    (f90-end-of-subprogram)
+    (should (= (point) (point-max)))))
+
+
 ;;; f90.el ends here
diff --git a/test/automated/tramp-tests.el b/test/automated/tramp-tests.el
index 2c4610c..3b72da8 100644
--- a/test/automated/tramp-tests.el
+++ b/test/automated/tramp-tests.el
@@ -927,7 +927,10 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
   (skip-unless (tramp--test-enabled))
 
   (let* ((tmp-name1 (tramp--test-make-temp-name))
-        (tmp-name2 (expand-file-name "foo" tmp-name1)))
+        (tmp-name2 (expand-file-name "foo" tmp-name1))
+        ;; We test for the summary line.  Keyword "total" could be localized.
+        (process-environment
+         (append '("LANG=C" "LANGUAGE=C" "LC_ALL=C") process-environment)))
     (unwind-protect
        (progn
          (make-directory tmp-name1)
diff --git a/test/automated/vc-tests.el b/test/automated/vc-tests.el
index e83eb85..4d9aefa 100644
--- a/test/automated/vc-tests.el
+++ b/test/automated/vc-tests.el
@@ -331,8 +331,8 @@ For backends which dont support it, `vc-not-supported' is 
signalled."
 
          (let ((tmp-name (expand-file-name "foo" default-directory)))
            ;; Check for initial state, should be nil until it's registered.
-            ;; Don't pass the backend explictly, otherwise some implementations
-            ;; return non-nil.
+            ;; Don't pass the backend explicitly, otherwise some
+            ;; implementations return non-nil.
            (should (null (vc-working-revision tmp-name)))
 
            ;; Write a new file.  Check state.
diff --git a/test/cedet/srecode-tests.el b/test/cedet/srecode-tests.el
index 423df72..f7529ec 100644
--- a/test/cedet/srecode-tests.el
+++ b/test/cedet/srecode-tests.el
@@ -272,7 +272,7 @@ Dump out the extracted dictionary."
              (not (semantic-tag-of-class-p fcn-in 'function)))
       (error "No tag of class 'function to insert comment for"))
 
-    (let ((lextok (semantic-documentation-comment-preceeding-tag fcn-in 'lex))
+    (let ((lextok (semantic-documentation-comment-preceding-tag fcn-in 'lex))
          )
 
       (when (not lextok)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]