Stop caching forEachLine/flattenLists results on params object.

This commit is contained in:
David Anson 2018-02-02 22:29:50 -08:00
parent 5adbf30628
commit bc8776c582

View file

@ -106,9 +106,11 @@ function filterTokens(params, type, callback) {
} }
module.exports.filterTokens = filterTokens; module.exports.filterTokens = filterTokens;
var lastForEachLineParams = null;
var lastForEachLineResult = null;
// Calls the provided function for each line (with context) // Calls the provided function for each line (with context)
module.exports.forEachLine = function forEachLine(params, callback) { module.exports.forEachLine = function forEachLine(params, callback) {
if (!params.forEachLine) { if (params !== lastForEachLineParams) {
var lineMetadata = new Array(params.lines.length); var lineMetadata = new Array(params.lines.length);
var fenceStart = null; var fenceStart = null;
var inFence = false; var inFence = false;
@ -139,11 +141,12 @@ module.exports.forEachLine = function forEachLine(params, callback) {
lineMetadata[i] += 8; lineMetadata[i] += 8;
} }
}); });
params.forEachLine = lineMetadata; lastForEachLineParams = params;
lastForEachLineResult = lineMetadata;
} }
// Invoke callback // Invoke callback
params.lines.forEach(function forLine(line, lineIndex) { params.lines.forEach(function forLine(line, lineIndex) {
var metadata = params.forEachLine[lineIndex]; var metadata = lastForEachLineResult[lineIndex];
callback( callback(
line, line,
lineIndex, lineIndex,
@ -179,9 +182,11 @@ module.exports.forEachHeading = function forEachHeading(params, callback) {
}); });
}; };
var lastFlattenListsParams = null;
var lastFlattenListsResult = null;
// Returns (nested) lists as a flat array (in order) // Returns (nested) lists as a flat array (in order)
module.exports.flattenLists = function flattenLists(params) { module.exports.flattenLists = function flattenLists(params) {
if (!params.flattenLists) { if (lastFlattenListsParams !== params) {
var lists = []; var lists = [];
var stack = []; var stack = [];
var current = null; var current = null;
@ -216,9 +221,10 @@ module.exports.flattenLists = function flattenLists(params) {
lastWithMap = token; lastWithMap = token;
} }
}); });
params.flattenLists = lists; lastFlattenListsParams = params;
lastFlattenListsResult = lists;
} }
return params.flattenLists; return lastFlattenListsResult;
}; };
// Adds a generic error object via the onError callback // Adds a generic error object via the onError callback