unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
* bug#46302: 28.0.50; cperl-mode cleanup: Eliminate dead code
@ 2021-02-04 19:21 Harald Jörg
  2021-02-04 19:52 ` Lars Ingebrigtsen
  0 siblings, 1 reply; 6+ messages in thread
From: Harald Jörg @ 2021-02-04 19:21 UTC (permalink / raw)
  To: 46302

[-- Attachment #1: Type: text/plain, Size: 531 bytes --]

In two places, CPerl mode checks whether `syntax-propertize-rules` is
fboundp, which is always true as of today.  The attached patch
eliminates this check and the corresponding "else"-Branches.

Also, an (undocumented) debug trace doesn't work in current Emacs
because the function `edebug-backtrace` was eliminated, so this call is
removed by the patch.

Finally, a workaround to set `font-lock-syntactic-keywords` is no longer
needed.  This eliminates a warning when compiling cperl-mode.el under
current Emacs.

-- 
Cheers,
haj

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: cperl-mode cleanup: Eliminate dead code --]
[-- Type: text/x-diff, Size: 9679 bytes --]

From cf9c369726819c1261e06a5f273c11b0a34b8576 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Harald=20J=C3=B6rg?= <haj@posteo.de>
Date: Thu, 4 Feb 2021 20:10:03 +0100
Subject: [PATCH] ; cperl-mode: eliminate dead code

* lisp/progmodes/cperl-mode.el (cperl-update-syntaxification):
Eliminate check for `syntax-propertize-rules` (always true)
and eliminate unused first parameter.
(cperl-mode): Eliminate obsolete `font-lock-syntactic-keywords`,
Eliminate check for `syntax-propertize-rules` (always true).
(cperl-fontify-syntaxically): Eliminate call to
no-longer-existing function `edebug-backtrace`.
---
 lisp/progmodes/cperl-mode.el | 90 ++++++++++++------------------------
 1 file changed, 29 insertions(+), 61 deletions(-)

diff --git a/lisp/progmodes/cperl-mode.el b/lisp/progmodes/cperl-mode.el
index d401513646..a70e8e36c0 100644
--- a/lisp/progmodes/cperl-mode.el
+++ b/lisp/progmodes/cperl-mode.el
@@ -1157,25 +1157,25 @@ cperl-old-style
 	    (get-text-property (point-min) 'in-pod)
 	    (< (progn
 		 (and cperl-syntaxify-for-menu
-		      (cperl-update-syntaxification (point-max) (point-max)))
+		      (cperl-update-syntaxification (point-max)))
 		 (next-single-property-change (point-min) 'in-pod nil (point-max)))
 	       (point-max)))]
 	  ["Ispell HERE-DOCs" cperl-here-doc-spell
 	   (< (progn
 		(and cperl-syntaxify-for-menu
-		     (cperl-update-syntaxification (point-max) (point-max)))
+		     (cperl-update-syntaxification (point-max)))
 		(next-single-property-change (point-min) 'here-doc-group nil (point-max)))
 	      (point-max))]
 	  ["Narrow to this HERE-DOC" cperl-narrow-to-here-doc
 	   (eq 'here-doc  (progn
 		(and cperl-syntaxify-for-menu
-		     (cperl-update-syntaxification (point) (point)))
+		     (cperl-update-syntaxification (point)))
 		(get-text-property (point) 'syntax-type)))]
 	  ["Select this HERE-DOC or POD section"
 	   cperl-select-this-pod-or-here-doc
 	   (memq (progn
 		   (and cperl-syntaxify-for-menu
-			(cperl-update-syntaxification (point) (point)))
+			(cperl-update-syntaxification (point)))
 		   (get-text-property (point) 'syntax-type))
 		 '(here-doc pod))]
 	  "----"
@@ -1659,36 +1659,18 @@ cperl-mode
                 nil nil ((?_ . "w"))))
   ;; Reset syntaxification cache.
   (setq-local cperl-syntax-state nil)
-  (if cperl-use-syntax-table-text-property
-      (if (eval-when-compile (fboundp 'syntax-propertize-rules))
-          (progn
-            ;; Reset syntaxification cache.
-            (setq-local cperl-syntax-done-to nil)
-            (setq-local syntax-propertize-function
-                        (lambda (start end)
-                          (goto-char start)
-                          ;; Even if cperl-fontify-syntaxically has already gone
-                          ;; beyond `start', syntax-propertize has just removed
-                          ;; syntax-table properties between start and end, so we have
-                          ;; to re-apply them.
-                          (setq cperl-syntax-done-to start)
-                          (cperl-fontify-syntaxically end))))
-	;; Do not introduce variable if not needed, we check it!
-        (setq-local parse-sexp-lookup-properties t)
-	;; Our: just a plug for wrong font-lock
-        (setq-local font-lock-unfontify-region-function
-                    ;; not present with old Emacs
-                    #'cperl-font-lock-unfontify-region-function)
-	;; Reset syntaxification cache.
-        (setq-local cperl-syntax-done-to nil)
-        (setq-local font-lock-syntactic-keywords
-                    (if cperl-syntaxify-by-font-lock
-                        '((cperl-fontify-syntaxically))
-                      ;; unless font-lock-syntactic-keywords, font-lock (pre-22.1)
-                      ;;  used to ignore syntax-table text-properties.  (t) is a hack
-                      ;;  to make font-lock think that font-lock-syntactic-keywords
-                      ;;  are defined.
-                      '(t)))))
+  (when cperl-use-syntax-table-text-property
+    ;; Reset syntaxification cache.
+    (setq-local cperl-syntax-done-to nil)
+    (setq-local syntax-propertize-function
+                (lambda (start end)
+                  (goto-char start)
+                  ;; Even if cperl-fontify-syntaxically has already gone
+                  ;; beyond `start', syntax-propertize has just removed
+                  ;; syntax-table properties between start and end, so we have
+                  ;; to re-apply them.
+                  (setq cperl-syntax-done-to start)
+                  (cperl-fontify-syntaxically end))))
   (setq cperl-font-lock-multiline t) ; Not localized...
   (setq-local font-lock-multiline t)
   (setq-local font-lock-fontify-region-function
@@ -2405,7 +2387,7 @@ cperl-indent-command
 so that this line becomes properly indented.
 The relative indentation among the lines of the expression are preserved."
   (interactive "P")
-  (cperl-update-syntaxification (point) (point))
+  (cperl-update-syntaxification (point))
   (if whole-exp
       ;; If arg, always indent this line as Perl
       ;; and shift remaining lines of expression the same amount.
@@ -2533,7 +2515,7 @@ cperl-beginning-of-property
 
 (defun cperl-sniff-for-indent (&optional parse-data) ; was parse-start
   ;; the sniffer logic to understand what the current line MEANS.
-  (cperl-update-syntaxification (point) (point))
+  (cperl-update-syntaxification (point))
   (let ((res (get-text-property (point) 'syntax-type)))
     (save-excursion
       (cond
@@ -3025,7 +3007,7 @@ cperl-to-comment-or-eol
   ;; then looks for literal # or end-of-line.
   (let (state stop-in cpoint (lim (point-at-eol)) pr e)
     (or cperl-font-locking
-	(cperl-update-syntaxification lim lim))
+	(cperl-update-syntaxification lim))
     (beginning-of-line)
     (if (setq pr (get-text-property (point) 'syntax-type))
 	(setq e (next-single-property-change (point) 'syntax-type nil (point-max))))
@@ -4640,7 +4622,7 @@ cperl-after-expr-p
 `}' is treated \"smartly\" if it is not in the list)."
   (let ((lim (or lim (point-min)))
 	stop p)
-    (cperl-update-syntaxification (point) (point))
+    (cperl-update-syntaxification (point))
     (save-excursion
       (while (and (not stop) (> (point) lim))
 	(skip-chars-backward " \t\n\f" lim)
@@ -5027,7 +5009,7 @@ cperl-indent-region
 If `cperl-indent-region-fix-constructs', will improve spacing on
 conditional/loop constructs."
   (interactive "r")
-  (cperl-update-syntaxification end end)
+  (cperl-update-syntaxification end)
   (save-excursion
     (let (cperl-update-start cperl-update-end (h-a-c after-change-functions))
       (let ((indent-info (list nil nil nil)	; Cannot use '(), since will modify
@@ -5233,7 +5215,7 @@ cperl-imenu--create-perl-index
 	packages ends-ranges p marker is-proto
         is-pack index index1 name (end-range 0) package)
     (goto-char (point-min))
-    (cperl-update-syntaxification (point-max) (point-max))
+    (cperl-update-syntaxification (point-max))
     ;; Search for the function
     (progn ;;save-match-data
       (while (re-search-forward
@@ -8209,7 +8191,7 @@ cperl-map-pods-heres
     (or prop (setq prop 'in-pod))
     (or s (setq s (point-min)))
     (or end (setq end (point-max)))
-    (cperl-update-syntaxification end end)
+    (cperl-update-syntaxification end)
     (save-excursion
       (goto-char (setq pos s))
       (while (and cont (< pos end))
@@ -8225,7 +8207,7 @@ cperl-get-here-doc-region
 Return nil if the point is not in a HERE document region.  If POD is non-nil,
 will return a POD section if point is in a POD section."
   (or pos (setq pos (point)))
-  (cperl-update-syntaxification pos pos)
+  (cperl-update-syntaxification pos)
   (if (or (eq 'here-doc  (get-text-property pos 'syntax-type))
 	  (and pod
 	       (eq 'pod (get-text-property pos 'syntax-type))))
@@ -8295,7 +8277,7 @@ cperl-time-fontification
       (forward-line step)
       (setq l (+ l step))
       (setq c (1+ c))
-      (cperl-update-syntaxification (point) (point))
+      (cperl-update-syntaxification (point))
       (setq delta (- (- tt (setq tt (funcall timems)))) tot (+ tot delta))
       (message "to %s:%6s,%7s" l delta tot))
     tot))
@@ -8405,19 +8387,12 @@ cperl-font-lock-fontify-region-function
     (setq end (point)))
   (font-lock-default-fontify-region beg end loudly))
 
-(defvar cperl-d-l nil)
-(defvar edebug-backtrace-buffer)        ;FIXME: Why?
 (defun cperl-fontify-syntaxically (end)
   ;; Some vars for debugging only
   ;; (message "Syntaxifying...")
   (let ((dbg (point)) (iend end) (idone cperl-syntax-done-to)
 	(istate (car cperl-syntax-state))
-	start from-start edebug-backtrace-buffer)
-    (if (eq cperl-syntaxify-by-font-lock 'backtrace)
-	(progn
-	  (require 'edebug)
-	  (let ((f 'edebug-backtrace))
-	    (funcall f))))	; Avoid compile-time warning
+	start from-start)
     (or cperl-syntax-done-to
 	(setq cperl-syntax-done-to (point-min)
 	      from-start t))
@@ -8473,16 +8448,9 @@ cperl-after-change-function
   (if cperl-syntax-done-to
       (setq cperl-syntax-done-to (min cperl-syntax-done-to beg))))
 
-(defun cperl-update-syntaxification (from to)
-  (cond
-   ((not cperl-use-syntax-table-text-property) nil)
-   ((fboundp 'syntax-propertize) (syntax-propertize to))
-   ((and cperl-syntaxify-by-font-lock
-         (or (null cperl-syntax-done-to)
-             (< cperl-syntax-done-to to)))
-    (save-excursion
-      (goto-char from)
-      (cperl-fontify-syntaxically to)))))
+(defun cperl-update-syntaxification (to)
+  (when cperl-use-syntax-table-text-property
+    (syntax-propertize to)))
 
 (defvar cperl-version
   (let ((v  "Revision: 6.2"))
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* bug#46302: 28.0.50; cperl-mode cleanup: Eliminate dead code
  2021-02-04 19:21 bug#46302: 28.0.50; cperl-mode cleanup: Eliminate dead code Harald Jörg
@ 2021-02-04 19:52 ` Lars Ingebrigtsen
  2021-02-04 22:28   ` Harald Jörg
  0 siblings, 1 reply; 6+ messages in thread
From: Lars Ingebrigtsen @ 2021-02-04 19:52 UTC (permalink / raw)
  To: Harald Jörg; +Cc: 46302

haj@posteo.de (Harald Jörg) writes:

> Finally, a workaround to set `font-lock-syntactic-keywords` is no longer
> needed.  This eliminates a warning when compiling cperl-mode.el under
> current Emacs.

I don't get any warnings when compiling cperl-mode.el?

Anyway, the patch looks good to me, so I've applied it to Emacs 28.

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#46302: 28.0.50; cperl-mode cleanup: Eliminate dead code
  2021-02-04 19:52 ` Lars Ingebrigtsen
@ 2021-02-04 22:28   ` Harald Jörg
  2021-02-05  8:57     ` Lars Ingebrigtsen
  0 siblings, 1 reply; 6+ messages in thread
From: Harald Jörg @ 2021-02-04 22:28 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 46302

Lars Ingebrigtsen <larsi@gnus.org> writes:

> haj@posteo.de (Harald Jörg) writes:
>
>> Finally, a workaround to set `font-lock-syntactic-keywords` is no longer
>> needed.  This eliminates a warning when compiling cperl-mode.el under
>> current Emacs.
>
> I don't get any warnings when compiling cperl-mode.el?

Ooops... Me neither.

I seem to recall a warning in the *Compile-Log* buffer that
`font-lock-syntactic.keywords' is an obsolete variable.  However, I
can't reproduce it :(

Did I hallucinate?  I had a look: The variable _is_ obsolete as of
font-lock.el:

(make-obsolete-variable 'font-lock-syntactic-keywords
                        'syntax-propertize-function "24.1")

Isn't `make-obsolete-variable` supposed to generate a compiler warning?
Or maybe I found the warning in C-h v font-lock-syntactic-keywords?
I'm confused.

> Anyway, the patch looks good to me, so I've applied it to Emacs 28.

Thanks!
-- 
Cheers,
haj





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#46302: 28.0.50; cperl-mode cleanup: Eliminate dead code
  2021-02-04 22:28   ` Harald Jörg
@ 2021-02-05  8:57     ` Lars Ingebrigtsen
  2021-02-05 10:54       ` Harald Jörg
  0 siblings, 1 reply; 6+ messages in thread
From: Lars Ingebrigtsen @ 2021-02-05  8:57 UTC (permalink / raw)
  To: Harald Jörg; +Cc: 46302

haj@posteo.de (Harald Jörg) writes:

> Did I hallucinate?  I had a look: The variable _is_ obsolete as of
> font-lock.el:
>
> (make-obsolete-variable 'font-lock-syntactic-keywords
>                         'syntax-propertize-function "24.1")
>
> Isn't `make-obsolete-variable` supposed to generate a compiler warning?

It is supposed to, but somehow it didn't...  I just tried putting a

        (setq-local font-lock-syntactic-keywords
                    (if cperl-syntaxify-by-font-lock
                        '((cperl-fontify-syntaxically))

into the function, and I got a 

cperl-mode.el:1678:15: Warning: ‘font-lock-syntactic-keywords’ is an obsolete
    variable (as of 24.1); use ‘syntax-propertize-function’ instead.

as expected.

Hm...  perhaps it's because of this?

-  (if cperl-use-syntax-table-text-property
-      (if (eval-when-compile (fboundp 'syntax-propertize-rules))
-          (progn

And the compiler got confused and didn't output a warning (always)?

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#46302: 28.0.50; cperl-mode cleanup: Eliminate dead code
  2021-02-05  8:57     ` Lars Ingebrigtsen
@ 2021-02-05 10:54       ` Harald Jörg
  2021-02-05 11:03         ` Lars Ingebrigtsen
  0 siblings, 1 reply; 6+ messages in thread
From: Harald Jörg @ 2021-02-05 10:54 UTC (permalink / raw)
  To: Lars Ingebrigtsen; +Cc: 46302

Lars Ingebrigtsen <larsi@gnus.org> writes:

>> Isn't `make-obsolete-variable` supposed to generate a compiler warning?
>
> It is supposed to, but somehow it didn't... [...]
>
> Hm...  perhaps it's because of this?
>
> -  (if cperl-use-syntax-table-text-property
> -      (if (eval-when-compile (fboundp 'syntax-propertize-rules))
> -          (progn
>
> And the compiler got confused and didn't output a warning (always)?

Ah, that reminds me of something... I did the elimination in several
steps, and in one of them killed the conditional and the if-branch, but
forget to kill the else-branch as well.  Apparently I ran the first
compilation test with that (bogus) intermediate version, and got the
warning.

As it turns out, the byte compiler shortcuts the conditional if it
eval-when-compiles to a constant and doesn't even touch the else-branch.
Digging into the commit logs reveals:

  commit 4813c453b22ff7b965e31a30d35b70f73d6bcbc7
  Author: Stefan Monnier <monnier@iro.umontreal.ca>
  Date:   Sun Feb 3 10:47:12 2013 -0500

      * lisp/progmodes/cperl-mode.el (cperl-mode): Avoid byte-compile
        warning.

Now it all makes sense :)
-- 
Cheers,
haj





^ permalink raw reply	[flat|nested] 6+ messages in thread

* bug#46302: 28.0.50; cperl-mode cleanup: Eliminate dead code
  2021-02-05 10:54       ` Harald Jörg
@ 2021-02-05 11:03         ` Lars Ingebrigtsen
  0 siblings, 0 replies; 6+ messages in thread
From: Lars Ingebrigtsen @ 2021-02-05 11:03 UTC (permalink / raw)
  To: Harald Jörg; +Cc: 46302

haj@posteo.de (Harald Jörg) writes:

> Now it all makes sense :)

Yup.  :-)

-- 
(domestic pets only, the antidote for overdose, milk.)
   bloggy blog: http://lars.ingebrigtsen.no





^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-02-05 11:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-02-04 19:21 bug#46302: 28.0.50; cperl-mode cleanup: Eliminate dead code Harald Jörg
2021-02-04 19:52 ` Lars Ingebrigtsen
2021-02-04 22:28   ` Harald Jörg
2021-02-05  8:57     ` Lars Ingebrigtsen
2021-02-05 10:54       ` Harald Jörg
2021-02-05 11:03         ` Lars Ingebrigtsen

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).