[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode f9ddef260c 039/135: Passing first bookkeeping
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode f9ddef260c 039/135: Passing first bookkeeping test using SDT generated bookkeeping |
Date: |
Sun, 29 Jan 2023 03:11:02 -0500 (EST) |
branch: externals/phps-mode
commit f9ddef260c43e4c11fc2c427069876e1ef40232b
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Passing first bookkeeping test using SDT generated bookkeeping
---
phps-mode-ast-bookkeeping.el | 1 -
phps-mode-parser-sdt.el | 213 +++++++++++++++++++++++++++----------------
2 files changed, 135 insertions(+), 79 deletions(-)
diff --git a/phps-mode-ast-bookkeeping.el b/phps-mode-ast-bookkeeping.el
index e46e98f642..6bf8875c65 100644
--- a/phps-mode-ast-bookkeeping.el
+++ b/phps-mode-ast-bookkeeping.el
@@ -250,7 +250,6 @@
(defun phps-mode-ast-bookkeeping--generate (&optional tree)
"Generate AST for current buffer or optionally for TREE."
(setq phps-mode-ast-bookkeeping--index phps-mode-parser-sdt-bookkeeping)
- (message "phps-mode-parser-sdt--bookkeeping-symbol-stack: %S"
phps-mode-parser-sdt--bookkeeping-symbol-stack)
phps-mode-ast-bookkeeping--index)
diff --git a/phps-mode-parser-sdt.el b/phps-mode-parser-sdt.el
index 996b27f2ac..ae931203e3 100644
--- a/phps-mode-parser-sdt.el
+++ b/phps-mode-parser-sdt.el
@@ -601,6 +601,68 @@
nil
"Current bookkeeping symbol stack.")
+(defvar-local
+ phps-mode-parser-sdt--bookkeeping-symbol-assignment-stack
+ nil
+ "Current bookkeeping assignment symbol stack.")
+
+(defun phps-mode-parser-sdt--parse-statement ()
+ "Parse latest statement."
+ ;; (message "phps-mode-parser-sdt--bookkeeping-symbol-assignment-stack: %S"
phps-mode-parser-sdt--bookkeeping-symbol-assignment-stack)
+ ;; (message "phps-mode-parser-sdt--bookkeeping-symbol-stack: %S"
phps-mode-parser-sdt--bookkeeping-symbol-stack)
+
+ ;; Parse bookkeeping writes and reads at every statement terminus
+ (when phps-mode-parser-sdt--bookkeeping-symbol-assignment-stack
+ ;; TODO Should declare based on start?
+ ;; Declare variables
+ (dolist (
+ symbol-list
+ phps-mode-parser-sdt--bookkeeping-symbol-assignment-stack)
+ (let ((symbol-name (car symbol-list))
+ (symbol-start (car (cdr symbol-list)))
+ (symbol-end (car (cdr (cdr symbol-list)))))
+ (if (gethash symbol-name phps-mode-parser-sdt-bookkeeping)
+ (puthash
+ symbol-name
+ (1+ (gethash symbol-name phps-mode-parser-sdt-bookkeeping))
+ phps-mode-parser-sdt-bookkeeping)
+ (puthash
+ symbol-name
+ 1
+ phps-mode-parser-sdt-bookkeeping))))
+ (setq
+ phps-mode-parser-sdt--bookkeeping-symbol-assignment-stack
+ nil))
+
+ (when phps-mode-parser-sdt--bookkeeping-symbol-stack
+ ;; Bookkeeping hit / misses of symbols here
+ ;; TODO Should consider declaration position as well?
+ (dolist (
+ symbol-list
+ phps-mode-parser-sdt--bookkeeping-symbol-stack)
+ (let ((symbol-name (car symbol-list))
+ (symbol-start (car (cdr symbol-list)))
+ (symbol-end (car (cdr (cdr symbol-list)))))
+ (if (gethash
+ symbol-name
+ phps-mode-parser-sdt-bookkeeping)
+ (puthash
+ (list
+ symbol-start
+ symbol-end)
+ 1
+ phps-mode-parser-sdt-bookkeeping)
+ (puthash
+ (list
+ symbol-start
+ symbol-end)
+ 0
+ phps-mode-parser-sdt-bookkeeping))))
+ (setq
+ phps-mode-parser-sdt--bookkeeping-symbol-stack
+ nil)))
+
+
;; SDT starts here
;; 0 ((start) (top_statement_list))
@@ -1323,19 +1385,31 @@
(puthash
145
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
(nth 1 args))
phps-mode-parser--table-translations)
;; 146 ((statement) (if_stmt))
-(puthash 146 (lambda(args _terminals) args)
phps-mode-parser--table-translations)
+(puthash
+ 146
+ (lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
+ args)
+ phps-mode-parser--table-translations)
;; 147 ((statement) (alt_if_stmt))
-(puthash 147 (lambda(args _terminals) args)
phps-mode-parser--table-translations)
+(puthash
+ 147
+ (lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
+ args)
+ phps-mode-parser--table-translations)
-;; 148 (T_WHILE "(" expr ")" while_statement))
+;; 148 ((statement) (T_WHILE "(" expr ")" while_statement))
(puthash
148
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
while-statement
@@ -1350,6 +1424,7 @@
(puthash
149
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
do-statement
@@ -1360,10 +1435,11 @@
))
phps-mode-parser--table-translations)
-;; 150 (T_FOR "(" for_exprs ";" for_exprs ";" for_exprs ")" for_statement))
+;; 150 ((statement) (T_FOR "(" for_exprs ";" for_exprs ";" for_exprs ")"
for_statement))
(puthash
150
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
for-statement
@@ -1382,6 +1458,7 @@
(puthash
151
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
switch-statement
@@ -1396,6 +1473,7 @@
(puthash
152
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
break-statement
@@ -1408,6 +1486,7 @@
(puthash
153
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
continue-statement
@@ -1420,6 +1499,7 @@
(puthash
154
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
return-statement
@@ -1432,6 +1512,7 @@
(puthash
155
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
global-statement
@@ -1444,6 +1525,7 @@
(puthash
156
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
static-statement
@@ -1456,6 +1538,7 @@
(puthash
157
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
echo-statement
@@ -1465,12 +1548,18 @@
phps-mode-parser--table-translations)
;; 158 ((statement) (T_INLINE_HTML))
-(puthash 158 (lambda(args _terminals) args)
phps-mode-parser--table-translations)
+(puthash
+ 158
+ (lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
+ args)
+ phps-mode-parser--table-translations)
;; 159 ((statement) (expr ";"))
(puthash
159
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
expr-statement
@@ -1480,12 +1569,18 @@
phps-mode-parser--table-translations)
;; 160 ((statement) (T_UNSET "(" unset_variables possible_comma ")" ";"))
-(puthash 159 (lambda(args _terminals) (nth 0 args))
phps-mode-parser--table-translations)
+(puthash
+ 160
+ (lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
+ (nth 0 args))
+ phps-mode-parser--table-translations)
;; 161 ((statement) (T_FOREACH "(" expr T_AS foreach_variable ")"
foreach_statement))
(puthash
161
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
foreach-statement
@@ -1494,14 +1589,14 @@
as
,(nth 4 args)
foreach-statement
- ,(nth 6 args)
- ))
+ ,(nth 6 args)))
phps-mode-parser--table-translations)
;; 162 ((statement) (T_FOREACH "(" expr T_AS foreach_variable T_DOUBLE_ARROW
foreach_variable ")" foreach_statement))
(puthash
162
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
foreach-statement
@@ -1512,14 +1607,14 @@
value
,(nth 6 args)
foreach-statement
- ,(nth 8 args)
- ))
+ ,(nth 8 args)))
phps-mode-parser--table-translations)
;; 163 ((statement) (T_DECLARE "(" const_list ")" declare_statement))
(puthash
163
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
declare-statement
@@ -1533,12 +1628,18 @@
phps-mode-parser--table-translations)
;; 164 ((statement) (";"))
-(puthash 164 (lambda(_args _terminals) nil)
phps-mode-parser--table-translations)
+(puthash
+ 164
+ (lambda(_args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
+ nil)
+ phps-mode-parser--table-translations)
;; 165 ((statement) (T_TRY "{" inner_statement_list "}" catch_list
finally_statement))
(puthash
165
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
try-statement
@@ -1547,32 +1648,31 @@
catch-list
,(nth 4 args)
finally-statement
- ,(nth 5 args)
- ))
+ ,(nth 5 args)))
phps-mode-parser--table-translations)
;; 166 ((statement) (T_GOTO T_STRING ";"))
(puthash
166
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
goto-statement
label
- ,(nth 1 args)
- ))
+ ,(nth 1 args)))
phps-mode-parser--table-translations)
;; 167 ((statement) (T_STRING ":"))
(puthash
167
(lambda(args _terminals)
+ (phps-mode-parser-sdt--parse-statement)
`(
ast-type
label-statement
label
- ,(nth 0 args)
- ))
+ ,(nth 0 args)))
phps-mode-parser--table-translations)
;; 168 ((catch_list) (%empty))
@@ -3175,35 +3275,26 @@
(cond
((equal callable-variable-type 'callable-variable-simple-variable)
(let ((callable-variable-simple-variable (plist-get
callable-variable 'simple-variable)))
- (message "callable-variable-simple-variable: %S"
callable-variable-simple-variable)
(let ((callable-variable-simple-variable-type
(plist-get
callable-variable-simple-variable
'ast-type)))
- (cond
- ((equal
- callable-variable-simple-variable-type
- 'simple-variable-variable)
- (push
- (list
- 'write
- (format
- "%s id %s"
- phps-mode-parser-sdt--bookkeeping-namespace
- (plist-get
- callable-variable-simple-variable
- 'variable))
- (car (cdr (car terminals)))
- (cdr (cdr (car terminals))))
- phps-mode-parser-sdt--bookkeeping-symbol-stack)))))))))))
-
- ;; TODO Should parse bookkeeping writes and reads at every statement
terminus
-
- ;; TODO Declare variable in bookkeeping and imenu here
- (message "expr-assign-variable-by-expr")
- (message "args: %S" args)
- (message "terminals: %S" terminals)
- (message "stack: %S" phps-mode-parser-sdt--bookkeeping-symbol-stack)
+ (cond
+ ((equal
+ callable-variable-simple-variable-type
+ 'simple-variable-variable)
+ (push
+ (list
+ (format
+ "%s id %s"
+ phps-mode-parser-sdt--bookkeeping-namespace
+ (plist-get
+ callable-variable-simple-variable
+ 'variable))
+ (car (cdr (car terminals)))
+ (cdr (cdr (car terminals))))
+
phps-mode-parser-sdt--bookkeeping-symbol-assignment-stack)))))))))))
+
`(
ast-type
expr-assign-variable-by-expr
@@ -5109,45 +5200,11 @@
args)))
(push
(list
- 'read
namespaced-variable
(car (cdr terminals))
(cdr (cdr terminals)))
- phps-mode-parser-sdt--bookkeeping-symbol-stack)
-
- ;; Bookkeep whether we hit or miss the variable
- (if (gethash
- namespaced-variable
- phps-mode-parser-sdt-bookkeeping)
- (puthash
- (list
- (car (cdr terminals))
- (cdr (cdr terminals)))
- 1
- phps-mode-parser-sdt-bookkeeping)
- (puthash
- (list
- (car (cdr terminals))
- (cdr (cdr terminals)))
- 0
- phps-mode-parser-sdt-bookkeeping))
-
- ;; Declare variable
- (unless (gethash
- namespaced-variable
- phps-mode-parser-sdt-bookkeeping)
-
- ;; TODO Should not declare in this production
- (puthash
- namespaced-variable
- 1
- phps-mode-parser-sdt-bookkeeping)
- (message "Declared variable")
- )
- ;; Flag whether we hit or missed variable in the bookkeeping here
- )
- (message "args: %S" args)
- (message "terminals: %S" terminals)
+ phps-mode-parser-sdt--bookkeeping-symbol-stack))
+
`(
ast-type
simple-variable-variable
- [elpa] externals/phps-mode 9c67facc86 075/135: Work on bookkeeping of class static properties, (continued)
- [elpa] externals/phps-mode 9c67facc86 075/135: Work on bookkeeping of class static properties, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 39a6fe03ae 079/135: Improved is-varadic and is-reference argument flags, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode e8a5dbe153 126/135: Fix for trait and interface imenu, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 579034d1c6 127/135: Passing imenu test via SDT, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode fb9a181135 088/135: Passed more bookkeeping tsts, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode e6bc401d0b 068/135: Work on improving test for global variable bookkeeping, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 4949daefd9 101/135: Passing another SDT imenu test, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode c0c37bafd9 110/135: Added some TODO items, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 76ef8cceac 124/135: More fixes in code, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 3b6eb46d4c 129/135: Added new MVP bookkeeping and imenu test, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode f9ddef260c 039/135: Passing first bookkeeping test using SDT generated bookkeeping,
Christian Johansson <=
- [elpa] externals/phps-mode fb42b49970 044/135: Added more TODO items, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode dd2fadefe7 048/135: Bookkeeping class properties, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 804a0dbdb9 074/135: Added static uri for symbol names, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 7bb676dc8b 076/135: Bookkeeping for anonymous function passing, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode f86d8dc6ac 078/135: More work on arrow function variable uri, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 787aaa2bb4 081/135: Passing another bookkeeping test, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 66c02b9be1 083/135: Passing test for bookkeeping of interface variables, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode 1afe6aaec7 086/135: Passing more tests for static variables, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode d456658676 089/135: Passing bookkeeping test for $this inside arrow function, Christian Johansson, 2023/01/29
- [elpa] externals/phps-mode f4be94ccfc 094/135: Passing bookkeeping test for class properties inside conditional expression, Christian Johansson, 2023/01/29