summaryrefslogtreecommitdiffstats
path: root/src/output_slr.cpp
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2015-04-11 03:18:22 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2015-04-11 03:18:22 +0200
commit1a79d217af4b7403b6567c269bf115bb1fad9495 (patch)
treeb9c07942a0ba592e1ab2b17cede2fac82a2314a1 /src/output_slr.cpp
parentd91b60407ce812de60f0700ffc15712cb9a05d15 (diff)
downloadsolar-1a79d217af4b7403b6567c269bf115bb1fad9495.tar
solar-1a79d217af4b7403b6567c269bf115bb1fad9495.zip
Allow skipping the destructor selectively
Diffstat (limited to 'src/output_slr.cpp')
-rw-r--r--src/output_slr.cpp8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/output_slr.cpp b/src/output_slr.cpp
index d2b9817..3c9e1c2 100644
--- a/src/output_slr.cpp
+++ b/src/output_slr.cpp
@@ -66,8 +66,7 @@ void output_slr_t::emit_state_reduce_code(const item_t &item, int rule_id) {
bool empty = true;
const auto &vars = generator->get_grammar().rules[rule_id].variables;
for (unsigned i = 0; i < vars.size(); i++) {
- const std::string &var = vars[i];
- if (var.empty())
+ if (vars[i].first.empty())
continue;
if (!empty)
@@ -88,7 +87,10 @@ void output_slr_t::emit_state_reduce_code(const item_t &item, int rule_id) {
std::fprintf(source_file, ");\n");
- for (unsigned i = 0; i < rhs.size(); i++) {
+ for (unsigned i = 0; i < vars.size(); i++) {
+ if (!vars[i].second)
+ continue;
+
auto it = generator->get_grammar().destructors.find(rhs[i]);
if (it == generator->get_grammar().destructors.end())
continue;