control flow flattening improvements: less storage nodes, faster speed

This commit is contained in:
sanex3339
2016-12-13 08:16:08 +03:00
parent bc4b18f1e1
commit 59a2511ec6
23 changed files with 1247 additions and 1157 deletions
+19 -3
View File
@@ -50,6 +50,22 @@ export class NodeUtils {
return <TStatement[]>structure.body;
}
/**
* @param structure
* @returns {string}
*/
public static convertStructureToCode (structure: ESTree.Node[]): string {
let code: string = '';
for (let node of structure) {
code += escodegen.generate(node, {
sourceMapWithCode: true
}).code;
}
return code;
}
/**
* @param node
* @param index
@@ -97,7 +113,7 @@ export class NodeUtils {
return parentNode;
}
return NodeUtils.getBlockScopeOfNode(parentNode);
return NodeUtils.getBlockScopeOfNode(parentNode, depth);
}
/**
@@ -180,12 +196,12 @@ export class NodeUtils {
(<any>estraverse)[traverseType](node, {
enter: (node: ESTree.Node, parentNode: ESTree.Node): any => {
if (node.type === nodeType && visitor.enter) {
visitor.enter(node, parentNode);
return visitor.enter(node, parentNode);
}
},
leave: (node: ESTree.Node, parentNode: ESTree.Node): any => {
if (node.type === nodeType && visitor.leave) {
visitor.leave(node, parentNode);
return visitor.leave(node, parentNode);
}
}
});