aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/qregisters.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/qregisters.cpp')
-rw-r--r--src/qregisters.cpp16
1 files changed, 10 insertions, 6 deletions
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;
}