From cad0e9e7f4cc5fd9f82cfd25223561d186804e22 Mon Sep 17 00:00:00 2001 From: Nikolay Kostyurin Date: Wed, 16 Dec 2020 23:55:17 +0200 Subject: [PATCH] perf(parser): cache nested tokens in Set to prevent deoptimization (#83) --- packages/bbob-parser/src/parse.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/bbob-parser/src/parse.js b/packages/bbob-parser/src/parse.js index 111f74c..545412c 100644 --- a/packages/bbob-parser/src/parse.js +++ b/packages/bbob-parser/src/parse.js @@ -49,23 +49,31 @@ const parse = (input, opts = {}) => { /** * Cache for nested tags checks - * @type {{}} */ - const nestedTagsMap = {}; + const nestedTagsMap = new Set(); + /** + * + * @param token + * @returns {boolean} + */ const isTokenNested = (token) => { - if (typeof nestedTagsMap[token.getValue()] === 'undefined') { - nestedTagsMap[token.getValue()] = tokenizer.isTokenNested(token); + const value = token.getValue(); + + if (!nestedTagsMap.has(value) && tokenizer.isTokenNested && tokenizer.isTokenNested(token)) { + nestedTagsMap.add(value); + + return true; } - return nestedTagsMap[token.getValue()]; + return nestedTagsMap.has(value); }; /** * @param tagName * @returns {boolean} */ - const isTagNested = (tagName) => !!nestedTagsMap[tagName]; + const isTagNested = (tagName) => Boolean(nestedTagsMap.has(tagName)); /** * @private