[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/phps-mode fe83e986c7 192/212: Fixed issue with optimize
From: |
Christian Johansson |
Subject: |
[elpa] externals/phps-mode fe83e986c7 192/212: Fixed issue with optimized lexer after byte-compilation |
Date: |
Wed, 26 Jan 2022 01:51:25 -0500 (EST) |
branch: externals/phps-mode
commit fe83e986c74a9093be86563f6ce928e586721c52
Author: Christian Johansson <christian@cvj.se>
Commit: Christian Johansson <christian@cvj.se>
Fixed issue with optimized lexer after byte-compilation
---
TODO.md | 1 +
phps-mode-lexer.el | 2818 ++++++++++++++++++++++++++--------------------------
2 files changed, 1417 insertions(+), 1402 deletions(-)
diff --git a/TODO.md b/TODO.md
index df0e309e53..c05fc02c7d 100644
--- a/TODO.md
+++ b/TODO.md
@@ -3,6 +3,7 @@
* Move bookkeeping and imenu generation to main thread to be able to populate
Sematic Subsystem
* Catch signaling from AST-generation, bookkeeping and imenu generation
* Fix HTML/XML indentation support
+* Remove support for incremental parsing
# Bugs
diff --git a/phps-mode-lexer.el b/phps-mode-lexer.el
index 9a43b96287..d1baf286cf 100644
--- a/phps-mode-lexer.el
+++ b/phps-mode-lexer.el
@@ -108,9 +108,16 @@
;; VARIABLES
-(defvar
+(defconst
phps-mode-lexer--lambdas-by-state
- (make-hash-table :test 'equal)
+ #s(hash-table size 65 test equal rehash-size 1.5 rehash-threshold 0.8125
data (ST_IN_SCRIPTING ((lambda nil (when (looking-at "exit") (let ((match-end
(match-end 0)) (match-beginning (match-beginning 0))) (let ((matching-length (-
match-end match-beginning))) (when (> matching-length 0) (when (or (not
phps-mode-lexer--match-length) (> matching-length
phps-mode-lexer--match-length)) (setq phps-mode-lexer--match-length
matching-length) (setq phps-mode-lexer--match-body (lambda nil (phps- [...]
+" phps-mode-lexer--heredoc-label ";?
+\\|\\$" phps-mode-lexer--label "\\|{\\$" phps-mode-lexer--label "\\|\\${"
phps-mode-lexer--label "\\)") nil t))) (if string-start (let* ((start
(match-beginning 0)) (end (match-end 0)) (data (buffer-substring-no-properties
start end))) (cond ((string-match (concat "
+" phps-mode-lexer--heredoc-label ";?
+") data) (phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE
old-end start) (phps-mode-lexer--begin 'ST_END_HEREDOC)) (t
(phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE old-end
start)))) (progn (signal 'phps-lexer-error (list (format "Found no ending of
heredoc starting at %d" old-start) old-start)))))))) (setq
phps-mode-lexer--match-data (match-data))))))))) ST_LOOKING_FOR_VARNAME
((lambda nil (when (looking-at (concat phps-mode-lexer--label "[\\[}]")) [...]
+
'#]")) (let ((match-end (match-end 0)) (match-beginning
(match-beginning 0))) (let ((matching-length (- match-end match-beginning)))
(when (> matching-length 0) (when (or (not phps-mode-lexer--match-length) (>
matching-length phps-mode-lexer--match-length)) (setq
phps-mode-lexer--match-length matching-length) (setq
phps-mode-lexer--match-body (lambda nil (phps-mode-lexer--yyless 0)
(phps-mode-lexer--yy-pop-state) (phps-mode-lexer--return-token-with-val
'T_ENCAPSED_AND_WHITESPACE))) (setq [...]
+" phps-mode-lexer--heredoc-label ";?\\
+") nil t))) (if string-start (let* ((start (match-beginning 0)) (end
(match-end 0)) (_data (buffer-substring-no-properties start end)))
(phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE
phps-mode-lexer--generated-new-tokens-index start) (phps-mode-lexer--begin
'ST_END_HEREDOC)) (progn (signal 'phps-lexer-error (list (format "Found no
ending of nowdoc starting at %d" start) start)))))))) (setq
phps-mode-lexer--match-data (match-data)))))))))))
"Hash-map of lambdas by state.")
(defvar-local phps-mode-lexer--generated-tokens nil
@@ -470,1442 +477,1449 @@
;; Setup lexer rules
-(eval-when-compile
- (setq
- phps-mode-lexer--lambdas-by-state
- (make-hash-table :test 'equal)))
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "exit")
- (phps-mode-lexer--return-token-with-indent 'T_EXIT))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "die")
- (phps-mode-lexer--return-token-with-indent 'T_EXIT))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "fn")
- (phps-mode-lexer--return-token-with-indent 'T_FN))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "function")
- (phps-mode-lexer--return-token-with-indent 'T_FUNCTION))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "const")
- (phps-mode-lexer--return-token-with-indent 'T_CONST))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "return")
- (phps-mode-lexer--return-token-with-indent 'T_RETURN))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "#\\[")
- (phps-mode-lexer--enter-nesting "[")
- (phps-mode-lexer--return-token 'T_ATTRIBUTE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "yield"
- phps-mode-lexer--whitespace
- "from"
- "[^a-zA-Z0-9_\x80-\xff]"))
- (phps-mode-lexer--return-token-with-indent 'T_YIELD_FROM))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "yield")
- (phps-mode-lexer--return-token-with-indent 'T_YIELD))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "try")
- (phps-mode-lexer--return-token-with-indent 'T_TRY))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "catch")
- (phps-mode-lexer--return-token-with-indent 'T_CATCH))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "finally")
- (phps-mode-lexer--return-token-with-indent 'T_FINALLY))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "throw")
- (phps-mode-lexer--return-token-with-indent 'T_THROW))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "if")
- (phps-mode-lexer--return-token-with-indent 'T_IF))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "elseif")
- (phps-mode-lexer--return-token-with-indent 'T_ELSEIF))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "endif")
- (phps-mode-lexer--return-token-with-indent 'T_ENDIF))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "else")
- (phps-mode-lexer--return-token-with-indent 'T_ELSE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "while")
- (phps-mode-lexer--return-token-with-indent 'T_WHILE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "endwhile")
- (phps-mode-lexer--return-token-with-indent 'T_ENDWHILE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "do")
- (phps-mode-lexer--return-token-with-indent 'T_DO))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "for")
- (phps-mode-lexer--return-token-with-indent 'T_FOR))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "endfor")
- (phps-mode-lexer--return-token-with-indent 'T_ENDFOR))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "foreach")
- (phps-mode-lexer--return-token-with-indent 'T_FOREACH))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "endforeach")
- (phps-mode-lexer--return-token-with-indent 'T_ENDFOREACH))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "declare")
- (phps-mode-lexer--return-token-with-indent 'T_DECLARE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "enddeclare")
- (phps-mode-lexer--return-token-with-indent 'T_ENDDECLARE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "instanceof")
- (phps-mode-lexer--return-token-with-indent 'T_INSTANCEOF))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "as")
- (phps-mode-lexer--return-token-with-indent 'T_AS))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "switch")
- (phps-mode-lexer--return-token-with-indent 'T_SWITCH))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "match")
- (phps-mode-lexer--return-token-with-indent 'T_MATCH))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "endswitch")
- (phps-mode-lexer--return-token-with-indent 'T_ENDSWITCH))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "case")
- (phps-mode-lexer--return-token-with-indent 'T_CASE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "default")
- (phps-mode-lexer--return-token-with-indent 'T_DEFAULT))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "break")
- (phps-mode-lexer--return-token-with-indent 'T_BREAK))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "continue")
- (phps-mode-lexer--return-token-with-indent 'T_CONTINUE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "goto")
- (phps-mode-lexer--return-token-with-indent 'T_GOTO))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "echo")
- (phps-mode-lexer--return-token-with-indent 'T_ECHO))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "print")
- (phps-mode-lexer--return-token-with-indent 'T_PRINT))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "class")
- (phps-mode-lexer--return-token-with-indent 'T_CLASS))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "interface")
- (phps-mode-lexer--return-token-with-indent 'T_INTERFACE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "trait")
- (phps-mode-lexer--return-token-with-indent 'T_TRAIT))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "extends")
- (phps-mode-lexer--return-token-with-indent 'T_EXTENDS))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "implements")
- (phps-mode-lexer--return-token-with-indent 'T_IMPLEMENTS))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "->")
- (phps-mode-lexer--yy-push-state 'ST_LOOKING_FOR_PROPERTY)
- (phps-mode-lexer--return-token-with-indent 'T_OBJECT_OPERATOR))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "?->")
- (phps-mode-lexer--yy-push-state 'ST_LOOKING_FOR_PROPERTY)
- (phps-mode-lexer--return-token-with-indent 'T_NULLSAFE_OBJECT_OPERATOR))
-
-(phps-mode-lexer--match-macro
- (ST_IN_SCRIPTING ST_LOOKING_FOR_PROPERTY)
- (looking-at phps-mode-lexer--whitespace)
- (phps-mode-lexer--return-whitespace))
-
-(phps-mode-lexer--match-macro
- ST_LOOKING_FOR_PROPERTY
- (looking-at "->")
- (phps-mode-lexer--return-token 'T_OBJECT_OPERATOR))
-
-(phps-mode-lexer--match-macro
- ST_LOOKING_FOR_PROPERTY
- (looking-at "?->")
- (phps-mode-lexer--return-token 'T_NULLSAFE_OBJECT_OPERATOR))
-
-(phps-mode-lexer--match-macro
- ST_LOOKING_FOR_PROPERTY
- (looking-at phps-mode-lexer--label)
- (phps-mode-lexer--yy-pop-state)
- (phps-mode-lexer--return-token-with-str 'T_STRING 0))
-
-(phps-mode-lexer--match-macro
- ST_LOOKING_FOR_PROPERTY
- (looking-at phps-mode-lexer--any-char)
- (phps-mode-lexer--yyless 0)
- (phps-mode-lexer--yy-pop-state)
- (phps-mode-lexer--restart))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "::")
- (phps-mode-lexer--return-token 'T_PAAMAYIM_NEKUDOTAYIM))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\.\\.\\.")
- (phps-mode-lexer--return-token 'T_ELLIPSIS))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\?\\?")
- (phps-mode-lexer--return-token 'T_COALESCE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "new")
- (phps-mode-lexer--return-token-with-indent 'T_NEW))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "clone")
- (phps-mode-lexer--return-token-with-indent 'T_CLONE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "var")
- (phps-mode-lexer--return-token-with-indent 'T_VAR))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer--tabs-and-spaces
- "\\(int\\|integer\\)"
- phps-mode-lexer--tabs-and-spaces
- ")"))
- (phps-mode-lexer--return-token 'T_INT_CAST))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer--tabs-and-spaces
- "\\(double\\|float\\)"
- phps-mode-lexer--tabs-and-spaces
- ")"))
- (phps-mode-lexer--return-token 'T_DOUBLE_CAST))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer--tabs-and-spaces
- "\\(real\\)"
- phps-mode-lexer--tabs-and-spaces
- ")"))
- (when (phps-mode-lexer--parser-mode)
- (signal
- 'phps-lexer-error
- (list
- (format
- "The (real) cast has been removed, use (float) instead at %d"
- (match-beginning 0))
- (match-beginning 0)
- (match-end 0))))
- (phps-mode-lexer--return-token 'T_DOUBLE_CAST))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer--tabs-and-spaces
- "\\(string\\|binary\\)"
- phps-mode-lexer--tabs-and-spaces
- ")"))
- (phps-mode-lexer--return-token 'T_STRING_CAST))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer--tabs-and-spaces
- "array"
- phps-mode-lexer--tabs-and-spaces
- ")"))
- (phps-mode-lexer--return-token 'T_ARRAY_CAST))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer--tabs-and-spaces
- "object"
- phps-mode-lexer--tabs-and-spaces
- ")"))
- (phps-mode-lexer--return-token 'T_OBJECT_CAST))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer--tabs-and-spaces
- "\\(bool\\|boolean\\)"
- phps-mode-lexer--tabs-and-spaces
- ")"))
- (phps-mode-lexer--return-token 'T_BOOL_CAST))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "("
- phps-mode-lexer--tabs-and-spaces
- "unset"
- phps-mode-lexer--tabs-and-spaces ")"))
- (phps-mode-lexer--return-token 'T_UNSET_CAST))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "eval")
- (phps-mode-lexer--return-token-with-indent 'T_EVAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "include")
- (phps-mode-lexer--return-token-with-indent 'T_INCLUDE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "include_once")
- (phps-mode-lexer--return-token-with-indent 'T_INCLUDE_ONCE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "require")
- (phps-mode-lexer--return-token-with-indent 'T_REQUIRE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "require_once")
- (phps-mode-lexer--return-token-with-indent 'T_REQUIRE_ONCE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "namespace")
- (phps-mode-lexer--return-token-with-indent 'T_NAMESPACE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "use")
- (phps-mode-lexer--return-token-with-indent 'T_USE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "insteadof")
- (phps-mode-lexer--return-token-with-indent 'T_INSTEADOF))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "global")
- (phps-mode-lexer--return-token-with-indent 'T_GLOBAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "isset")
- (phps-mode-lexer--return-token-with-indent 'T_ISSET))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "empty")
- (phps-mode-lexer--return-token-with-indent 'T_EMPTY))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "__halt_compiler")
- (phps-mode-lexer--return-token-with-indent 'T_HALT_COMPILER))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "static")
- (phps-mode-lexer--return-token-with-indent 'T_STATIC))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "abstract")
- (phps-mode-lexer--return-token-with-indent 'T_ABSTRACT))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "final")
- (phps-mode-lexer--return-token-with-indent 'T_FINAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "private")
- (phps-mode-lexer--return-token-with-indent 'T_PRIVATE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "protected")
- (phps-mode-lexer--return-token-with-indent 'T_PROTECTED))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "public")
- (phps-mode-lexer--return-token-with-indent 'T_PUBLIC))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "unset")
- (phps-mode-lexer--return-token-with-indent 'T_UNSET))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "=>")
- (phps-mode-lexer--return-token 'T_DOUBLE_ARROW))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "list")
- (phps-mode-lexer--return-token-with-indent 'T_LIST))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "array")
- (phps-mode-lexer--return-token-with-indent 'T_ARRAY))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "callable")
- (phps-mode-lexer--return-token-with-indent 'T_CALLABLE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\+\\+")
- (phps-mode-lexer--return-token 'T_INC))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "--")
- (phps-mode-lexer--return-token 'T_DEC))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "===")
- (phps-mode-lexer--return-token 'T_IS_IDENTICAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "!==")
- (phps-mode-lexer--return-token 'T_IS_NOT_IDENTICAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "==")
- (phps-mode-lexer--return-token 'T_IS_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\(!=\\|<>\\)")
- (phps-mode-lexer--return-token 'T_IS_NOT_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "<=>")
- (phps-mode-lexer--return-token 'T_SPACESHIP))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "<=")
- (phps-mode-lexer--return-token 'T_IS_SMALLER_OR_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at ">=")
- (phps-mode-lexer--return-token 'T_IS_GREATER_OR_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\+=")
- (phps-mode-lexer--return-token 'T_PLUS_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "-=")
- (phps-mode-lexer--return-token 'T_MINUS_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\*=")
- (phps-mode-lexer--return-token 'T_MUL_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\*\\\\\\*=")
- (phps-mode-lexer--return-token 'T_POW_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\*\\\\\\*")
- (phps-mode-lexer--return-token 'T_POW))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "/=")
- (phps-mode-lexer--return-token 'T_DIV_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\.=")
- (phps-mode-lexer--return-token 'T_CONCAT_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "%=")
- (phps-mode-lexer--return-token 'T_MOD_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "<<=")
- (phps-mode-lexer--return-token 'T_SL_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at ">>=")
- (phps-mode-lexer--return-token 'T_SR_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "&=")
- (phps-mode-lexer--return-token 'T_AND_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "|=")
- (phps-mode-lexer--return-token 'T_OR_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\^=")
- (phps-mode-lexer--return-token 'T_XOR_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\?\\?=")
- (phps-mode-lexer--return-token 'T_COALESCE_EQUAL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "||")
- (phps-mode-lexer--return-token 'T_BOOLEAN_OR))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "&&")
- (phps-mode-lexer--return-token 'T_BOOLEAN_AND))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "OR")
- (phps-mode-lexer--return-token 'T_LOGICAL_OR))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "AND")
- (phps-mode-lexer--return-token 'T_LOGICAL_AND))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "XOR")
- (phps-mode-lexer--return-token 'T_LOGICAL_XOR))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "<<")
- (phps-mode-lexer--return-token 'T_SL))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at ">>")
- (phps-mode-lexer--return-token 'T_SR))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat "\\(" "]" "\\|" ")" "\\)"))
- (phps-mode-lexer--return-exit-nesting-token))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat "\\(" "\\[" "\\|" "(" "\\)"))
- (phps-mode-lexer--enter-nesting)
- (phps-mode-lexer--return-token))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at phps-mode-lexer--tokens)
- (phps-mode-lexer--return-token))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "{")
- (phps-mode-lexer--yy-push-state 'ST_IN_SCRIPTING)
- (phps-mode-lexer--enter-nesting "{")
- (phps-mode-lexer--return-token))
-
-(phps-mode-lexer--match-macro
- (ST_DOUBLE_QUOTES ST_BACKQUOTE ST_HEREDOC)
- (looking-at "\\${")
- (phps-mode-lexer--yy-push-state 'ST_LOOKING_FOR_VARNAME)
- (phps-mode-lexer--enter-nesting "{")
- (phps-mode-lexer--return-token 'T_DOLLAR_OPEN_CURLY_BRACES))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "}")
- (phps-mode-lexer--reset-doc-comment)
- (when phps-mode-lexer--state-stack
- (phps-mode-lexer--yy-pop-state))
- (phps-mode-lexer--return-exit-nesting-token))
-
-(phps-mode-lexer--match-macro
- ST_LOOKING_FOR_VARNAME
- (looking-at (concat phps-mode-lexer--label "[\\[}]"))
- (let* ((start (match-beginning 0))
- (end (1- (match-end 0)))
- (_data (buffer-substring-no-properties start end)))
- (phps-mode-lexer--yyless 1)
+
+(defun phps-mode-lxer--generate-lexer-rules ()
+ "Generate lexer match rules."
+
+ (eval-when-compile
+ (setq
+ phps-mode-lexer--lambdas-by-state
+ (make-hash-table :test 'equal)))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "exit")
+ (phps-mode-lexer--return-token-with-indent 'T_EXIT))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "die")
+ (phps-mode-lexer--return-token-with-indent 'T_EXIT))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "fn")
+ (phps-mode-lexer--return-token-with-indent 'T_FN))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "function")
+ (phps-mode-lexer--return-token-with-indent 'T_FUNCTION))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "const")
+ (phps-mode-lexer--return-token-with-indent 'T_CONST))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "return")
+ (phps-mode-lexer--return-token-with-indent 'T_RETURN))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "#\\[")
+ (phps-mode-lexer--enter-nesting "[")
+ (phps-mode-lexer--return-token 'T_ATTRIBUTE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "yield"
+ phps-mode-lexer--whitespace
+ "from"
+ "[^a-zA-Z0-9_\x80-\xff]"))
+ (phps-mode-lexer--return-token-with-indent 'T_YIELD_FROM))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "yield")
+ (phps-mode-lexer--return-token-with-indent 'T_YIELD))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "try")
+ (phps-mode-lexer--return-token-with-indent 'T_TRY))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "catch")
+ (phps-mode-lexer--return-token-with-indent 'T_CATCH))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "finally")
+ (phps-mode-lexer--return-token-with-indent 'T_FINALLY))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "throw")
+ (phps-mode-lexer--return-token-with-indent 'T_THROW))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "if")
+ (phps-mode-lexer--return-token-with-indent 'T_IF))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "elseif")
+ (phps-mode-lexer--return-token-with-indent 'T_ELSEIF))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "endif")
+ (phps-mode-lexer--return-token-with-indent 'T_ENDIF))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "else")
+ (phps-mode-lexer--return-token-with-indent 'T_ELSE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "while")
+ (phps-mode-lexer--return-token-with-indent 'T_WHILE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "endwhile")
+ (phps-mode-lexer--return-token-with-indent 'T_ENDWHILE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "do")
+ (phps-mode-lexer--return-token-with-indent 'T_DO))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "for")
+ (phps-mode-lexer--return-token-with-indent 'T_FOR))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "endfor")
+ (phps-mode-lexer--return-token-with-indent 'T_ENDFOR))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "foreach")
+ (phps-mode-lexer--return-token-with-indent 'T_FOREACH))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "endforeach")
+ (phps-mode-lexer--return-token-with-indent 'T_ENDFOREACH))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "declare")
+ (phps-mode-lexer--return-token-with-indent 'T_DECLARE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "enddeclare")
+ (phps-mode-lexer--return-token-with-indent 'T_ENDDECLARE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "instanceof")
+ (phps-mode-lexer--return-token-with-indent 'T_INSTANCEOF))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "as")
+ (phps-mode-lexer--return-token-with-indent 'T_AS))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "switch")
+ (phps-mode-lexer--return-token-with-indent 'T_SWITCH))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "match")
+ (phps-mode-lexer--return-token-with-indent 'T_MATCH))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "endswitch")
+ (phps-mode-lexer--return-token-with-indent 'T_ENDSWITCH))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "case")
+ (phps-mode-lexer--return-token-with-indent 'T_CASE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "default")
+ (phps-mode-lexer--return-token-with-indent 'T_DEFAULT))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "break")
+ (phps-mode-lexer--return-token-with-indent 'T_BREAK))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "continue")
+ (phps-mode-lexer--return-token-with-indent 'T_CONTINUE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "goto")
+ (phps-mode-lexer--return-token-with-indent 'T_GOTO))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "echo")
+ (phps-mode-lexer--return-token-with-indent 'T_ECHO))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "print")
+ (phps-mode-lexer--return-token-with-indent 'T_PRINT))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "class")
+ (phps-mode-lexer--return-token-with-indent 'T_CLASS))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "interface")
+ (phps-mode-lexer--return-token-with-indent 'T_INTERFACE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "trait")
+ (phps-mode-lexer--return-token-with-indent 'T_TRAIT))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "extends")
+ (phps-mode-lexer--return-token-with-indent 'T_EXTENDS))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "implements")
+ (phps-mode-lexer--return-token-with-indent 'T_IMPLEMENTS))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "->")
+ (phps-mode-lexer--yy-push-state 'ST_LOOKING_FOR_PROPERTY)
+ (phps-mode-lexer--return-token-with-indent 'T_OBJECT_OPERATOR))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "?->")
+ (phps-mode-lexer--yy-push-state 'ST_LOOKING_FOR_PROPERTY)
+ (phps-mode-lexer--return-token-with-indent 'T_NULLSAFE_OBJECT_OPERATOR))
+
+ (phps-mode-lexer--match-macro
+ (ST_IN_SCRIPTING ST_LOOKING_FOR_PROPERTY)
+ (looking-at phps-mode-lexer--whitespace)
+ (phps-mode-lexer--return-whitespace))
+
+ (phps-mode-lexer--match-macro
+ ST_LOOKING_FOR_PROPERTY
+ (looking-at "->")
+ (phps-mode-lexer--return-token 'T_OBJECT_OPERATOR))
+
+ (phps-mode-lexer--match-macro
+ ST_LOOKING_FOR_PROPERTY
+ (looking-at "?->")
+ (phps-mode-lexer--return-token 'T_NULLSAFE_OBJECT_OPERATOR))
+
+ (phps-mode-lexer--match-macro
+ ST_LOOKING_FOR_PROPERTY
+ (looking-at phps-mode-lexer--label)
+ (phps-mode-lexer--yy-pop-state)
+ (phps-mode-lexer--return-token-with-str 'T_STRING 0))
+
+ (phps-mode-lexer--match-macro
+ ST_LOOKING_FOR_PROPERTY
+ (looking-at phps-mode-lexer--any-char)
+ (phps-mode-lexer--yyless 0)
+ (phps-mode-lexer--yy-pop-state)
+ (phps-mode-lexer--restart))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "::")
+ (phps-mode-lexer--return-token 'T_PAAMAYIM_NEKUDOTAYIM))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\.\\.\\.")
+ (phps-mode-lexer--return-token 'T_ELLIPSIS))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\?\\?")
+ (phps-mode-lexer--return-token 'T_COALESCE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "new")
+ (phps-mode-lexer--return-token-with-indent 'T_NEW))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "clone")
+ (phps-mode-lexer--return-token-with-indent 'T_CLONE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "var")
+ (phps-mode-lexer--return-token-with-indent 'T_VAR))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer--tabs-and-spaces
+ "\\(int\\|integer\\)"
+ phps-mode-lexer--tabs-and-spaces
+ ")"))
+ (phps-mode-lexer--return-token 'T_INT_CAST))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer--tabs-and-spaces
+ "\\(double\\|float\\)"
+ phps-mode-lexer--tabs-and-spaces
+ ")"))
+ (phps-mode-lexer--return-token 'T_DOUBLE_CAST))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer--tabs-and-spaces
+ "\\(real\\)"
+ phps-mode-lexer--tabs-and-spaces
+ ")"))
+ (when (phps-mode-lexer--parser-mode)
+ (signal
+ 'phps-lexer-error
+ (list
+ (format
+ "The (real) cast has been removed, use (float) instead at %d"
+ (match-beginning 0))
+ (match-beginning 0)
+ (match-end 0))))
+ (phps-mode-lexer--return-token 'T_DOUBLE_CAST))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer--tabs-and-spaces
+ "\\(string\\|binary\\)"
+ phps-mode-lexer--tabs-and-spaces
+ ")"))
+ (phps-mode-lexer--return-token 'T_STRING_CAST))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer--tabs-and-spaces
+ "array"
+ phps-mode-lexer--tabs-and-spaces
+ ")"))
+ (phps-mode-lexer--return-token 'T_ARRAY_CAST))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer--tabs-and-spaces
+ "object"
+ phps-mode-lexer--tabs-and-spaces
+ ")"))
+ (phps-mode-lexer--return-token 'T_OBJECT_CAST))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer--tabs-and-spaces
+ "\\(bool\\|boolean\\)"
+ phps-mode-lexer--tabs-and-spaces
+ ")"))
+ (phps-mode-lexer--return-token 'T_BOOL_CAST))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "("
+ phps-mode-lexer--tabs-and-spaces
+ "unset"
+ phps-mode-lexer--tabs-and-spaces ")"))
+ (phps-mode-lexer--return-token 'T_UNSET_CAST))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "eval")
+ (phps-mode-lexer--return-token-with-indent 'T_EVAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "include")
+ (phps-mode-lexer--return-token-with-indent 'T_INCLUDE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "include_once")
+ (phps-mode-lexer--return-token-with-indent 'T_INCLUDE_ONCE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "require")
+ (phps-mode-lexer--return-token-with-indent 'T_REQUIRE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "require_once")
+ (phps-mode-lexer--return-token-with-indent 'T_REQUIRE_ONCE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "namespace")
+ (phps-mode-lexer--return-token-with-indent 'T_NAMESPACE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "use")
+ (phps-mode-lexer--return-token-with-indent 'T_USE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "insteadof")
+ (phps-mode-lexer--return-token-with-indent 'T_INSTEADOF))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "global")
+ (phps-mode-lexer--return-token-with-indent 'T_GLOBAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "isset")
+ (phps-mode-lexer--return-token-with-indent 'T_ISSET))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "empty")
+ (phps-mode-lexer--return-token-with-indent 'T_EMPTY))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "__halt_compiler")
+ (phps-mode-lexer--return-token-with-indent 'T_HALT_COMPILER))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "static")
+ (phps-mode-lexer--return-token-with-indent 'T_STATIC))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "abstract")
+ (phps-mode-lexer--return-token-with-indent 'T_ABSTRACT))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "final")
+ (phps-mode-lexer--return-token-with-indent 'T_FINAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "private")
+ (phps-mode-lexer--return-token-with-indent 'T_PRIVATE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "protected")
+ (phps-mode-lexer--return-token-with-indent 'T_PROTECTED))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "public")
+ (phps-mode-lexer--return-token-with-indent 'T_PUBLIC))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "unset")
+ (phps-mode-lexer--return-token-with-indent 'T_UNSET))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "=>")
+ (phps-mode-lexer--return-token 'T_DOUBLE_ARROW))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "list")
+ (phps-mode-lexer--return-token-with-indent 'T_LIST))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "array")
+ (phps-mode-lexer--return-token-with-indent 'T_ARRAY))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "callable")
+ (phps-mode-lexer--return-token-with-indent 'T_CALLABLE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\+\\+")
+ (phps-mode-lexer--return-token 'T_INC))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "--")
+ (phps-mode-lexer--return-token 'T_DEC))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "===")
+ (phps-mode-lexer--return-token 'T_IS_IDENTICAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "!==")
+ (phps-mode-lexer--return-token 'T_IS_NOT_IDENTICAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "==")
+ (phps-mode-lexer--return-token 'T_IS_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\(!=\\|<>\\)")
+ (phps-mode-lexer--return-token 'T_IS_NOT_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "<=>")
+ (phps-mode-lexer--return-token 'T_SPACESHIP))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "<=")
+ (phps-mode-lexer--return-token 'T_IS_SMALLER_OR_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at ">=")
+ (phps-mode-lexer--return-token 'T_IS_GREATER_OR_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\+=")
+ (phps-mode-lexer--return-token 'T_PLUS_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "-=")
+ (phps-mode-lexer--return-token 'T_MINUS_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\*=")
+ (phps-mode-lexer--return-token 'T_MUL_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\*\\\\\\*=")
+ (phps-mode-lexer--return-token 'T_POW_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\*\\\\\\*")
+ (phps-mode-lexer--return-token 'T_POW))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "/=")
+ (phps-mode-lexer--return-token 'T_DIV_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\.=")
+ (phps-mode-lexer--return-token 'T_CONCAT_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "%=")
+ (phps-mode-lexer--return-token 'T_MOD_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "<<=")
+ (phps-mode-lexer--return-token 'T_SL_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at ">>=")
+ (phps-mode-lexer--return-token 'T_SR_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "&=")
+ (phps-mode-lexer--return-token 'T_AND_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "|=")
+ (phps-mode-lexer--return-token 'T_OR_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\^=")
+ (phps-mode-lexer--return-token 'T_XOR_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\?\\?=")
+ (phps-mode-lexer--return-token 'T_COALESCE_EQUAL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "||")
+ (phps-mode-lexer--return-token 'T_BOOLEAN_OR))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "&&")
+ (phps-mode-lexer--return-token 'T_BOOLEAN_AND))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "OR")
+ (phps-mode-lexer--return-token 'T_LOGICAL_OR))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "AND")
+ (phps-mode-lexer--return-token 'T_LOGICAL_AND))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "XOR")
+ (phps-mode-lexer--return-token 'T_LOGICAL_XOR))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "<<")
+ (phps-mode-lexer--return-token 'T_SL))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at ">>")
+ (phps-mode-lexer--return-token 'T_SR))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat "\\(" "]" "\\|" ")" "\\)"))
+ (phps-mode-lexer--return-exit-nesting-token))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat "\\(" "\\[" "\\|" "(" "\\)"))
+ (phps-mode-lexer--enter-nesting)
+ (phps-mode-lexer--return-token))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at phps-mode-lexer--tokens)
+ (phps-mode-lexer--return-token))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "{")
+ (phps-mode-lexer--yy-push-state 'ST_IN_SCRIPTING)
+ (phps-mode-lexer--enter-nesting "{")
+ (phps-mode-lexer--return-token))
+
+ (phps-mode-lexer--match-macro
+ (ST_DOUBLE_QUOTES ST_BACKQUOTE ST_HEREDOC)
+ (looking-at "\\${")
+ (phps-mode-lexer--yy-push-state 'ST_LOOKING_FOR_VARNAME)
+ (phps-mode-lexer--enter-nesting "{")
+ (phps-mode-lexer--return-token 'T_DOLLAR_OPEN_CURLY_BRACES))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "}")
+ (phps-mode-lexer--reset-doc-comment)
+ (when phps-mode-lexer--state-stack
+ (phps-mode-lexer--yy-pop-state))
+ (phps-mode-lexer--return-exit-nesting-token))
+
+ (phps-mode-lexer--match-macro
+ ST_LOOKING_FOR_VARNAME
+ (looking-at (concat phps-mode-lexer--label "[\\[}]"))
+ (let* ((start (match-beginning 0))
+ (end (1- (match-end 0)))
+ (_data (buffer-substring-no-properties start end)))
+ (phps-mode-lexer--yyless 1)
+ (phps-mode-lexer--yy-pop-state)
+ (phps-mode-lexer--yy-push-state 'ST_IN_SCRIPTING)
+ (phps-mode-lexer--return-token 'T_STRING_VARNAME start end)))
+
+ (phps-mode-lexer--match-macro
+ ST_LOOKING_FOR_VARNAME
+ (looking-at phps-mode-lexer--any-char)
+ (phps-mode-lexer--yyless 0)
(phps-mode-lexer--yy-pop-state)
(phps-mode-lexer--yy-push-state 'ST_IN_SCRIPTING)
- (phps-mode-lexer--return-token 'T_STRING_VARNAME start end)))
-
-(phps-mode-lexer--match-macro
- ST_LOOKING_FOR_VARNAME
- (looking-at phps-mode-lexer--any-char)
- (phps-mode-lexer--yyless 0)
- (phps-mode-lexer--yy-pop-state)
- (phps-mode-lexer--yy-push-state 'ST_IN_SCRIPTING)
- (phps-mode-lexer--restart))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at phps-mode-lexer--bnum)
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (buffer-substring-no-properties (+ start 2) end))
- (long-number (string-to-number data 2)))
- ;; (message "Binary number %s from %s" long-number data)
- (if (> long-number phps-mode-lexer--long-limit)
- (phps-mode-lexer--return-token 'T_DNUMBER)
- (phps-mode-lexer--return-token 'T_LNUMBER))))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at phps-mode-lexer--lnum)
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (string-to-number (buffer-substring-no-properties start end))))
- ;; (message "Long number: %d" data)
- (if (> data phps-mode-lexer--long-limit)
- (phps-mode-lexer--return-token 'T_DNUMBER)
- (phps-mode-lexer--return-token 'T_LNUMBER))))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at phps-mode-lexer--hnum)
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (buffer-substring-no-properties (+ start 2) end))
- (long-number (string-to-number data 16)))
- ;; (message "Hexadecimal number %s from %s" long-number data)
- (if (> long-number phps-mode-lexer--long-limit)
- (phps-mode-lexer--return-token 'T_DNUMBER)
- (phps-mode-lexer--return-token 'T_LNUMBER))))
-
-(phps-mode-lexer--match-macro
- ST_VAR_OFFSET
- (looking-at "\\([0]\\|[1-9][0-9]*\\)")
- (phps-mode-lexer--return-token 'T_NUM_STRING))
-
-(phps-mode-lexer--match-macro
- ST_VAR_OFFSET
- (looking-at
- (concat "\\("
- phps-mode-lexer--lnum "\\|"
- phps-mode-lexer--hnum "\\|"
- phps-mode-lexer--bnum "\\)"))
- (phps-mode-lexer--return-token 'T_NUM_STRING))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (or (looking-at phps-mode-lexer--dnum)
- (looking-at phps-mode-lexer--exponent-dnum))
- (phps-mode-lexer--return-token 'T_DNUMBER))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "__CLASS__")
- (phps-mode-lexer--return-token-with-indent 'T_CLASS_C))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "__TRAIT__")
- (phps-mode-lexer--return-token-with-indent 'T_TRAIT_C))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "__FUNCTION__")
- (phps-mode-lexer--return-token-with-indent 'T_FUNC_C))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "__METHOD__")
- (phps-mode-lexer--return-token-with-indent 'T_METHOD_C))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "__LINE__")
- (phps-mode-lexer--return-token-with-indent 'T_LINE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "__FILE__")
- (phps-mode-lexer--return-token-with-indent 'T_FILE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "__DIR__")
- (phps-mode-lexer--return-token-with-indent 'T_DIR))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "__NAMESPACE__")
- (phps-mode-lexer--return-token-with-indent 'T_NS_C))
-
-(phps-mode-lexer--match-macro
- 'SHEBANG
- (looking-at (concat "#!.*" phps-mode-lexer--newline))
- (let ((lineno
- (1+
- (phps-mode-lexer--CG 'zend_lineno))))
- (phps-mode-lexer--CG 'zend-lineno lineno))
- (phps-mode-lexer--begin 'ST_INITIAL)
- (phps-mode-lexer--restart))
-
-(phps-mode-lexer--match-macro
- 'SHEBANG
- (looking-at phps-mode-lexer--any-char)
- (phps-mode-lexer--yyless 0)
- (phps-mode-lexer--begin 'ST_INITIAL)
- (phps-mode-lexer--restart))
-
-(phps-mode-lexer--match-macro
- ST_INITIAL
- (looking-at "<\\?=")
- (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
- (when (phps-mode-lexer--parser-mode)
- (phps-mode-lexer--return-token-with-indent 'T_ECHO))
- (phps-mode-lexer--return-token 'T_OPEN_TAG_WITH_ECHO))
-
-(phps-mode-lexer--match-macro
- ST_INITIAL
- (looking-at
- (concat
- "<\\?php\\([ \t]\\|"
- phps-mode-lexer--newline
- "\\)"))
- (phps-mode-lexer--handle-newline)
- (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
- (phps-mode-lexer--return-or-skip-token 'T_OPEN_TAG))
-
-(phps-mode-lexer--match-macro
- ST_INITIAL
- (looking-at "<\\?php")
- (let ((start (match-beginning 0))
- (end (match-end 0)))
-
- ;; Allow <?php followed by end of file.
- (cond
-
- ((equal end (point-max))
- (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
- (phps-mode-lexer--return-or-skip-token 'T_OPEN_TAG))
+ (phps-mode-lexer--restart))
- ((phps-mode-lexer--CG 'short-tags)
- (phps-mode-lexer--yyless 2)
- (setq end (- end 2))
- (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
- (phps-mode-lexer--return-or-skip-token
- 'T_OPEN_TAG
- start
- end))
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at phps-mode-lexer--bnum)
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (buffer-substring-no-properties (+ start 2) end))
+ (long-number (string-to-number data 2)))
+ ;; (message "Binary number %s from %s" long-number data)
+ (if (> long-number phps-mode-lexer--long-limit)
+ (phps-mode-lexer--return-token 'T_DNUMBER)
+ (phps-mode-lexer--return-token 'T_LNUMBER))))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at phps-mode-lexer--lnum)
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (string-to-number (buffer-substring-no-properties start end))))
+ ;; (message "Long number: %d" data)
+ (if (> data phps-mode-lexer--long-limit)
+ (phps-mode-lexer--return-token 'T_DNUMBER)
+ (phps-mode-lexer--return-token 'T_LNUMBER))))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at phps-mode-lexer--hnum)
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (buffer-substring-no-properties (+ start 2) end))
+ (long-number (string-to-number data 16)))
+ ;; (message "Hexadecimal number %s from %s" long-number data)
+ (if (> long-number phps-mode-lexer--long-limit)
+ (phps-mode-lexer--return-token 'T_DNUMBER)
+ (phps-mode-lexer--return-token 'T_LNUMBER))))
+
+ (phps-mode-lexer--match-macro
+ ST_VAR_OFFSET
+ (looking-at "\\([0]\\|[1-9][0-9]*\\)")
+ (phps-mode-lexer--return-token 'T_NUM_STRING))
+
+ (phps-mode-lexer--match-macro
+ ST_VAR_OFFSET
+ (looking-at
+ (concat "\\("
+ phps-mode-lexer--lnum "\\|"
+ phps-mode-lexer--hnum "\\|"
+ phps-mode-lexer--bnum "\\)"))
+ (phps-mode-lexer--return-token 'T_NUM_STRING))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (or (looking-at phps-mode-lexer--dnum)
+ (looking-at phps-mode-lexer--exponent-dnum))
+ (phps-mode-lexer--return-token 'T_DNUMBER))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "__CLASS__")
+ (phps-mode-lexer--return-token-with-indent 'T_CLASS_C))
- (t
- (phps-mode-lexer--inline-char-handler)))))
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "__TRAIT__")
+ (phps-mode-lexer--return-token-with-indent 'T_TRAIT_C))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "__FUNCTION__")
+ (phps-mode-lexer--return-token-with-indent 'T_FUNC_C))
-(phps-mode-lexer--match-macro
- ST_INITIAL
- (looking-at "<\\?")
- (if (phps-mode-lexer--CG 'short-tags)
- (progn
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "__METHOD__")
+ (phps-mode-lexer--return-token-with-indent 'T_METHOD_C))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "__LINE__")
+ (phps-mode-lexer--return-token-with-indent 'T_LINE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "__FILE__")
+ (phps-mode-lexer--return-token-with-indent 'T_FILE))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "__DIR__")
+ (phps-mode-lexer--return-token-with-indent 'T_DIR))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "__NAMESPACE__")
+ (phps-mode-lexer--return-token-with-indent 'T_NS_C))
+
+ (phps-mode-lexer--match-macro
+ 'SHEBANG
+ (looking-at (concat "#!.*" phps-mode-lexer--newline))
+ (let ((lineno
+ (1+
+ (phps-mode-lexer--CG 'zend_lineno))))
+ (phps-mode-lexer--CG 'zend-lineno lineno))
+ (phps-mode-lexer--begin 'ST_INITIAL)
+ (phps-mode-lexer--restart))
+
+ (phps-mode-lexer--match-macro
+ 'SHEBANG
+ (looking-at phps-mode-lexer--any-char)
+ (phps-mode-lexer--yyless 0)
+ (phps-mode-lexer--begin 'ST_INITIAL)
+ (phps-mode-lexer--restart))
+
+ (phps-mode-lexer--match-macro
+ ST_INITIAL
+ (looking-at "<\\?=")
+ (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
+ (when (phps-mode-lexer--parser-mode)
+ (phps-mode-lexer--return-token-with-indent 'T_ECHO))
+ (phps-mode-lexer--return-token 'T_OPEN_TAG_WITH_ECHO))
+
+ (phps-mode-lexer--match-macro
+ ST_INITIAL
+ (looking-at
+ (concat
+ "<\\?php\\([ \t]\\|"
+ phps-mode-lexer--newline
+ "\\)"))
+ (phps-mode-lexer--handle-newline)
+ (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
+ (phps-mode-lexer--return-or-skip-token 'T_OPEN_TAG))
+
+ (phps-mode-lexer--match-macro
+ ST_INITIAL
+ (looking-at "<\\?php")
+ (let ((start (match-beginning 0))
+ (end (match-end 0)))
+
+ ;; Allow <?php followed by end of file.
+ (cond
+
+ ((equal end (point-max))
(phps-mode-lexer--begin 'ST_IN_SCRIPTING)
(phps-mode-lexer--return-or-skip-token 'T_OPEN_TAG))
- (phps-mode-lexer--inline-char-handler)))
-
-(phps-mode-lexer--match-macro
- ST_INITIAL
- (looking-at phps-mode-lexer--any-char)
- (if (= (point) (point-max))
- (phps-mode-lexer--return-end-token)
- (phps-mode-lexer--inline-char-handler)))
-
-;; Make sure a label character follows "->" or "?->", otherwise there is no
property
-;; and "->"/"?->" will be taken literally
-(phps-mode-lexer--match-macro
- (ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE)
- (looking-at
- (concat
- "\\$"
- phps-mode-lexer--label
- "->"
- "[a-zA-Z_\x80-\xff]"))
- (phps-mode-lexer--yyless 3)
- (phps-mode-lexer--yy-push-state 'ST_LOOKING_FOR_PROPERTY)
- (phps-mode-lexer--return-token-with-str
- 'T_VARIABLE
- 1
- (match-beginning 0)
- (- (match-end 0) 3)))
-
-(phps-mode-lexer--match-macro
- (ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE)
- (looking-at
- (concat
- "\\$"
- phps-mode-lexer--label
- "\\?->"
- "[a-zA-Z_\x80-\xff]"))
- (phps-mode-lexer--yyless 4)
- (phps-mode-lexer--yy-push-state 'ST_LOOKING_FOR_PROPERTY)
- (phps-mode-lexer--return-token-with-str
- 'T_VARIABLE
- 1
- (match-beginning 0)
- (- (match-end 0) 4)))
-
-;; A [ always designates a variable offset, regardless of what follows
-(phps-mode-lexer--match-macro
- (ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE)
- (looking-at
- (concat
- "\\$"
- phps-mode-lexer--label
- "\\["))
- (phps-mode-lexer--yyless 1)
- (phps-mode-lexer--yy-push-state 'ST_VAR_OFFSET)
- (phps-mode-lexer--return-token-with-str
- 'T_VARIABLE
- 1
- (match-beginning 0)
- (- (match-end 0) 1)))
-
-(phps-mode-lexer--match-macro
- (
+
+ ((phps-mode-lexer--CG 'short-tags)
+ (phps-mode-lexer--yyless 2)
+ (setq end (- end 2))
+ (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
+ (phps-mode-lexer--return-or-skip-token
+ 'T_OPEN_TAG
+ start
+ end))
+
+ (t
+ (phps-mode-lexer--inline-char-handler)))))
+
+ (phps-mode-lexer--match-macro
+ ST_INITIAL
+ (looking-at "<\\?")
+ (if (phps-mode-lexer--CG 'short-tags)
+ (progn
+ (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
+ (phps-mode-lexer--return-or-skip-token 'T_OPEN_TAG))
+ (phps-mode-lexer--inline-char-handler)))
+
+ (phps-mode-lexer--match-macro
+ ST_INITIAL
+ (looking-at phps-mode-lexer--any-char)
+ (if (= (point) (point-max))
+ (phps-mode-lexer--return-end-token)
+ (phps-mode-lexer--inline-char-handler)))
+
+ ;; Make sure a label character follows "->" or "?->", otherwise there is no
property
+ ;; and "->"/"?->" will be taken literally
+ (phps-mode-lexer--match-macro
+ (ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE)
+ (looking-at
+ (concat
+ "\\$"
+ phps-mode-lexer--label
+ "->"
+ "[a-zA-Z_\x80-\xff]"))
+ (phps-mode-lexer--yyless 3)
+ (phps-mode-lexer--yy-push-state 'ST_LOOKING_FOR_PROPERTY)
+ (phps-mode-lexer--return-token-with-str
+ 'T_VARIABLE
+ 1
+ (match-beginning 0)
+ (- (match-end 0) 3)))
+
+ (phps-mode-lexer--match-macro
+ (ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE)
+ (looking-at
+ (concat
+ "\\$"
+ phps-mode-lexer--label
+ "\\?->"
+ "[a-zA-Z_\x80-\xff]"))
+ (phps-mode-lexer--yyless 4)
+ (phps-mode-lexer--yy-push-state 'ST_LOOKING_FOR_PROPERTY)
+ (phps-mode-lexer--return-token-with-str
+ 'T_VARIABLE
+ 1
+ (match-beginning 0)
+ (- (match-end 0) 4)))
+
+ ;; A [ always designates a variable offset, regardless of what follows
+ (phps-mode-lexer--match-macro
+ (ST_DOUBLE_QUOTES ST_HEREDOC ST_BACKQUOTE)
+ (looking-at
+ (concat
+ "\\$"
+ phps-mode-lexer--label
+ "\\["))
+ (phps-mode-lexer--yyless 1)
+ (phps-mode-lexer--yy-push-state 'ST_VAR_OFFSET)
+ (phps-mode-lexer--return-token-with-str
+ 'T_VARIABLE
+ 1
+ (match-beginning 0)
+ (- (match-end 0) 1)))
+
+ (phps-mode-lexer--match-macro
+ (
+ ST_IN_SCRIPTING
+ ST_DOUBLE_QUOTES
+ ST_HEREDOC
+ ST_BACKQUOTE
+ ST_VAR_OFFSET)
+ (looking-at
+ (concat
+ "\\$"
+ phps-mode-lexer--label))
+ (phps-mode-lexer--return-token-with-str 'T_VARIABLE 1))
+
+ (phps-mode-lexer--match-macro
+ ST_VAR_OFFSET
+ (looking-at "\\]")
+ (phps-mode-lexer--yy-pop-state)
+ (phps-mode-lexer--return-token-with-str "]" 1))
+
+ (phps-mode-lexer--match-macro
+ ST_VAR_OFFSET
+ (looking-at
+ (concat "\\(" phps-mode-lexer--tokens
+ "\\|[{}\"`]\\)"))
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (buffer-substring-no-properties start end)))
+ ;; Only '[' or '-' can be valid, but returning other tokens will allow a
more explicit parse error
+ (phps-mode-lexer--return-token data)))
+
+ (phps-mode-lexer--match-macro
+ ST_VAR_OFFSET
+ (looking-at (concat "[ \n\r\t'#]"))
+ ;; Invalid rule to return a more explicit parse error with proper line
number
+ (phps-mode-lexer--yyless 0)
+ (phps-mode-lexer--yy-pop-state)
+ (phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE))
+
+ (phps-mode-lexer--match-macro
ST_IN_SCRIPTING
- ST_DOUBLE_QUOTES
- ST_HEREDOC
- ST_BACKQUOTE
- ST_VAR_OFFSET)
- (looking-at
- (concat
- "\\$"
- phps-mode-lexer--label))
- (phps-mode-lexer--return-token-with-str 'T_VARIABLE 1))
-
-(phps-mode-lexer--match-macro
- ST_VAR_OFFSET
- (looking-at "\\]")
- (phps-mode-lexer--yy-pop-state)
- (phps-mode-lexer--return-token-with-str "]" 1))
-
-(phps-mode-lexer--match-macro
- ST_VAR_OFFSET
- (looking-at
- (concat "\\(" phps-mode-lexer--tokens
- "\\|[{}\"`]\\)"))
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (buffer-substring-no-properties start end)))
- ;; Only '[' or '-' can be valid, but returning other tokens will allow a
more explicit parse error
- (phps-mode-lexer--return-token data)))
-
-(phps-mode-lexer--match-macro
- ST_VAR_OFFSET
- (looking-at (concat "[ \n\r\t'#]"))
- ;; Invalid rule to return a more explicit parse error with proper line number
- (phps-mode-lexer--yyless 0)
- (phps-mode-lexer--yy-pop-state)
- (phps-mode-lexer--return-token-with-val 'T_ENCAPSED_AND_WHITESPACE))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "namespace"
- "\\("
- "\\\\"
- phps-mode-lexer--label
- "\\)+"))
- (phps-mode-lexer--return-token-with-str
- 'T_NAME_RELATIVE
- (1- (length "namespace\\"))))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at (concat
- phps-mode-lexer--label
- "\\("
- "\\\\"
- phps-mode-lexer--label
- "\\)+"))
- (phps-mode-lexer--return-token-with-str
- 'T_NAME_QUALIFIED
- 0))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at (concat
- "\\\\"
- phps-mode-lexer--label
- "\\("
- "\\\\"
- phps-mode-lexer--label
- "\\)*"))
- (phps-mode-lexer--return-token-with-str
- 'T_NAME_FULLY_QUALIFIED
- 1))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\\\")
- (phps-mode-lexer--return-token 'T_NS_SEPARATOR))
-
-(phps-mode-lexer--match-macro
- (ST_IN_SCRIPTING ST_VAR_OFFSET)
- (looking-at phps-mode-lexer--label)
- (phps-mode-lexer--return-token-with-str 'T_STRING 0))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\\(#\\|//\\)")
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (_data (buffer-substring-no-properties start end))
- (line (buffer-substring-no-properties end (line-end-position))))
- (if (string-match "\\?>" line)
+ (looking-at
+ (concat
+ "namespace"
+ "\\("
+ "\\\\"
+ phps-mode-lexer--label
+ "\\)+"))
+ (phps-mode-lexer--return-token-with-str
+ 'T_NAME_RELATIVE
+ (1- (length "namespace\\"))))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at (concat
+ phps-mode-lexer--label
+ "\\("
+ "\\\\"
+ phps-mode-lexer--label
+ "\\)+"))
+ (phps-mode-lexer--return-token-with-str
+ 'T_NAME_QUALIFIED
+ 0))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at (concat
+ "\\\\"
+ phps-mode-lexer--label
+ "\\("
+ "\\\\"
+ phps-mode-lexer--label
+ "\\)*"))
+ (phps-mode-lexer--return-token-with-str
+ 'T_NAME_FULLY_QUALIFIED
+ 1))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\\\")
+ (phps-mode-lexer--return-token 'T_NS_SEPARATOR))
+
+ (phps-mode-lexer--match-macro
+ (ST_IN_SCRIPTING ST_VAR_OFFSET)
+ (looking-at phps-mode-lexer--label)
+ (phps-mode-lexer--return-token-with-str 'T_STRING 0))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\\(#\\|//\\)")
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (_data (buffer-substring-no-properties start end))
+ (line (buffer-substring-no-properties end (line-end-position))))
+ (if (string-match "\\?>" line)
+ (phps-mode-lexer--return-or-skip-token
+ 'T_COMMENT
+ start
+ (+ end (match-beginning 0)))
(phps-mode-lexer--return-or-skip-token
'T_COMMENT
start
- (+ end (match-beginning 0)))
- (phps-mode-lexer--return-or-skip-token
- 'T_COMMENT
- start
- (line-end-position)))))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "\\(/\\*\\|/\\*\\*"
- phps-mode-lexer--whitespace
- "\\)"))
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (_data (buffer-substring-no-properties start end))
- (doc-com (looking-at-p (concat "/\\*\\*"
phps-mode-lexer--whitespace))))
- (let ((string-start (search-forward "*/" nil t)))
- (if string-start
- (if doc-com
- (progn
- (phps-mode-lexer--reset-doc-comment)
- (phps-mode-lexer--return-token
- 'T_DOC_COMMENT
- start)
- (phps-mode-lexer--CG 'doc_comment t))
- (phps-mode-lexer--return-token
- 'T_COMMENT start))
- (progn
- (signal
- 'phps-lexer-error
- (list
- (format
- "Unterminated comment starting at %d"
- start)
- start)))))))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "\\?>"
- phps-mode-lexer--newline
- "?"))
- (let ((start (match-beginning 0))
- (end (match-end 0)))
- (when (= (- end start) 3)
- (setq end (1- end)))
- (phps-mode-lexer--begin 'ST_INITIAL)
- (when (phps-mode-lexer--parser-mode)
+ (line-end-position)))))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "\\(/\\*\\|/\\*\\*"
+ phps-mode-lexer--whitespace
+ "\\)"))
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (_data (buffer-substring-no-properties start end))
+ (doc-com (looking-at-p (concat "/\\*\\*"
phps-mode-lexer--whitespace))))
+ (let ((string-start (search-forward "*/" nil t)))
+ (if string-start
+ (if doc-com
+ (progn
+ (phps-mode-lexer--reset-doc-comment)
+ (phps-mode-lexer--return-token
+ 'T_DOC_COMMENT
+ start)
+ (phps-mode-lexer--CG 'doc_comment t))
+ (phps-mode-lexer--return-token
+ 'T_COMMENT start))
+ (progn
+ (signal
+ 'phps-lexer-error
+ (list
+ (format
+ "Unterminated comment starting at %d"
+ start)
+ start)))))))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "\\?>"
+ phps-mode-lexer--newline
+ "?"))
+ (let ((start (match-beginning 0))
+ (end (match-end 0)))
+ (when (= (- end start) 3)
+ (setq end (1- end)))
+ (phps-mode-lexer--begin 'ST_INITIAL)
+ (when (phps-mode-lexer--parser-mode)
+ (phps-mode-lexer--return-token
+ ";"
+ start
+ end))
(phps-mode-lexer--return-token
- ";"
+ 'T_CLOSE_TAG
start
- end))
- (phps-mode-lexer--return-token
- 'T_CLOSE_TAG
- start
- end)))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "'")
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (_data (buffer-substring-no-properties start end))
- (un-escaped-end (phps-mode-lexer--get-next-unescaped "'")))
- (if un-escaped-end
- (phps-mode-lexer--return-token
- 'T_CONSTANT_ENCAPSED_STRING
+ end)))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "'")
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (_data (buffer-substring-no-properties start end))
+ (un-escaped-end (phps-mode-lexer--get-next-unescaped "'")))
+ (if un-escaped-end
+ (phps-mode-lexer--return-token
+ 'T_CONSTANT_ENCAPSED_STRING
+ start
+ un-escaped-end)
+ ;; Unclosed single quotes
+ (phps-mode-lexer--return-token-with-val
+ 'T_ENCAPSED_AND_WHITESPACE
start
- un-escaped-end)
- ;; Unclosed single quotes
- (phps-mode-lexer--return-token-with-val
- 'T_ENCAPSED_AND_WHITESPACE
+ (point-max))
+ (phps-mode-lexer--move-forward
+ (point-max)))))
+
+ ;; Double quoted string
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "\"")
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (_data (buffer-substring-no-properties start end))
+ (open-quote t))
+
+ ;; Move forward from the double-quote one character
+ (forward-char)
+
+ (while open-quote
+ (let ((string-start
+ (search-forward-regexp
+ (concat
+ "\\(\""
+ "\\|\\$" phps-mode-lexer--label
+ "\\|\\${" phps-mode-lexer--label
+ "\\|{\\$" phps-mode-lexer--label "\\)")
+ nil t)))
+
+ ;; Do we find a ending double quote or starting variable?
+ (if string-start
+ (let ((string-start (match-beginning 0))
+ (is-escaped nil)
+ (is-escaped-1 nil)
+ (is-escaped-2 nil))
+
+ ;; Check whether one character back is escape character
+ (goto-char (1- string-start))
+ (setq is-escaped-1 (looking-at-p "\\\\"))
+
+ ;; Check whether two characters back is escape character
+ (goto-char (- string-start 2))
+ (setq is-escaped-2 (looking-at-p "\\\\"))
+
+ (setq is-escaped
+ (and
+ is-escaped-1
+ (not is-escaped-2)))
+
+ ;; Do we find variable inside quote?
+ (goto-char string-start)
+
+ ;; Process character if it's not escaped
+ (if is-escaped
+ (forward-char 1)
+ (setq open-quote nil)
+ (if (looking-at "\"")
+ (let ((_double-quoted-string
+ (buffer-substring-no-properties start (+
string-start 1))))
+ ;; (message "Double quoted string: %s"
_double-quoted-string)
+ (phps-mode-lexer--return-token-with-val
+ 'T_CONSTANT_ENCAPSED_STRING
+ start
+ (+ string-start 1)))
+ ;; (message "Found variable after '%s' at %s-%s"
(buffer-substring-no-properties start string-start) start string-start)
+ (phps-mode-lexer--begin 'ST_DOUBLE_QUOTES)
+ (phps-mode-lexer--return-token "\"" start (1+ start)))))
+ (progn
+ (setq open-quote nil)
+ (signal
+ 'phps-lexer-error
+ (list
+ (format "Found no ending of quote at %s" start)
+ start))))))))
+
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at
+ (concat
+ "<<<"
+ phps-mode-lexer--tabs-and-spaces
+ "\\("
+ phps-mode-lexer--label
+ "\\|'"
+ phps-mode-lexer--label
+ "'\\|\""
+ phps-mode-lexer--label
+ "\"\\)"
+ phps-mode-lexer--newline))
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data
+ (buffer-substring-no-properties
+ (match-beginning 1)
+ (match-end 1))))
+
+ ;; Determine if it's HEREDOC or NOWDOC and extract label here
+ (if (string= (substring data 0 1) "'")
+ (progn
+ (setq
+ phps-mode-lexer--heredoc-label
+ (substring data 1 (- (length data) 1)))
+ (phps-mode-lexer--begin 'ST_NOWDOC))
+ (progn
+ (if (string= (substring data 0 1) "\"")
+ (setq
+ phps-mode-lexer--heredoc-label
+ (substring data 1 (- (length data) 1)))
+ (setq
+ phps-mode-lexer--heredoc-label
+ data))
+ (phps-mode-lexer--begin 'ST_HEREDOC)))
+
+ ;; Check for ending label on the next line
+ (when (string=
+ (buffer-substring-no-properties
+ end
+ (+ end
+ (length
+ phps-mode-lexer--heredoc-label)))
+ phps-mode-lexer--heredoc-label)
+ (phps-mode-lexer--begin 'ST_END_HEREDOC))
+
+ (push
+ `(,phps-mode-lexer--heredoc-label ,start ,end)
+ phps-mode-lexer--heredoc-label-stack)
+ ;; (message "Found heredoc or nowdoc at %s with label %s" data
phps-mode-lexer--heredoc-label)
+
+ (phps-mode-lexer--CG
+ 'doc_comment
+ t)
+ (phps-mode-lexer--return-token
+ 'T_START_HEREDOC
start
- (point-max))
- (phps-mode-lexer--move-forward
- (point-max)))))
-
-;; Double quoted string
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "\"")
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (_data (buffer-substring-no-properties start end))
- (open-quote t))
-
- ;; Move forward from the double-quote one character
- (forward-char)
-
- (while open-quote
- (let ((string-start
- (search-forward-regexp
- (concat
- "\\(\""
- "\\|\\$" phps-mode-lexer--label
- "\\|\\${" phps-mode-lexer--label
- "\\|{\\$" phps-mode-lexer--label "\\)")
- nil t)))
+ end)))
- ;; Do we find a ending double quote or starting variable?
- (if string-start
- (let ((string-start (match-beginning 0))
- (is-escaped nil)
- (is-escaped-1 nil)
- (is-escaped-2 nil))
+ (phps-mode-lexer--match-macro
+ ST_IN_SCRIPTING
+ (looking-at "[`]")
+ ;; (message "Begun backquote at %s-%s" (match-beginning 0) (match-end 0))
+ (phps-mode-lexer--begin 'ST_BACKQUOTE)
+ (phps-mode-lexer--return-token "`"))
+
+ (phps-mode-lexer--match-macro
+ ST_END_HEREDOC
+ (looking-at
+ (concat phps-mode-lexer--any-char))
+ (let* ((start (match-beginning 0))
+ (end (+ start
+ (length
+ phps-mode-lexer--heredoc-label)
+ 1))
+ (_data (buffer-substring-no-properties start end)))
+ ;; (message "Found ending heredoc at %s, %s of %s" _data (thing-at-point
'line) phps-mode-lexer--heredoc-label)
+ (pop phps-mode-lexer--heredoc-label-stack)
+ (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
+ (phps-mode-lexer--return-token 'T_END_HEREDOC start end)))
- ;; Check whether one character back is escape character
- (goto-char (1- string-start))
- (setq is-escaped-1 (looking-at-p "\\\\"))
+ (phps-mode-lexer--match-macro
+ (ST_DOUBLE_QUOTES ST_BACKQUOTE ST_HEREDOC)
+ (looking-at "{\\$")
+ (phps-mode-lexer--yy-push-state 'ST_IN_SCRIPTING)
+ (phps-mode-lexer--yyless 1)
+ (phps-mode-lexer--enter-nesting "{")
+ (phps-mode-lexer--return-token
+ 'T_CURLY_OPEN
+ (match-beginning 0)
+ (- (match-end 0) 1)))
- ;; Check whether two characters back is escape character
- (goto-char (- string-start 2))
- (setq is-escaped-2 (looking-at-p "\\\\"))
+ (phps-mode-lexer--match-macro
+ ST_DOUBLE_QUOTES
+ (looking-at "[\"]")
+ (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
+ (phps-mode-lexer--return-token "\""))
- (setq is-escaped
- (and
- is-escaped-1
- (not is-escaped-2)))
+ (phps-mode-lexer--match-macro
+ ST_BACKQUOTE
+ (looking-at "[`]")
+ (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
+ (phps-mode-lexer--return-token "`"))
+ (phps-mode-lexer--match-macro
+ ST_DOUBLE_QUOTES
+ (looking-at phps-mode-lexer--any-char)
+ (let ((start (point))
+ (start-error (car (cdr (nth 2 phps-mode-lexer--generated-tokens)))))
+ (let ((string-start (search-forward-regexp "[^\\\\]\"" nil t)))
+ (if string-start
+ (let* ((end (- (match-end 0) 1))
+ (double-quoted-string (buffer-substring-no-properties start
end)))
;; Do we find variable inside quote?
- (goto-char string-start)
-
- ;; Process character if it's not escaped
- (if is-escaped
- (forward-char 1)
- (setq open-quote nil)
- (if (looking-at "\"")
- (let ((_double-quoted-string
- (buffer-substring-no-properties start (+
string-start 1))))
- ;; (message "Double quoted string: %s"
_double-quoted-string)
+ (if (or (string-match (concat "\\${" phps-mode-lexer--label)
double-quoted-string)
+ (string-match (concat "{\\$" phps-mode-lexer--label)
double-quoted-string)
+ (string-match (concat "\\$" phps-mode-lexer--label)
double-quoted-string))
+ (progn
+ (let ((variable-start (+ start (match-beginning 0))))
+
+ ;; (message "Found starting expression inside
double-quoted string at: %s %s" start variable-start)
(phps-mode-lexer--return-token-with-val
- 'T_CONSTANT_ENCAPSED_STRING
+ 'T_ENCAPSED_AND_WHITESPACE
start
- (+ string-start 1)))
- ;; (message "Found variable after '%s' at %s-%s"
(buffer-substring-no-properties start string-start) start string-start)
- (phps-mode-lexer--begin 'ST_DOUBLE_QUOTES)
- (phps-mode-lexer--return-token "\"" start (1+ start)))))
+ variable-start)))
+ (progn
+ (phps-mode-lexer--return-token-with-val
+ 'T_ENCAPSED_AND_WHITESPACE
+ start
+ end)
+ ;; (message "Found end of quote at %s-%s, moving ahead after
'%s'" start end (buffer-substring-no-properties start end))
+ )))
(progn
- (setq open-quote nil)
(signal
'phps-lexer-error
(list
- (format "Found no ending of quote at %s" start)
- start))))))))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at
- (concat
- "<<<"
- phps-mode-lexer--tabs-and-spaces
- "\\("
- phps-mode-lexer--label
- "\\|'"
- phps-mode-lexer--label
- "'\\|\""
- phps-mode-lexer--label
- "\"\\)"
- phps-mode-lexer--newline))
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data
- (buffer-substring-no-properties
- (match-beginning 1)
- (match-end 1))))
-
- ;; Determine if it's HEREDOC or NOWDOC and extract label here
- (if (string= (substring data 0 1) "'")
- (progn
- (setq
- phps-mode-lexer--heredoc-label
- (substring data 1 (- (length data) 1)))
- (phps-mode-lexer--begin 'ST_NOWDOC))
- (progn
- (if (string= (substring data 0 1) "\"")
- (setq
- phps-mode-lexer--heredoc-label
- (substring data 1 (- (length data) 1)))
- (setq
- phps-mode-lexer--heredoc-label
- data))
- (phps-mode-lexer--begin 'ST_HEREDOC)))
-
- ;; Check for ending label on the next line
- (when (string=
- (buffer-substring-no-properties
- end
- (+ end
- (length
- phps-mode-lexer--heredoc-label)))
- phps-mode-lexer--heredoc-label)
- (phps-mode-lexer--begin 'ST_END_HEREDOC))
-
- (push
- `(,phps-mode-lexer--heredoc-label ,start ,end)
- phps-mode-lexer--heredoc-label-stack)
- ;; (message "Found heredoc or nowdoc at %s with label %s" data
phps-mode-lexer--heredoc-label)
-
- (phps-mode-lexer--CG
- 'doc_comment
- t)
- (phps-mode-lexer--return-token
- 'T_START_HEREDOC
- start
- end)))
-
-(phps-mode-lexer--match-macro
- ST_IN_SCRIPTING
- (looking-at "[`]")
- ;; (message "Begun backquote at %s-%s" (match-beginning 0) (match-end 0))
- (phps-mode-lexer--begin 'ST_BACKQUOTE)
- (phps-mode-lexer--return-token "`"))
-
-(phps-mode-lexer--match-macro
- ST_END_HEREDOC
- (looking-at
- (concat phps-mode-lexer--any-char))
- (let* ((start (match-beginning 0))
- (end (+ start
- (length
- phps-mode-lexer--heredoc-label)
- 1))
- (_data (buffer-substring-no-properties start end)))
- ;; (message "Found ending heredoc at %s, %s of %s" _data (thing-at-point
'line) phps-mode-lexer--heredoc-label)
- (pop phps-mode-lexer--heredoc-label-stack)
- (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
- (phps-mode-lexer--return-token 'T_END_HEREDOC start end)))
-
-(phps-mode-lexer--match-macro
- (ST_DOUBLE_QUOTES ST_BACKQUOTE ST_HEREDOC)
- (looking-at "{\\$")
- (phps-mode-lexer--yy-push-state 'ST_IN_SCRIPTING)
- (phps-mode-lexer--yyless 1)
- (phps-mode-lexer--enter-nesting "{")
- (phps-mode-lexer--return-token
- 'T_CURLY_OPEN
- (match-beginning 0)
- (- (match-end 0) 1)))
-
-(phps-mode-lexer--match-macro
- ST_DOUBLE_QUOTES
- (looking-at "[\"]")
- (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
- (phps-mode-lexer--return-token "\""))
-
-(phps-mode-lexer--match-macro
- ST_BACKQUOTE
- (looking-at "[`]")
- (phps-mode-lexer--begin 'ST_IN_SCRIPTING)
- (phps-mode-lexer--return-token "`"))
-
-(phps-mode-lexer--match-macro
- ST_DOUBLE_QUOTES
- (looking-at phps-mode-lexer--any-char)
- (let ((start (point))
- (start-error (car (cdr (nth 2 phps-mode-lexer--generated-tokens)))))
- (let ((string-start (search-forward-regexp "[^\\\\]\"" nil t)))
- (if string-start
- (let* ((end (- (match-end 0) 1))
- (double-quoted-string (buffer-substring-no-properties start
end)))
- ;; Do we find variable inside quote?
- (if (or (string-match (concat "\\${" phps-mode-lexer--label)
double-quoted-string)
- (string-match (concat "{\\$" phps-mode-lexer--label)
double-quoted-string)
- (string-match (concat "\\$" phps-mode-lexer--label)
double-quoted-string))
- (progn
- (let ((variable-start (+ start (match-beginning 0))))
-
- ;; (message "Found starting expression inside double-quoted
string at: %s %s" start variable-start)
- (phps-mode-lexer--return-token-with-val
- 'T_ENCAPSED_AND_WHITESPACE
- start
- variable-start)))
- (progn
+ (format "Found no ending of double quoted region starting at %d"
start-error)
+ start-error)))))))
+
+ (phps-mode-lexer--match-macro
+ ST_BACKQUOTE
+ (looking-at phps-mode-lexer--any-char)
+ (let ((start (car (cdr (car phps-mode-lexer--generated-tokens)))))
+ (let ((string-start (search-forward-regexp "\\([^\\\\]`\\|\\$\\|{\\)" nil
t)))
+ (if string-start
+ (let ((start (- (match-end 0) 1)))
+ ;; (message "Skipping backquote forward over %s"
(buffer-substring-no-properties phps-mode-lexer--generated-new-tokens-index
start))
+ (phps-mode-lexer--return-token-with-val
+ 'T_ENCAPSED_AND_WHITESPACE
+ phps-mode-lexer--generated-new-tokens-index
+ start))
+ (progn
+ (signal
+ 'phps-lexer-error
+ (list
+ (format "Found no ending of back-quoted string starting at %d"
start)
+ start)))))))
+
+ (phps-mode-lexer--match-macro
+ ST_HEREDOC
+ (looking-at phps-mode-lexer--any-char)
+ ;; Check for $, ${ and {$ forward
+ (let ((old-start (car (cdr (car phps-mode-lexer--heredoc-label-stack))))
+ (old-end (point)))
+ (let ((string-start
+ (search-forward-regexp
+ (concat
+ "\\(\n"
+ phps-mode-lexer--heredoc-label
+ ";?\n\\|\\$"
+ phps-mode-lexer--label
+ "\\|{\\$"
+ phps-mode-lexer--label
+ "\\|\\${"
+ phps-mode-lexer--label
+ "\\)"
+ )
+ nil
+ t)))
+ (if string-start
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (data (buffer-substring-no-properties start end)))
+
+ (cond
+
+ ((string-match
+ (concat
+ "\n"
+ phps-mode-lexer--heredoc-label
+ ";?\n"
+ )
+ data)
+ ;; (message "Found heredoc end at %s-%s" start end)
(phps-mode-lexer--return-token-with-val
'T_ENCAPSED_AND_WHITESPACE
- start
- end)
- ;; (message "Found end of quote at %s-%s, moving ahead after
'%s'" start end (buffer-substring-no-properties start end))
- )))
- (progn
- (signal
- 'phps-lexer-error
- (list
- (format "Found no ending of double quoted region starting at %d"
start-error)
- start-error)))))))
-
-(phps-mode-lexer--match-macro
- ST_BACKQUOTE
- (looking-at phps-mode-lexer--any-char)
- (let ((start (car (cdr (car phps-mode-lexer--generated-tokens)))))
- (let ((string-start (search-forward-regexp "\\([^\\\\]`\\|\\$\\|{\\)" nil
t)))
- (if string-start
- (let ((start (- (match-end 0) 1)))
- ;; (message "Skipping backquote forward over %s"
(buffer-substring-no-properties phps-mode-lexer--generated-new-tokens-index
start))
- (phps-mode-lexer--return-token-with-val
- 'T_ENCAPSED_AND_WHITESPACE
- phps-mode-lexer--generated-new-tokens-index
- start))
- (progn
- (signal
- 'phps-lexer-error
- (list
- (format "Found no ending of back-quoted string starting at %d"
start)
- start)))))))
-
-(phps-mode-lexer--match-macro
- ST_HEREDOC
- (looking-at phps-mode-lexer--any-char)
- ;; Check for $, ${ and {$ forward
- (let ((old-start (car (cdr (car phps-mode-lexer--heredoc-label-stack))))
- (old-end (point)))
- (let ((string-start
- (search-forward-regexp
- (concat
- "\\(\n"
- phps-mode-lexer--heredoc-label
- ";?\n\\|\\$"
- phps-mode-lexer--label
- "\\|{\\$"
- phps-mode-lexer--label
- "\\|\\${"
- phps-mode-lexer--label
- "\\)"
- )
- nil
- t)))
- (if string-start
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (data (buffer-substring-no-properties start end)))
-
- (cond
-
- ((string-match
- (concat
- "\n"
- phps-mode-lexer--heredoc-label
- ";?\n"
- )
- data)
- ;; (message "Found heredoc end at %s-%s" start end)
+ old-end
+ start)
+ (phps-mode-lexer--begin
+ 'ST_END_HEREDOC))
+
+ (t
+ ;; (message "Found variable at '%s'.. Skipping forward to %s"
data start)
+ (phps-mode-lexer--return-token-with-val
+ 'T_ENCAPSED_AND_WHITESPACE
+ old-end
+ start))
+
+ ))
+ (progn
+ (signal
+ 'phps-lexer-error
+ (list
+ (format "Found no ending of heredoc starting at %d" old-start)
+ old-start)))))))
+
+ (phps-mode-lexer--match-macro
+ ST_NOWDOC
+ (looking-at phps-mode-lexer--any-char)
+ (let ((start (car (cdr (car phps-mode-lexer--generated-tokens)))))
+ (let ((string-start (search-forward-regexp
+ (concat
+ "\n"
+ phps-mode-lexer--heredoc-label
+ ";?\\\n"
+ ) nil t)))
+ (if string-start
+ (let* ((start (match-beginning 0))
+ (end (match-end 0))
+ (_data (buffer-substring-no-properties start end)))
+ ;; (message "Found something ending at %s" _data)
+ ;; (message "Found nowdoc end at %s-%s" start end)
(phps-mode-lexer--return-token-with-val
'T_ENCAPSED_AND_WHITESPACE
- old-end
+ phps-mode-lexer--generated-new-tokens-index
start)
(phps-mode-lexer--begin
'ST_END_HEREDOC))
+ (progn
+ (signal
+ 'phps-lexer-error
+ (list
+ (format "Found no ending of nowdoc starting at %d" start)
+ start)))))))
- (t
- ;; (message "Found variable at '%s'.. Skipping forward to %s"
data start)
- (phps-mode-lexer--return-token-with-val
- 'T_ENCAPSED_AND_WHITESPACE
- old-end
- start))
+ (phps-mode-lexer--match-macro
+ (ST_IN_SCRIPTING ST_VAR_OFFSET)
+ (looking-at phps-mode-lexer--any-char)
+ (signal
+ 'phps-lexer-error
+ (list
+ (format "Unexpected character at %d" (match-beginning 0))
+ (match-beginning 0))))
- ))
- (progn
- (signal
- 'phps-lexer-error
- (list
- (format "Found no ending of heredoc starting at %d" old-start)
- old-start)))))))
-
-(phps-mode-lexer--match-macro
- ST_NOWDOC
- (looking-at phps-mode-lexer--any-char)
- (let ((start (car (cdr (car phps-mode-lexer--generated-tokens)))))
- (let ((string-start (search-forward-regexp
- (concat
- "\n"
- phps-mode-lexer--heredoc-label
- ";?\\\n"
- ) nil t)))
- (if string-start
- (let* ((start (match-beginning 0))
- (end (match-end 0))
- (_data (buffer-substring-no-properties start end)))
- ;; (message "Found something ending at %s" _data)
- ;; (message "Found nowdoc end at %s-%s" start end)
- (phps-mode-lexer--return-token-with-val
- 'T_ENCAPSED_AND_WHITESPACE
- phps-mode-lexer--generated-new-tokens-index
- start)
- (phps-mode-lexer--begin
- 'ST_END_HEREDOC))
- (progn
- (signal
- 'phps-lexer-error
- (list
- (format "Found no ending of nowdoc starting at %d" start)
- start)))))))
-
-(phps-mode-lexer--match-macro
- (ST_IN_SCRIPTING ST_VAR_OFFSET)
- (looking-at phps-mode-lexer--any-char)
- (signal
- 'phps-lexer-error
- (list
- (format "Unexpected character at %d" (match-beginning 0))
- (match-beginning 0))))
+ )
(defun phps-mode-lexer--re2c-execute ()
"Execute matching body (if any)."
- [elpa] externals/phps-mode e049853a6f 193/212: Remove use of lex-analyzer from semantic and instead use custom, (continued)
- [elpa] externals/phps-mode e049853a6f 193/212: Remove use of lex-analyzer from semantic and instead use custom, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 0e3889a122 202/212: Added indentation support for HTML/XML, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode d85974c2aa 196/212: Improved indentation inside multi-dimensional arrays, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 057aadd2f6 197/212: Improved indentation around multi-line logical expressions, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 5273bdf42f 206/212: Started on cache feature, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode d19bd439cf 198/212: Updated TODO items, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 502a42b5c0 205/212: Improved indentation around doc-comments, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 198cfbd360 199/212: Added failing indentation tests, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode af263a5462 200/212: Improved indentation detection of start of alternative control structure, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode 5ae4886f14 212/212: Updated docs and version, Christian Johansson, 2022/01/26
- [elpa] externals/phps-mode fe83e986c7 192/212: Fixed issue with optimized lexer after byte-compilation,
Christian Johansson <=