Sha256: 53573c3ea68cd43a96cbeeb50c93ad9738164a22a23762ede0508480cf2cd42d
Contents?: true
Size: 1.96 KB
Versions: 4
Compression:
Stored size: 1.96 KB
Contents
import Node from '../Node.js'; import CompileError from '../../utils/CompileError.js'; import removeTrailingComma from '../../utils/removeTrailingComma.js'; export default class FunctionExpression extends Node { initialise(transforms) { if (this.generator && transforms.generator) { throw new CompileError('Generators are not supported', this); } this.body.createScope(); if (this.id) { // function expression IDs belong to the child scope... this.body.scope.addDeclaration(this.id, 'function'); } super.initialise(transforms); const parent = this.parent; let methodName; if ( transforms.conciseMethodProperty && parent.type === 'Property' && parent.kind === 'init' && parent.method && parent.key.type === 'Identifier' ) { // object literal concise method methodName = parent.key.name; } else if ( transforms.classes && parent.type === 'MethodDefinition' && parent.kind === 'method' && parent.key.type === 'Identifier' ) { // method definition in a class methodName = parent.key.name; } else if (this.id && this.id.type === 'Identifier') { // naked function expression methodName = this.id.alias || this.id.name; } if (methodName) { for (const param of this.params) { if (param.type === 'Identifier' && methodName === param.name) { // workaround for Safari 9/WebKit bug: // https://gitlab.com/Rich-Harris/buble/issues/154 // change parameter name when same as method name const scope = this.body.scope; const declaration = scope.declarations[methodName]; const alias = scope.createIdentifier(methodName); param.alias = alias; for (const identifier of declaration.instances) { identifier.alias = alias; } break; } } } } transpile(code, transforms) { super.transpile(code, transforms); if (transforms.trailingFunctionCommas && this.params.length) { removeTrailingComma(code, this.params[this.params.length - 1].end); } } }
Version data entries
4 entries across 4 versions & 1 rubygems