Sha256: 11a5062e09371d296573c75130067fce2d1d69759f68e07492d9cef58cc626f8
Contents?: true
Size: 1.34 KB
Versions: 4
Compression:
Stored size: 1.34 KB
Contents
import Node from '../Node.js'; import spread, { isArguments } from '../../utils/spread.js'; import removeTrailingComma from '../../utils/removeTrailingComma.js'; export default class NewExpression extends Node { initialise(transforms) { if (transforms.spreadRest && this.arguments.length) { const lexicalBoundary = this.findLexicalBoundary(); let i = this.arguments.length; while (i--) { const arg = this.arguments[i]; if (arg.type === 'SpreadElement' && isArguments(arg.argument)) { this.argumentsArrayAlias = lexicalBoundary.getArgumentsArrayAlias(); break; } } } super.initialise(transforms); } transpile(code, transforms) { super.transpile(code, transforms); if (transforms.spreadRest && this.arguments.length) { const firstArgument = this.arguments[0]; const isNew = true; let hasSpreadElements = spread( code, this.arguments, firstArgument.start, this.argumentsArrayAlias, isNew ); if (hasSpreadElements) { code.prependRight( this.start + 'new'.length, ' (Function.prototype.bind.apply(' ); code.overwrite( this.callee.end, firstArgument.start, ', [ null ].concat( ' ); code.appendLeft(this.end, ' ))'); } } if (this.arguments.length) { removeTrailingComma(code, this.arguments[this.arguments.length - 1].end); } } }
Version data entries
4 entries across 4 versions & 1 rubygems