diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-02-03 18:44:27 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-02-03 18:44:27 +0100 |
commit | 1d768b53295d71705fd1618f936240ed5428cb87 (patch) | |
tree | 8efe9126d62db1eea01379a4a4b1fffc2abf6585 /src/parser.cpp | |
parent | 4f069e1977c9567b8aca7b0306ac5f100ef11282 (diff) | |
parent | b66d269b94016d43b3d256ab01c123ba2937c917 (diff) | |
download | sciteco-1d768b53295d71705fd1618f936240ed5428cb87.tar.gz |
Merge branch 'master' of github.com:rhaberkorn/sciteco
Diffstat (limited to 'src/parser.cpp')
-rw-r--r-- | src/parser.cpp | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/src/parser.cpp b/src/parser.cpp index 4765f29..37dd055 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -94,8 +94,7 @@ Execute::macro(const gchar *macro, bool locals) throw (State::Error) GotoTable *parent_goto_table = Goto::table; GotoTable macro_goto_table(false); - QRegisterTable *parent_locals = QRegisters::locals; - QRegisterTable macro_locals(false); + QRegisterTable *parent_locals; State *parent_state = States::current; gint parent_pc = macro_pc; @@ -110,8 +109,8 @@ Execute::macro(const gchar *macro, bool locals) throw (State::Error) Goto::table = ¯o_goto_table; if (locals) { - macro_locals.initialize(); - QRegisters::locals = ¯o_locals; + parent_locals = QRegisters::locals; + QRegisters::locals = new QRegisterTable(false); } try { @@ -123,7 +122,10 @@ Execute::macro(const gchar *macro, bool locals) throw (State::Error) g_free(Goto::skip_label); Goto::skip_label = NULL; - QRegisters::locals = parent_locals; + if (locals) { + delete QRegisters::locals; + QRegisters::locals = parent_locals; + } Goto::table = parent_goto_table; macro_pc = parent_pc; @@ -132,7 +134,10 @@ Execute::macro(const gchar *macro, bool locals) throw (State::Error) throw; /* forward */ } - QRegisters::locals = parent_locals; + if (locals) { + delete QRegisters::locals; + QRegisters::locals = parent_locals; + } Goto::table = parent_goto_table; macro_pc = parent_pc; |