summaryrefslogtreecommitdiff
path: root/src/PolishNotationParser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/PolishNotationParser.cpp')
-rw-r--r--src/PolishNotationParser.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/PolishNotationParser.cpp b/src/PolishNotationParser.cpp
index 22905a6..bf941d8 100644
--- a/src/PolishNotationParser.cpp
+++ b/src/PolishNotationParser.cpp
@@ -82,6 +82,7 @@ void PNParser::pushToWork(Memory& mem, MemoryData* data, ifstream& inFile) {
void PNParser::parseScope(ifstream& inFile, Memory& mem, int start, int end) {
mem.scopeVars.push(0);
+
bool absorbed = false;
while (start < inFile.tellg() && inFile.tellg() < end && inFile.peek() != EOF) {
skipSpacing(inFile);
@@ -119,10 +120,10 @@ void PNParser::parseScope(ifstream& inFile, Memory& mem, int start, int end) {
/* If value is a variable */
Name* cname;
- for (auto i = ++mem.vars.rbegin(); mem.vars.size() > 0 && i++ != mem.vars.rend(); ++i) {
+ for (auto i = mem.vars.rbegin(); i++ != mem.vars.rend(); ++i) {
cname = static_cast<Name*>(*i);
if (cname->value == name->value) {
- MemoryData* value = new MemoryData(*static_cast<MemoryData*>(*(--i)));
+ MemoryData* value = (*(--i))->clone();
pushToWork(mem, value, inFile);
absorbed = true;
break;
@@ -136,7 +137,7 @@ void PNParser::parseScope(ifstream& inFile, Memory& mem, int start, int end) {
pushToWork(mem, name, inFile);
}
cout << static_cast<Int*>(mem.vars.back())->value << endl;
- // cout << static_cast<Int*>(mem.work.top())->value << endl;
+ cout << static_cast<Int*>(mem.work.top())->value << endl;
for (int i = mem.scopeVars.top(); i > 0; i--) {
delete mem.vars.back();