Hi Nicolas
On Thu, Feb 20, 2014 at 11:08 PM, Nicolas Goaziou <[email protected]> wrote:
> I just pushed an update for parser cache.
The related commit release_8.2.5h-642-geed0500
commit eed0500913a3534a32abfd5864cf674d9d0cdf64
Author: Nicolas Goaziou <[email protected]>
Date: Fri Jan 31 01:14:44 2014 +0100
org-element: Implement lazy cache synchronization
on master is a regression for find-file of an Org file containing the
header
* Definition of <<<foo>>> and <<<bar>>>
Michael
Debugger entered--Lisp error: (wrong-type-argument hash-table-p nil)
gethash((headline (:raw-value "Summary of <<<foo>>> and <<<bar>>>" :begin 1
:end 38 :pre-blank 0 :contents-begin nil :contents-end nil :level 1 :priority
nil :tags nil :todo-keyword nil :todo-type nil :post-blank 0
:footnote-section-p nil :archivedp nil :commentedp nil :CATEGORY nil :title
"Summary of <<<foo>>> and <<<bar>>>")) nil)
(and (org-element--cache-active-p) (gethash element
org-element--cache-objects))
(let* ((restriction (org-element-restriction type)) (parent element)
(candidates (quote initial)) (cache (and (org-element--cache-active-p) (gethash
element org-element--cache-objects))) objects-data next) (prog1 (catch (quote
exit) (while t (if next nil (let ((data ...)) (if data (setq candidates ...)
(setq cache ...)))) (if (or next (eq (quote initial) candidates)) (progn (setq
candidates (org-element--get-next-object-candidates restriction candidates))
(setcar (cdr objects-data) candidates))) (let ((closest (and candidates ...)))
(if (or (not closest) (> ... origin)) (catch (quote found) (progn ...))
(goto-char (cdr closest)) (setq next (funcall ...)) (let* (...) (setcdr ...
...)))) (let ((cbeg (org-element-property :contents-begin next)) (cend
(org-element-property :contents-end next)) (obj-end (org-element-property :end
next))) (cond ((<= obj-end origin) (goto-char obj-end)) ((or ... ... ...)
(org-element-put-property next :parent parent) (throw ... next)) (t (goto-char
cbeg) (narrow-to-region ... cend) (org-element-put-property next :parent
parent) (setq parent next restriction ... next nil objects-data nil candidates
...)))))) (org-element--cache-put element cache)))
(let* ((origin (point)) (element (or element (org-element-at-point))) (type
(org-element-type element))) (cond ((let ((post (org-element-property
:post-affiliated element))) (and post (< origin post))) (beginning-of-line)
(let ((case-fold-search t)) (looking-at org-element--affiliated-re)) (cond
((not (member-ignore-case (match-string 1) org-element-parsed-keywords)) (throw
(quote objects-forbidden) element)) ((< (match-end 0) origin) (narrow-to-region
(match-end 0) (line-end-position))) ((and (match-beginning 2) (>= origin
(match-beginning 2)) (< origin (match-end 2))) (narrow-to-region
(match-beginning 2) (match-end 2))) (t (throw (quote objects-forbidden)
element))) (setq type (quote keyword))) ((eq type (quote item)) (let ((tag
(org-element-property :tag element))) (if (not tag) (throw (quote
objects-forbidden) element) (beginning-of-line) (search-forward tag
(line-end-position)) (goto-char (match-beginning 0)) (if (and (>= origin ...)
(< origin ...)) (narrow-to-region (point) (match-end 0)) (throw (quote
objects-forbidden) element))))) ((memq type (quote (headline inlinetask)))
(goto-char (org-element-property :begin element)) (skip-chars-forward "* ") (if
(and (>= origin (point)) (< origin (line-end-position))) (narrow-to-region
(point) (line-end-position)) (throw (quote objects-forbidden) element))) ((memq
type (quote (paragraph table-row verse-block))) (let ((cbeg
(org-element-property :contents-begin element)) (cend (org-element-property
:contents-end element))) (if (and cbeg cend (>= origin cbeg) (or (< origin
cend) (and ... ...))) (narrow-to-region cbeg cend) (throw (quote
objects-forbidden) element)))) ((eq type (quote keyword)) (if (not (member
(org-element-property :key element) org-element-document-properties)) (throw
(quote objects-forbidden) element) (beginning-of-line) (search-forward ":") (if
(and (>= origin (point)) (< origin (line-end-position))) (narrow-to-region
(point) (line-end-position)) (throw (quote objects-forbidden) element)))) ((eq
type (quote planning)) (progn (let ((--dolist-tail-- (quote ...)) p) (while
--dolist-tail-- (setq p (car --dolist-tail--)) (let (...) (if ... ...)) (setq
--dolist-tail-- (cdr --dolist-tail--))))) (throw (quote objects-forbidden)
element)) (t (throw (quote objects-forbidden) element))) (goto-char
(point-min)) (let* ((restriction (org-element-restriction type)) (parent
element) (candidates (quote initial)) (cache (and (org-element--cache-active-p)
(gethash element org-element--cache-objects))) objects-data next) (prog1 (catch
(quote exit) (while t (if next nil (let (...) (if data ... ...))) (if (or next
(eq ... candidates)) (progn (setq candidates ...) (setcar ... candidates)))
(let ((closest ...)) (if (or ... ...) (catch ... ...) (goto-char ...) (setq
next ...) (let* ... ...))) (let ((cbeg ...) (cend ...) (obj-end ...)) (cond
(... ...) (... ... ...) (t ... ... ... ...))))) (org-element--cache-put element
cache))))
(save-restriction (widen) (let* ((origin (point)) (element (or element
(org-element-at-point))) (type (org-element-type element))) (cond ((let ((post
(org-element-property :post-affiliated element))) (and post (< origin post)))
(beginning-of-line) (let ((case-fold-search t)) (looking-at
org-element--affiliated-re)) (cond ((not (member-ignore-case ...
org-element-parsed-keywords)) (throw (quote objects-forbidden) element)) ((<
(match-end 0) origin) (narrow-to-region (match-end 0) (line-end-position)))
((and (match-beginning 2) (>= origin ...) (< origin ...)) (narrow-to-region
(match-beginning 2) (match-end 2))) (t (throw (quote objects-forbidden)
element))) (setq type (quote keyword))) ((eq type (quote item)) (let ((tag
(org-element-property :tag element))) (if (not tag) (throw (quote
objects-forbidden) element) (beginning-of-line) (search-forward tag
(line-end-position)) (goto-char (match-beginning 0)) (if (and ... ...)
(narrow-to-region ... ...) (throw ... element))))) ((memq type (quote (headline
inlinetask))) (goto-char (org-element-property :begin element))
(skip-chars-forward "* ") (if (and (>= origin (point)) (< origin
(line-end-position))) (narrow-to-region (point) (line-end-position)) (throw
(quote objects-forbidden) element))) ((memq type (quote (paragraph table-row
verse-block))) (let ((cbeg (org-element-property :contents-begin element))
(cend (org-element-property :contents-end element))) (if (and cbeg cend (>=
origin cbeg) (or ... ...)) (narrow-to-region cbeg cend) (throw (quote
objects-forbidden) element)))) ((eq type (quote keyword)) (if (not (member
(org-element-property :key element) org-element-document-properties)) (throw
(quote objects-forbidden) element) (beginning-of-line) (search-forward ":") (if
(and (>= origin ...) (< origin ...)) (narrow-to-region (point)
(line-end-position)) (throw (quote objects-forbidden) element)))) ((eq type
(quote planning)) (progn (let ((--dolist-tail-- ...) p) (while --dolist-tail--
(setq p ...) (let ... ...) (setq --dolist-tail-- ...)))) (throw (quote
objects-forbidden) element)) (t (throw (quote objects-forbidden) element)))
(goto-char (point-min)) (let* ((restriction (org-element-restriction type))
(parent element) (candidates (quote initial)) (cache (and
(org-element--cache-active-p) (gethash element org-element--cache-objects)))
objects-data next) (prog1 (catch (quote exit) (while t (if next nil (let ...
...)) (if (or next ...) (progn ... ...)) (let (...) (if ... ... ... ... ...))
(let (... ... ...) (cond ... ... ...)))) (org-element--cache-put element
cache)))))
(save-excursion (save-restriction (widen) (let* ((origin (point)) (element
(or element (org-element-at-point))) (type (org-element-type element))) (cond
((let ((post ...)) (and post (< origin post))) (beginning-of-line) (let
((case-fold-search t)) (looking-at org-element--affiliated-re)) (cond ((not
...) (throw ... element)) ((< ... origin) (narrow-to-region ... ...)) ((and ...
... ...) (narrow-to-region ... ...)) (t (throw ... element))) (setq type (quote
keyword))) ((eq type (quote item)) (let ((tag ...)) (if (not tag) (throw ...
element) (beginning-of-line) (search-forward tag ...) (goto-char ...) (if ...
... ...)))) ((memq type (quote (headline inlinetask))) (goto-char
(org-element-property :begin element)) (skip-chars-forward "* ") (if (and (>=
origin ...) (< origin ...)) (narrow-to-region (point) (line-end-position))
(throw (quote objects-forbidden) element))) ((memq type (quote (paragraph
table-row verse-block))) (let ((cbeg ...) (cend ...)) (if (and cbeg cend ...
...) (narrow-to-region cbeg cend) (throw ... element)))) ((eq type (quote
keyword)) (if (not (member ... org-element-document-properties)) (throw (quote
objects-forbidden) element) (beginning-of-line) (search-forward ":") (if (and
... ...) (narrow-to-region ... ...) (throw ... element)))) ((eq type (quote
planning)) (progn (let (... p) (while --dolist-tail-- ... ... ...))) (throw
(quote objects-forbidden) element)) (t (throw (quote objects-forbidden)
element))) (goto-char (point-min)) (let* ((restriction (org-element-restriction
type)) (parent element) (candidates (quote initial)) (cache (and
(org-element--cache-active-p) (gethash element org-element--cache-objects)))
objects-data next) (prog1 (catch (quote exit) (while t (if next nil ...) (if
... ...) (let ... ...) (let ... ...))) (org-element--cache-put element
cache))))))
(catch (quote objects-forbidden) (save-excursion (save-restriction (widen)
(let* ((origin (point)) (element (or element (org-element-at-point))) (type
(org-element-type element))) (cond ((let (...) (and post ...))
(beginning-of-line) (let (...) (looking-at org-element--affiliated-re)) (cond
(... ...) (... ...) (... ...) (t ...)) (setq type (quote keyword))) ((eq type
(quote item)) (let (...) (if ... ... ... ... ... ...))) ((memq type (quote
...)) (goto-char (org-element-property :begin element)) (skip-chars-forward "*
") (if (and ... ...) (narrow-to-region ... ...) (throw ... element))) ((memq
type (quote ...)) (let (... ...) (if ... ... ...))) ((eq type (quote keyword))
(if (not ...) (throw ... element) (beginning-of-line) (search-forward ":") (if
... ... ...))) ((eq type (quote planning)) (progn (let ... ...)) (throw (quote
objects-forbidden) element)) (t (throw (quote objects-forbidden) element)))
(goto-char (point-min)) (let* ((restriction (org-element-restriction type))
(parent element) (candidates (quote initial)) (cache (and ... ...))
objects-data next) (prog1 (catch (quote exit) (while t ... ... ... ...))
(org-element--cache-put element cache)))))))
org-element-context()
(let ((obj (org-element-context))) (if (memq (org-element-type obj) (quote
(radio-target target))) (progn (add-to-list (quote rtn) (downcase
(org-element-property :value obj))))))
(while (re-search-forward re nil t) (backward-char) (let ((obj
(org-element-context))) (if (memq (org-element-type obj) (quote (radio-target
target))) (progn (add-to-list (quote rtn) (downcase (org-element-property
:value obj)))))))
(save-excursion (goto-char (point-min)) (while (re-search-forward re nil t)
(backward-char) (let ((obj (org-element-context))) (if (memq (org-element-type
obj) (quote (radio-target target))) (progn (add-to-list (quote rtn) (downcase
(org-element-property :value obj))))))) rtn)
(let ((re (if radio org-radio-target-regexp org-target-regexp)) rtn)
(save-excursion (goto-char (point-min)) (while (re-search-forward re nil t)
(backward-char) (let ((obj (org-element-context))) (if (memq (org-element-type
obj) (quote (radio-target target))) (progn (add-to-list (quote rtn) (downcase
...)))))) rtn))
org-all-targets(radio)
(org-make-target-link-regexp (org-all-targets (quote radio)))
(setq org-target-link-regexp (org-make-target-link-regexp (org-all-targets
(quote radio))))
(progn (setq org-target-link-regexp (org-make-target-link-regexp
(org-all-targets (quote radio)))) (org-restart-font-lock))
(if (memq (quote radio) org-activate-links) (progn (setq
org-target-link-regexp (org-make-target-link-regexp (org-all-targets (quote
radio)))) (org-restart-font-lock)))
org-update-radio-target-regexp()
(let ((delay-mode-hooks t)) (outline-mode) (setq major-mode (quote org-mode))
(setq mode-name "Org") (progn (if (get (quote outline-mode) (quote mode-class))
(put (quote org-mode) (quote mode-class) (get (quote outline-mode) (quote
mode-class)))) (if (keymap-parent org-mode-map) nil (set-keymap-parent
org-mode-map (current-local-map))) (let ((parent (char-table-parent
org-mode-syntax-table))) (if (and parent (not (eq parent
(standard-syntax-table)))) nil (set-char-table-parent org-mode-syntax-table
(syntax-table)))) (if (or (abbrev-table-get org-mode-abbrev-table :parents) (eq
org-mode-abbrev-table local-abbrev-table)) nil (abbrev-table-put
org-mode-abbrev-table :parents (list local-abbrev-table)))) (use-local-map
org-mode-map) (set-syntax-table org-mode-syntax-table) (setq local-abbrev-table
org-mode-abbrev-table) (if (featurep (quote xemacs)) (if (boundp (quote
outline-mode-menu-heading)) (progn (easy-menu-remove outline-mode-menu-heading)
(easy-menu-remove outline-mode-menu-show) (easy-menu-remove
outline-mode-menu-hide))) (define-key org-mode-map [menu-bar headings] (quote
undefined)) (define-key org-mode-map [menu-bar hide] (quote undefined))
(define-key org-mode-map [menu-bar show] (quote undefined)))
(org-load-modules-maybe) (easy-menu-add org-org-menu) (easy-menu-add
org-tbl-menu) (org-install-agenda-files-menu) (if org-descriptive-links
(add-to-invisibility-spec (quote (org-link)))) (add-to-invisibility-spec (quote
(org-cwidth))) (add-to-invisibility-spec (quote (org-hide-block . t))) (if
(featurep (quote xemacs)) (progn (org-set-local (quote
line-move-ignore-invisible) t))) (org-set-local (quote outline-regexp)
org-outline-regexp) (org-set-local (quote outline-level) (quote
org-outline-level)) (setq bidi-paragraph-direction (quote left-to-right)) (if
(and org-ellipsis (fboundp (quote set-display-table-slot)) (boundp (quote
buffer-display-table)) (fboundp (quote make-glyph-code))) (progn (if
org-display-table nil (setq org-display-table (make-display-table)))
(set-display-table-slot org-display-table 4 (vconcat (mapcar (function (lambda
... ...)) (if (stringp org-ellipsis) org-ellipsis "...")))) (setq
buffer-display-table org-display-table)))
(org-set-regexps-and-options-for-tags) (org-set-regexps-and-options)
(org-set-font-lock-defaults) (if (and org-tag-faces (not
org-tags-special-faces-re)) (progn (org-set-tag-faces (quote org-tag-faces)
org-tag-faces))) (org-set-local (quote calc-embedded-open-mode) "# ")
(modify-syntax-entry 64 "w") (modify-syntax-entry 34 "\"") (if
org-startup-truncated (setq truncate-lines t)) (if org-startup-indented (progn
(require (quote org-indent)) (org-indent-mode 1))) (org-set-local (quote
font-lock-unfontify-region-function) (quote org-unfontify-region))
(org-set-local (quote org-table-may-need-update) t) (org-add-hook (quote
before-change-functions) (quote org-before-change-function) nil (quote local))
(org-add-hook (quote kill-buffer-hook) (quote org-check-running-clock) nil
(quote local)) (org-macro-initialize-templates)
(org-update-radio-target-regexp) (org-set-local (quote indent-line-function)
(quote org-indent-line)) (org-set-local (quote indent-region-function) (quote
org-indent-region)) (org-setup-filling) (org-setup-comments-handling)
(org-element-cache-reset) (org-set-local (quote beginning-of-defun-function)
(quote org-backward-element)) (org-set-local (quote end-of-defun-function)
(quote org-forward-element)) (org-set-local (quote next-error-function) (quote
org-occur-next-match)) (if org-enforce-todo-dependencies (add-hook (quote
org-blocker-hook) (quote org-block-todo-from-children-or-siblings-or-parent))
(remove-hook (quote org-blocker-hook) (quote
org-block-todo-from-children-or-siblings-or-parent))) (if
org-enforce-todo-checkbox-dependencies (add-hook (quote org-blocker-hook)
(quote org-block-todo-from-checkboxes)) (remove-hook (quote org-blocker-hook)
(quote org-block-todo-from-checkboxes))) (org-set-local (quote
align-mode-rules-list) (quote ((org-in-buffer-settings (regexp .
"^#\\+[A-Z_]+:\\(\\s-*\\)\\S-+") (modes quote (org-mode)))))) (org-set-local
(quote imenu-create-index-function) (quote org-imenu-get-tree)) (if (or
(featurep (quote xemacs)) (not (boundp (quote
outline-isearch-open-invisible-function)))) (org-add-hook (quote
isearch-mode-end-hook) (quote org-isearch-end) (quote append) (quote local))
(org-set-local (quote outline-isearch-open-invisible-function) (function
(lambda (&rest ignore) (org-show-context (quote isearch))))) (org-add-hook
(quote isearch-mode-end-hook) (quote org-fix-ellipsis-at-bol) (quote append)
(quote local))) ...)
(progn (make-local-variable (quote delay-mode-hooks)) (let ((delay-mode-hooks
t)) (outline-mode) (setq major-mode (quote org-mode)) (setq mode-name "Org")
(progn (if (get (quote outline-mode) (quote mode-class)) (put (quote org-mode)
(quote mode-class) (get (quote outline-mode) (quote mode-class)))) (if
(keymap-parent org-mode-map) nil (set-keymap-parent org-mode-map
(current-local-map))) (let ((parent (char-table-parent org-mode-syntax-table)))
(if (and parent (not (eq parent ...))) nil (set-char-table-parent
org-mode-syntax-table (syntax-table)))) (if (or (abbrev-table-get
org-mode-abbrev-table :parents) (eq org-mode-abbrev-table local-abbrev-table))
nil (abbrev-table-put org-mode-abbrev-table :parents (list
local-abbrev-table)))) (use-local-map org-mode-map) (set-syntax-table
org-mode-syntax-table) (setq local-abbrev-table org-mode-abbrev-table) (if
(featurep (quote xemacs)) (if (boundp (quote outline-mode-menu-heading)) (progn
(easy-menu-remove outline-mode-menu-heading) (easy-menu-remove
outline-mode-menu-show) (easy-menu-remove outline-mode-menu-hide))) (define-key
org-mode-map [menu-bar headings] (quote undefined)) (define-key org-mode-map
[menu-bar hide] (quote undefined)) (define-key org-mode-map [menu-bar show]
(quote undefined))) (org-load-modules-maybe) (easy-menu-add org-org-menu)
(easy-menu-add org-tbl-menu) (org-install-agenda-files-menu) (if
org-descriptive-links (add-to-invisibility-spec (quote (org-link))))
(add-to-invisibility-spec (quote (org-cwidth))) (add-to-invisibility-spec
(quote (org-hide-block . t))) (if (featurep (quote xemacs)) (progn
(org-set-local (quote line-move-ignore-invisible) t))) (org-set-local (quote
outline-regexp) org-outline-regexp) (org-set-local (quote outline-level) (quote
org-outline-level)) (setq bidi-paragraph-direction (quote left-to-right)) (if
(and org-ellipsis (fboundp (quote set-display-table-slot)) (boundp (quote
buffer-display-table)) (fboundp (quote make-glyph-code))) (progn (if
org-display-table nil (setq org-display-table (make-display-table)))
(set-display-table-slot org-display-table 4 (vconcat (mapcar (function ...) (if
... org-ellipsis "...")))) (setq buffer-display-table org-display-table)))
(org-set-regexps-and-options-for-tags) (org-set-regexps-and-options)
(org-set-font-lock-defaults) (if (and org-tag-faces (not
org-tags-special-faces-re)) (progn (org-set-tag-faces (quote org-tag-faces)
org-tag-faces))) (org-set-local (quote calc-embedded-open-mode) "# ")
(modify-syntax-entry 64 "w") (modify-syntax-entry 34 "\"") (if
org-startup-truncated (setq truncate-lines t)) (if org-startup-indented (progn
(require (quote org-indent)) (org-indent-mode 1))) (org-set-local (quote
font-lock-unfontify-region-function) (quote org-unfontify-region))
(org-set-local (quote org-table-may-need-update) t) (org-add-hook (quote
before-change-functions) (quote org-before-change-function) nil (quote local))
(org-add-hook (quote kill-buffer-hook) (quote org-check-running-clock) nil
(quote local)) (org-macro-initialize-templates)
(org-update-radio-target-regexp) (org-set-local (quote indent-line-function)
(quote org-indent-line)) (org-set-local (quote indent-region-function) (quote
org-indent-region)) (org-setup-filling) (org-setup-comments-handling)
(org-element-cache-reset) (org-set-local (quote beginning-of-defun-function)
(quote org-backward-element)) (org-set-local (quote end-of-defun-function)
(quote org-forward-element)) (org-set-local (quote next-error-function) (quote
org-occur-next-match)) (if org-enforce-todo-dependencies (add-hook (quote
org-blocker-hook) (quote org-block-todo-from-children-or-siblings-or-parent))
(remove-hook (quote org-blocker-hook) (quote
org-block-todo-from-children-or-siblings-or-parent))) (if
org-enforce-todo-checkbox-dependencies (add-hook (quote org-blocker-hook)
(quote org-block-todo-from-checkboxes)) (remove-hook (quote org-blocker-hook)
(quote org-block-todo-from-checkboxes))) (org-set-local (quote
align-mode-rules-list) (quote ((org-in-buffer-settings (regexp .
"^#\\+[A-Z_]+:\\(\\s-*\\)\\S-+") (modes quote (org-mode)))))) (org-set-local
(quote imenu-create-index-function) (quote org-imenu-get-tree)) (if (or
(featurep (quote xemacs)) (not (boundp (quote
outline-isearch-open-invisible-function)))) (org-add-hook (quote
isearch-mode-end-hook) (quote org-isearch-end) (quote append) (quote local))
(org-set-local (quote outline-isearch-open-invisible-function) (function
(lambda (&rest ignore) (org-show-context (quote isearch))))) (org-add-hook
(quote isearch-mode-end-hook) (quote org-fix-ellipsis-at-bol) (quote append)
(quote local))) ...))
org-mode()
set-auto-mode-0(org-mode nil)
set-auto-mode()
normal-mode(t)
after-find-file(nil t)
find-file-noselect-1(#<buffer x.org> "/z/x.org" nil nil "~/z/x.org" (3164340
36))
find-file-noselect("/z/x.org" nil nil t)
find-file("/z/x.org" t)
call-interactively(find-file nil nil)