From 523947d30c5fb2e1a804023dcf7f1aa70a9a6932 Mon Sep 17 00:00:00 2001 From: Robin Haberkorn Date: Sat, 10 Nov 2012 21:23:36 +0100 Subject: use namespace "States" instead of "states" structure has several advantages * better to read * namespace can be "extended" from everywhere allowing the declaration of states in the files that implement them * include file mess could be cleaned up a bit --- parser.cpp | 57 ++++++++++++++++++++++++++++++++------------------------- 1 file changed, 32 insertions(+), 25 deletions(-) (limited to 'parser.cpp') diff --git a/parser.cpp b/parser.cpp index 34d686f..18decd1 100644 --- a/parser.cpp +++ b/parser.cpp @@ -6,13 +6,20 @@ #include "sciteco.h" #include "undo.h" #include "expressions.h" +#include "goto.h" +#include "qbuffers.h" #include "parser.h" gint macro_pc = 0; -States states; +namespace States { + StateStart start; + StateControl control; + StateECommand ecommand; + StateInsert insert; -State *current_state = &states.start; + State *current = &start; +} namespace Modifiers { static bool colon = false; @@ -66,7 +73,7 @@ State::eval_colon(void) bool State::input(gchar chr) { - State *state = current_state; + State *state = States::current; for (;;) { State *next = state->get_next_state(chr); @@ -82,9 +89,9 @@ State::input(gchar chr) chr = '\0'; } - if (state != current_state) { - undo.push_var(current_state); - current_state = state; + if (state != States::current) { + undo.push_var(States::current); + States::current = state; } return true; @@ -166,10 +173,10 @@ StateStart::StateStart() : State() transitions['\0'] = this; init(" \f\r\n\v"); - transitions['!'] = &states.label; - transitions['^'] = &states.control; - transitions['E'] = &states.ecommand; - transitions['I'] = &states.insert; + transitions['!'] = &States::label; + transitions['^'] = &States::control; + transitions['E'] = &States::ecommand; + transitions['I'] = &States::insert; } void @@ -196,7 +203,7 @@ StateStart::custom(gchar chr) * commands implemented in StateCtrlCmd */ if (IS_CTL(chr)) - return states.control.get_next_state(CTL_ECHO(chr)); + return States::control.get_next_state(CTL_ECHO(chr)); /* * arithmetics @@ -492,17 +499,17 @@ StateControl::custom(gchar chr) { switch (g_ascii_toupper(chr)) { case 'O': - BEGIN_EXEC(&states.start); + BEGIN_EXEC(&States::start); expressions.set_radix(8); break; case 'D': - BEGIN_EXEC(&states.start); + BEGIN_EXEC(&States::start); expressions.set_radix(10); break; case 'R': - BEGIN_EXEC(&states.start); + BEGIN_EXEC(&States::start); expressions.eval(); if (!expressions.args()) expressions.push(expressions.radix); @@ -514,16 +521,16 @@ StateControl::custom(gchar chr) * Alternatives: ^i, ^I, , */ case 'I': - BEGIN_EXEC(&states.insert); + BEGIN_EXEC(&States::insert); expressions.eval(); expressions.push('\t'); - return &states.insert; + return &States::insert; /* * Alternatives: ^[, , */ case '[': - BEGIN_EXEC(&states.start); + BEGIN_EXEC(&States::start); expressions.discard_args(); break; @@ -531,17 +538,17 @@ StateControl::custom(gchar chr) * Additional numeric operations */ case '_': - BEGIN_EXEC(&states.start); + BEGIN_EXEC(&States::start); expressions.push(~expressions.pop_num_calc()); break; case '*': - BEGIN_EXEC(&states.start); + BEGIN_EXEC(&States::start); expressions.push_calc(Expressions::OP_POW); break; case '/': - BEGIN_EXEC(&states.start); + BEGIN_EXEC(&States::start); expressions.push_calc(Expressions::OP_MOD); break; @@ -549,13 +556,13 @@ StateControl::custom(gchar chr) return NULL; } - return &states.start; + return &States::start; } StateECommand::StateECommand() : State() { transitions['\0'] = this; - transitions['B'] = &states.file; + transitions['B'] = &States::file; } State * @@ -563,7 +570,7 @@ StateECommand::custom(gchar chr) { switch (g_ascii_toupper(chr)) { case 'X': - BEGIN_EXEC(&states.start); + BEGIN_EXEC(&States::start); undo.push_var(quit_requested); quit_requested = true; break; @@ -572,7 +579,7 @@ StateECommand::custom(gchar chr) return NULL; } - return &states.start; + return &States::start; } /* @@ -616,5 +623,5 @@ State * StateInsert::done(const gchar *str __attribute__((unused))) { /* nothing to be done when done */ - return &states.start; + return &States::start; } -- cgit v1.2.3