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

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

[elpa] externals/phps-mode 5686703a6b 074/212: Passing bookkeeping via A


From: Christian Johansson
Subject: [elpa] externals/phps-mode 5686703a6b 074/212: Passing bookkeeping via AST for $this inside arrow function body inside class method
Date: Wed, 26 Jan 2022 01:50:54 -0500 (EST)

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

    Passing bookkeeping via AST for $this inside arrow function body inside 
class method
---
 phps-mode-ast-bookkeeping.el | 75 +++++++++++++++++++++++++++-----------------
 phps-mode-parser-sdt.el      |  4 +--
 test/phps-mode-test-ast.el   | 22 ++++++-------
 3 files changed, 59 insertions(+), 42 deletions(-)

diff --git a/phps-mode-ast-bookkeeping.el b/phps-mode-ast-bookkeeping.el
index a5b2d6953e..e0b7ec01b7 100644
--- a/phps-mode-ast-bookkeeping.el
+++ b/phps-mode-ast-bookkeeping.el
@@ -773,40 +773,57 @@
                   (plist-get subject 'end))
                  1
                  bookkeeping)
-
-                (let* ((sub-scope (cdr scope))
-                       (predefined)
-                       (variable-ids
-                        
(phps-mode-ast-bookkeeping--generate-variable-scope-string
-                         sub-scope
-                         (concat "$" property-name)
-                         t))
-                       (symbol-id
-                        
(phps-mode-ast-bookkeeping--generate-symbol-scope-string
-                         sub-scope
-                         property-name))
-                       (bookkeeping-object
-                        (list
-                         (plist-get item 'property-start)
-                         (plist-get item 'property-end))))
-                  (when (gethash symbol-id bookkeeping)
+                ;; When current scope is arrow function
+                ;; we should go up in scope until we get out of
+                ;; arrow functions scope
+                (let ((sub-scope scope)
+                      (head-scope)
+                      (is-arrow-function-scope t))
+                  (while (and
+                          sub-scope
+                          is-arrow-function-scope)
                     (setq
-                     predefined
-                     t))
-                  (dolist (variable-id variable-ids)
-                    (when (gethash variable-id bookkeeping)
+                     head-scope
+                     (car sub-scope))
+                    (setq
+                     sub-scope
+                     (cdr sub-scope))
+                    (unless (equal
+                             (plist-get head-scope 'type)
+                             'arrow-function)
+                      (setq is-arrow-function-scope nil)))
+                  (let* ((predefined)
+                         (variable-ids
+                          
(phps-mode-ast-bookkeeping--generate-variable-scope-string
+                           sub-scope
+                           (concat "$" property-name)
+                           t))
+                         (symbol-id
+                          
(phps-mode-ast-bookkeeping--generate-symbol-scope-string
+                           sub-scope
+                           property-name))
+                         (bookkeeping-object
+                          (list
+                           (plist-get item 'property-start)
+                           (plist-get item 'property-end))))
+                    (when (gethash symbol-id bookkeeping)
                       (setq
                        predefined
-                       t)))
-                  (if predefined
+                       t))
+                    (dolist (variable-id variable-ids)
+                      (when (gethash variable-id bookkeeping)
+                        (setq
+                         predefined
+                         t)))
+                    (if predefined
+                        (puthash
+                         bookkeeping-object
+                         1
+                         bookkeeping)
                       (puthash
                        bookkeeping-object
-                       1
-                       bookkeeping)
-                    (puthash
-                     bookkeeping-object
-                     0
-                     bookkeeping))))
+                       0
+                       bookkeeping)))))
 
                (t
                 (let ((variable-ids
diff --git a/phps-mode-parser-sdt.el b/phps-mode-parser-sdt.el
index 1ecb0b778c..3485fdf0ac 100644
--- a/phps-mode-parser-sdt.el
+++ b/phps-mode-parser-sdt.el
@@ -830,7 +830,7 @@
      ast-type
      logical-xor-expression
      a
-     (phps-mode-parser-sdt--get-list-of-object ,(nth 0 args))
+     ,(phps-mode-parser-sdt--get-list-of-object (nth 0 args))
      b
      ,(phps-mode-parser-sdt--get-list-of-object (nth 2 args))))
  phps-mode-parser--table-translations)
@@ -843,7 +843,7 @@
      ast-type
      concat-expression
      a
-     (phps-mode-parser-sdt--get-list-of-object ,(nth 0 args))
+     ,(phps-mode-parser-sdt--get-list-of-object (nth 0 args))
      b
      ,(phps-mode-parser-sdt--get-list-of-object (nth 2 args))))
  phps-mode-parser--table-translations)
diff --git a/test/phps-mode-test-ast.el b/test/phps-mode-test-ast.el
index e5b07e2737..1f223b9484 100644
--- a/test/phps-mode-test-ast.el
+++ b/test/phps-mode-test-ast.el
@@ -37,17 +37,17 @@
    buffer-contents
    name
    (lambda()
-      (let ((parse (phps-mode-parser-parse)))
-        (message "Left-to-right with right-most derivation:\n%S\n" parse)
-        (dolist (production-number (reverse parse))
-          (let ((production
-                 (phps-mode-parser--get-grammar-production-by-number
-                  production-number)))
-            (message
-             "%d: %S -> %S"
-             production-number
-             (car (car production))
-             (car (cdr production))))))
+      ;; (let ((parse (phps-mode-parser-parse)))
+      ;;   (message "Left-to-right with right-most derivation:\n%S\n" parse)
+      ;;   (dolist (production-number (reverse parse))
+      ;;     (let ((production
+      ;;            (phps-mode-parser--get-grammar-production-by-number
+      ;;             production-number)))
+      ;;       (message
+      ;;        "%d: %S -> %S"
+      ;;        production-number
+      ;;        (car (car production))
+      ;;        (car (cdr production))))))
       (phps-mode-ast--generate)
       (phps-mode-ast-bookkeeping--generate)
       (should



reply via email to

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