* xfns.c (Fx_wm_set_size_hint): Use check_x_frame.  Adjust docstring.
Fix bug #1280 with non-ASCII keyboard input on MS-Windows.

 src/w32fns.c (w32_wnd_proc): Don't directly handle key chords
 including modifiers from toggle key, such as Scroll Lock, if the
 respective keys are treated as function keys, not as modifiers.
 This avoids destroying non-ASCII keyboard input when Scroll Lock
 is toggled ON.
* notifications.el (notifications-get-server-information-method):
New defconst.
(notifications-get-capabilities): Fix docstring.
(notifications-get-server-information): New defun.
Include Num Lock in test for modifier keys on MS-Windows.

 src/w32fns.c (modifier_set): Do not omit checking the Num Lock key.
A (hopefully) better fix for bug #1280.

 src/w32fns.c (modifier_set): Don't report modifiers from toggle key,
 such as Scroll Lock, if the respective keys are treated as
 function keys, not as modifiers.  This avoids destroying non-ASCII
 keyboard input when Scroll Lock is toggled ON.
Fix Num Lock handling related to bug #12806.

 src/w32fns.c (modifier_set): Don't include Num Lock in the reported
 modifiers.
* os.texi (Notifications): Update descriptions of
notifications-notify, notifications-close-notification and
notifications-get-capabilities according to latest code changes.
Add notifications-get-server-information.
* keyboard.c (event_to_kboard): Do not dereference
frame_or_window field of SELECTION_REQUEST_EVENT
and SELECTION_CLEAR_EVENT events (Bug#12814).
* xterm.h (struct selection_input_event): Adjust comment.
* lisp/emacs-lisp/gv.el (gv-ref, gv-deref): New function and macro.
Shrink struct vectorlike_header to the only size field.
* lisp.h (enum pvec_type): Avoid explicit enum member values.
Adjust comment.
(enum More_Lisp_Bits): Change PSEUDOVECTOR_SIZE_BITS and
PVEC_TYPE_MASK to arrange new bitfield in the vector header.
(PSEUDOVECTOR_REST_BITS, PSEUDOVECTOR_REST_MASK): New members.
(PSEUDOVECTOR_AREA_BITS): New member used to extract subtype
information from the vector header.  Adjust comment.
(XSETPVECTYPE, XSETPVECTYPESIZE, XSETTYPED_PSEUDOVECTOR)
(PSEUDOVECTOR_TYPEP, DEFUN): Adjust to match new vector header
layout.
(XSETSUBR, SUBRP): Adjust to match new Lisp_Subr layout.
(struct vectorlike_header): Remove next member.  Adjust comment.
(struct Lisp_Subr): Add convenient header.  Adjust comment.
(allocate_pseudovector): Adjust prototype.
* alloc.c (mark_glyph_matrix, mark_face_cache, allocate_string)
(sweep_string, lisp_malloc): Remove useless prototypes.
(enum mem_type): Adjust comment.
(NEXT_IN_FREE_LIST): New macro.
(SETUP_ON_FREE_LIST): Adjust XSETPVECTYPESIZE usage.
(Fmake_bool_vector): Likewise.
(struct large_vector): New type to represent allocation unit for
the vectors with the memory footprint more than VBLOOCK_BYTES_MAX.
(large_vectors): Change type to struct large_vector.
(allocate_vector_from_block): Simplify.
(PSEUDOVECTOR_NBYTES): Replace with...
(vector_nbytes): ...new function.  Adjust users.
(sweep_vectors): Adjust processing of large vectors.
(allocate_vectorlike): Likewise.
(allocate_pseudovector): Change type of 3rd arg to enum pvec_type.
Add easserts.  Adjust XSETPVECTYPESIZE usage.
(allocate_buffer): Use BUFFER_PVEC_INIT.
(live_vector_p): Adjust to match large vector.
* buffer.c (init_buffer_once): Use BUFFER_PVEC_INIT.
* buffer.h (struct buffer): Add next member.
(BUFFER_LISP_SIZE, BUFFER_REST_SIZE, BUFFER_PVEC_INIT):
New macros.
(FOR_EACH_BUFFER): Adjust to match struct buffer change.
* fns.c (internal_equal): Adjust to match enum pvec_type change.
(copy_hash_table): Adjust to match vector header change.
* lread.c (defsubr): Use XSETPVECTYPE.
* .gdbinit (xpr, xbacktrace): Adjust to match vector header change.
(xvectype): Likewise.  Print PVEC_NORMAL_VECTOR for regular vectors.
(xvecsize): New command.
* lisp/emacs-lisp/gv.el (gv-ref, gv-deref): New function and macro.
* lisp/emacs-lisp/gv.el (gv-deref): Move setter declaration, to fix bootstrap.
* lisp/emacs-lisp/bytecomp.el (byte-compile-initial-macro-environment):
Byte-compile *before* eval in eval-and-compile.
(byte-compile-log-warning): Remove redundant inhibit-read-only.
(byte-compile-file-form-autoload): Don't hide actual definition.
(byte-compile-maybe-guarded): Accept `functionp' as well.
* lisp/env.el (env--substitute-vars-regexp): New const.
(substitute-env-vars): Use it.  Add `only-defined' arg.
* lisp/net/tramp.el (tramp-replace-environment-variables): Use it.
* lisp/progmodes/perl-mode.el (perl-prettify-symbols): New defcustom.
(perl--prettify-symbols-alist): New const.
(perl--font-lock-compose-symbol, perl--font-lock-symbols-keywords): New funs.
(perl-font-lock-keywords-2): Use them.
(perl-electric-noindent-p): New function.
(perl-mode): Use it to set up electric-indent-mode.
(perl-electric-terminator, perl-indent-command): Mark obsolete.
(perl-mode-map): Remove bindings for them.
(perl-imenu-generic-expression, perl-outline-level):
Match functions&packages in column>0.
* perl-mode.el: Add coding cookie.
Add Rakefile in auto-mode-list for ruby-mode

* progmodes/ruby-mode.el (auto-mode-alist): Add Rakefile in
  `auto-mode-alist' (Bug#12835).
More fixes for bug #12806.

 src/w32fns.c (modifier_set): Fix handling of Scroll Lock when the
 value of w32-scroll-lock-modifier is neither nil nor one of the
 known key modifiers.