clear and inherit all symbols and underscore propertes in t.inherits and traverse.removeProperties

This commit is contained in:
Sebastian McKenzie 2015-11-06 20:52:59 -05:00
parent 63cd3008d2
commit e80c206591
2 changed files with 23 additions and 2 deletions

View File

@ -73,7 +73,6 @@ traverse.node = function (node: Object, opts: Object, scope: Object, state: Obje
};
const CLEAR_KEYS: Array = t.COMMENT_KEYS.concat([
"_scopeInfo", "_paths",
"tokens", "comments",
"start", "end", "loc",
"raw", "rawValue"
@ -83,6 +82,15 @@ traverse.clearNode = function (node) {
for (let key of CLEAR_KEYS) {
if (node[key] != null) node[key] = undefined;
}
for (let key in node) {
if (key[0] === "_" && node[key] != null) node[key] = undefined;
}
let syms: Array<Symbol> = Object.getOwnPropertyNames(node);
for (let sym of syms) {
node[sym] = null;
}
};
traverse.removeProperties = function (tree) {

View File

@ -33,7 +33,7 @@ export const COMMENT_KEYS = ["leadingComments", "trailingComments", "
export const INHERIT_KEYS = {
optional: ["typeAnnotation", "typeParameters", "returnType"],
force: ["_scopeInfo", "_paths", "start", "loc", "end"]
force: ["start", "loc", "end"]
};
export const BOOLEAN_NUMBER_BINARY_OPERATORS = [">", "<", ">=", "<="];
@ -384,12 +384,25 @@ function _inheritComments(key, child, parent) {
export function inherits(child: Object, parent: Object): Object {
if (!child || !parent) return child;
// optionally inherit specific properties if not null
for (let key of (t.INHERIT_KEYS.optional: Array<string>)) {
if (child[key] == null) {
child[key] = parent[key];
}
}
// force inherit symbols
let parentSymbols: Array<Symbol> = Object.getOwnPropertyNames(parent);
for (let sym of parentSymbols) {
child[sym] = parent[sym];
}
// force inherit "private" properties
for (let key in parent) {
if (key[0] === "_") node[key] = parent[key];
}
// force inherit select properties
for (let key of (t.INHERIT_KEYS.force: Array<string>)) {
child[key] = parent[key];
}