Remove unnecessary macros + use `let' to set PLACE in iterative macros

WIP-cache
Hugo Thunnissen 8 months ago
parent da2570d355
commit 3e28231d03

@ -130,39 +130,6 @@
(and (> (phpinspect-overlay-end ,overlay) ,point)
(<= (phpinspect-overlay-start ,overlay) ,point)))))
(defmacro phpinspect-bmap-iterate-region (region place-and-bmap &rest body)
(declare (indent defun))
(let ((place (car place-and-bmap))
(bmap (gensym))
(bmap-stack (gensym))
(region-start (gensym))
(region-end (gensym)))
`(let ((,bmap)
,(when (symbolp place) place)
(,bmap-stack (list ,(cadr place-and-bmap)))
(,region-start (car ,region))
(,region-end (cadr ,region)))
(while (setq ,bmap (pop ,bmap-stack))
(phpinspect-bmap-iterate (,place ,bmap)
(when (and (<= ,region-start
(phpinspect-meta-start ,place))
(>= ,region-end
(phpinspect-meta-end ,place)))
,@body))))))
(defmacro phpinspect-bmap-iterate (place-and-bmap &rest body)
(declare (indent defun))
(let ((place (car place-and-bmap))
(bmap (gensym))
(ignored (gensym)))
`(let ((,bmap ,(cadr place-and-bmap)))
(maphash (lambda (,ignored ,place)
,@body
(when (phpinspect-meta-overlay ,place)
(phpinspect-splayt-traverse (,place (phpinspect-meta-children ,place))
,@body)))
(phpinspect-bmap-meta ,bmap)))))
(defsubst phpinspect-bmap-register (bmap start end token &optional whitespace-before overlay)
(let* ((starts (phpinspect-bmap-starts bmap))
(ends (phpinspect-bmap-ends bmap))
@ -254,14 +221,10 @@
(phpinspect-bmap-tokens-ending-at overlay point)
(gethash point (phpinspect-bmap-ends bmap)))))
(defsubst phpinspect-bmap-tokens-overlapping (bmap point)
(let ((tokens))
(phpinspect-bmap-iterate (meta bmap)
(when (phpinspect-meta-overlaps-point meta point)
(push meta tokens)))
(sort tokens #'phpinspect-meta-sort-width)))
(sort
(phpinspect-meta-find-overlapping-children (phpinspect-bmap-root-meta bmap) point)
#'phpinspect-meta-sort-width))
(defsubst phpinspect-overlay-encloses-meta (overlay meta)
(and (>= (phpinspect-meta-start meta) (phpinspect-overlay-start overlay))

@ -168,7 +168,9 @@
(cl-defmethod phpinspect-meta-find-overlapping-child ((meta (head meta)) (point integer))
(let ((child (phpinspect-splayt-find-largest-before
(phpinspect-meta-children meta) (phpinspect-meta--point-offset meta point))))
(phpinspect-meta-children meta)
;; Use point +1 as a child starting at point still overlaps
(+ (phpinspect-meta--point-offset meta point) 1))))
(when (and child (phpinspect-meta-overlaps-point child point))
child)))

@ -105,13 +105,11 @@ BODY can be any form."
(let ((item-sym (gensym))
(place (car place-and-queue))
(queue (cadr place-and-queue)))
`(let* ((,item-sym (phpinspect-queue-first ,queue))
(,place (when ,item-sym (phpinspect-queue-item-value ,item-sym))))
(when ,place
,@body
(while (setq ,item-sym (phpinspect-queue-item-next ,item-sym))
(setq ,place (phpinspect-queue-item-value ,item-sym))
,@body)))))
`(let* ((,item-sym (phpinspect-queue-first ,queue)))
(while ,item-sym
(let ((,place (phpinspect-queue-item-value ,item-sym)))
,@body
(setq ,item-sym (phpinspect-queue-item-next ,item-sym)))))))
(cl-defmethod phpinspect-queue-find
((queue phpinspect-queue) value comparison-func)

@ -245,8 +245,7 @@ apeared to be a little more performant than using `let'."
(,reverse-sym t)
,current-sym
,size-sym
,stack-sym
,(if (symbolp place) place (gensym)))
,stack-sym)
(while ,queue-sym
(setq ,size-sym (length ,queue-sym))
@ -257,8 +256,8 @@ apeared to be a little more performant than using `let'."
(if ,reverse-sym
(push ,current-sym ,stack-sym)
(setf ,place ,current-sym)
,@body)
(let ((,place ,current-sym))
,@body))
(when (phpinspect-splayt-node-right ,current-sym)
(push (phpinspect-splayt-node-right ,current-sym) ,queue-sym))
@ -271,8 +270,8 @@ apeared to be a little more performant than using `let'."
(when ,reverse-sym
(while ,stack-sym
(setq ,current-sym (pop ,stack-sym))
(setf ,place ,current-sym)
,@body))
(let ((,place ,current-sym))
,@body)))
(setq ,reverse-sym (not ,reverse-sym)))
@ -300,16 +299,15 @@ near the top of the tee.
(current (gensym))
(stack (gensym)))
`(let* ((,current ,(cadr place-and-node))
,stack
,@(if (symbolp place) (list place)))
,stack)
(while (or ,stack ,current)
(if ,current
(progn
(push ,current ,stack)
(setq ,current (phpinspect-splayt-node-left ,current)))
(setq ,current (pop ,stack))
(setf ,place ,current)
,@body
(let ((,place ,current))
,@body)
(setq ,current (phpinspect-splayt-node-right ,current)))))))
(defmacro phpinspect-splayt-traverse-lr (place-and-splayt &rest body)
@ -321,8 +319,8 @@ The PLACE is assigned the value of each node.
(declare (indent 1))
`(phpinspect-splayt-node-traverse-lr
(,(car place-and-splayt) (phpinspect-splayt-root-node ,(cadr place-and-splayt)))
(setf ,(car place-and-splayt) (phpinspect-splayt-node-value ,(car place-and-splayt)))
,@body))
(let ((,(car place-and-splayt) (phpinspect-splayt-node-value ,(car place-and-splayt))))
,@body)))
(define-inline phpinspect-splayt-node-key-less-p (node key)
(inline-quote (> ,key (phpinspect-splayt-node-key ,node))))

