@philpl/buble
Version:
The blazing fast, batteries-included ES2015 compiler
33 lines (29 loc) • 934 B
JavaScript
import Node from '../Node.js';
import checkConst from '../../utils/checkConst.js';
export default class UpdateExpression extends Node {
initialise(transforms) {
if (this.argument.type === 'Identifier') {
const declaration = this.findScope(false).findDeclaration(
this.argument.name
);
// special case – https://gitlab.com/Rich-Harris/buble/issues/150
const statement = declaration && declaration.node.ancestor(3);
if (
statement &&
statement.type === 'ForStatement' &&
statement.body.contains(this)
) {
statement.reassigned[this.argument.name] = true;
}
}
super.initialise(transforms);
}
transpile(code, transforms) {
if (this.argument.type === 'Identifier') {
// Do this check after everything has been initialized to find
// shadowing declarations after this expression
checkConst(this.argument, this.findScope(false));
}
super.transpile(code, transforms);
}
}