}
+class MathMacro::UpdateLocker
+{
+public:
+ explicit UpdateLocker(MathMacro & mm) : mac(mm)
+ {
+ mac.isUpdating_ = true;
+ }
+ ~UpdateLocker() { mac.isUpdating_ = false; }
+private:
+ MathMacro & mac;
+};
+
+
void MathMacro::updateRepresentation(Cursor * cur, MacroContext const & mc,
UpdateType utype)
{
+ if (isUpdating_)
+ return;
+
+ UpdateLocker(*this);
+
// known macro?
if (macro_ == 0)
return;
std::string requires_;
/// update macro representation
bool needsUpdate_;
+ /// update lock to avoid loops
+ class UpdateLocker;
+ friend class UpdateLocker;
+ bool isUpdating_;
/// maximal number of arguments the macro is greedy for
size_t appetite_;