From 0f5c2c89f20dc07c1e0f8e8a619850629825c9c3 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Thu, 14 Feb 2013 03:54:55 +0100 Subject: option for q-reg spec state machine to allocate (insert) new q-registers * enabled for all modifying Q-Reg commands --- src/qregisters.cpp | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) (limited to 'src/qregisters.cpp') diff --git a/src/qregisters.cpp b/src/qregisters.cpp index 7fb5b27..5d526a7 100644 --- a/src/qregisters.cpp +++ b/src/qregisters.cpp @@ -372,7 +372,6 @@ QRegSpecMachine::reset(void) QRegister * QRegSpecMachine::input(gchar chr) throw (State::Error) { - QRegister *reg; gchar *insert; if (state) @@ -423,10 +422,15 @@ StateString: return NULL; done: - reg = is_local ? (*QRegisters::locals)[name] - : QRegisters::globals[name]; - if (!reg) - throw State::InvalidQRegError(name, is_local); + QRegisterTable &table = is_local ? *QRegisters::locals + : QRegisters::globals; + QRegister *reg = table[name]; + + if (!reg) { + if (!initialize) + throw State::InvalidQRegError(name, is_local); + reg = table.insert(new QRegister(name)); + } return reg; } @@ -435,7 +439,7 @@ done: * Command states */ -StateExpectQReg::StateExpectQReg() : State() +StateExpectQReg::StateExpectQReg(bool initialize) : State(), machine(initialize) { transitions['\0'] = this; } -- cgit v1.2.3