aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/qregisters.cpp
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2013-01-23 19:02:15 +0100
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2013-01-23 19:02:15 +0100
commit2584da63706f564f3a9d221be685b4b47b5e30b2 (patch)
treef9a80305a8ff301306c88ce9547353789c2885f5 /src/qregisters.cpp
parent4c37f988b68b35d2510de25a185e091e692d00d5 (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.cpp28
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)
{