1. 19 Jan, 2019 2 commits
    • Eli Zaretskii's avatar
      Improve 'pdumper-stats' and its documentation · 8bb5939e
      Eli Zaretskii authored
      * src/pdumper.c (Fpdumper_stats): Improve formatting and
      wording of the doc string.  Decode the pdump file name and
      expand-file-name it.
      
      * doc/lispref/internals.texi (Building Emacs): Document
      'pdumper-stats'.
      8bb5939e
    • Eli Zaretskii's avatar
      Unbreak the macOS NS build · 436c225f
      Eli Zaretskii authored
      * src/xdisp.c (expose_window_tree): Declare and define 'f' on
      NS as well.  Reported by Herbert J. Skuhra <herbert@gojira.at>.
      436c225f
  2. 18 Jan, 2019 3 commits
    • Paul Eggert's avatar
      Port to platforms where NULL is a pointer · 7818bcdd
      Paul Eggert authored
      * src/image.c (x_create_x_image_and_pixmap):
      The Picture type is an integer, not a pointer.
      Come to think of it, Picture is really XID, and as
      far as I can tell, all-bits-one is the invalid XID,
      not all-bits-zero.  However that is a bigger issue;
      for now, this patch just unbreaks the build.
      7818bcdd
    • Eli Zaretskii's avatar
      Improve documentation of portable dumping · 6bac9ea1
      Eli Zaretskii authored
      * src/pdumper.c (Fdump_emacs_portable): Improve the doc string
      and the error messages.
      
      * doc/lispref/internals.texi (Building Emacs): Document
      portable dumping and the 'dump-emacs-portable' function.
      6bac9ea1
    • Eli Zaretskii's avatar
      Clean up memory allocation and unexec support on MS-Windows · 5e3b0f52
      Eli Zaretskii authored
      * src/w32heap.c (report_temacs_memory_usage): Condition on
      !CANNOT_DUMP, in addition to ENABLE_CHECKING.
      (init_heap): Accept an argument, which tells us what heap
      allocation method to use.
      (DUMPED_HEAP_SIZE) [CANNOT_DUMP]: Define to a small value, as
      we don't use dumped_data[] in this case.
      * src/w32heap.h (init_heap): Adjust prototype.
      <using_dynamic_heap>: Remove declaration.
      * src/emacs.c (main) [WINDOWSNT]: Determine heap allocation
      method based on whether we are in temacs and whether unexec
      will be used to dump Emacs.  Pass the heap allocation method
      to init_heap, which is now called after parsing the
      --temacs=METHOD option.
      * src/unexw32.c (unexec): Don't fiddle with using_dynamic_heap.
      <using_dynamic_heap>: Remove definition.
      * src/w32proc.c (malloc_before_init, realloc_before_init)
      (free_before_init): New functions, to catch memory allocation
      before heap allocation method is set up.
      5e3b0f52
  3. 17 Jan, 2019 5 commits
    • Alan Third's avatar
      Be more specific with XRender bit-depths (bug#34051) · 03b8903e
      Alan Third authored
      * src/image.c (x_create_x_image_and_pixmap): Fail gracefully if a bit
      depth is requested that XRender doesn't support.
      03b8903e
    • Glenn Morris's avatar
      Fix --enable-profiling builds (bug#34099) · 8ca414de
      Glenn Morris authored
      * src/profiler.c (syms_of_profiler_for_pdumper):
      Only set cpu_log if CPU profiling is enabled.
      8ca414de
    • Martin Rudalics's avatar
      Expand spectrum of window change functions · 0aece3e1
      Martin Rudalics authored
      * src/window.c (run_window_change_functions): Run window
      change functions for Qwindow_state_change_functions.
      (resize_frame_windows): Set frame's window_change slot when
      single-window frames change size.
      (Qwindow_state_change_functions): New symbol.
      (Vwindow_state_change_functions): New Lisp variable.
      * doc/lispref/windows.texi (Selecting Windows): Mention
      'window-selection/state-change-functions' and add reference to
      Window Hooks.
      (Window Hooks): Document 'window-state-change-functions'.
      * etc/NEWS: Mention new hook 'window-state-change-functions'.
      0aece3e1
    • Paul Eggert's avatar
      Port pdumper to older GNU/Linux · 978cf88b
      Paul Eggert authored
      Problem reported by Colin Baxter in:
      https://lists.gnu.org/r/emacs-devel/2019-01/msg00321.html
      * src/alloc.c (my_heap_start): Also define if
      GNU_LINUX && CANNOT_DUMP && DOUG_LEA_MALLOC.
      978cf88b
    • Daniel Colascione's avatar
      Fix segfault in profiler after pdump load · 191a5568
      Daniel Colascione authored
      Move initialization of the profiler's hash test to static
      initialization from the syms function so that pdumper doesn't need to
      bother capturing it in any special way.
      
      * src/profiler.c (cmpfn_profiler, hashfn_profiler):
      forward declare.
      (hashtest_profiler): statically initialize.
      (syms_of_profiler): remove dynamic initialization of
      hashtest_profiler.
      191a5568
  4. 16 Jan, 2019 7 commits
    • Daniel Colascione's avatar
      3fd369be
    • Daniel Colascione's avatar
      Fix crash in charset detection after pdumper load · ece563e8
      Daniel Colascione authored
      * src/coding.c:
      (reset_coding_after_pdumper_load): new function re-init character
      classes after pdumper load.
      (syms_of_coding): Call it.
      ece563e8
    • Andy Moreton's avatar
      Avoid compilation warnings in MS-Windows build · 8bf51c38
      Andy Moreton authored
      * src/pdumper.c (dump_cold_bignum):
      * src/emacs.c(load_pdump) [WINDOWSNT]: Avoid compiler warnings
      due to 64-bit vs 32-bit data type mismatches.
      8bf51c38
    • Eli Zaretskii's avatar
      Improve documentation of pdumper; minor code cleanup · ebd174e2
      Eli Zaretskii authored
      * src/emacs.c (usage_message): Add the --dump-file option.
      (string_starts_with_p, find_argument): Functions removed; use
      'argmatch' instead.
      (PDUMP_FILE_ARG): Macro removed; use literal strings instead,
      as with other command-line options.  Use HAVE_PDUMPER for cpp
      conditionals which used PDUMP_FILE_ARG.
      (load_pdump, main): Use 'argmatch' for "--dump-file" and
      "--temacs" arguments, thus supporting the "-dump-file" and
      "-temacs" variants, for consistency with other options.
      (main): Remove the extra fatal error for using --dump-file in
      unexec'ed Emacs: load_pdump does that anyway.
      (standard_args): Add --dump-file and --temacs, with
      appropriate priorities.
      
      * etc/NEWS: Expand on the pdumper support.
      
      * doc/emacs/cmdargs.texi (Initial Options): Document the
      '--dump-file' command-line option.
      ebd174e2
    • Eli Zaretskii's avatar
      Fix minor glitch with producing 'emacs' executable · e96a54eb
      Eli Zaretskii authored
      * src/Makefile.in (LC_ALL) [!DUMPING]: Don't overwrite
      previous emacs-X.Y.Z executables with new ones.
      e96a54eb
    • Glenn Morris's avatar
      ; Copyright fixes for pdumper files · 655badc3
      Glenn Morris authored
      I wonder if the copyright years for lib-src/make-fingerprint.c are correct.
      655badc3
    • Paul Eggert's avatar
      Fix unlikely races with GnuTLS, datagrams · e87e6a24
      Paul Eggert authored
      Retry some calls if interrupted at inopportune times.
      These were found by code inspection.
      * src/gnutls.c (gnutls_try_handshake): Simplify by using
      new emacs_gnutls_handle_error API.
      (emacs_gnutls_write): Remove GNUTLS_E_AGAIN hack since
      emacs_gnutls_handle_error now does that.
      Use emacs_gnutls_handle_error only on errors.
      (emacs_gnutls_read): Retry if gnutls_record_recv returns
      GNUTLS_E_INTERRUPTED, to be consistent with emacs_read.
      (emacs_gnutls_handle_error): Return 0 on fatal errors,
      -1 (setting errno) on ordinary errors, to simplify callers.
      Assume that ERR is negative, since it always is now.
      Map non-fatal GnuTLS errors to errno values as best we can.
      * src/process.c (read_process_output) [DATAGRAM_SOCKETS]:
      Retry recvfrom if it is interrupted, to be consistent with
      how things are handled when not a datagram channel.
      (send_process) [DATAGRAM_SOCEKTS]: If sendto is interrupted,
      process pending signals and retry it, to be consistent with
      how things are handled when not a datagram channel.
      e87e6a24
  5. 15 Jan, 2019 2 commits
    • Daniel Colascione's avatar
      Add portable dumper · d12e5d00
      Daniel Colascione authored
      Add a new portable dumper as an alternative to unexec.  Use it by default.
      
      * src/dmpstruct.awk: New file.
      * src/doc.c (get_doc_string): use will_dump_p().
      * src/editfns.c (styled_format): silence compiler warning
      with UNINIT.
      * src/emacs-module.c (syms_of_module): staticpro ltv_mark.
      * src/emacs.c (gflags): new variable.
      (init_cmdargs): unwrap
      (string_starts_with_p, find_argument, dump_error_to_string)
      (load_pdump): new functions.
      (main): detect pdumper and --temacs invocation; actually load
      portable dump when detected; set gflags as appropriate; changes to
      init functions throughout to avoid passing explicit
      'initialized' argument.
      * src/eval.c (inhibit_lisp_code): remove unused variable.
      (init_eval_once_for_pdumper): new function.
      (init_eval_once): call it.
      * src/filelock.c: CANNOT_DUMP -> will_dump_p()
      * src/fingerprint-dummy.c: new file
      * src/fingerprint.h: new file
      * src/fns.c: CANNOT_DUMP -> will_dump_p(), etc.
      (weak_hash_tables): remove
      (hashfn_equal, hashfn_eql): un-staticify
      (make_hash_table): set new 'next_weak' hash table field; drop
      global weak_hash_tables logic.
      (copy_hash_table): drop global weak_hash_tables logic.
      (hash_table_rehash): new function.
      (hash_lookup, hash_put, hash_remove_from_table, hash_clear):
      rehash if needed.
      (sweep_weak_table): un-staticify; explain logic; bool-ify.
      (sweep_weak_hash_tables): remove function.
      * src/font.c (syms_of_font): remember pdumper stuff.
      * src/fontset.c (syms_of_fontset): remember pdumper stuff.
      * src/frame.c (make_initial_frame): don't reset Vframe_list.
      (init_frame_once_for_pdumper, init_frame_once): new functions.
      (syms_of_frame): remove redundant staticpro.
      * src/fringe.c (init_fringe_once_for_pdumper): new functin.
      (init_fringe_once): call it.
      * src/ftcrfont.c (syms_of_ftcrfont_for_pdumper): new function.
      (syms_of_ftcrfont): call it.
      * src/ftfont.c (syms_of_ftfont_for_pdumper): new function.
      (syms_of_ftfont): call it.
      * src/ftxont.c (syms_of_ftxfont_for_pdumper): new function.
      (syms_of_ftxfont): call it.
      * src/gmalloc.c: adjust for pdumper througout
      (DUMPED): remove weird custom dumped indicator.
      * src/gnutls.c (syms_of_gnutls): pdumper note for
      gnutls_global_initialized.
      * src/image.c (syms_of_image): add pdumper comment,
      initializer note.
      * src/insdel.c (prepare_to_modify_buffer_1): account
      for buffer contents possibly being in dump image.
      * src/keyboard.c (syms_of_keyboard_for_pdumper): new function.
      (syms_of_keyboard): staticpro more; call pdumper syms function.
      * src/lisp.h: add comments throughout
      (gflags): declare.
      (will_dump_p, will_bootstrap_p, will_dump_with_pdumper_p)
      (dumped_with_pdumper_p, will_dump_with_unexec_p)
      (dumped_with_unexec_p, definitely_will_not_unexec_p): new
      functions.
      (POWER_OF_2, ROUNDUP): move macros.
      (PSEUDOVECTOR_TYPE, PSEUDOVECTOR_TYPEP): take vectorlike header
      pointer instead of vector; constify.
      (Lisp_Hash_Table): add comment about need to rehash on access; add
      comment for next_weak.
      (HASH_KEY, HASH_VALUE, HASH_HASH, HASH_TABLE_SIZE): const-ify.
      (hash_table_rehash): declare.
      (hash_rehash_needed_p, hash_rehash_if_needed): new functions.
      (finalizers, doomed_finalizers): declare extern.
      (SUBR_SECTION_ATTRIBUTE): new macro.
      (staticvec, staticidx): un-static-ify.
      (sweep_weak_hash_tables): remove declaration.
      (sweep_weak_table): declare.
      (hashfn_eql, hashfn_equal): declare.
      (number_finalizers_run): new variable.
      (Vdead): externify when ENABLE_CHECKING.
      (gc_root_type): new enumeration.
      (gc_root_visitor): new struct.
      (visit_static_gc_roots): declare.
      (vectorlike_nbytes): declare.
      (vector_nbytes): define as trivial inline function wrapper for
      vectorlike_nbytes.
      (init_obarray_once): change signature.
      (primary_thread): extern-ify.
      (init_buffer): change signature.
      (init_frame_once): declare.
      * src/lread.c (readevalloop): adjust for new dumped predicates.
      (init_obarray_once): new function.
      (ndefsubr): new variable.
      (defsubr): increment it.
      (load_path_check): adjust for pdumper.
      (load_path_default): use pdumper functions; adjust for
      dump search.
      * src/macfont.m (macfont_init_font_change_handler): avoid
      shadowing global.
      (syms_of_macfont_for_pdumper): new function.
      (syms_of_macfont): call it.
      * src/menu.c (syms_of_menu): staticpro more stuff.
      * src/minibuf.c (Ftry_completion): rehash if needed.
      (init_minibuf_once_for_pdumper): new function.
      (init_minibuf_once): call it.
      * src/nsfont.m (syms_of_nsfns): staticpro more.
      * src/nsfont.m (syms_of_nsfont_for_pdumper): new function.
      (syms_of_nsfont): call it.
      * src/nsterm.m (syms_of_nsfont): remember pdumper stuff.
      * src/pdumper.c: new file.
      * src/pdumper.h: new file.
      * src/process.c (init_process_emacs): use new pdumper functions
      instead of CANNOT_DUMP.
      * src/profiler.c (syms_of_profiler_for_pdumper): new function.
      (syms_of_profiler_for_pdumper): call it.
      * src/search.c (syms_of_search_for_pdumper): new function.
      (syms_of_search_for_pdumper): call it.
      * src/sheap.c (bss_sbrk_did_unexec): remove.
      * src/sheap.h (bss_sbrk_did_unexec): remove.
      * src/syntax.c (syms_of_syntax): don't redundantly staticpro
      re_match_object.
      * src/sysdep.c: use will_dump_with_unexec_p() instead of bss
      hack thing.
      * src/syssignals.h (init_sigsegv): declare.
      * src/systime.h (init_timefns): remove bool from signature.
      * src/textprop.c (syms_of_textprop): move staticpro.
      * src/thread.c (main_thread_p): constify.
      * src/thread.h (main_thread_p): constify.
      * src/timefns.c (init_timefns): remove bool from signature.
      (syms_of_timefns_for_pdumper): new function.
      (syms_of_timefns): call it.
      * src/w32.c: rearrange code.
      * src/w32.h (w32_relocate): declare.
      * src/w32fns.c (syms_of_w32fns): add pdumper note.
      * src/w32font.c (syms_of_w32font_for_pdumper): new function.
      (syms_of_w32font): call it.
      * src/w32heap.c (using_dynamic_heap): new variable.
      (init_heap): use it.
      * src/w32menu.c (syms_of_w32menu): add pdumper note.
      * src/w32proc.c
      (ctrl_c_handler, mainCRTStartup, _start, open_input_file)
      (rva_to_section, close_file_data): move here.
      * src/w32uniscribe.c (syms_of_w32uniscribe_for_pdumper):
      new function.
      (syms_of_w32uniscribe): call it.
      * src/window.c (init_window_once_for_pdumper): new function.
      (init_window_once): call it; staticpro more stuff.
      * src/xfont.c (syms_of_xfont_for_pdumper): new function.
      (syms_of_xfont): call it.
      * src/xftfont.c (syms_of_xftfont_for_pdumper): new function.
      (syms_of_xftfont): call it.
      * src/xmenu.c (syms_of_xmenu_for_pdumper): new function.
      (syms_of_xmenu): call it.
      * src/xselect.c (syms_of_xselect_for_pdumper): new function.
      (syms_of_xselect): call it.
      * src/xsettings.c (syms_of_xsettings): add more pdumper notes.
      * src/term.c (syms_of_xterm): add pdumper note.
      
      * src/dispnew.c (init_faces_initial): new function.
      (init_display_interactive): rename from init_display; use
      will_dump_p instead of !initialized.  Initialize faces early for
      pdumper if needed.
      (init_display): new function.
      (syms_of_display_for_pdumper): new function.
      (syms_of_display): call it.
      
      * src/dbusbind.c (syms_of_dbusbind): Add TODO for bus reset
      on pdumper load.
      
      * src/data.c (Fdefalias): Use will_dump_p
      instead of Vpurify_flag.
      (Fmake_variable_buffer_local): silence compiler warning with -Og
      by making valcontents UNINIT.
      (arith_driver): silence compiler warning with UNINIT.
      
      * src/conf_post.h (ATTRIBUTE_SECTION): new macro.
      
      * src/composite.c (composition_gstring_put_cache): rehash hash
      table if needed.
      
      * src/coding.c (init_coding_once, syms_of_coding): remember
      pdumper stuff.
      
      * src/charset.h (charset_table_size, charset_table_user): declare.
      
      * src/charset.c (charset_table_used, charset_table_size): un-static.
      (init_charset_oncem, syms_of_charset): remember pdumper stuff.
      
      * src/category.c (category_table_version): remove obsolete
      variable.
      
      * src/callint.c (syms_of_callint): staticpro 'preserved_fns'
      (init_callproc): use will_dump_p instead of !CANNOT_DUMP.
      
      * src/bytecode.c (exec_byte_code): rehash table tables if needed
      
      * src/buffer.c (alloc_buffer_text, free_buffer_text): account for
      pdumper
      (init_buffer_once): add TODO; remember stuff for pdumper.
      (init_buffer): don't take initialized argument; adjust
      for pdumper.
      
      * src/atimer.c (init_atimer): initialize subr only if
      !initialized.
      
      * src/alloc.c: (vector_marked_p, set_vector_marked)
      (vectorlike_marked_p, set_vectorlike_marked, cons_marked_p)
      (set_cons_marked, string_marked_p, set_string_marked)
      (symbol_marked_p, set_symbol_marked, interval_marked_p)
      (set_interval_marked): new accessor routines.  Use them
      instead of raw GC access throughout.
      (Vdead): make non-static when ENABLE_CHECKING.
      (vectorlike_nbytes): rename of 'vector_nbytes'; take a vectorlike
      header as input instead of a vector.
      (number_finalizers_run): new internal C variable.
      (mark_maybe_object): check for pdumper objects.
      (valid_pointer_p): don't be gratuitously inefficient under rr(1).
      (make_pure_c_string): add support for size_byte = -2 mode
      indicating that string data points into Emacs image rodata.
      (visit_vectorlike_root): visits GC roots embedded in
      vectorlike objects.
      (visit_buffer_root): visits GC roots embedded in
      our totally-not-a-buffer buffer global objects.
      (visit_static_gc_roots): visit GC roots in the Emacs data section.
      (mark_object_root_visitor): root callback used for conventional GC
      marking
      (weak_hash_tables): new internal variable for tracking found weak
      hash tables during GC.
      (mark_and_sweep_weak_table_contents): new weak hash table marking.
      (garbage_collect_1): use new GC root visitor machinery.
      (mark_vectorlike): accept a vectorlike_header instead of a
      Lisp_Vector.
      (mark_frame, mark_window, mark_hash_table): new functions.
      (mark_object): initialize 'm'; check for pdumper objects and use
      new mark-bit accessors throughout.  Remove some object-specific
      marking code and move to helper functions above.
      (survives_gc_p): check for pdumper objects.
      (gc-sweep): clear pdumper mark bits.
      (init_alloc_once_for_pdumper): new helper function for early init
      called both during normal init and pdumper load.
      (init_alloc_once): pdumper integration.
      
      * src/Makefile.in: Rewrite dumping for pdumper; add pdumper.o;
      invoke temacs with --temacs command line option; build dmpstruct.h
      from dmpstruct.awk; stop relying on CANNOT_DUMP; clean up pdumper
      intermediate files during build.
      
      * nextstep/Makefile.in: build emacs.pdmp into NS packages
      
      * lisp/startup.el: account for new '--temacs' and '--dump-file'
      command line option.
      
      * lisp/loadup.el: rewrite early init to account for pdumper; use
      injected 'dump-mode' variable (set via the new '--temacs' option)
      instead of parsing command line.
      
      * lisp/cus-start.el: Check 'dump-mode' instead of 'purify-flag',
      since the new 'dump-mode'
      
      * lib-src/make-fingerprint.c: new program
      
      * lib-src/Makefile.in: built make-fingerprint utility program
      
      * configure.ac: Add --with-pdumper toggle to control pdumper
      support; add --with-unexec toggle to control unexec support.
      Add --with-dumping option to control which dumping strategy we use
      by default.  Adjust for pdumper throughout.  Check for
      posix_madvise.
      
      * Makefile.in: Add @DUMPING@ substitution; add pdumper mode.
      
      * .gitignore: Add make-fingerprint, temacs.in, fingerprint.c,
      dmpstruct.h, and pdumper dump files.
      d12e5d00
    • Alan Third's avatar
      Prevent redrawing if frame is garbaged · c9f6f868
      Alan Third authored
      * src/nsterm.m ([EmacsView viewWillDraw]): Cancel drawing if the frame
      has been garbaged.
      * src/xdisp.c (expose_window_tree, expose_frame): Remove NS only
      exceptions.
      c9f6f868
  6. 14 Jan, 2019 1 commit
    • Eli Zaretskii's avatar
      Attempt to fix hangs on MS-Windows due to C-g · 00ba2267
      Eli Zaretskii authored
      * src/w32uniscribe.c (uniscribe_otf_capability): Set
      inhibit-quit around calls to otf_features, because the latter
      cons Lisp data structures while we are in a critical section.
      * src/xdisp.c (ALLOCATE_HDC) [HAVE_NTGUI]: Set inhibit-quit.
      (RELEASE_HDC) [HAVE_NTGUI]: Restore inhibit-quit.
      (OPTIONAL_HDC, DECLARE_HDC): Remove macros, their job is now
      done by ALLOCATE_HDC and by a single #ifdef.
      (draw_glyphs): Adapt to the above changes in macros.
      (Bug#34059)
      00ba2267
  7. 13 Jan, 2019 2 commits
    • Paul Eggert's avatar
      Fix translation-region bug with MAX_CHAR · 1a722e88
      Paul Eggert authored
      Also, clean up the code a bit.
      Actually I discovered the bug while cleaning up the code.
      * src/editfns.c (Fsubst_char_in_region)
      (Ftranslate_region_internal): Use bool for booleans.
      (Ftranslate_region_internal): Fix off-by-1 bug when a
      translation table translates the maximum char.  Assume C99
      decl-after-statement, similar minor cleanups.
      * test/src/editfns-tests.el (test-translate-region-internal):
      New test.
      1a722e88
    • Paul Eggert's avatar
      Minor overflow fix in translate-region-internal · 800d3815
      Paul Eggert authored
      * src/editfns.c (Ftranslate_region_internal):
      Use ptrdiff_t, not int, for a count that might exceed INT_MAX.
      800d3815
  8. 12 Jan, 2019 1 commit
  9. 11 Jan, 2019 2 commits
    • Martin Rudalics's avatar
      Run window change functions during redisplay · e567ac14
      Martin Rudalics authored
      * doc/lispref/windows.texi (Window Sizes): Move (and rename)
      descriptions of 'window-pixel-height-before-size-change' and
      'window-pixel-width-before-size-change' to Window Hooks
      section.
      (Window Configurations): Remove warning against use of
      'save-window-excursion' in 'window-size-change-functions'.
      (Window Hooks): Rewrite section according to redesign of
      window change functions.
      * lisp/erc/erc-track.el (erc-window-configuration-change)
      (erc-modified-channels-update): Call latter directly from
      'window-configuration-change-hook' instead via
      'post-command-hook'.
      * lisp/frame.el (frame-size-changed-p): Change nomenclature
      in let bindings.
      * lisp/net/rcirc.el (rcirc-window-configuration-change)
      (rcirc-window-configuration-change-1): Call latter directly
      from 'window-configuration-change-hook' instead via
      'post-command-hook'.
      * lisp/window.el (window-pixel-width-before-size-change)
      (window-pixel-height-before-size-change): Defalias.
      (window--resize-mini-window, window-resize)
      (adjust-window-trailing-edge, delete-window)
      (delete-other-windows, balance-windows): Don't run
      'window-configuration-change-hook' any more from here.
      (split-window): Don't run 'window-configuration-change-hook'
      from here.  'run-window-scroll-functions' from here.
      (window--adjust-process-windows): Run from
      'window-configuration-change-hook' only.
      * src/frame.c (old_selected_frame): New Lisp variable.
      (make_frame): Initialize frame's change_stamp slot.
      (Fold_selected_frame): New function.
      * src/frame.h (struct frame): New slots old_selected_window,
      window_change, change_stamp and number_of_windows.
      (fset_old_selected_window): New inlined function.
      (FRAME_WINDOW_CHANGE, FRAME_OLD_SELECTED_WINDOW): New macros.
      * src/window.c (old_selected_window): New Lisp variable.
      (wset_old_buffer): New inlined function.
      (Fframe_old_selected_window, Fold_selected_window)
      (Fwindow_old_buffer): New functions.
      (Fwindow_old_pixel_width, Fwindow_old_pixel_height): Rename
      from Fwindow_pixel_width_before_size_change and
      Fwindow_pixel_height_before_size_change.  Update doc-strings.
      (Fwindow_old_body_pixel_width, Fwindow_old_body_pixel_height):
      New functions.
      (Fdelete_other_windows_internal): Set frame's window_change
      slot instead of running 'window-configuration-change-hook'.
      (Frun_window_configuration_change_hook): In doc-string tell
      that this function is no more needed.
      (Frun_window_scroll_functions): Amend doc-string.  Run with
      window's buffer current.
      (window_sub_list, window_change_record_windows)
      (window_change_record_frame, window_change_record)
      (run_window_change_functions_1, run_window_change_functions):
      New functions.
      (set_window_buffer): Set frame's window_change slot instead of
      running 'window-configuration-change-hook'.
      (make_window): Don't initialize pixel_width_before_size_change
      and pixel_height_before_size_change slots.
      (window_resize_apply, Fdelete_window_internal): Set frame's
      window_change slot.
      (Fsplit_window_internal): Set frame's window_change slot.
      Don't run 'window-scroll-functions' from here.
      * src/window.h (struct window): New slots old_buffer,
      change_stamp, old_pixel_width (renamed from
      pixel_width_before_size_change), old_pixel_height (renamed
      from pixel_height_before_size_change), old_body_pixel_width
      and old_body_pixel_height.
      * src/xdisp.c (init_iterator): Set frame's window_change slot
      when the body height or width changes.
      (prepare_menu_bars): Don't run_window_size_change_functions.
      (redisplay_internal): Don't run_window_size_change_functions,
      run_window_change_functions instead.
      e567ac14
    • Paul Eggert's avatar
      List lengths are always fixnums now · 470082de
      Paul Eggert authored
      Without this patch, it was theoretically possible for a list
      length to be a bignum, which means that safe-length could
      signal an error (due to generating a too-large bignum) contrary
      to its documentation.  Fix things to remove the theoretical
      possibility, so that list lengths are always fixnums (and so
      that list lenghts are always ptrdiff_t values too, since that
      is assumed internally anyway).
      * src/alloc.c (Fcons): Do not allocate so many conses that
      a list length won’t fit into ptrdiff_t or into fixnum.
      This matters only on weird platforms; on typical platforms,
      list lengths always fit anyway.
      * src/fns.c (list_length, Fsafe_length, proper-list-p):
      Remove integer overflow checks that are no longer needed.
      470082de
  10. 10 Jan, 2019 3 commits
    • Paul Eggert's avatar
      Minor tweaks to HAVE_NATIVE_SCALING code · 9609db9d
      Paul Eggert authored
      This mostly just reindents.
      * src/image.c (x_set_image_size): Always define, but to a no-op
      if !HAVE_NATIVE_SCALING, to avoid an #ifdef elsewhere.
      (x_create_x_image_and_pixmap): Move decl to avoid an #ifdef.
      (image_create_x_image_and_pixmap): Move #ifdef outside of call.
      * src/xterm.c (x_composite_image): Avoid ‘else #endif’.
      9609db9d
    • Alan Third's avatar
      Add native image scaling (bug#33587) · a1b7a3f2
      Alan Third authored
      * configure.ac: Test for XRender outside of xft checks.
      * src/Makefile.in (XRENDER_LIBS): List XRender libs separately from
      xft libs.
      * lisp/image.el (image--get-imagemagick-and-warn): Allow resizing if
      native scaling is available.
      * src/dispextern.h: Add XRender and image scaling stuff.
      (struct image): Add XRender Pictures.
      * src/image.c (x_create_bitmap_mask):
      (image_create_x_image_and_pixmap): Handle XRender Picture.
      (scale_image_size):
      (compute_image_size): Make available when any form of scaling is
      enabled.
      (x_set_image_size): New function.
      (lookup_image): Set image size.
      (x_create_x_image_and_pixmap): Create XRender Picture when necessary.
      (x_put_x_image): Handle the case where desired size != actual size.
      (free_image): Free XRender Pictures.
      (Fimage_scaling_p): New function.
      (syms_of_image): Add image-scaling-p.
      * src/nsimage.m (ns_load_image): Remove NS specific resizing.
      ([EmacsImage setSizeFromSpec:]): Remove method.
      (ns_image_set_size): New function.
      * src/nsterm.m (ns_draw_fringe_bitmap): Cocoa and GNUstep both have
      the same compositing functions, so remove unnecessary difference.
      * src/xterm.c (x_composite_image): New function.
      (x_draw_image_foreground): Use new x_composite_image function.
      * doc/lispref/display.texi (Image Descriptors): Document
      image-scaling-p and add resizing descriptors.
      (ImageMagick Images): Remove resizing descriptors.
      a1b7a3f2
    • Alan Third's avatar
      Fix drag and drop behaviour on NS (bug#30929) · c342b263
      Alan Third authored
      * doc/emacs/macos.texi (Mac / GNUstep Events): Describe the new drag
      and drop behaviour.
      * lisp/term/ns-win.el (ns-drag-n-drop): Handle the new event format.
      (ns-drag-n-drop-other-frame):
      (ns-drag-n-drop-as-text):
      (ns-drag-n-drop-as-text-other-frame): Remove functions and key
      bindings.
      * src/nsterm.m ([EmacsView performDragOperation:]): Send Emacs event
      in new format without setting any modifiers.
      c342b263
  11. 09 Jan, 2019 1 commit
    • Paul Eggert's avatar
      Use shortcuts for Flength · a8465033
      Paul Eggert authored
      When calculating the length of a Lisp object whose type is
      known, use a specialized length operation on it to save a bit
      of runtime overhead.
      * src/callint.c (Fcall_interactively):
      * src/minibuf.c (read_minibuf_unwind):
      Use ASIZE rather than Flength on values that must be vectors.
      * src/charset.c (Fsort_charsets):
      * src/coding.c (detect_coding_sjis):
      (Fdefine_coding_system_internal):
      * src/data.c (wrong_choice):
      * src/eval.c (Flet, eval_sub, Fapply, apply_lambda):
      * src/fns.c (sort_list):
      * src/font.c (font_vconcat_entity_vectors)
      (font_find_for_lface):
      * src/frame.c (Fmodify_frame_parameters):
      * src/fringe.c (get_logical_fringe_bitmap):
      * src/ftfont.c (ftfont_get_open_type_spec):
      * src/gtkutil.c (xg_print_frames_dialog):
      * src/lread.c (read1, read_vector):
      * src/keymap.c (Fkey_description):
      * src/kqueue.c (Fkqueue_add_watch):
      * src/macfont.m (macfont_get_open_type_spec):
      * src/menu.c (parse_single_submenu, x_popup_menu_1):
      * src/minibuf.c (Finternal_complete_buffer):
      * src/nsfont.m (ns_findfonts, nsfont_list_family):
      * src/process.c (Fmake_process):
      * src/search.c (Fset_match_data):
      * src/xfaces.c (Fx_family_fonts):
      Use list_length rather than Flength on values that must be lists.
      * src/fns.c (list_length): New function.
      (Flength): Use it.
      * src/nsfont.m (ns_findfonts):
      Use !NILP (x) rather than XFIXNUM (Flength (x)) != 0.
      * src/xdisp.c (store_mode_line_string):
      Use SCHARS rather than Flength on values that must be strings.
      a8465033
  12. 08 Jan, 2019 1 commit
  13. 07 Jan, 2019 2 commits
    • Paul Eggert's avatar
      Minor INFINITY/NAN cleanup · 8acb88c5
      Paul Eggert authored
      * src/lread.c (INFINITY): Use a more-portable way to specify
      this macro on non-C99 platforms that lack it.
      (NAN): Remove; unused.
      8acb88c5
    • Paul Eggert's avatar
      Fix logb on zero, infinite, NaN args · 202bd7bf
      Paul Eggert authored
      Change logb to return -infinity, +infinity, and NaN respectively.
      Formerly logb returned an extreme fixnum to represent
      infinity, but this is no longer the right thing to do now that
      we have bignums and there is no extreme integer.
      * doc/lispref/numbers.texi (Float Basics), etc/NEWS: Document.
      * src/floatfns.c (Flogb): Implement this.
      202bd7bf
  14. 05 Jan, 2019 3 commits
    • Paul Eggert's avatar
      Improve GC+Cairo workaround · 99e2ad9e
      Paul Eggert authored
      Suggested by Eli Zaretskii (Bug#20890#31).
      * src/font.h (font_data_structures_may_be_ill_formed): New function.
      * src/ftfont.c (ftfont_close):
      * src/ftcrfont.c (ftcrfont_close): Use it.
      
      (cherry picked from commit d02fd482)
      99e2ad9e
    • Paul Eggert's avatar
      Work around GC+Cairo bug · e0862eda
      Paul Eggert authored
      Workaround suggested by Robert Pluim (Bug#20890#13).
      * src/ftfont.c (ftfont_close) [USE_CAIRO]:
      Do nothing if GC is in progress.
      e0862eda
    • Eli Zaretskii's avatar
      Improve commentary in font.h · 0ecff00b
      Eli Zaretskii authored
      * src/font.h (struct font, struct font_driver): Fix typos and
      wording in comments.  Document all driver methods.
      0ecff00b
  15. 04 Jan, 2019 1 commit
  16. 02 Jan, 2019 1 commit
  17. 01 Jan, 2019 3 commits
    • Paul Eggert's avatar
      Don’t limit range error reports to fixnums · 0515b223
      Paul Eggert authored
      * src/lisp.h (CHECK_RANGED_INTEGER): When signaling an error,
      don’t arbitrarily limit the reported valid range to fixnums.
      0515b223
    • Paul Eggert's avatar
      Bignums from garbage-collect, memory-use-counts · 8b5f05e9
      Paul Eggert authored
      Do not limit the results of garbage-collect and memory-use-counts
      to fixnums, as they might be bignums now on 32-bit hosts.
      * src/lisp.h (byte_ct): New type.
      * src/alloc.c (object_ct): New type.
      (consing_since_gc, gc_relative_threshold)
      (memory_full_cons_threshold, total_string_bytes):
      Now byte_ct, not EMACS_INT.
      (total_conses, total_symbols, total_buffers, total_free_conses)
      (total_free_symbols, total_free_floats, total_floats)
      (total_free_intervals, total_intervals, total_strings)
      (total_free_strings, total_vectors, total_vector_slots)
      (total_free_vector_slots): Now object_ct, not EMACS_INT.
      (bounded_number): Remove.  All uses removed.
      (object_bytes): New function.
      (total_bytes_of_live_objects, garbage_collect_1): Use byte_ct,
      not size_t, to count total GC bytes where multiple objects are
      involved.
      (garbage_collect_1, Fmemory_use_counts):
      Do not limit returned counts to fixnums.
      (sweep_conses, sweep_floats, sweep_intervals, sweep_symbols):
      Use object_ct, not EMACS_INT, to count GC objects.
      8b5f05e9
    • Paul Eggert's avatar
      Be consistent about list length fixnum overflow · ba1b3409
      Paul Eggert authored
      * src/fns.c (Flength, Fproper_list_p): Use overflow_error to
      report the (typically impossible) fixnum overflow.
      ba1b3409