summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog6
-rwxr-xr-xetc/bench.pl.in14
2 files changed, 13 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index b76264cd..811d6fa0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2008-11-11 Akim Demaille <demaille@gostai.com>
+ Less memory pressure on the "list" bench.
+ * etc/bench.pl.in (generate_grammar_list): Do not accumulate all
+ the values, to limit memory pressure.
+
+2008-11-11 Akim Demaille <demaille@gostai.com>
+
Introduce make_symbol.
make_symbol provides a means to construct a full symbol (kind, value,
location) in a single shot. It is meant to be a Symbol constructor,
diff --git a/etc/bench.pl.in b/etc/bench.pl.in
index d058ce19..d365d653 100755
--- a/etc/bench.pl.in
+++ b/etc/bench.pl.in
@@ -634,12 +634,11 @@ result:
text:
/* nothing */ { /* This will generate an empty string */ }
-| text TEXT { std::swap($$,$1); $$.append($2); }
+| text TEXT { std::swap ($$, $2); }
| text NUMBER {
- std::swap($$,$1);
- std::ostringstream ss;
+ std::ostringstream ss;
ss << ' ' << $2;
- $$.append(ss.str());
+ $$ = ss.str();
}
;
EOF
@@ -663,11 +662,12 @@ result:
text:
/* nothing */ { $$ = new std::string; }
-| text TEXT { $$->append(*$2); delete $2; }
+| text TEXT { delete $1; $$ = $2; }
| text NUMBER {
- std::ostringstream ss;
+ delete $1;
+ std::ostringstream ss;
ss << ' ' << $2;
- $$->append(ss.str());
+ $$ = new std::string (ss.str());
}
;
EOF