diff --git a/packages/babel-traverse/src/index.js b/packages/babel-traverse/src/index.js index 099e6f0bf7..00f2a423e7 100644 --- a/packages/babel-traverse/src/index.js +++ b/packages/babel-traverse/src/index.js @@ -39,7 +39,8 @@ traverse.explode = visitors.explode; traverse.NodePath = require("./path"); traverse.Scope = require("./scope"); -traverse.Hub = require("./hub"); +traverse.Hub = require("./hub") +traverse.cache = require("./path/cache"); traverse.cheap = function (node, enter) { if (!node) return; @@ -88,6 +89,8 @@ traverse.clearNode = function (node) { if (key[0] === "_" && node[key] != null) node[key] = undefined; } + traverse.cache.delete(node); + let syms: Array = Object.getOwnPropertySymbols(node); for (let sym of syms) { node[sym] = null; diff --git a/packages/babel-types/src/index.js b/packages/babel-types/src/index.js index 03cac174eb..43aa56968a 100644 --- a/packages/babel-types/src/index.js +++ b/packages/babel-types/src/index.js @@ -373,6 +373,12 @@ function _inheritComments(key, child, parent) { } } + +// Can't use import because of cyclic dependency between babel-traverse +// and this module (babel-types). This require needs to appear after +// we export the TYPES constant. +const traverse = require("babel-traverse").default; + /** * Inherit all contextual properties from `parent` node to `child` node. */ @@ -399,6 +405,9 @@ export function inherits(child, parent) { t.inheritsComments(child, parent); + if (traverse.cache.has(parent)) { + traverse.cache.set(child, traverse.cache.get(parent)); + } return child; }