emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/phps-mode bb4858b 61/96: Defined lex-analyzer reset fun


From: Christian Johansson
Subject: [elpa] externals/phps-mode bb4858b 61/96: Defined lex-analyzer reset function for parser
Date: Fri, 29 Oct 2021 11:14:47 -0400 (EDT)

branch: externals/phps-mode
commit bb4858b938c74392629dbd803ae7ea700fd5c37e
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>

    Defined lex-analyzer reset function for parser
---
 admin/phps-mode-automation.el   |   5 ++
 phps-mode-automation-grammar.el | 110 +++++++++++++++++++++++-----------------
 2 files changed, 68 insertions(+), 47 deletions(-)

diff --git a/admin/phps-mode-automation.el b/admin/phps-mode-automation.el
index 03855c9..7fa5097 100644
--- a/admin/phps-mode-automation.el
+++ b/admin/phps-mode-automation.el
@@ -101,6 +101,11 @@
            parser-generator-lex-analyzer--function
            phps-mode-automation-grammar--lex-analyzer-function))
 
+        (when (boundp 'parser-generator-lex-analyzer--reset-function)
+          (setq
+           parser-generator-lex-analyzer--reset-function
+           phps-mode-automation-grammar--lex-analyzer-reset-function))
+
         (when (boundp 'parser-generator-lex-analyzer--get-function)
           (setq
            parser-generator-lex-analyzer--get-function
diff --git a/phps-mode-automation-grammar.el b/phps-mode-automation-grammar.el
index 9b38c97..2053034 100644
--- a/phps-mode-automation-grammar.el
+++ b/phps-mode-automation-grammar.el
@@ -63,6 +63,69 @@
   "The EOF-identifier of grammar.")
 
 (defvar
+  phps-mode-automation-grammar--lex-analyzer-reset-function
+  (lambda()
+    ;; Create lexer buffer if none exists
+    (unless (get-buffer "*PHPs Lexer*")
+      (generate-new-buffer "*PHPs Lexer*")
+      (let ((old-buffer
+             (buffer-substring-no-properties
+              (point-min)
+              (point-max))))
+        (with-current-buffer "*PHPs Lexer*"
+          (insert old-buffer))))
+
+    (with-current-buffer "*PHPs Lexer*"
+      ;; Unless we have lexed the buffer
+      (unless phps-mode-parser-tokens
+        (unless phps-mode-lexer--generated-tokens
+          ;; Reset lexer
+          (setq-local
+           phps-mode-lexer--generated-tokens
+           nil)
+          (setq-local
+           phps-mode-lexer--state
+           'ST_INITIAL)
+          (setq-local
+           phps-mode-lexer--states
+           nil)
+          (setq-local
+           phps-mode-lexer--state-stack
+           nil)
+          (setq-local
+           phps-mode-lexer--heredoc-label
+           nil)
+          (setq-local
+           phps-mode-lexer--heredoc-label-stack
+           nil)
+          (setq-local
+           phps-mode-lexer--nest-location-stack
+           nil)
+          (goto-char (point-min))
+
+          ;; Run lexer on entire buffer here
+          (let ((index (point))
+                (max-index (point-max)))
+            (while (< index max-index)
+              (phps-mode-lexer--re2c)
+              (setq
+               index
+               semantic-lex-end-point)
+              (goto-char index))))
+        (setq-local
+         phps-mode-parser-tokens
+         (reverse
+          phps-mode-lexer--generated-tokens))
+
+        ;; Reset buffer-index to token-list-index connections
+        (setq-local
+         phps-mode-parser-position
+         nil)))
+
+    )
+  "The reset function.")
+
+(defvar
   phps-mode-automation-grammar--lex-analyzer-function
   (lambda (buffer-index)
 
@@ -78,53 +141,6 @@
     
     (with-current-buffer "*PHPs Lexer*"
       (let ((token-list-index))
-
-        ;; Unless we have lexed the buffer
-        (unless phps-mode-parser-tokens
-          (unless phps-mode-lexer--generated-tokens
-            ;; Reset lexer
-            (setq-local
-             phps-mode-lexer--generated-tokens
-             nil)
-            (setq-local
-             phps-mode-lexer--state
-             'ST_INITIAL)
-            (setq-local
-             phps-mode-lexer--states
-             nil)
-            (setq-local
-             phps-mode-lexer--state-stack
-             nil)
-            (setq-local
-             phps-mode-lexer--heredoc-label
-             nil)
-            (setq-local
-             phps-mode-lexer--heredoc-label-stack
-             nil)
-            (setq-local
-             phps-mode-lexer--nest-location-stack
-             nil)
-            (goto-char (point-min))
-
-            ;; Run lexer on entire buffer here
-            (let ((index (point))
-                  (max-index (point-max)))
-              (while (< index max-index)
-                (phps-mode-lexer--re2c)
-                (setq
-                 index
-                 semantic-lex-end-point)
-                (goto-char index))))
-          (setq-local
-           phps-mode-parser-tokens
-           (reverse
-            phps-mode-lexer--generated-tokens))
-
-          ;; Reset buffer-index to token-list-index connections
-          (setq-local
-           phps-mode-parser-position
-           nil))
-
         (if (and
              phps-mode-parser-position
              (= (car (car phps-mode-parser-position)) buffer-index))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]