Fixed issue with multi-layer variable stacks.

This commit is contained in:
2017-05-30 18:09:33 +02:00
parent 7aad8380d1
commit 664a57ec68
3 changed files with 23 additions and 4 deletions

View File

@@ -62,11 +62,12 @@ struct BodyTermTranslateVisitor
std::vector<std::unique_ptr<ast::VariableDeclaration>> parameters;
parameters.reserve(function.arguments.size());
variableStack.push(&parameters);
for (size_t i = 0; i < function.arguments.size(); i++)
parameters.emplace_back(std::make_unique<ast::VariableDeclaration>(ast::VariableDeclaration::Type::Body));
// TODO: implement pushing with scoped guards to avoid bugs
variableStack.push(&parameters);
ast::And conjunction;
for (size_t i = 0; i < function.arguments.size(); i++)
@@ -75,6 +76,8 @@ struct BodyTermTranslateVisitor
conjunction.arguments.emplace_back(ast::Formula::make<ast::In>(ast::Variable(parameters[i].get()), translate(argument, context, ruleContext, variableStack)));
}
variableStack.pop();
ast::Predicate predicate(std::string(function.name));
predicate.arguments.reserve(function.arguments.size());