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

Reply via email to