Prevented transformation of object keys in sequence expression that has super call

This commit is contained in:
sanex3339
2020-02-09 01:49:51 +03:00
parent db908f7bce
commit 4e716ed0d0
8 changed files with 69 additions and 41 deletions
@@ -58,9 +58,13 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
hostStatement: ESTree.Statement
): boolean {
return ObjectExpressionKeysTransformer.isReferencedIdentifierName(
objectExpressionNode,
hostStatement
);
objectExpressionNode,
hostStatement
)
|| ObjectExpressionKeysTransformer.isProhibitedSequenceExpression(
objectExpressionNode,
hostStatement
);
}
/**
@@ -110,6 +114,23 @@ export class ObjectExpressionKeysTransformer extends AbstractNodeTransformer {
return isReferencedIdentifierName;
}
/**
* @param {ObjectExpression} objectExpressionNode
* @param {Node} hostNode
* @returns {boolean}
*/
private static isProhibitedSequenceExpression (
objectExpressionNode: ESTree.ObjectExpression,
hostNode: ESTree.Node,
): boolean {
return NodeGuards.isExpressionStatementNode(hostNode)
&& NodeGuards.isSequenceExpressionNode(hostNode.expression)
&& hostNode.expression.expressions.some((expressionNode: ESTree.Expression) =>
NodeGuards.isCallExpressionNode(expressionNode)
&& NodeGuards.isSuperNode(expressionNode.callee)
);
}
/**
* @param {TransformationStage} transformationStage
* @returns {IVisitor | null}
+8 -34
View File
@@ -309,40 +309,6 @@ export class NodeGuards {
return node.type === NodeType.Property;
}
/**
* @param {Node} node
* @param {Node} parentNode
* @returns {boolean}
*/
public static parentNodeIsPropertyNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.Identifier {
return NodeGuards.isPropertyNode(parentNode)
&& !parentNode.computed
&& parentNode.key === node;
}
/**
* @param {Node} node
* @param {Node} parentNode
* @returns {boolean}
*/
public static parentNodeIsMemberExpressionNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.Identifier {
return (
NodeGuards.isMemberExpressionNode(parentNode)
&& !parentNode.computed
&& parentNode.property === node
);
}
/**
* @param {Node} node
* @param {Node} parentNode
* @returns {boolean}
*/
public static parentNodeIsMethodDefinitionNode (node: ESTree.Node, parentNode: ESTree.Node): node is ESTree.Identifier {
return NodeGuards.isMethodDefinitionNode(parentNode)
&& !parentNode.computed;
}
/**
* @param {Node} node
* @returns {boolean}
@@ -359,6 +325,14 @@ export class NodeGuards {
return node.type === NodeType.ReturnStatement;
}
/**
* @param {Node} node
* @returns {boolean}
*/
public static isSequenceExpressionNode (node: ESTree.Node): node is ESTree.SequenceExpression {
return node.type === NodeType.SequenceExpression;
}
/**
* @param {Node} node
* @returns {boolean}