diff options
-rw-r--r-- | src/cmdline.h | 1 | ||||
-rw-r--r-- | src/parser.cpp | 28 | ||||
-rw-r--r-- | src/parser.h | 22 | ||||
-rw-r--r-- | src/qregisters.cpp | 28 | ||||
-rw-r--r-- | src/qregisters.h | 19 |
5 files changed, 48 insertions, 50 deletions
diff --git a/src/cmdline.h b/src/cmdline.h index fab7850..034ab7f 100644 --- a/src/cmdline.h +++ b/src/cmdline.h @@ -22,6 +22,7 @@ #include "sciteco.h" #include "parser.h" +#include "qregisters.h" extern gchar *cmdline; extern bool quit_requested; diff --git a/src/parser.cpp b/src/parser.cpp index 4d0c6b5..4765f29 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -436,34 +436,6 @@ StateExpectString::custom(gchar chr) throw (Error) return this; } -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); -} - StateStart::StateStart() : State() { transitions['\0'] = this; diff --git a/src/parser.h b/src/parser.h index 5f5f289..69a6d93 100644 --- a/src/parser.h +++ b/src/parser.h @@ -151,28 +151,6 @@ protected: virtual State *done(const gchar *str) throw (Error) = 0; }; -class QRegister; - -/* - * Super class for states accepting Q-Register specifications - */ -class StateExpectQReg : public State { - bool got_local; - -public: - StateExpectQReg(); - -private: - State *custom(gchar chr) throw (Error); - -protected: - /* - * FIXME: would be nice to pass reg as reference, but there are - * circular header dependencies... - */ - virtual State *got_register(QRegister *reg) throw (Error) = 0; -}; - class StateStart : public State { public: StateStart(); 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) { diff --git a/src/qregisters.h b/src/qregisters.h index 1a44d8f..d050a84 100644 --- a/src/qregisters.h +++ b/src/qregisters.h @@ -259,6 +259,25 @@ public: * Command states */ +/* + * Super class for states accepting Q-Register specifications + */ +class StateExpectQReg : public State { + bool got_local; + +public: + StateExpectQReg(); + +private: + State *custom(gchar chr) throw (Error); + +protected: + /* + * FIXME: would be nice to pass reg as reference + */ + virtual State *got_register(QRegister *reg) throw (Error) = 0; +}; + class StatePushQReg : public StateExpectQReg { private: State *got_register(QRegister *reg) throw (Error); |