branch: externals/phps-mode commit 884c66f1bcfd837aa2a02240fd39f0cfd68b5c7b Author: Christian Johansson <christ...@cvj.se> Commit: Christian Johansson <christ...@cvj.se>
Added lexer initial state to parser and also better error descriptions when SDT fails --- phps-mode-parser.el | 64 +++++++++++++++++++++++++++++++---------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/phps-mode-parser.el b/phps-mode-parser.el index 2536f3deec..f89b8254b0 100644 --- a/phps-mode-parser.el +++ b/phps-mode-parser.el @@ -88,7 +88,7 @@ (defvar phps-mode-parser-lex-analyzer--state-init - nil + (list 'ST_INITIAL) "Initial value of state.") @@ -669,32 +669,42 @@ (if (phps-mode-parser--get-grammar-translation-by-number production-number) - (let ((partial-translation - (funcall - (phps-mode-parser--get-grammar-translation-by-number - production-number) - popped-items-meta-contents - popped-items-terminals))) - (let ((temp-hash-key - (format - "%S" - production-lhs))) - (let ((symbol-translations - (gethash - temp-hash-key - translation-symbol-table))) - (push - (list - partial-translation - popped-items-terminals) - symbol-translations) - (puthash - temp-hash-key - symbol-translations - translation-symbol-table) - (setq - translation - partial-translation)))) + (progn + (condition-case conditions + (let ((partial-translation + (funcall + (phps-mode-parser--get-grammar-translation-by-number + production-number) + popped-items-meta-contents + popped-items-terminals))) + (let ((temp-hash-key + (format + "%S" + production-lhs))) + (let ((symbol-translations + (gethash + temp-hash-key + translation-symbol-table))) + (push + (list + partial-translation + popped-items-terminals) + symbol-translations) + (puthash + temp-hash-key + symbol-translations + translation-symbol-table) + (setq + translation + partial-translation)))) + (error + (signal + 'error + (list + (format + "Failed AST translation for production %S with error: %S" + production-number + conditions)))))) ;; When no translation is specified just use popped contents as translation (let ((partial-translation