aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cmdline.h1
-rw-r--r--src/parser.cpp28
-rw-r--r--src/parser.h22
-rw-r--r--src/qregisters.cpp28
-rw-r--r--src/qregisters.h19
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);