- Commit
- 2d43050a1c62a3e6a7ef5e0d286828adc72e4bb4
- Parent
- 78ad57d6919c20831c8f6d3455a72d431afd1715
- Author
- John MacFarlane <jgm@berkeley.edu>
- Date
Only memoize during inline parsing.
This cuts the performance hit.
With memoization, we get roughly constant behavior in the fuzztest.
Without it, not.
diff --git a/js/stmd.js b/js/stmd.js
@@ -455,7 +455,7 @@
}
}
- if ((next_inline = this.parseInline())) {
+ if ((next_inline = this.parseInline(true))) {
Array.prototype.push.apply(current, next_inline);
} else {
break;
@@ -743,10 +743,10 @@
// Parse the next inline element in subject, advancing subject position
// and returning the inline parsed.
- var parseInline = function() {
+ var parseInline = function(memoize) {
var startpos = this.pos;
- var memoized = this.memo[startpos];
+ var memoized = memoize && this.memo[startpos];
if (memoized) {
this.pos = memoized.endpos;
return memoized.inline;
@@ -793,7 +793,7 @@
res = [{t: 'Str', c: c}];
}
- if (res) {
+ if (res && memoize) {
this.memo[startpos] = { inline: res,
endpos: this.pos };
}