aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2023-02-18 23:13:51 +0800
committerPo Lu2023-02-18 23:13:51 +0800
commitc045d5322c2c1658f215bf59d431fcc8f96ffc12 (patch)
treee273d3eaedf5a109f5e18b6581b41e9dec9412e0 /src
parenta61f9cb77ced0607e4607bc5d82ae06165e6138d (diff)
parent97f24924df62303c944176510038f398370f8fb6 (diff)
downloademacs-c045d5322c2c1658f215bf59d431fcc8f96ffc12.tar.gz
emacs-c045d5322c2c1658f215bf59d431fcc8f96ffc12.zip
Merge remote-tracking branch 'origin/master' into feature/android
Diffstat (limited to 'src')
-rw-r--r--src/comp.c98
-rw-r--r--src/data.c2
-rw-r--r--src/treesit.c26
-rw-r--r--src/xdisp.c11
4 files changed, 78 insertions, 59 deletions
diff --git a/src/comp.c b/src/comp.c
index 7d2987605d9..1b55226b0c3 100644
--- a/src/comp.c
+++ b/src/comp.c
@@ -5174,8 +5174,7 @@ maybe_defer_native_compilation (Lisp_Object function_name,
5174 if (!load_gccjit_if_necessary (false)) 5174 if (!load_gccjit_if_necessary (false))
5175 return; 5175 return;
5176 5176
5177 if (!native_comp_deferred_compilation 5177 if (!native_comp_jit_compilation
5178 || !NILP (Vinhibit_automatic_native_compilation)
5179 || noninteractive 5178 || noninteractive
5180 || !NILP (Vpurify_flag) 5179 || !NILP (Vpurify_flag)
5181 || !COMPILEDP (definition) 5180 || !COMPILEDP (definition)
@@ -5672,28 +5671,18 @@ syms_of_comp (void)
5672{ 5671{
5673#ifdef HAVE_NATIVE_COMP 5672#ifdef HAVE_NATIVE_COMP
5674 DEFVAR_LISP ("comp--delayed-sources", Vcomp__delayed_sources, 5673 DEFVAR_LISP ("comp--delayed-sources", Vcomp__delayed_sources,
5675 doc: /* List of sources to be native-compiled when startup is finished. 5674 doc: /* List of sources to be native-compiled when startup is finished.
5676For internal use. */); 5675For internal use. */);
5677 DEFVAR_BOOL ("comp--compilable", 5676 DEFVAR_BOOL ("comp--compilable", comp__compilable,
5678 comp__compilable, 5677 doc: /* Non-nil when comp.el can be native compiled.
5679 doc: /* Non-nil when comp.el can be native compiled.
5680For internal use. */); 5678For internal use. */);
5681 /* Compiler control customizes. */ 5679 /* Compiler control customizes. */
5682 DEFVAR_LISP ("inhibit-automatic-native-compilation", 5680 DEFVAR_BOOL ("native-comp-jit-compilation", native_comp_jit_compilation,
5683 Vinhibit_automatic_native_compilation, 5681 doc: /* If non-nil, compile loaded .elc files asynchronously.
5684 doc: /* If non-nil, inhibit automatic native compilation of loaded .elc files.
5685 5682
5686After compilation, each function definition is updated to the native 5683After compilation, each function definition is updated to use the
5687compiled one. */); 5684natively-compiled one. */);
5688 Vinhibit_automatic_native_compilation = Qnil; 5685 native_comp_jit_compilation = true;
5689
5690 DEFVAR_BOOL ("native-comp-deferred-compilation",
5691 native_comp_deferred_compilation,
5692 doc: /* If non-nil compile loaded .elc files asynchronously.
5693
5694After compilation, each function definition is updated to the native
5695compiled one. */);
5696 native_comp_deferred_compilation = true;
5697 5686
5698 DEFSYM (Qnative_comp_speed, "native-comp-speed"); 5687 DEFSYM (Qnative_comp_speed, "native-comp-speed");
5699 DEFSYM (Qnative_comp_debug, "native-comp-debug"); 5688 DEFSYM (Qnative_comp_debug, "native-comp-debug");
@@ -5837,74 +5826,83 @@ compiled one. */);
5837 /* FIXME should be initialized but not here... Plus this don't have 5826 /* FIXME should be initialized but not here... Plus this don't have
5838 to be necessarily exposed to lisp but can easy debug for now. */ 5827 to be necessarily exposed to lisp but can easy debug for now. */
5839 DEFVAR_LISP ("comp-subr-list", Vcomp_subr_list, 5828 DEFVAR_LISP ("comp-subr-list", Vcomp_subr_list,
5840 doc: /* List of all defined subrs. */); 5829 doc: /* List of all defined subrs. */);
5841 DEFVAR_LISP ("comp-abi-hash", Vcomp_abi_hash, 5830 DEFVAR_LISP ("comp-abi-hash", Vcomp_abi_hash,
5842 doc: /* String signing the .eln files ABI. */); 5831 doc: /* String signing the .eln files ABI. */);
5843 Vcomp_abi_hash = Qnil; 5832 Vcomp_abi_hash = Qnil;
5844 DEFVAR_LISP ("comp-native-version-dir", Vcomp_native_version_dir, 5833 DEFVAR_LISP ("comp-native-version-dir", Vcomp_native_version_dir,
5845 doc: /* Directory in use to disambiguate eln compatibility. */); 5834 doc: /* Directory in use to disambiguate eln compatibility. */);
5846 Vcomp_native_version_dir = Qnil; 5835 Vcomp_native_version_dir = Qnil;
5847 5836
5848 DEFVAR_LISP ("comp-deferred-pending-h", Vcomp_deferred_pending_h, 5837 DEFVAR_LISP ("comp-deferred-pending-h", Vcomp_deferred_pending_h,
5849 doc: /* Hash table symbol-name -> function-value. 5838 doc: /* Hash table symbol-name -> function-value.
5850For internal use. */); 5839For internal use. */);
5851 Vcomp_deferred_pending_h = CALLN (Fmake_hash_table, QCtest, Qeq); 5840 Vcomp_deferred_pending_h = CALLN (Fmake_hash_table, QCtest, Qeq);
5852 5841
5853 DEFVAR_LISP ("comp-eln-to-el-h", Vcomp_eln_to_el_h, 5842 DEFVAR_LISP ("comp-eln-to-el-h", Vcomp_eln_to_el_h,
5854 doc: /* Hash table eln-filename -> el-filename. */); 5843 doc: /* Hash table eln-filename -> el-filename. */);
5855 Vcomp_eln_to_el_h = CALLN (Fmake_hash_table, QCtest, Qequal); 5844 Vcomp_eln_to_el_h = CALLN (Fmake_hash_table, QCtest, Qequal);
5856 5845
5857 DEFVAR_LISP ("native-comp-eln-load-path", Vnative_comp_eln_load_path, 5846 DEFVAR_LISP ("native-comp-eln-load-path", Vnative_comp_eln_load_path,
5858 doc: /* List of eln cache directories. 5847 doc: /* List of directories to look for natively-compiled *.eln files.
5859 5848
5860If a directory is non absolute it is assumed to be relative to 5849The *.eln files are actually looked for in a version-specific
5861`invocation-directory'. 5850subdirectory of each directory in this list. That subdirectory
5862`comp-native-version-dir' value is used as a sub-folder name inside 5851is determined by the value of `comp-native-version-dir'.
5863each eln cache directory. 5852If the name of a directory in this list is not absolute, it is
5864The last directory of this list is assumed to be the system one. */); 5853assumed to be relative to `invocation-directory'.
5854The last directory of this list is assumed to be the one holding
5855the system *.eln files, which are the files produced when building
5856Emacs. */);
5865 5857
5866 /* Temporary value in use for bootstrap. We can't do better as 5858 /* Temporary value in use for bootstrap. We can't do better as
5867 `invocation-directory' is still unset, will be fixed up during 5859 `invocation-directory' is still unset, will be fixed up during
5868 dump reload. */ 5860 dump reload. */
5869 Vnative_comp_eln_load_path = Fcons (build_string ("../native-lisp/"), Qnil); 5861 Vnative_comp_eln_load_path = Fcons (build_string ("../native-lisp/"), Qnil);
5870 5862
5871 DEFVAR_BOOL ("comp-enable-subr-trampolines", comp_enable_subr_trampolines, 5863 DEFVAR_LISP ("native-comp-enable-subr-trampolines",
5872 doc: /* If non-nil, enable primitive trampoline synthesis. 5864 Vnative_comp_enable_subr_trampolines,
5873This makes Emacs respect redefinition or advises of primitive functions 5865 doc: /* If non-nil, enable generation of trampolines for calling primitives.
5874when they are called from Lisp code natively-compiled at `native-comp-speed' 5866Trampolines are needed so that Emacs respects redefinition or advice of
5875of 2. 5867primitive functions when they are called from Lisp code natively-compiled
5868at `native-comp-speed' of 2.
5876 5869
5877By default, this is enabled, and when Emacs sees a redefined or advised 5870By default, the value is t, and when Emacs sees a redefined or advised
5878primitive called from natively-compiled Lisp, it generates a trampoline 5871primitive called from natively-compiled Lisp, it generates a trampoline
5879for it on-the-fly. 5872for it on-the-fly.
5880 5873
5881Disabling this, when a trampoline for a redefined or advised primitive is 5874If the value is a file name (a string), it specifies the directory in
5882not available from previous compilations, means that such redefinition 5875which to deposit the generated trampolines, overriding the directories
5883or advise will not have effect on calls from natively-compiled Lisp code. 5876in `native-comp-eln-load-path'.
5884That is, calls to primitives without existing trampolines from 5877
5885natively-compiled Lisp will behave as if the primitive was called 5878When this variable is nil, generation of trampolines is disabled.
5886directly from C. */); 5879
5880Disabling the generation of trampolines, when a trampoline for a redefined
5881or advised primitive is not already available from previous compilations,
5882means that such redefinition or advice will not have effect when calling
5883primitives from natively-compiled Lisp code. That is, calls to primitives
5884without existing trampolines from natively-compiled Lisp will behave as if
5885the primitive was called directly from C, and will ignore its redefinition
5886and advice. */);
5887 5887
5888 DEFVAR_LISP ("comp-installed-trampolines-h", Vcomp_installed_trampolines_h, 5888 DEFVAR_LISP ("comp-installed-trampolines-h", Vcomp_installed_trampolines_h,
5889 doc: /* Hash table subr-name -> installed trampoline. 5889 doc: /* Hash table subr-name -> installed trampoline.
5890This is used to prevent double trampoline instantiation but also to 5890This is used to prevent double trampoline instantiation, and also to
5891protect the trampolines against GC. */); 5891protect the trampolines against GC. */);
5892 Vcomp_installed_trampolines_h = CALLN (Fmake_hash_table); 5892 Vcomp_installed_trampolines_h = CALLN (Fmake_hash_table);
5893 5893
5894 DEFVAR_LISP ("comp-no-native-file-h", V_comp_no_native_file_h, 5894 DEFVAR_LISP ("comp-no-native-file-h", V_comp_no_native_file_h,
5895 doc: /* Files for which no deferred compilation has to be performed. 5895 doc: /* Files for which no deferred compilation should be performed.
5896These files' compilation should not be deferred because the bytecode 5896These files' compilation should not be deferred because the bytecode
5897version was explicitly requested by the user during load. 5897version was explicitly requested by the user during load.
5898For internal use. */); 5898For internal use. */);
5899 V_comp_no_native_file_h = CALLN (Fmake_hash_table, QCtest, Qequal); 5899 V_comp_no_native_file_h = CALLN (Fmake_hash_table, QCtest, Qequal);
5900 5900
5901 DEFVAR_BOOL ("comp-file-preloaded-p", comp_file_preloaded_p, 5901 DEFVAR_BOOL ("comp-file-preloaded-p", comp_file_preloaded_p,
5902 doc: /* When non-nil assume the file being compiled to 5902 doc: /* When non-nil, assume the file being compiled to be preloaded. */);
5903be preloaded. */);
5904 5903
5905 DEFVAR_LISP ("comp-loaded-comp-units-h", Vcomp_loaded_comp_units_h, 5904 DEFVAR_LISP ("comp-loaded-comp-units-h", Vcomp_loaded_comp_units_h,
5906 doc: /* Hash table recording all loaded compilation units. 5905 doc: /* Hash table recording all loaded compilation units, file -> CU. */);
5907file -> CU. */);
5908 Vcomp_loaded_comp_units_h = 5906 Vcomp_loaded_comp_units_h =
5909 CALLN (Fmake_hash_table, QCweakness, Qvalue, QCtest, Qequal); 5907 CALLN (Fmake_hash_table, QCweakness, Qvalue, QCtest, Qequal);
5910 5908
diff --git a/src/data.c b/src/data.c
index 04ac2b09ac3..1fa8b0358b5 100644
--- a/src/data.c
+++ b/src/data.c
@@ -855,7 +855,7 @@ DEFUN ("fset", Ffset, Sfset, 2, 2, 0,
855#ifdef HAVE_NATIVE_COMP 855#ifdef HAVE_NATIVE_COMP
856 register Lisp_Object function = XSYMBOL (symbol)->u.s.function; 856 register Lisp_Object function = XSYMBOL (symbol)->u.s.function;
857 857
858 if (comp_enable_subr_trampolines 858 if (!NILP (Vnative_comp_enable_subr_trampolines)
859 && SUBRP (function) 859 && SUBRP (function)
860 && !SUBR_NATIVE_COMPILEDP (function)) 860 && !SUBR_NATIVE_COMPILEDP (function))
861 CALLN (Ffuncall, Qcomp_subr_trampoline_install, symbol); 861 CALLN (Ffuncall, Qcomp_subr_trampoline_install, symbol);
diff --git a/src/treesit.c b/src/treesit.c
index cab2f0d5354..e1d6f1ef79f 100644
--- a/src/treesit.c
+++ b/src/treesit.c
@@ -720,6 +720,7 @@ Return nil if a grammar library for LANGUAGE is not available. */)
720 } 720 }
721} 721}
722 722
723
723/*** Parsing functions */ 724/*** Parsing functions */
724 725
725static void 726static void
@@ -770,7 +771,8 @@ treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte,
770 treesit_check_parser (lisp_parser); 771 treesit_check_parser (lisp_parser);
771 TSTree *tree = XTS_PARSER (lisp_parser)->tree; 772 TSTree *tree = XTS_PARSER (lisp_parser)->tree;
772 /* See comment (ref:visible-beg-null) if you wonder why we don't 773 /* See comment (ref:visible-beg-null) if you wonder why we don't
773 update visible_beg/end when tree is NULL. */ 774 update visible_beg/end when tree is NULL. */
775
774 if (tree != NULL) 776 if (tree != NULL)
775 { 777 {
776 eassert (start_byte <= old_end_byte); 778 eassert (start_byte <= old_end_byte);
@@ -794,8 +796,14 @@ treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte,
794 ptrdiff_t old_end_offset = (min (visible_end, 796 ptrdiff_t old_end_offset = (min (visible_end,
795 max (visible_beg, old_end_byte)) 797 max (visible_beg, old_end_byte))
796 - visible_beg); 798 - visible_beg);
797 ptrdiff_t new_end_offset = (min (visible_end, 799 /* We don't clip new_end_offset under visible_end, because
798 max (visible_beg, new_end_byte)) 800 inserting in narrowed region always extends the visible
801 region. If we clip new_end_offset here, and re-add the
802 clipped "tail" in treesit_sync_visible_region later,
803 while it is technically equivalent, tree-sitter's
804 incremental parsing algorithm doesn't seem to like it
805 (bug#61369). */
806 ptrdiff_t new_end_offset = (max (visible_beg, new_end_byte)
799 - visible_beg); 807 - visible_beg);
800 eassert (start_offset <= old_end_offset); 808 eassert (start_offset <= old_end_offset);
801 eassert (start_offset <= new_end_offset); 809 eassert (start_offset <= new_end_offset);
@@ -817,11 +825,13 @@ treesit_record_change (ptrdiff_t start_byte, ptrdiff_t old_end_byte,
817 /* Move forward. */ 825 /* Move forward. */
818 visi_beg_delta = (old_end_byte < visible_beg 826 visi_beg_delta = (old_end_byte < visible_beg
819 ? new_end_byte - old_end_byte : 0); 827 ? new_end_byte - old_end_byte : 0);
828
820 XTS_PARSER (lisp_parser)->visible_beg = visible_beg + visi_beg_delta; 829 XTS_PARSER (lisp_parser)->visible_beg = visible_beg + visi_beg_delta;
821 XTS_PARSER (lisp_parser)->visible_end = (visible_end 830 XTS_PARSER (lisp_parser)->visible_end = (visible_end
822 + visi_beg_delta 831 + visi_beg_delta
823 + (new_end_offset 832 + (new_end_offset
824 - old_end_offset)); 833 - old_end_offset));
834
825 eassert (XTS_PARSER (lisp_parser)->visible_beg >= 0); 835 eassert (XTS_PARSER (lisp_parser)->visible_beg >= 0);
826 eassert (XTS_PARSER (lisp_parser)->visible_beg 836 eassert (XTS_PARSER (lisp_parser)->visible_beg
827 <= XTS_PARSER (lisp_parser)->visible_end); 837 <= XTS_PARSER (lisp_parser)->visible_end);
@@ -1104,6 +1114,7 @@ treesit_read_buffer (void *parser, uint32_t byte_index,
1104 return beg; 1114 return beg;
1105} 1115}
1106 1116
1117
1107/*** Functions for parser and node object */ 1118/*** Functions for parser and node object */
1108 1119
1109/* Wrap the parser in a Lisp_Object to be used in the Lisp 1120/* Wrap the parser in a Lisp_Object to be used in the Lisp
@@ -1266,6 +1277,9 @@ treesit_ensure_query_compiled (Lisp_Object query, Lisp_Object *signal_symbol,
1266 return treesit_query; 1277 return treesit_query;
1267} 1278}
1268 1279
1280
1281/* Lisp definitions. */
1282
1269DEFUN ("treesit-parser-p", 1283DEFUN ("treesit-parser-p",
1270 Ftreesit_parser_p, Streesit_parser_p, 1, 1, 0, 1284 Ftreesit_parser_p, Streesit_parser_p, 1, 1, 0,
1271 doc: /* Return t if OBJECT is a tree-sitter parser. */) 1285 doc: /* Return t if OBJECT is a tree-sitter parser. */)
@@ -1484,6 +1498,7 @@ treesit_parser_live_p (Lisp_Object parser)
1484 (!NILP (Fbuffer_live_p (XTS_PARSER (parser)->buffer)))); 1498 (!NILP (Fbuffer_live_p (XTS_PARSER (parser)->buffer))));
1485} 1499}
1486 1500
1501
1487/*** Parser API */ 1502/*** Parser API */
1488 1503
1489DEFUN ("treesit-parser-root-node", 1504DEFUN ("treesit-parser-root-node",
@@ -1730,6 +1745,7 @@ positions. PARSER is the parser issuing the notification. */)
1730 return Qnil; 1745 return Qnil;
1731} 1746}
1732 1747
1748
1733/*** Node API */ 1749/*** Node API */
1734 1750
1735/* Check that OBJ is a positive integer and signal an error if 1751/* Check that OBJ is a positive integer and signal an error if
@@ -2252,6 +2268,7 @@ produced by tree-sitter. */)
2252 return same_node ? Qt : Qnil; 2268 return same_node ? Qt : Qnil;
2253} 2269}
2254 2270
2271
2255/*** Query functions */ 2272/*** Query functions */
2256 2273
2257DEFUN ("treesit-pattern-expand", 2274DEFUN ("treesit-pattern-expand",
@@ -2826,6 +2843,7 @@ the query. */)
2826 return Fnreverse (result); 2843 return Fnreverse (result);
2827} 2844}
2828 2845
2846
2829/*** Navigation */ 2847/*** Navigation */
2830 2848
2831static inline void 2849static inline void
@@ -3446,7 +3464,7 @@ DEFUN ("treesit-available-p", Ftreesit_available_p,
3446#endif 3464#endif
3447} 3465}
3448 3466
3449 3467
3450/*** Initialization */ 3468/*** Initialization */
3451 3469
3452/* Initialize the tree-sitter routines. */ 3470/* Initialize the tree-sitter routines. */
diff --git a/src/xdisp.c b/src/xdisp.c
index d3dae205037..21362d0b9d8 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -13424,7 +13424,8 @@ gui_consider_frame_title (Lisp_Object frame)
13424 13424
13425 Fselect_window (f->selected_window, Qt); 13425 Fselect_window (f->selected_window, Qt);
13426 set_buffer_internal_1 (XBUFFER (XWINDOW (f->selected_window)->contents)); 13426 set_buffer_internal_1 (XBUFFER (XWINDOW (f->selected_window)->contents));
13427 fmt = FRAME_ICONIFIED_P (f) ? Vicon_title_format : Vframe_title_format; 13427 fmt = (FRAME_ICONIFIED_P (f) && !EQ (Vicon_title_format, Qt)
13428 ? Vicon_title_format : Vframe_title_format);
13428 13429
13429 mode_line_target = MODE_LINE_TITLE; 13430 mode_line_target = MODE_LINE_TITLE;
13430 title_start = MODE_LINE_NOPROP_LEN (0); 13431 title_start = MODE_LINE_NOPROP_LEN (0);
@@ -36762,9 +36763,11 @@ which no explicit name has been set (see `modify-frame-parameters'). */);
36762 DEFVAR_LISP ("icon-title-format", Vicon_title_format, 36763 DEFVAR_LISP ("icon-title-format", Vicon_title_format,
36763 doc: /* Template for displaying the title bar of an iconified frame. 36764 doc: /* Template for displaying the title bar of an iconified frame.
36764\(Assuming the window manager supports this feature.) 36765\(Assuming the window manager supports this feature.)
36765This variable has the same structure as `mode-line-format' (which see), 36766If the value is a string, it should have the same structure
36766and is used only on frames for which no explicit name has been set 36767as `mode-line-format' (which see), and is used only on frames
36767\(see `modify-frame-parameters'). */); 36768for which no explicit name has been set \(see `modify-frame-parameters').
36769If the value is t, that means use `frame-title-format' for
36770iconified frames. */);
36768 /* Do not nest calls to pure_list. This works around a bug in 36771 /* Do not nest calls to pure_list. This works around a bug in
36769 Oracle Developer Studio 12.6. */ 36772 Oracle Developer Studio 12.6. */
36770 Lisp_Object icon_title_name_format 36773 Lisp_Object icon_title_name_format