diff options
Diffstat (limited to 'src/qregisters.cpp')
| -rw-r--r-- | src/qregisters.cpp | 16 |
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; } |
