mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
Fix bug #11595
Avoid an endless loop when in the definition of a macro the macro
itself is used in the LyX representation part.
(cherry picked from commit 1cb2a443b5
)
This commit is contained in:
parent
2729589b4f
commit
11fd6fe43d
@ -661,17 +661,20 @@ void InsetMathMacro::updateRepresentation(Cursor * cur, MacroContext const & mc,
|
||||
values[i].insert(0, MathAtom(proxy));
|
||||
}
|
||||
// expanding macro with the values
|
||||
// Only update the argument macros if anything was expanded, otherwise
|
||||
// we would get an endless loop (bug 9140). UpdateLocker does not work
|
||||
// in this case, since MacroData::expand() creates new InsetMathMacro
|
||||
// objects, so this would be a different recursion path than the one
|
||||
// protected by UpdateLocker.
|
||||
if (d->macro_->expand(values, d->expanded_)) {
|
||||
// Only update the argument macros if anything was expanded or the LyX
|
||||
// representation part does not contain the macro itself, otherwise we
|
||||
// would get an endless loop (bugs 9140 and 11595). UpdateLocker does
|
||||
// not work in this case, since MacroData::expand() creates new
|
||||
// InsetMathMacro objects, so this would be a different recursion path
|
||||
// than the one protected by UpdateLocker.
|
||||
docstring const & display = d->macro_->display();
|
||||
docstring const latexname = from_ascii("\\") + macroName();
|
||||
if (d->macro_->expand(values, d->expanded_)
|
||||
&& !support::contains(display, latexname)) {
|
||||
if (utype == OutputUpdate && !d->expanded_.empty())
|
||||
d->expanded_.updateMacros(cur, mc, utype, nesting);
|
||||
}
|
||||
// get definition for list edit mode
|
||||
docstring const & display = d->macro_->display();
|
||||
asArray(display.empty() ? d->macro_->definition() : display,
|
||||
d->definition_, Parse::QUIET | Parse::MACRODEF);
|
||||
}
|
||||
|
@ -54,6 +54,8 @@ What's new
|
||||
|
||||
- Deal properly with orphaned bibitems (bug 7160).
|
||||
|
||||
- Fix endless loop when a macro definition references itself (bug 11595).
|
||||
|
||||
|
||||
* INTERNALS
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user