aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/qreg.h
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2024-11-06 23:50:09 +0300
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2024-11-06 23:50:09 +0300
commit5f141848b88237959bd01603b427b792828d73ad (patch)
tree00234fbf9cc14ae55ee34650001d7623f8a67a71 /src/qreg.h
parent9242405c8fc31b869fecfe096f29eb1a2ca75bda (diff)
downloadsciteco-5f141848b88237959bd01603b427b792828d73ad.tar.gz
fixed the Q-Reg spec machine used for implementing S^EGq$ (match one of characters in Q-Register)
* It was initialized only once, so it could inherit the wrong local Q-Register table. A test case has been added for this particular bug. * Also, if starting from the profile (batch mode), the state machine could be initialized without undo, which then later cause problems on rubout in interactive mode. For instance, if S^EG[a] fails and you would repeatedly type `]`, the Q-Reg name could grow indefinitely. There were probably other issues as well. Even crashes should have been possible, although I couldn't reproduce them. * Since the state machine is required only for the pattern to regexp translation and is performed anew for every character in interactive mode, we now create a fresh state machine for every call and don't attempt any undo. There might be more efficient ways, like reusing the string building's Q-Reg parser state machine.
Diffstat (limited to 'src/qreg.h')
-rw-r--r--src/qreg.h2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/qreg.h b/src/qreg.h
index 59cf2cc..e9a9b1b 100644
--- a/src/qreg.h
+++ b/src/qreg.h
@@ -241,6 +241,8 @@ gboolean teco_machine_qregspec_auto_complete(teco_machine_qregspec_t *ctx, teco_
void teco_machine_qregspec_free(teco_machine_qregspec_t *ctx);
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(teco_machine_qregspec_t, teco_machine_qregspec_free);
+
/** @memberof teco_machine_qregspec_t */
void undo__teco_machine_qregspec_free(teco_machine_qregspec_t *);
TECO_DECLARE_UNDO_OBJECT(qregspec, teco_machine_qregspec_t *);