diff options
| author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-01-23 19:02:15 +0100 |
|---|---|---|
| committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-01-23 19:02:15 +0100 |
| commit | 2584da63706f564f3a9d221be685b4b47b5e30b2 (patch) | |
| tree | f9a80305a8ff301306c88ce9547353789c2885f5 /src/qregisters.cpp | |
| parent | 4c37f988b68b35d2510de25a185e091e692d00d5 (diff) | |
moved StateExpectQReg from parser.h to qregisters.h
* parser.cpp|h should be reserved for generic and misc. stuff.
the StateExpectQReg class is used almost exclusively by qregisters.cpp|h
* resolves a circular header dependency issue
Diffstat (limited to 'src/qregisters.cpp')
| -rw-r--r-- | src/qregisters.cpp | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/src/qregisters.cpp b/src/qregisters.cpp index 960b728..2083884 100644 --- a/src/qregisters.cpp +++ b/src/qregisters.cpp @@ -354,6 +354,34 @@ QRegisters::hook(Hook type) * Command states */ +StateExpectQReg::StateExpectQReg() : State(), got_local(false) +{ + transitions['\0'] = this; +} + +State * +StateExpectQReg::custom(gchar chr) throw (Error) +{ + QRegister *reg; + + if (chr == '.') { + undo.push_var(got_local) = true; + return this; + } + chr = g_ascii_toupper(chr); + + if (got_local) { + undo.push_var(got_local) = false; + reg = (*QRegisters::locals)[chr]; + } else { + reg = QRegisters::globals[chr]; + } + if (!reg) + throw InvalidQRegError(chr, got_local); + + return got_register(reg); +} + State * StatePushQReg::got_register(QRegister *reg) throw (Error) { |
