Subject: bug#19882: 25.0.50; Backwards font-lock regex in m4-mode

From: Rupert Swarbrick <[email-masked]>
Date: Mon, 16 Feb 2015 11:32:59 +0000

In m4-mode.el, the last two sexps in m4-font-lock-keywords are the wrong
way around. As a result, if you are writing M4 code to be expanded in
"-P mode", so have things like

  m4_define

in the file, then the "define" part gets matched by the penultimate
regex, so m4_ doesn't get highlighted as part of a keyword.

I think the fix for this is to just swap the two regexes around. That
said, the commented stuff at the bottom of the file is rather
ugly. Maybe it would be better to have a single regex, made with
something like:

   (regexp-opt (append (mapcar (lambda (kw)
                                 (concat "m4_" kw))
                               prefixed)
                       prefixed
                       unprefixed))

with prefixed containing:

'("builtin" "changecom" "changequote" "changeword" "debugfile"
  "debugmode" "decr" "define" "defn" "divert" "divnum" "dnl"
  "dumpdef" "errprint" "esyscmd" "eval" "file" "format"
  "ifdef" "ifelse" "include" "incr" "index" "indir" "len" "line"
  "m4exit" "m4wrap" "maketemp" "patsubst" "popdef" "pushdef" "regexp"
  "shift" "sinclude" "substr" "syscmd" "sysval" "traceoff" "traceon"
  "translit" "undefine" "undivert" "unix"))

and unprefixed containing:

'("gnu")

Or maybe the absence of m4_gnu is a typo, in which case the logic could
be slightly simpler. I'm assuming that "m4_m4_undefine" at the bottom of
the file is a mistake.

Sorry there's no patch: I've requested assignment papers, but they
haven't come through yet. Since I think I've hit my minimal change
limit, someone else gets to type the code...

Rupert

In GNU Emacs 25.0.50.1 (x86_64-unknown-linux-gnu, X toolkit, Xaw scroll bars)
 of 2015-02-09 on <an-internal-hostname>
Repository revision: 2f7008715326a49770fcb82003ed78eab28c0626
Windowing system distributor `The X.Org Foundation', version 11.0.11300000

I'm trimming the rest of the build info because I'm pretty certain it's
not relevant to this report and contains lots of internal company paths.