From 2584da63706f564f3a9d221be685b4b47b5e30b2 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Wed, 23 Jan 2013 19:02:15 +0100 Subject: 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 --- src/qregisters.cpp | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'src/qregisters.cpp') 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) { -- cgit v1.2.3