Files
babel/src/babel/transformation/transformers/es6/object-super.js
2015-04-26 05:26:21 +01:00

47 lines
1.2 KiB
JavaScript

import ReplaceSupers from "../../helpers/replace-supers";
import * as t from "../../../types";
export var shouldVisit = t.isSuper;
function Property(path, node, scope, getObjectRef, file) {
if (!node.method) return;
var value = node.value;
var thisExpr = scope.generateUidIdentifier("this");
var replaceSupers = new ReplaceSupers({
topLevelThisReference: thisExpr,
getObjectRef: getObjectRef,
methodNode: node,
methodPath: path,
isStatic: true,
scope: scope,
file: file
});
replaceSupers.replace();
if (replaceSupers.hasSuper) {
value.body.body.unshift(
t.variableDeclaration("var", [
t.variableDeclarator(thisExpr, t.thisExpression())
])
);
}
}
export function ObjectExpression(node, parent, scope, file) {
var objectRef;
var getObjectRef = () => objectRef ||= scope.generateUidIdentifier("obj");
var propPaths = this.get("properties");
for (var i = 0; i < node.properties.length; i++) {
Property(propPaths[i], node.properties[i], scope, getObjectRef, file);
}
if (objectRef) {
scope.push({ id: objectRef });
return t.assignmentExpression("=", objectRef, node);
}
}