diff --git a/src/babel/transformation/file.js b/src/babel/transformation/file.js index cfebe4a51a..840fb357bd 100644 --- a/src/babel/transformation/file.js +++ b/src/babel/transformation/file.js @@ -7,6 +7,7 @@ import generate from "../generation"; import defaults from "lodash/object/defaults"; import includes from "lodash/collection/includes"; import assign from "lodash/object/assign"; +import Logger from "./logger"; import parse from "../helpers/parse"; import Scope from "../traversal/scope"; import slash from "slash"; @@ -23,7 +24,7 @@ var checkTransformerVisitor = { function checkNode(stack, node, scope) { each(stack, function (pass) { - if (pass.shouldRun) return; + if (pass.shouldRun || pass.ran) return; pass.checkNode(node, scope); }); } @@ -41,6 +42,7 @@ export default class File { this.lastStatements = []; this.opts = this.normalizeOptions(opts); + this.log = new Logger(this); this.ast = {}; this.buildTransformers(); @@ -260,12 +262,6 @@ export default class File { this.transformers = transformers; } - debug(msg?: string) { - var parts = this.opts.filename; - if (msg) parts += `: ${msg}`; - util.debug(parts); - } - getModuleFormatter(type: string) { var ModuleFormatter = isFunction(type) ? type : transform.moduleFormatters[type]; @@ -398,10 +394,6 @@ export default class File { } } - logDeopt() { - // todo, (node, msg) - } - errorWithNode(node, msg, Error = SyntaxError) { var loc = node.loc.start; var err = new Error(`Line ${loc.line}: ${msg}`); diff --git a/src/babel/transformation/logger.js b/src/babel/transformation/logger.js new file mode 100644 index 0000000000..29e185af9d --- /dev/null +++ b/src/babel/transformation/logger.js @@ -0,0 +1,22 @@ +import * as util from "../util"; + +export default class Logger { + constructor(file: File) { + this.filename = file.opts.filename; + this.file = file; + } + + _buildMessage(msg: string): string { + var parts = this.filename; + if (msg) parts += `: ${msg}`; + return parts; + } + + debug(msg: string) { + util.debug(this._buildMessage(msg)); + } + + deopt(node: Object, msg: string) { + util.debug(this._buildMessage(msg)); + } +} diff --git a/src/babel/transformation/transformer-pass.js b/src/babel/transformation/transformer-pass.js index d8a2b24951..3beac40bc8 100644 --- a/src/babel/transformation/transformer-pass.js +++ b/src/babel/transformation/transformer-pass.js @@ -11,6 +11,7 @@ export default class TransformerPass { this.shouldRun = !transformer.check; this.handlers = transformer.handlers; this.file = file; + this.ran = false; } canRun(): boolean { @@ -56,8 +57,10 @@ export default class TransformerPass { var file = this.file; - file.debug(`Running transformer ${this.transformer.key}`); + file.log.debug(`Running transformer ${this.transformer.key}`); file.scope.traverse(file.ast, this.handlers, file); + + this.ran = true; } } diff --git a/src/babel/transformation/transformers/es6/tail-call.js b/src/babel/transformation/transformers/es6/tail-call.js index 0c6cb72985..6d55c1adf8 100644 --- a/src/babel/transformation/transformers/es6/tail-call.js +++ b/src/babel/transformation/transformers/es6/tail-call.js @@ -161,7 +161,7 @@ class TailCallTransformer { if (!this.hasTailRecursion) return; if (this.hasDeopt()) { - this.file.logDeopt(node, messages.get("tailCallReassignmentDeopt")); + this.file.log.deopt(node, messages.get("tailCallReassignmentDeopt")); return; }