Post by Stefan KangasPost by Harald JörgPatch attached, including two test cases.
Thanks for working on cperl-mode bugs.
Testing the original recipe with your patch it is already an improvement
cperl-forward-group-in-re: error (scan-error Unbalanced parentheses 9 94)
(scan-error Unbalanced parentheses 9 94)
Is that the expected and desired behavior?
Yes, it is, sort of. Maybe it should be fine-tuned. At this point we
_have_ the situation of unbalanced parentheses, and cperl-mode rubs it
in for every character you type.
Just open a buffer in cperl-mode and start typing:
$a =~ s/
At this point a message appears, with a different text when you open
a parentheses, and will haunt you until you get everything closed
properly. Given that regexps can be messy and heavy with punctuation,
I'd say this is desired behavior.
I can only guess that the first part of the message (which starts with
"cperl-forward-group-in-re") was added out of frustration: The bug
prevented the second part of the message (without
"cperl-forward-group-in-re") from ever appearing. Only this wasn't
fatal unless... there was this closing brace two characters before.
I'll check that, and prepare an updated patch if that's true.
Post by Stefan Kangas---
Post by Harald Jörg=?UTF-8?q?steo.de>?=
Fix freeze in cperl-mode when editing a regexp
Post by Harald Jörg* lisp/progmodes/cperl-mode.el (cperl-forward-group-in-re): Make
sure that an error is reported back to the caller (Bug#16368).
Tests for balanced (no error) and unbalanced (caught exception)
cases of `cperl-forward-group-in-re'.
Format these flush to the first column (no initial space).
No problem, I'll do so. I thought I was supposed to create the commit
messages with C-x 4 a, but probably I misunderstood and should have
post-processed that text in the first place.
Post by Stefan KangasPost by Harald Jörg--- a/test/lisp/progmodes/cperl-mode-tests.el
+++ b/test/lisp/progmodes/cperl-mode-tests.el
ELC lisp/progmodes/cperl-mode-tests.elc
lisp/progmodes/cperl-mode-tests.el:73:1: Warning: the function
`cperl-forward-group-in-re' is not known to be defined.
(require 'cperl-mode)
Hm. That should rather be _moving_ that line to the top? The line is
there, in the test which calls this function. For me this seemed to
be enough to avoid that message when byte-compiling. But of course,
moving the line to the top is fine, probably more tests will follow
to exercise functions which aren't autoloaded.
Give me a few hours for a nap: It's past midnight here :)
--
Cheers,
haj