@ -64,47 +64,16 @@
(ert-deftest phpinspect-bmap-tokens-overlapping ()
(let ((bmap (phpinspect-make-bmap)))
(phpinspect-bmap-register bmap 9 200 '(:node1))
(phpinspect-bmap-register bmap 20 200 '(:node2))
(phpinspect-bmap-register bmap 9 20 '(:node3))
(phpinspect-bmap-register bmap 21 44 '(:node4))
(phpinspect-bmap-register bmap 20 200 '(:node2))
(phpinspect-bmap-register bmap 9 200 '(:node1))
(phpinspect-bmap-register bmap 1 300 '(:root))
(let ((result (phpinspect-bmap-tokens-overlapping bmap 22)))
(should (equal '((:node4) (:node2) (:node1))
(mapcar #'phpinspect-meta-token result))))))
(ert-deftest phpinspect-bmap-tokens-overlapping-overlayed ()
(let ((bmap (phpinspect-make-bmap))
(bmap2 (phpinspect-make-bmap))
(bmap3 (phpinspect-make-bmap))
result)
(phpinspect-bmap-register bmap 9 200 '(:token1))
(phpinspect-bmap-register bmap 20 200 '(:token2))
(phpinspect-bmap-register bmap 9 20 '(:token3))
(phpinspect-bmap-register bmap 21 44 '(:token4))
(phpinspect-bmap-register bmap2 200 230 '(:token5))
(phpinspect-bmap-register bmap3 300 305 '(:token6))
;; Should start at 220 of bmap2
(phpinspect-bmap-overlay
bmap2 bmap3 (phpinspect-bmap-token-starting-at bmap3 300) -80)
(setq result (phpinspect-bmap-tokens-overlapping bmap2 220))
(should (equal '((:token6) (:token5)) (mapcar #'phpinspect-meta-token result)))
(phpinspect-bmap-overlay
bmap bmap2 (phpinspect-bmap-token-starting-at bmap2 200) 20)
(phpinspect-bmap-overlay
bmap bmap2 (phpinspect-bmap-token-starting-at bmap2 220) 20)
(setq result (phpinspect-bmap-tokens-overlapping bmap 240))
(should (equal '((:token6) (:token5)) (mapcar #'phpinspect-meta-token result)))
(setq result (phpinspect-bmap-tokens-overlapping bmap 22))
(should (equal '((:token4) (:token2) (:token1)) (mapcar #'phpinspect-meta-token result)))))
(ert-deftest phpinspect-bmap-register ()
(let* ((bmap (phpinspect-make-bmap))
(token1 `(:word "foo"))

Loading…
Cancel
Save