diff options
author | Stefan Monnier <monnier@iro.umontreal.ca> | 2015-09-09 15:14:52 -0400 |
---|---|---|
committer | Stefan Monnier <monnier@iro.umontreal.ca> | 2015-09-09 15:14:52 -0400 |
commit | ab21f61a552f038485d40218dfd94a16b843eb52 (patch) | |
tree | 876a849cbfffc86a355480c17f93589fab012f82 /lisp/emacs-lisp | |
parent | 74baea086d1ea606bae99bfc8c9195c21d5530fc (diff) | |
download | emacs-ab21f61a552f038485d40218dfd94a16b843eb52.tar.gz emacs-ab21f61a552f038485d40218dfd94a16b843eb52.tar.bz2 emacs-ab21f61a552f038485d40218dfd94a16b843eb52.zip |
Make syntax.c call syntax-propertize on demand
* lisp/emacs-lisp/syntax.el (syntax--jit-propertize): New function.
(parse-sexp-propertize-function): Use it.
(syntax-propertize): Disable parse-sexp-propertize-function.
* src/syntax.c (parse_sexp_propertize, update_syntax_table_forward):
New functions.
(syms_of_syntax): New vars `parse-sexp-propertize-done' and
`parse-sexp-propertize-function'.
* src/syntax.h (struct gl_state_s): Add `e_property_truncated' field.
(UPDATE_SYNTAX_TABLE_FORWARD): Use update_syntax_table_forward.
(SETUP_BUFFER_SYNTAX_TABLE): Set e_property_truncated.
* lisp/progmodes/elisp-mode.el (elisp-byte-code-syntax-propertize):
Don't assume `point' is set.
Diffstat (limited to 'lisp/emacs-lisp')
-rw-r--r-- | lisp/emacs-lisp/syntax.el | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/lisp/emacs-lisp/syntax.el b/lisp/emacs-lisp/syntax.el index 05dd7d57503..6c9cba3e563 100644 --- a/lisp/emacs-lisp/syntax.el +++ b/lisp/emacs-lisp/syntax.el @@ -297,7 +297,10 @@ The return value is a function suitable for `syntax-propertize-function'." (set (make-local-variable 'parse-sexp-lookup-properties) t) (save-excursion (with-silent-modifications + (make-local-variable 'parse-sexp-propertize-done) ;Just in case! (let* ((start (max syntax-propertize--done (point-min))) + ;; Avoid recursion! + (parse-sexp-propertize-done most-positive-fixnum) (end (max pos (min (point-max) (+ start syntax-propertize-chunk-size)))) @@ -324,6 +327,18 @@ The return value is a function suitable for `syntax-propertize-function'." '(syntax-table nil syntax-multiline nil)) (funcall syntax-propertize-function start end)))))) +;;; Link syntax-propertize with the new parse-sexp-propertize. + +(setq-default parse-sexp-propertize-function #'syntax--jit-propertize) +(defun syntax--jit-propertize (charpos) + (if (not syntax-propertize-function) + (setq parse-sexp-propertize-done (1+ (point-max))) + (syntax-propertize charpos) + (setq parse-sexp-propertize-done + (if (= (point-max) syntax-propertize--done) + (1+ (point-max)) + syntax-propertize--done)))) + ;;; Incrementally compute and memoize parser state. (defsubst syntax-ppss-depth (ppss) |