diff options
author | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-03-13 14:20:35 +0100 |
---|---|---|
committer | Robin Haberkorn <robin.haberkorn@googlemail.com> | 2013-03-16 18:07:32 +0100 |
commit | 9e2f53295699aea8f0333ae0acba35d26a3a58c0 (patch) | |
tree | 63541c8d3d29047046278d466d6b9ce11c6a5d07 | |
parent | 2ae78885e8a5e7039972fef39cdd13a210cb5806 (diff) | |
download | sciteco-9e2f53295699aea8f0333ae0acba35d26a3a58c0.tar.gz |
fixed: prevent accessing registers in parse-only mode
* they might not already exist, yielding bogus errors
* in case the register might be initialized we do not want to do so in parse-only-mode
* this fix is only a workaround: currently we must return a register sind got_register() expects one
and must be called to determine the next state in parse only mode
* proper solution would be to better separate parsing and execution
-rw-r--r-- | src/qregisters.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/qregisters.cpp b/src/qregisters.cpp index 05a3322..a35a6d6 100644 --- a/src/qregisters.cpp +++ b/src/qregisters.cpp @@ -408,6 +408,9 @@ StateString: break; } + if (mode > MODE_NORMAL) + return NULL; + insert = string_machine.input(chr); if (!insert) return NULL; @@ -418,6 +421,13 @@ StateString: return NULL; done: + if (mode > MODE_NORMAL) + /* + * FIXME: currently we must return *some* register + * since got_register() expects one + */ + return QRegisters::globals["0"]; + QRegisterTable &table = is_local ? *QRegisters::locals : QRegisters::globals; QRegister *reg = table[name]; |