'use strict';
var objectPatternB = require('nodes');
var nodes = objectPatternB.nodes;
var objectPatternA = require('./id');
var getUniqueName = objectPatternA.getUniqueName;
var objectPattern = require('./string');
var express = objectPattern.express;
var extend = 'function (SuperClass, Class, prototype, members) {\n var descriptors = function(object) {\n var base = {}, descriptor;\n for (var key in object) {\n descriptor = Object.getOwnPropertyDescriptor(object, key);\n if (!(\'get\' in descriptor) && !(\'set\' in descriptor)) {\n descriptor.enumerable = false;\n }\n base[key] = descriptor;\n }\n return base;\n };\n\n if (SuperClass) Class.__proto__ = SuperClass;\n Object.defineProperty(Class, \'prototype\', {\n value: Object.create(SuperClass === null ? null : SuperClass.prototype, descriptors(prototype))\n });\n\n Object.defineProperty(Class.prototype, \'constructor\', { value: Class });\n\n if (members) Object.defineProperties(Class, descriptors(members));\n return Class;\n}';
exports.getExtendId = function (node) {
if (!node.extendId) {
var extendName = getUniqueName(node, 'extend');
var declaration = express('var ' + extendName + ' = ' + extend);
var id = declaration.declarations[0].id;
var body = nodes.Function.test(node) ? node.body.body : node.body;
body.unshift(declaration);
node.extendId = id;
}
return node.extendId;
}; |