|
|
|
|
@@ -1,6 +1,6 @@
|
|
|
|
|
// Generated by CoffeeScript 1.6.1
|
|
|
|
|
(function() {
|
|
|
|
|
var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, CodeFragment, Comment, Existence, Extends, For, IDENTIFIER, IDENTIFIER_STR, IS_STRING, If, In, Index, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, METHOD_DEF, NEGATE, NO, Obj, Op, Param, Parens, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, addLocationDataFn, compact, del, ends, extend, flatten, fragmentsToText, last, locationDataToString, merge, multident, some, starts, throwSyntaxError, unfoldSoak, utility, _ref, _ref1,
|
|
|
|
|
var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, CodeFragment, Comment, Existence, Extends, For, IDENTIFIER, IDENTIFIER_STR, IS_STRING, If, In, Index, LEVEL_ACCESS, LEVEL_COND, LEVEL_LIST, LEVEL_OP, LEVEL_PAREN, LEVEL_TOP, Literal, METHOD_DEF, NEGATE, NO, Obj, Op, Param, Parens, RESERVED, Range, Return, SIMPLENUM, STRICT_PROSCRIBED, Scope, Slice, Splat, Switch, TAB, THIS, Throw, Try, UTILITIES, Value, While, YES, addLocationDataFn, compact, del, ends, extend, flatten, fragmentsToText, last, locationDataToString, merge, multident, some, starts, throwSyntaxError, unfoldSoak, utility, _ref, _ref1, _ref2, _ref3,
|
|
|
|
|
__hasProp = {}.hasOwnProperty,
|
|
|
|
|
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
|
|
|
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
|
|
|
|
|
@@ -151,15 +151,14 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Base.prototype.toString = function(idt, name) {
|
|
|
|
|
var location, tree;
|
|
|
|
|
var tree;
|
|
|
|
|
if (idt == null) {
|
|
|
|
|
idt = '';
|
|
|
|
|
}
|
|
|
|
|
if (name == null) {
|
|
|
|
|
name = this.constructor.name;
|
|
|
|
|
}
|
|
|
|
|
location = this.locationData ? locationDataToString(this.locationData) : "??";
|
|
|
|
|
tree = '\n' + idt + location + ": " + name;
|
|
|
|
|
tree = '\n' + idt + name;
|
|
|
|
|
if (this.soak) {
|
|
|
|
|
tree += '?';
|
|
|
|
|
}
|
|
|
|
|
@@ -550,7 +549,8 @@
|
|
|
|
|
__extends(Undefined, _super);
|
|
|
|
|
|
|
|
|
|
function Undefined() {
|
|
|
|
|
return Undefined.__super__.constructor.apply(this, arguments);
|
|
|
|
|
_ref2 = Undefined.__super__.constructor.apply(this, arguments);
|
|
|
|
|
return _ref2;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Undefined.prototype.isAssignable = NO;
|
|
|
|
|
@@ -570,7 +570,8 @@
|
|
|
|
|
__extends(Null, _super);
|
|
|
|
|
|
|
|
|
|
function Null() {
|
|
|
|
|
return Null.__super__.constructor.apply(this, arguments);
|
|
|
|
|
_ref3 = Null.__super__.constructor.apply(this, arguments);
|
|
|
|
|
return _ref3;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Null.prototype.isAssignable = NO;
|
|
|
|
|
@@ -624,8 +625,8 @@
|
|
|
|
|
Return.prototype.jumps = THIS;
|
|
|
|
|
|
|
|
|
|
Return.prototype.compileToFragments = function(o, level) {
|
|
|
|
|
var expr, _ref2;
|
|
|
|
|
expr = (_ref2 = this.expression) != null ? _ref2.makeReturn() : void 0;
|
|
|
|
|
var expr, _ref4;
|
|
|
|
|
expr = (_ref4 = this.expression) != null ? _ref4.makeReturn() : void 0;
|
|
|
|
|
if (expr && !(expr instanceof Return)) {
|
|
|
|
|
return expr.compileToFragments(o, level);
|
|
|
|
|
} else {
|
|
|
|
|
@@ -696,10 +697,10 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Value.prototype.isAtomic = function() {
|
|
|
|
|
var node, _i, _len, _ref2;
|
|
|
|
|
_ref2 = this.properties.concat(this.base);
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
node = _ref2[_i];
|
|
|
|
|
var node, _i, _len, _ref4;
|
|
|
|
|
_ref4 = this.properties.concat(this.base);
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
node = _ref4[_i];
|
|
|
|
|
if (node.soak || node instanceof Call) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
@@ -776,17 +777,17 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Value.prototype.unfoldSoak = function(o) {
|
|
|
|
|
var _ref2,
|
|
|
|
|
var _ref4,
|
|
|
|
|
_this = this;
|
|
|
|
|
return (_ref2 = this.unfoldedSoak) != null ? _ref2 : this.unfoldedSoak = (function() {
|
|
|
|
|
var fst, i, ifn, prop, ref, snd, _i, _len, _ref3, _ref4;
|
|
|
|
|
return (_ref4 = this.unfoldedSoak) != null ? _ref4 : this.unfoldedSoak = (function() {
|
|
|
|
|
var fst, i, ifn, prop, ref, snd, _i, _len, _ref5, _ref6;
|
|
|
|
|
if (ifn = _this.base.unfoldSoak(o)) {
|
|
|
|
|
(_ref3 = ifn.body.properties).push.apply(_ref3, _this.properties);
|
|
|
|
|
(_ref5 = ifn.body.properties).push.apply(_ref5, _this.properties);
|
|
|
|
|
return ifn;
|
|
|
|
|
}
|
|
|
|
|
_ref4 = _this.properties;
|
|
|
|
|
for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
|
|
|
|
|
prop = _ref4[i];
|
|
|
|
|
_ref6 = _this.properties;
|
|
|
|
|
for (i = _i = 0, _len = _ref6.length; _i < _len; i = ++_i) {
|
|
|
|
|
prop = _ref6[i];
|
|
|
|
|
if (!prop.soak) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
@@ -850,8 +851,8 @@
|
|
|
|
|
Call.prototype.children = ['variable', 'args'];
|
|
|
|
|
|
|
|
|
|
Call.prototype.newInstance = function() {
|
|
|
|
|
var base, _ref2;
|
|
|
|
|
base = ((_ref2 = this.variable) != null ? _ref2.base : void 0) || this.variable;
|
|
|
|
|
var base, _ref4;
|
|
|
|
|
base = ((_ref4 = this.variable) != null ? _ref4.base : void 0) || this.variable;
|
|
|
|
|
if (base instanceof Call && !base.isNew) {
|
|
|
|
|
base.newInstance();
|
|
|
|
|
} else {
|
|
|
|
|
@@ -884,13 +885,13 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Call.prototype.unfoldSoak = function(o) {
|
|
|
|
|
var call, ifn, left, list, rite, _i, _len, _ref2, _ref3;
|
|
|
|
|
var call, ifn, left, list, rite, _i, _len, _ref4, _ref5;
|
|
|
|
|
if (this.soak) {
|
|
|
|
|
if (this.variable) {
|
|
|
|
|
if (ifn = unfoldSoak(o, this, 'variable')) {
|
|
|
|
|
return ifn;
|
|
|
|
|
}
|
|
|
|
|
_ref2 = new Value(this.variable).cacheReference(o), left = _ref2[0], rite = _ref2[1];
|
|
|
|
|
_ref4 = new Value(this.variable).cacheReference(o), left = _ref4[0], rite = _ref4[1];
|
|
|
|
|
} else {
|
|
|
|
|
left = new Literal(this.superReference(o));
|
|
|
|
|
rite = new Value(left);
|
|
|
|
|
@@ -918,9 +919,9 @@
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
_ref3 = list.reverse();
|
|
|
|
|
for (_i = 0, _len = _ref3.length; _i < _len; _i++) {
|
|
|
|
|
call = _ref3[_i];
|
|
|
|
|
_ref5 = list.reverse();
|
|
|
|
|
for (_i = 0, _len = _ref5.length; _i < _len; _i++) {
|
|
|
|
|
call = _ref5[_i];
|
|
|
|
|
if (ifn) {
|
|
|
|
|
if (call.variable instanceof Call) {
|
|
|
|
|
call.variable = ifn;
|
|
|
|
|
@@ -934,18 +935,18 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Call.prototype.compileNode = function(o) {
|
|
|
|
|
var arg, argIndex, compiledArgs, compiledArray, fragments, preface, _i, _len, _ref2, _ref3;
|
|
|
|
|
if ((_ref2 = this.variable) != null) {
|
|
|
|
|
_ref2.front = this.front;
|
|
|
|
|
var arg, argIndex, compiledArgs, compiledArray, fragments, preface, _i, _len, _ref4, _ref5;
|
|
|
|
|
if ((_ref4 = this.variable) != null) {
|
|
|
|
|
_ref4.front = this.front;
|
|
|
|
|
}
|
|
|
|
|
compiledArray = Splat.compileSplattedArray(o, this.args, true);
|
|
|
|
|
if (compiledArray.length) {
|
|
|
|
|
return this.compileSplat(o, compiledArray);
|
|
|
|
|
}
|
|
|
|
|
compiledArgs = [];
|
|
|
|
|
_ref3 = this.args;
|
|
|
|
|
for (argIndex = _i = 0, _len = _ref3.length; _i < _len; argIndex = ++_i) {
|
|
|
|
|
arg = _ref3[argIndex];
|
|
|
|
|
_ref5 = this.args;
|
|
|
|
|
for (argIndex = _i = 0, _len = _ref5.length; _i < _len; argIndex = ++_i) {
|
|
|
|
|
arg = _ref5[argIndex];
|
|
|
|
|
if (argIndex) {
|
|
|
|
|
compiledArgs.push(this.makeCode(", "));
|
|
|
|
|
}
|
|
|
|
|
@@ -1089,23 +1090,23 @@
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Range.prototype.compileVariables = function(o) {
|
|
|
|
|
var step, _ref2, _ref3, _ref4, _ref5;
|
|
|
|
|
var step, _ref4, _ref5, _ref6, _ref7;
|
|
|
|
|
o = merge(o, {
|
|
|
|
|
top: true
|
|
|
|
|
});
|
|
|
|
|
_ref2 = this.cacheToCodeFragments(this.from.cache(o, LEVEL_LIST)), this.fromC = _ref2[0], this.fromVar = _ref2[1];
|
|
|
|
|
_ref3 = this.cacheToCodeFragments(this.to.cache(o, LEVEL_LIST)), this.toC = _ref3[0], this.toVar = _ref3[1];
|
|
|
|
|
_ref4 = this.cacheToCodeFragments(this.from.cache(o, LEVEL_LIST)), this.fromC = _ref4[0], this.fromVar = _ref4[1];
|
|
|
|
|
_ref5 = this.cacheToCodeFragments(this.to.cache(o, LEVEL_LIST)), this.toC = _ref5[0], this.toVar = _ref5[1];
|
|
|
|
|
if (step = del(o, 'step')) {
|
|
|
|
|
_ref4 = this.cacheToCodeFragments(step.cache(o, LEVEL_LIST)), this.step = _ref4[0], this.stepVar = _ref4[1];
|
|
|
|
|
_ref6 = this.cacheToCodeFragments(step.cache(o, LEVEL_LIST)), this.step = _ref6[0], this.stepVar = _ref6[1];
|
|
|
|
|
}
|
|
|
|
|
_ref5 = [this.fromVar.match(SIMPLENUM), this.toVar.match(SIMPLENUM)], this.fromNum = _ref5[0], this.toNum = _ref5[1];
|
|
|
|
|
_ref7 = [this.fromVar.match(SIMPLENUM), this.toVar.match(SIMPLENUM)], this.fromNum = _ref7[0], this.toNum = _ref7[1];
|
|
|
|
|
if (this.stepVar) {
|
|
|
|
|
return this.stepNum = this.stepVar.match(SIMPLENUM);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Range.prototype.compileNode = function(o) {
|
|
|
|
|
var cond, condPart, from, gt, idx, idxName, known, lt, namedIndex, stepPart, to, varPart, _ref2, _ref3;
|
|
|
|
|
var cond, condPart, from, gt, idx, idxName, known, lt, namedIndex, stepPart, to, varPart, _ref4, _ref5;
|
|
|
|
|
if (!this.fromVar) {
|
|
|
|
|
this.compileVariables(o);
|
|
|
|
|
}
|
|
|
|
|
@@ -1123,8 +1124,8 @@
|
|
|
|
|
if (this.step !== this.stepVar) {
|
|
|
|
|
varPart += ", " + this.step;
|
|
|
|
|
}
|
|
|
|
|
_ref2 = ["" + idx + " <" + this.equals, "" + idx + " >" + this.equals], lt = _ref2[0], gt = _ref2[1];
|
|
|
|
|
condPart = this.stepNum ? +this.stepNum > 0 ? "" + lt + " " + this.toVar : "" + gt + " " + this.toVar : known ? ((_ref3 = [+this.fromNum, +this.toNum], from = _ref3[0], to = _ref3[1], _ref3), from <= to ? "" + lt + " " + to : "" + gt + " " + to) : (cond = this.stepVar ? "" + this.stepVar + " > 0" : "" + this.fromVar + " <= " + this.toVar, "" + cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar);
|
|
|
|
|
_ref4 = ["" + idx + " <" + this.equals, "" + idx + " >" + this.equals], lt = _ref4[0], gt = _ref4[1];
|
|
|
|
|
condPart = this.stepNum ? +this.stepNum > 0 ? "" + lt + " " + this.toVar : "" + gt + " " + this.toVar : known ? ((_ref5 = [+this.fromNum, +this.toNum], from = _ref5[0], to = _ref5[1], _ref5), from <= to ? "" + lt + " " + to : "" + gt + " " + to) : (cond = this.stepVar ? "" + this.stepVar + " > 0" : "" + this.fromVar + " <= " + this.toVar, "" + cond + " ? " + lt + " " + this.toVar + " : " + gt + " " + this.toVar);
|
|
|
|
|
stepPart = this.stepVar ? "" + idx + " += " + this.stepVar : known ? namedIndex ? from <= to ? "++" + idx : "--" + idx : from <= to ? "" + idx + "++" : "" + idx + "--" : namedIndex ? "" + cond + " ? ++" + idx + " : --" + idx : "" + cond + " ? " + idx + "++ : " + idx + "--";
|
|
|
|
|
if (namedIndex) {
|
|
|
|
|
varPart = "" + idxName + " = " + varPart;
|
|
|
|
|
@@ -1136,11 +1137,11 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Range.prototype.compileArray = function(o) {
|
|
|
|
|
var args, body, cond, hasArgs, i, idt, post, pre, range, result, vars, _i, _ref2, _ref3, _results;
|
|
|
|
|
var args, body, cond, hasArgs, i, idt, post, pre, range, result, vars, _i, _ref4, _ref5, _results;
|
|
|
|
|
if (this.fromNum && this.toNum && Math.abs(this.fromNum - this.toNum) <= 20) {
|
|
|
|
|
range = (function() {
|
|
|
|
|
_results = [];
|
|
|
|
|
for (var _i = _ref2 = +this.fromNum, _ref3 = +this.toNum; _ref2 <= _ref3 ? _i <= _ref3 : _i >= _ref3; _ref2 <= _ref3 ? _i++ : _i--){ _results.push(_i); }
|
|
|
|
|
for (var _i = _ref4 = +this.fromNum, _ref5 = +this.toNum; _ref4 <= _ref5 ? _i <= _ref5 : _i >= _ref5; _ref4 <= _ref5 ? _i++ : _i--){ _results.push(_i); }
|
|
|
|
|
return _results;
|
|
|
|
|
}).apply(this);
|
|
|
|
|
if (this.exclusive) {
|
|
|
|
|
@@ -1188,8 +1189,8 @@
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Slice.prototype.compileNode = function(o) {
|
|
|
|
|
var compiled, compiledText, from, fromCompiled, to, toStr, _ref2;
|
|
|
|
|
_ref2 = this.range, to = _ref2.to, from = _ref2.from;
|
|
|
|
|
var compiled, compiledText, from, fromCompiled, to, toStr, _ref4;
|
|
|
|
|
_ref4 = this.range, to = _ref4.to, from = _ref4.from;
|
|
|
|
|
fromCompiled = from && from.compileToFragments(o, LEVEL_PAREN) || [this.makeCode('0')];
|
|
|
|
|
if (to) {
|
|
|
|
|
compiled = to.compileToFragments(o, LEVEL_PAREN);
|
|
|
|
|
@@ -1237,6 +1238,9 @@
|
|
|
|
|
prop = props[i];
|
|
|
|
|
join = i === props.length - 1 ? '' : prop === lastNoncom || prop instanceof Comment ? '\n' : ',\n';
|
|
|
|
|
indent = prop instanceof Comment ? '' : idt;
|
|
|
|
|
if (prop instanceof Assign && prop.variable instanceof Value && prop.variable.hasProperties()) {
|
|
|
|
|
throw new SyntaxError('Invalid object key');
|
|
|
|
|
}
|
|
|
|
|
if (prop instanceof Value && prop["this"]) {
|
|
|
|
|
prop = new Assign(prop.properties[0].name, prop, 'object');
|
|
|
|
|
}
|
|
|
|
|
@@ -1264,10 +1268,10 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Obj.prototype.assigns = function(name) {
|
|
|
|
|
var prop, _i, _len, _ref2;
|
|
|
|
|
_ref2 = this.properties;
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
prop = _ref2[_i];
|
|
|
|
|
var prop, _i, _len, _ref4;
|
|
|
|
|
_ref4 = this.properties;
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
prop = _ref4[_i];
|
|
|
|
|
if (prop.assigns(name)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
@@ -1301,11 +1305,11 @@
|
|
|
|
|
}
|
|
|
|
|
answer = [];
|
|
|
|
|
compiledObjs = (function() {
|
|
|
|
|
var _i, _len, _ref2, _results;
|
|
|
|
|
_ref2 = this.objects;
|
|
|
|
|
var _i, _len, _ref4, _results;
|
|
|
|
|
_ref4 = this.objects;
|
|
|
|
|
_results = [];
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
obj = _ref2[_i];
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
obj = _ref4[_i];
|
|
|
|
|
_results.push(obj.compileToFragments(o, LEVEL_LIST));
|
|
|
|
|
}
|
|
|
|
|
return _results;
|
|
|
|
|
@@ -1328,10 +1332,10 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Arr.prototype.assigns = function(name) {
|
|
|
|
|
var obj, _i, _len, _ref2;
|
|
|
|
|
_ref2 = this.objects;
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
obj = _ref2[_i];
|
|
|
|
|
var obj, _i, _len, _ref4;
|
|
|
|
|
_ref4 = this.objects;
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
obj = _ref4[_i];
|
|
|
|
|
if (obj.assigns(name)) {
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
@@ -1386,18 +1390,12 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Class.prototype.addBoundFunctions = function(o) {
|
|
|
|
|
var body, bound, func, lhs, name, rhs, _i, _len, _ref2, _ref3;
|
|
|
|
|
if (this.boundFuncs.length) {
|
|
|
|
|
o.scope.assign('_this', 'this');
|
|
|
|
|
_ref2 = this.boundFuncs;
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
_ref3 = _ref2[_i], name = _ref3[0], func = _ref3[1];
|
|
|
|
|
lhs = new Value(new Literal("this"), [new Access(name)]);
|
|
|
|
|
body = new Block([new Return(new Literal("" + this.ctor.name + ".prototype." + name.value + ".apply(_this, arguments)"))]);
|
|
|
|
|
rhs = new Code(func.params, body, 'boundfunc');
|
|
|
|
|
bound = new Assign(lhs, rhs);
|
|
|
|
|
this.ctor.body.unshift(bound);
|
|
|
|
|
}
|
|
|
|
|
var bvar, lhs, _i, _len, _ref4;
|
|
|
|
|
_ref4 = this.boundFuncs;
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
bvar = _ref4[_i];
|
|
|
|
|
lhs = (new Value(new Literal("this"), [new Access(bvar)])).compile(o);
|
|
|
|
|
this.ctor.body.unshift(new Literal("" + lhs + " = " + (utility('bind')) + "(" + lhs + ", this)"));
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
@@ -1434,7 +1432,7 @@
|
|
|
|
|
} else {
|
|
|
|
|
assign.variable = new Value(new Literal(name), [new Access(new Literal('prototype')), new Access(base)]);
|
|
|
|
|
if (func instanceof Code && func.bound) {
|
|
|
|
|
this.boundFuncs.push([base, func]);
|
|
|
|
|
this.boundFuncs.push(base);
|
|
|
|
|
func.bound = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -1450,15 +1448,15 @@
|
|
|
|
|
Class.prototype.walkBody = function(name, o) {
|
|
|
|
|
var _this = this;
|
|
|
|
|
return this.traverseChildren(false, function(child) {
|
|
|
|
|
var cont, exps, i, node, _i, _len, _ref2;
|
|
|
|
|
var cont, exps, i, node, _i, _len, _ref4;
|
|
|
|
|
cont = true;
|
|
|
|
|
if (child instanceof Class) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
if (child instanceof Block) {
|
|
|
|
|
_ref2 = exps = child.expressions;
|
|
|
|
|
for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
|
|
|
|
|
node = _ref2[i];
|
|
|
|
|
_ref4 = exps = child.expressions;
|
|
|
|
|
for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
|
|
|
|
|
node = _ref4[i];
|
|
|
|
|
if (node instanceof Value && node.isObject(true)) {
|
|
|
|
|
cont = false;
|
|
|
|
|
exps[i] = _this.addProperties(node, name, o);
|
|
|
|
|
@@ -1480,25 +1478,37 @@
|
|
|
|
|
return this.directives = expressions.splice(0, index);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Class.prototype.ensureConstructor = function(name) {
|
|
|
|
|
if (!this.ctor) {
|
|
|
|
|
this.ctor = new Code;
|
|
|
|
|
if (this.parent) {
|
|
|
|
|
this.ctor.body.push(new Literal("" + name + ".__super__.constructor.apply(this, arguments)"));
|
|
|
|
|
}
|
|
|
|
|
if (this.externalCtor) {
|
|
|
|
|
this.ctor.body.push(new Literal("" + this.externalCtor + ".apply(this, arguments)"));
|
|
|
|
|
}
|
|
|
|
|
this.ctor.body.makeReturn();
|
|
|
|
|
this.body.expressions.unshift(this.ctor);
|
|
|
|
|
}
|
|
|
|
|
Class.prototype.ensureConstructor = function(name, o) {
|
|
|
|
|
var missing, ref, superCall;
|
|
|
|
|
missing = !this.ctor;
|
|
|
|
|
this.ctor || (this.ctor = new Code);
|
|
|
|
|
this.ctor.ctor = this.ctor.name = name;
|
|
|
|
|
this.ctor.klass = null;
|
|
|
|
|
return this.ctor.noReturn = true;
|
|
|
|
|
this.ctor.noReturn = true;
|
|
|
|
|
if (missing) {
|
|
|
|
|
if (this.parent) {
|
|
|
|
|
superCall = new Literal("" + name + ".__super__.constructor.apply(this, arguments)");
|
|
|
|
|
}
|
|
|
|
|
if (this.externalCtor) {
|
|
|
|
|
superCall = new Literal("" + this.externalCtor + ".apply(this, arguments)");
|
|
|
|
|
}
|
|
|
|
|
if (superCall) {
|
|
|
|
|
ref = new Literal(o.scope.freeVariable('ref'));
|
|
|
|
|
this.ctor.body.unshift(new Assign(ref, superCall));
|
|
|
|
|
}
|
|
|
|
|
this.addBoundFunctions(o);
|
|
|
|
|
if (superCall) {
|
|
|
|
|
this.ctor.body.push(ref);
|
|
|
|
|
this.ctor.body.makeReturn();
|
|
|
|
|
}
|
|
|
|
|
return this.body.expressions.unshift(this.ctor);
|
|
|
|
|
} else {
|
|
|
|
|
return this.addBoundFunctions(o);
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Class.prototype.compileNode = function(o) {
|
|
|
|
|
var call, decl, klass, lname, name, params, _ref2;
|
|
|
|
|
var call, decl, klass, lname, name, params, _ref4;
|
|
|
|
|
decl = this.determineName();
|
|
|
|
|
name = decl || '_Class';
|
|
|
|
|
if (name.reserved) {
|
|
|
|
|
@@ -1508,14 +1518,13 @@
|
|
|
|
|
this.hoistDirectivePrologue();
|
|
|
|
|
this.setContext(name);
|
|
|
|
|
this.walkBody(name, o);
|
|
|
|
|
this.ensureConstructor(name);
|
|
|
|
|
this.ensureConstructor(name, o);
|
|
|
|
|
this.body.spaced = true;
|
|
|
|
|
if (!(this.ctor instanceof Code)) {
|
|
|
|
|
this.body.expressions.unshift(this.ctor);
|
|
|
|
|
}
|
|
|
|
|
this.body.expressions.push(lname);
|
|
|
|
|
(_ref2 = this.body.expressions).unshift.apply(_ref2, this.directives);
|
|
|
|
|
this.addBoundFunctions(o);
|
|
|
|
|
(_ref4 = this.body.expressions).unshift.apply(_ref4, this.directives);
|
|
|
|
|
call = Closure.wrap(this.body);
|
|
|
|
|
if (this.parent) {
|
|
|
|
|
this.superClass = new Literal(o.scope.freeVariable('super', false));
|
|
|
|
|
@@ -1540,13 +1549,13 @@
|
|
|
|
|
__extends(Assign, _super);
|
|
|
|
|
|
|
|
|
|
function Assign(variable, value, context, options) {
|
|
|
|
|
var forbidden, name, _ref2;
|
|
|
|
|
var forbidden, name, _ref4;
|
|
|
|
|
this.variable = variable;
|
|
|
|
|
this.value = value;
|
|
|
|
|
this.context = context;
|
|
|
|
|
this.param = options && options.param;
|
|
|
|
|
this.subpattern = options && options.subpattern;
|
|
|
|
|
forbidden = (_ref2 = (name = this.variable.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0);
|
|
|
|
|
forbidden = (_ref4 = (name = this.variable.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref4) >= 0);
|
|
|
|
|
if (forbidden && this.context !== 'object') {
|
|
|
|
|
this.variable.error("variable name may not be \"" + name + "\"");
|
|
|
|
|
}
|
|
|
|
|
@@ -1567,7 +1576,7 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Assign.prototype.compileNode = function(o) {
|
|
|
|
|
var answer, compiledName, isValue, match, name, val, varBase, _ref2, _ref3, _ref4, _ref5;
|
|
|
|
|
var answer, compiledName, isValue, match, name, val, varBase, _ref4, _ref5, _ref6, _ref7;
|
|
|
|
|
if (isValue = this.variable instanceof Value) {
|
|
|
|
|
if (this.variable.isArray() || this.variable.isObject()) {
|
|
|
|
|
return this.compilePatternMatch(o);
|
|
|
|
|
@@ -1575,7 +1584,7 @@
|
|
|
|
|
if (this.variable.isSplice()) {
|
|
|
|
|
return this.compileSplice(o);
|
|
|
|
|
}
|
|
|
|
|
if ((_ref2 = this.context) === '||=' || _ref2 === '&&=' || _ref2 === '?=') {
|
|
|
|
|
if ((_ref4 = this.context) === '||=' || _ref4 === '&&=' || _ref4 === '?=') {
|
|
|
|
|
return this.compileConditional(o);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -1598,7 +1607,7 @@
|
|
|
|
|
if (match[1]) {
|
|
|
|
|
this.value.klass = match[1];
|
|
|
|
|
}
|
|
|
|
|
this.value.name = (_ref3 = (_ref4 = (_ref5 = match[2]) != null ? _ref5 : match[3]) != null ? _ref4 : match[4]) != null ? _ref3 : match[5];
|
|
|
|
|
this.value.name = (_ref5 = (_ref6 = (_ref7 = match[2]) != null ? _ref7 : match[3]) != null ? _ref6 : match[4]) != null ? _ref5 : match[5];
|
|
|
|
|
}
|
|
|
|
|
val = this.value.compileToFragments(o, LEVEL_LIST);
|
|
|
|
|
if (this.context === 'object') {
|
|
|
|
|
@@ -1613,7 +1622,7 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Assign.prototype.compilePatternMatch = function(o) {
|
|
|
|
|
var acc, assigns, code, fragments, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, vvarText, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
|
|
|
|
|
var acc, assigns, code, fragments, i, idx, isObject, ivar, name, obj, objects, olen, ref, rest, splat, top, val, value, vvar, vvarText, _i, _len, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
|
|
|
|
|
top = o.level === LEVEL_TOP;
|
|
|
|
|
value = this.value;
|
|
|
|
|
objects = this.variable.base.objects;
|
|
|
|
|
@@ -1628,14 +1637,14 @@
|
|
|
|
|
isObject = this.variable.isObject();
|
|
|
|
|
if (top && olen === 1 && !((obj = objects[0]) instanceof Splat)) {
|
|
|
|
|
if (obj instanceof Assign) {
|
|
|
|
|
_ref2 = obj, (_ref3 = _ref2.variable, idx = _ref3.base), obj = _ref2.value;
|
|
|
|
|
_ref4 = obj, (_ref5 = _ref4.variable, idx = _ref5.base), obj = _ref4.value;
|
|
|
|
|
} else {
|
|
|
|
|
idx = isObject ? obj["this"] ? obj.properties[0].name : obj : new Literal(0);
|
|
|
|
|
}
|
|
|
|
|
acc = IDENTIFIER.test(idx.unwrap().value || 0);
|
|
|
|
|
value = new Value(value);
|
|
|
|
|
value.properties.push(new (acc ? Access : Index)(idx));
|
|
|
|
|
if (_ref4 = obj.unwrap().value, __indexOf.call(RESERVED, _ref4) >= 0) {
|
|
|
|
|
if (_ref6 = obj.unwrap().value, __indexOf.call(RESERVED, _ref6) >= 0) {
|
|
|
|
|
obj.error("assignment to a reserved word: " + (obj.compile(o)));
|
|
|
|
|
}
|
|
|
|
|
return new Assign(obj, value, null, {
|
|
|
|
|
@@ -1656,10 +1665,10 @@
|
|
|
|
|
idx = i;
|
|
|
|
|
if (isObject) {
|
|
|
|
|
if (obj instanceof Assign) {
|
|
|
|
|
_ref5 = obj, (_ref6 = _ref5.variable, idx = _ref6.base), obj = _ref5.value;
|
|
|
|
|
_ref7 = obj, (_ref8 = _ref7.variable, idx = _ref8.base), obj = _ref7.value;
|
|
|
|
|
} else {
|
|
|
|
|
if (obj.base instanceof Parens) {
|
|
|
|
|
_ref7 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref7[0], idx = _ref7[1];
|
|
|
|
|
_ref9 = new Value(obj.unwrapAll()).cacheReference(o), obj = _ref9[0], idx = _ref9[1];
|
|
|
|
|
} else {
|
|
|
|
|
idx = obj["this"] ? obj.properties[0].name : obj;
|
|
|
|
|
}
|
|
|
|
|
@@ -1710,8 +1719,8 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Assign.prototype.compileConditional = function(o) {
|
|
|
|
|
var left, right, _ref2;
|
|
|
|
|
_ref2 = this.variable.cacheReference(o), left = _ref2[0], right = _ref2[1];
|
|
|
|
|
var left, right, _ref4;
|
|
|
|
|
_ref4 = this.variable.cacheReference(o), left = _ref4[0], right = _ref4[1];
|
|
|
|
|
if (!left.properties.length && left.base instanceof Literal && left.base.value !== "this" && !o.scope.check(left.base.value)) {
|
|
|
|
|
this.variable.error("the variable \"" + left.base.value + "\" can't be assigned with " + this.context + " because it has not been declared before");
|
|
|
|
|
}
|
|
|
|
|
@@ -1722,11 +1731,11 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Assign.prototype.compileSplice = function(o) {
|
|
|
|
|
var answer, exclusive, from, fromDecl, fromRef, name, to, valDef, valRef, _ref2, _ref3, _ref4;
|
|
|
|
|
_ref2 = this.variable.properties.pop().range, from = _ref2.from, to = _ref2.to, exclusive = _ref2.exclusive;
|
|
|
|
|
var answer, exclusive, from, fromDecl, fromRef, name, to, valDef, valRef, _ref4, _ref5, _ref6;
|
|
|
|
|
_ref4 = this.variable.properties.pop().range, from = _ref4.from, to = _ref4.to, exclusive = _ref4.exclusive;
|
|
|
|
|
name = this.variable.compile(o);
|
|
|
|
|
if (from) {
|
|
|
|
|
_ref3 = this.cacheToCodeFragments(from.cache(o, LEVEL_OP)), fromDecl = _ref3[0], fromRef = _ref3[1];
|
|
|
|
|
_ref5 = this.cacheToCodeFragments(from.cache(o, LEVEL_OP)), fromDecl = _ref5[0], fromRef = _ref5[1];
|
|
|
|
|
} else {
|
|
|
|
|
fromDecl = fromRef = '0';
|
|
|
|
|
}
|
|
|
|
|
@@ -1745,7 +1754,7 @@
|
|
|
|
|
} else {
|
|
|
|
|
to = "9e9";
|
|
|
|
|
}
|
|
|
|
|
_ref4 = this.value.cache(o, LEVEL_LIST), valDef = _ref4[0], valRef = _ref4[1];
|
|
|
|
|
_ref6 = this.value.cache(o, LEVEL_LIST), valDef = _ref6[0], valRef = _ref6[1];
|
|
|
|
|
answer = [].concat(this.makeCode("[].splice.apply(" + name + ", [" + fromDecl + ", " + to + "].concat("), valDef, this.makeCode(")), "), valRef);
|
|
|
|
|
if (o.level > LEVEL_TOP) {
|
|
|
|
|
return this.wrapInBraces(answer);
|
|
|
|
|
@@ -1780,7 +1789,7 @@
|
|
|
|
|
Code.prototype.jumps = NO;
|
|
|
|
|
|
|
|
|
|
Code.prototype.compileNode = function(o) {
|
|
|
|
|
var answer, code, exprs, i, idt, lit, p, param, params, ref, splats, uniqs, val, wasEmpty, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref2, _ref3, _ref4, _ref5, _ref6;
|
|
|
|
|
var answer, code, exprs, i, idt, lit, p, param, params, ref, splats, uniqs, val, wasEmpty, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref4, _ref5, _ref6, _ref7, _ref8;
|
|
|
|
|
o.scope = new Scope(o.scope, this.body, this);
|
|
|
|
|
o.scope.shared = del(o, 'sharedScope');
|
|
|
|
|
o.indent += TAB;
|
|
|
|
|
@@ -1793,15 +1802,15 @@
|
|
|
|
|
return o.scope.parameter(name);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
_ref2 = this.params;
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
param = _ref2[_i];
|
|
|
|
|
_ref4 = this.params;
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
param = _ref4[_i];
|
|
|
|
|
if (!param.splat) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
_ref3 = this.params;
|
|
|
|
|
for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) {
|
|
|
|
|
p = _ref3[_j].name;
|
|
|
|
|
_ref5 = this.params;
|
|
|
|
|
for (_j = 0, _len1 = _ref5.length; _j < _len1; _j++) {
|
|
|
|
|
p = _ref5[_j].name;
|
|
|
|
|
if (p["this"]) {
|
|
|
|
|
p = p.properties[0].name;
|
|
|
|
|
}
|
|
|
|
|
@@ -1810,20 +1819,20 @@
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
splats = new Assign(new Value(new Arr((function() {
|
|
|
|
|
var _k, _len2, _ref4, _results;
|
|
|
|
|
_ref4 = this.params;
|
|
|
|
|
var _k, _len2, _ref6, _results;
|
|
|
|
|
_ref6 = this.params;
|
|
|
|
|
_results = [];
|
|
|
|
|
for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {
|
|
|
|
|
p = _ref4[_k];
|
|
|
|
|
for (_k = 0, _len2 = _ref6.length; _k < _len2; _k++) {
|
|
|
|
|
p = _ref6[_k];
|
|
|
|
|
_results.push(p.asReference(o));
|
|
|
|
|
}
|
|
|
|
|
return _results;
|
|
|
|
|
}).call(this))), new Value(new Literal('arguments')));
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
_ref4 = this.params;
|
|
|
|
|
for (_k = 0, _len2 = _ref4.length; _k < _len2; _k++) {
|
|
|
|
|
param = _ref4[_k];
|
|
|
|
|
_ref6 = this.params;
|
|
|
|
|
for (_k = 0, _len2 = _ref6.length; _k < _len2; _k++) {
|
|
|
|
|
param = _ref6[_k];
|
|
|
|
|
if (param.isComplex()) {
|
|
|
|
|
val = ref = param.asReference(o);
|
|
|
|
|
if (param.value) {
|
|
|
|
|
@@ -1849,7 +1858,7 @@
|
|
|
|
|
exprs.unshift(splats);
|
|
|
|
|
}
|
|
|
|
|
if (exprs.length) {
|
|
|
|
|
(_ref5 = this.body.expressions).unshift.apply(_ref5, exprs);
|
|
|
|
|
(_ref7 = this.body.expressions).unshift.apply(_ref7, exprs);
|
|
|
|
|
}
|
|
|
|
|
for (i = _l = 0, _len3 = params.length; _l < _len3; i = ++_l) {
|
|
|
|
|
p = params[i];
|
|
|
|
|
@@ -1867,7 +1876,7 @@
|
|
|
|
|
this.body.makeReturn();
|
|
|
|
|
}
|
|
|
|
|
if (this.bound) {
|
|
|
|
|
if ((_ref6 = o.scope.parent.method) != null ? _ref6.bound : void 0) {
|
|
|
|
|
if ((_ref8 = o.scope.parent.method) != null ? _ref8.bound : void 0) {
|
|
|
|
|
this.bound = this.context = o.scope.parent.method.context;
|
|
|
|
|
} else if (!this["static"]) {
|
|
|
|
|
o.scope.parent.assign('_this', 'this');
|
|
|
|
|
@@ -1903,11 +1912,11 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Code.prototype.eachParamName = function(iterator) {
|
|
|
|
|
var param, _i, _len, _ref2, _results;
|
|
|
|
|
_ref2 = this.params;
|
|
|
|
|
var param, _i, _len, _ref4, _results;
|
|
|
|
|
_ref4 = this.params;
|
|
|
|
|
_results = [];
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
param = _ref2[_i];
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
param = _ref4[_i];
|
|
|
|
|
_results.push(param.eachName(iterator));
|
|
|
|
|
}
|
|
|
|
|
return _results;
|
|
|
|
|
@@ -1928,11 +1937,11 @@
|
|
|
|
|
__extends(Param, _super);
|
|
|
|
|
|
|
|
|
|
function Param(name, value, splat) {
|
|
|
|
|
var _ref2;
|
|
|
|
|
var _ref4;
|
|
|
|
|
this.name = name;
|
|
|
|
|
this.value = value;
|
|
|
|
|
this.splat = splat;
|
|
|
|
|
if (_ref2 = (name = this.name.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) {
|
|
|
|
|
if (_ref4 = (name = this.name.unwrapAll().value), __indexOf.call(STRICT_PROSCRIBED, _ref4) >= 0) {
|
|
|
|
|
this.name.error("parameter name \"" + name + "\" is not allowed");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -1969,7 +1978,7 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Param.prototype.eachName = function(iterator, name) {
|
|
|
|
|
var atParam, node, obj, _i, _len, _ref2;
|
|
|
|
|
var atParam, node, obj, _i, _len, _ref4;
|
|
|
|
|
if (name == null) {
|
|
|
|
|
name = this.name;
|
|
|
|
|
}
|
|
|
|
|
@@ -1986,9 +1995,9 @@
|
|
|
|
|
if (name instanceof Value) {
|
|
|
|
|
return atParam(name);
|
|
|
|
|
}
|
|
|
|
|
_ref2 = name.objects;
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
obj = _ref2[_i];
|
|
|
|
|
_ref4 = name.objects;
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
obj = _ref4[_i];
|
|
|
|
|
if (obj instanceof Assign) {
|
|
|
|
|
this.eachName(iterator, obj.value.unwrap());
|
|
|
|
|
} else if (obj instanceof Splat) {
|
|
|
|
|
@@ -2065,11 +2074,11 @@
|
|
|
|
|
return args[0].concat(node.makeCode(".concat("), concatPart, node.makeCode(")"));
|
|
|
|
|
}
|
|
|
|
|
base = (function() {
|
|
|
|
|
var _j, _len1, _ref2, _results;
|
|
|
|
|
_ref2 = list.slice(0, index);
|
|
|
|
|
var _j, _len1, _ref4, _results;
|
|
|
|
|
_ref4 = list.slice(0, index);
|
|
|
|
|
_results = [];
|
|
|
|
|
for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) {
|
|
|
|
|
node = _ref2[_j];
|
|
|
|
|
for (_j = 0, _len1 = _ref4.length; _j < _len1; _j++) {
|
|
|
|
|
node = _ref4[_j];
|
|
|
|
|
_results.push(node.compileToFragments(o, LEVEL_LIST));
|
|
|
|
|
}
|
|
|
|
|
return _results;
|
|
|
|
|
@@ -2210,17 +2219,17 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Op.prototype.isComplex = function() {
|
|
|
|
|
var _ref2;
|
|
|
|
|
return !(this.isUnary() && ((_ref2 = this.operator) === '+' || _ref2 === '-')) || this.first.isComplex();
|
|
|
|
|
var _ref4;
|
|
|
|
|
return !(this.isUnary() && ((_ref4 = this.operator) === '+' || _ref4 === '-')) || this.first.isComplex();
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Op.prototype.isChainable = function() {
|
|
|
|
|
var _ref2;
|
|
|
|
|
return (_ref2 = this.operator) === '<' || _ref2 === '>' || _ref2 === '>=' || _ref2 === '<=' || _ref2 === '===' || _ref2 === '!==';
|
|
|
|
|
var _ref4;
|
|
|
|
|
return (_ref4 = this.operator) === '<' || _ref4 === '>' || _ref4 === '>=' || _ref4 === '<=' || _ref4 === '===' || _ref4 === '!==';
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Op.prototype.invert = function() {
|
|
|
|
|
var allInvertable, curr, fst, op, _ref2;
|
|
|
|
|
var allInvertable, curr, fst, op, _ref4;
|
|
|
|
|
if (this.isChainable() && this.first.isChainable()) {
|
|
|
|
|
allInvertable = true;
|
|
|
|
|
curr = this;
|
|
|
|
|
@@ -2246,7 +2255,7 @@
|
|
|
|
|
return this;
|
|
|
|
|
} else if (this.second) {
|
|
|
|
|
return new Parens(this).invert();
|
|
|
|
|
} else if (this.operator === '!' && (fst = this.first.unwrap()) instanceof Op && ((_ref2 = fst.operator) === '!' || _ref2 === 'in' || _ref2 === 'instanceof')) {
|
|
|
|
|
} else if (this.operator === '!' && (fst = this.first.unwrap()) instanceof Op && ((_ref4 = fst.operator) === '!' || _ref4 === 'in' || _ref4 === 'instanceof')) {
|
|
|
|
|
return fst;
|
|
|
|
|
} else {
|
|
|
|
|
return new Op('!', this);
|
|
|
|
|
@@ -2254,17 +2263,17 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Op.prototype.unfoldSoak = function(o) {
|
|
|
|
|
var _ref2;
|
|
|
|
|
return ((_ref2 = this.operator) === '++' || _ref2 === '--' || _ref2 === 'delete') && unfoldSoak(o, this, 'first');
|
|
|
|
|
var _ref4;
|
|
|
|
|
return ((_ref4 = this.operator) === '++' || _ref4 === '--' || _ref4 === 'delete') && unfoldSoak(o, this, 'first');
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Op.prototype.generateDo = function(exp) {
|
|
|
|
|
var call, func, param, passedParams, ref, _i, _len, _ref2;
|
|
|
|
|
var call, func, param, passedParams, ref, _i, _len, _ref4;
|
|
|
|
|
passedParams = [];
|
|
|
|
|
func = exp instanceof Assign && (ref = exp.value.unwrap()) instanceof Code ? ref : exp;
|
|
|
|
|
_ref2 = func.params || [];
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
param = _ref2[_i];
|
|
|
|
|
_ref4 = func.params || [];
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
param = _ref4[_i];
|
|
|
|
|
if (param.value) {
|
|
|
|
|
passedParams.push(param.value);
|
|
|
|
|
delete param.value;
|
|
|
|
|
@@ -2278,7 +2287,7 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Op.prototype.compileNode = function(o) {
|
|
|
|
|
var answer, isChain, _ref2, _ref3;
|
|
|
|
|
var answer, isChain, _ref4, _ref5;
|
|
|
|
|
isChain = this.isChainable() && this.first.isChainable();
|
|
|
|
|
if (!isChain) {
|
|
|
|
|
this.first.front = this.front;
|
|
|
|
|
@@ -2286,7 +2295,7 @@
|
|
|
|
|
if (this.operator === 'delete' && o.scope.check(this.first.unwrapAll().value)) {
|
|
|
|
|
this.error('delete operand may not be argument or var');
|
|
|
|
|
}
|
|
|
|
|
if (((_ref2 = this.operator) === '--' || _ref2 === '++') && (_ref3 = this.first.unwrapAll().value, __indexOf.call(STRICT_PROSCRIBED, _ref3) >= 0)) {
|
|
|
|
|
if (((_ref4 = this.operator) === '--' || _ref4 === '++') && (_ref5 = this.first.unwrapAll().value, __indexOf.call(STRICT_PROSCRIBED, _ref5) >= 0)) {
|
|
|
|
|
this.error("cannot increment/decrement \"" + (this.first.unwrapAll().value) + "\"");
|
|
|
|
|
}
|
|
|
|
|
if (this.isUnary()) {
|
|
|
|
|
@@ -2307,8 +2316,8 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Op.prototype.compileChain = function(o) {
|
|
|
|
|
var fragments, fst, shared, _ref2;
|
|
|
|
|
_ref2 = this.first.second.cache(o), this.first.second = _ref2[0], shared = _ref2[1];
|
|
|
|
|
var fragments, fst, shared, _ref4;
|
|
|
|
|
_ref4 = this.first.second.cache(o), this.first.second = _ref4[0], shared = _ref4[1];
|
|
|
|
|
fst = this.first.compileToFragments(o, LEVEL_OP);
|
|
|
|
|
fragments = fst.concat(this.makeCode(" " + (this.invert ? '&&' : '||') + " "), shared.compileToFragments(o), this.makeCode(" " + this.operator + " "), this.second.compileToFragments(o, LEVEL_OP));
|
|
|
|
|
return this.wrapInBraces(fragments);
|
|
|
|
|
@@ -2376,11 +2385,11 @@
|
|
|
|
|
In.prototype.invert = NEGATE;
|
|
|
|
|
|
|
|
|
|
In.prototype.compileNode = function(o) {
|
|
|
|
|
var hasSplat, obj, _i, _len, _ref2;
|
|
|
|
|
var hasSplat, obj, _i, _len, _ref4;
|
|
|
|
|
if (this.array instanceof Value && this.array.isArray()) {
|
|
|
|
|
_ref2 = this.array.base.objects;
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
obj = _ref2[_i];
|
|
|
|
|
_ref4 = this.array.base.objects;
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
obj = _ref4[_i];
|
|
|
|
|
if (!(obj instanceof Splat)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
@@ -2395,16 +2404,16 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
In.prototype.compileOrTest = function(o) {
|
|
|
|
|
var cmp, cnj, i, item, ref, sub, tests, _i, _len, _ref2, _ref3, _ref4;
|
|
|
|
|
var cmp, cnj, i, item, ref, sub, tests, _i, _len, _ref4, _ref5, _ref6;
|
|
|
|
|
if (this.array.base.objects.length === 0) {
|
|
|
|
|
return [this.makeCode("" + (!!this.negated))];
|
|
|
|
|
}
|
|
|
|
|
_ref2 = this.object.cache(o, LEVEL_OP), sub = _ref2[0], ref = _ref2[1];
|
|
|
|
|
_ref3 = this.negated ? [' !== ', ' && '] : [' === ', ' || '], cmp = _ref3[0], cnj = _ref3[1];
|
|
|
|
|
_ref4 = this.object.cache(o, LEVEL_OP), sub = _ref4[0], ref = _ref4[1];
|
|
|
|
|
_ref5 = this.negated ? [' !== ', ' && '] : [' === ', ' || '], cmp = _ref5[0], cnj = _ref5[1];
|
|
|
|
|
tests = [];
|
|
|
|
|
_ref4 = this.array.base.objects;
|
|
|
|
|
for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
|
|
|
|
|
item = _ref4[i];
|
|
|
|
|
_ref6 = this.array.base.objects;
|
|
|
|
|
for (i = _i = 0, _len = _ref6.length; _i < _len; i = ++_i) {
|
|
|
|
|
item = _ref6[i];
|
|
|
|
|
if (i) {
|
|
|
|
|
tests.push(this.makeCode(cnj));
|
|
|
|
|
}
|
|
|
|
|
@@ -2418,8 +2427,8 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
In.prototype.compileLoopTest = function(o) {
|
|
|
|
|
var fragments, ref, sub, _ref2;
|
|
|
|
|
_ref2 = this.object.cache(o, LEVEL_LIST), sub = _ref2[0], ref = _ref2[1];
|
|
|
|
|
var fragments, ref, sub, _ref4;
|
|
|
|
|
_ref4 = this.object.cache(o, LEVEL_LIST), sub = _ref4[0], ref = _ref4[1];
|
|
|
|
|
fragments = [].concat(this.makeCode(utility('indexOf') + ".call("), this.array.compileToFragments(o, LEVEL_LIST), this.makeCode(", "), ref, this.makeCode(") " + (this.negated ? '< 0' : '>= 0')));
|
|
|
|
|
if ((fragmentsToText(sub)) === (fragmentsToText(ref))) {
|
|
|
|
|
return fragments;
|
|
|
|
|
@@ -2456,8 +2465,8 @@
|
|
|
|
|
Try.prototype.isStatement = YES;
|
|
|
|
|
|
|
|
|
|
Try.prototype.jumps = function(o) {
|
|
|
|
|
var _ref2;
|
|
|
|
|
return this.attempt.jumps(o) || ((_ref2 = this.recovery) != null ? _ref2.jumps(o) : void 0);
|
|
|
|
|
var _ref4;
|
|
|
|
|
return this.attempt.jumps(o) || ((_ref4 = this.recovery) != null ? _ref4.jumps(o) : void 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Try.prototype.makeReturn = function(res) {
|
|
|
|
|
@@ -2471,10 +2480,10 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Try.prototype.compileNode = function(o) {
|
|
|
|
|
var catchPart, ensurePart, placeholder, tryPart, _base, _ref2;
|
|
|
|
|
var catchPart, ensurePart, placeholder, tryPart, _ref4;
|
|
|
|
|
o.indent += TAB;
|
|
|
|
|
tryPart = this.attempt.compileToFragments(o, LEVEL_TOP);
|
|
|
|
|
catchPart = this.recovery ? ((typeof (_base = this.errorVariable).isObject === "function" ? _base.isObject() : void 0) ? (placeholder = new Literal('_error'), this.recovery.unshift(new Assign(this.errorVariable, placeholder)), this.errorVariable = placeholder) : void 0, (_ref2 = this.errorVariable.value, __indexOf.call(STRICT_PROSCRIBED, _ref2) >= 0) ? this.errorVariable.error("catch variable may not be \"" + this.errorVariable.value + "\"") : void 0, !o.scope.check(this.errorVariable.value) ? o.scope.add(this.errorVariable.value, 'param') : void 0, [].concat(this.makeCode(" catch ("), this.errorVariable.compileToFragments(o), this.makeCode(") {\n"), this.recovery.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}"))) : !(this.ensure || this.recovery) ? [this.makeCode(' catch (_error) {}')] : [];
|
|
|
|
|
catchPart = this.recovery ? (placeholder = new Literal('_error'), this.recovery.unshift(new Assign(this.errorVariable, placeholder)), this.errorVariable = placeholder, (_ref4 = this.errorVariable.value, __indexOf.call(STRICT_PROSCRIBED, _ref4) >= 0) ? this.errorVariable.error("catch variable may not be \"" + this.errorVariable.value + "\"") : void 0, [].concat(this.makeCode(" catch ("), this.errorVariable.compileToFragments(o), this.makeCode(") {\n"), this.recovery.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}"))) : !(this.ensure || this.recovery) ? [this.makeCode(' catch (_error) {}')] : [];
|
|
|
|
|
ensurePart = this.ensure ? [].concat(this.makeCode(" finally {\n"), this.ensure.compileToFragments(o, LEVEL_TOP), this.makeCode("\n" + this.tab + "}")) : [];
|
|
|
|
|
return [].concat(this.makeCode("" + this.tab + "try {\n"), tryPart, this.makeCode("\n" + this.tab + "}"), catchPart, ensurePart);
|
|
|
|
|
};
|
|
|
|
|
@@ -2520,11 +2529,11 @@
|
|
|
|
|
Existence.prototype.invert = NEGATE;
|
|
|
|
|
|
|
|
|
|
Existence.prototype.compileNode = function(o) {
|
|
|
|
|
var cmp, cnj, code, _ref2;
|
|
|
|
|
var cmp, cnj, code, _ref4;
|
|
|
|
|
this.expression.front = this.front;
|
|
|
|
|
code = this.expression.compile(o, LEVEL_OP);
|
|
|
|
|
if (IDENTIFIER.test(code) && !o.scope.check(code)) {
|
|
|
|
|
_ref2 = this.negated ? ['===', '||'] : ['!==', '&&'], cmp = _ref2[0], cnj = _ref2[1];
|
|
|
|
|
_ref4 = this.negated ? ['===', '||'] : ['!==', '&&'], cmp = _ref4[0], cnj = _ref4[1];
|
|
|
|
|
code = "typeof " + code + " " + cmp + " \"undefined\" " + cnj + " " + code + " " + cmp + " null";
|
|
|
|
|
} else {
|
|
|
|
|
code = "" + code + " " + (this.negated ? '==' : '!=') + " null";
|
|
|
|
|
@@ -2579,13 +2588,13 @@
|
|
|
|
|
__extends(For, _super);
|
|
|
|
|
|
|
|
|
|
function For(body, source) {
|
|
|
|
|
var _ref2;
|
|
|
|
|
var _ref4;
|
|
|
|
|
this.source = source.source, this.guard = source.guard, this.step = source.step, this.name = source.name, this.index = source.index;
|
|
|
|
|
this.body = Block.wrap([body]);
|
|
|
|
|
this.own = !!source.own;
|
|
|
|
|
this.object = !!source.object;
|
|
|
|
|
if (this.object) {
|
|
|
|
|
_ref2 = [this.index, this.name], this.name = _ref2[0], this.index = _ref2[1];
|
|
|
|
|
_ref4 = [this.index, this.name], this.name = _ref4[0], this.index = _ref4[1];
|
|
|
|
|
}
|
|
|
|
|
if (this.index instanceof Value) {
|
|
|
|
|
this.index.error('index cannot be a pattern matching expression');
|
|
|
|
|
@@ -2604,9 +2613,9 @@
|
|
|
|
|
For.prototype.children = ['body', 'source', 'guard', 'step'];
|
|
|
|
|
|
|
|
|
|
For.prototype.compileNode = function(o) {
|
|
|
|
|
var body, bodyFragments, compare, compareDown, declare, declareDown, defPart, defPartFragments, down, forPartFragments, guardPart, idt1, increment, index, ivar, kvar, kvarAssign, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, step, stepNum, stepVar, svar, varPart, _ref2, _ref3;
|
|
|
|
|
var body, bodyFragments, compare, compareDown, declare, declareDown, defPart, defPartFragments, down, forPartFragments, guardPart, idt1, increment, index, ivar, kvar, kvarAssign, lastJumps, lvar, name, namePart, ref, resultPart, returnResult, rvar, scope, source, step, stepNum, stepVar, svar, varPart, _ref4, _ref5;
|
|
|
|
|
body = Block.wrap([this.body]);
|
|
|
|
|
lastJumps = (_ref2 = last(body.expressions)) != null ? _ref2.jumps() : void 0;
|
|
|
|
|
lastJumps = (_ref4 = last(body.expressions)) != null ? _ref4.jumps() : void 0;
|
|
|
|
|
if (lastJumps && lastJumps instanceof Return) {
|
|
|
|
|
this.returns = false;
|
|
|
|
|
}
|
|
|
|
|
@@ -2627,7 +2636,7 @@
|
|
|
|
|
kvar = (this.range && name) || index || ivar;
|
|
|
|
|
kvarAssign = kvar !== ivar ? "" + kvar + " = " : "";
|
|
|
|
|
if (this.step && !this.range) {
|
|
|
|
|
_ref3 = this.cacheToCodeFragments(this.step.cache(o, LEVEL_LIST)), step = _ref3[0], stepVar = _ref3[1];
|
|
|
|
|
_ref5 = this.cacheToCodeFragments(this.step.cache(o, LEVEL_LIST)), step = _ref5[0], stepVar = _ref5[1];
|
|
|
|
|
stepNum = stepVar.match(SIMPLENUM);
|
|
|
|
|
}
|
|
|
|
|
if (this.pattern) {
|
|
|
|
|
@@ -2717,24 +2726,24 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
For.prototype.pluckDirectCall = function(o, body) {
|
|
|
|
|
var base, defs, expr, fn, idx, ref, val, _i, _len, _ref2, _ref3, _ref4, _ref5, _ref6, _ref7;
|
|
|
|
|
var base, defs, expr, fn, idx, ref, val, _i, _len, _ref4, _ref5, _ref6, _ref7, _ref8, _ref9;
|
|
|
|
|
defs = [];
|
|
|
|
|
_ref2 = body.expressions;
|
|
|
|
|
for (idx = _i = 0, _len = _ref2.length; _i < _len; idx = ++_i) {
|
|
|
|
|
expr = _ref2[idx];
|
|
|
|
|
_ref4 = body.expressions;
|
|
|
|
|
for (idx = _i = 0, _len = _ref4.length; _i < _len; idx = ++_i) {
|
|
|
|
|
expr = _ref4[idx];
|
|
|
|
|
expr = expr.unwrapAll();
|
|
|
|
|
if (!(expr instanceof Call)) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
val = expr.variable.unwrapAll();
|
|
|
|
|
if (!((val instanceof Code) || (val instanceof Value && ((_ref3 = val.base) != null ? _ref3.unwrapAll() : void 0) instanceof Code && val.properties.length === 1 && ((_ref4 = (_ref5 = val.properties[0].name) != null ? _ref5.value : void 0) === 'call' || _ref4 === 'apply')))) {
|
|
|
|
|
if (!((val instanceof Code) || (val instanceof Value && ((_ref5 = val.base) != null ? _ref5.unwrapAll() : void 0) instanceof Code && val.properties.length === 1 && ((_ref6 = (_ref7 = val.properties[0].name) != null ? _ref7.value : void 0) === 'call' || _ref6 === 'apply')))) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
fn = ((_ref6 = val.base) != null ? _ref6.unwrapAll() : void 0) || val;
|
|
|
|
|
fn = ((_ref8 = val.base) != null ? _ref8.unwrapAll() : void 0) || val;
|
|
|
|
|
ref = new Literal(o.scope.freeVariable('fn'));
|
|
|
|
|
base = new Value(ref);
|
|
|
|
|
if (val.base) {
|
|
|
|
|
_ref7 = [base, val], val.base = _ref7[0], base = _ref7[1];
|
|
|
|
|
_ref9 = [base, val], val.base = _ref9[0], base = _ref9[1];
|
|
|
|
|
}
|
|
|
|
|
body.expressions[idx] = new Call(base, expr.args);
|
|
|
|
|
defs = defs.concat(this.makeCode(this.tab), new Assign(ref, fn).compileToFragments(o, LEVEL_TOP), this.makeCode(';\n'));
|
|
|
|
|
@@ -2761,49 +2770,49 @@
|
|
|
|
|
Switch.prototype.isStatement = YES;
|
|
|
|
|
|
|
|
|
|
Switch.prototype.jumps = function(o) {
|
|
|
|
|
var block, conds, _i, _len, _ref2, _ref3, _ref4;
|
|
|
|
|
var block, conds, _i, _len, _ref4, _ref5, _ref6;
|
|
|
|
|
if (o == null) {
|
|
|
|
|
o = {
|
|
|
|
|
block: true
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
_ref2 = this.cases;
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
_ref3 = _ref2[_i], conds = _ref3[0], block = _ref3[1];
|
|
|
|
|
_ref4 = this.cases;
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
_ref5 = _ref4[_i], conds = _ref5[0], block = _ref5[1];
|
|
|
|
|
if (block.jumps(o)) {
|
|
|
|
|
return block;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return (_ref4 = this.otherwise) != null ? _ref4.jumps(o) : void 0;
|
|
|
|
|
return (_ref6 = this.otherwise) != null ? _ref6.jumps(o) : void 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Switch.prototype.makeReturn = function(res) {
|
|
|
|
|
var pair, _i, _len, _ref2, _ref3;
|
|
|
|
|
_ref2 = this.cases;
|
|
|
|
|
for (_i = 0, _len = _ref2.length; _i < _len; _i++) {
|
|
|
|
|
pair = _ref2[_i];
|
|
|
|
|
var pair, _i, _len, _ref4, _ref5;
|
|
|
|
|
_ref4 = this.cases;
|
|
|
|
|
for (_i = 0, _len = _ref4.length; _i < _len; _i++) {
|
|
|
|
|
pair = _ref4[_i];
|
|
|
|
|
pair[1].makeReturn(res);
|
|
|
|
|
}
|
|
|
|
|
if (res) {
|
|
|
|
|
this.otherwise || (this.otherwise = new Block([new Literal('void 0')]));
|
|
|
|
|
}
|
|
|
|
|
if ((_ref3 = this.otherwise) != null) {
|
|
|
|
|
_ref3.makeReturn(res);
|
|
|
|
|
if ((_ref5 = this.otherwise) != null) {
|
|
|
|
|
_ref5.makeReturn(res);
|
|
|
|
|
}
|
|
|
|
|
return this;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
Switch.prototype.compileNode = function(o) {
|
|
|
|
|
var block, body, cond, conditions, expr, fragments, i, idt1, idt2, _i, _j, _len, _len1, _ref2, _ref3, _ref4;
|
|
|
|
|
var block, body, cond, conditions, expr, fragments, i, idt1, idt2, _i, _j, _len, _len1, _ref4, _ref5, _ref6;
|
|
|
|
|
idt1 = o.indent + TAB;
|
|
|
|
|
idt2 = o.indent = idt1 + TAB;
|
|
|
|
|
fragments = [].concat(this.makeCode(this.tab + "switch ("), (this.subject ? this.subject.compileToFragments(o, LEVEL_PAREN) : this.makeCode("false")), this.makeCode(") {\n"));
|
|
|
|
|
_ref2 = this.cases;
|
|
|
|
|
for (i = _i = 0, _len = _ref2.length; _i < _len; i = ++_i) {
|
|
|
|
|
_ref3 = _ref2[i], conditions = _ref3[0], block = _ref3[1];
|
|
|
|
|
_ref4 = flatten([conditions]);
|
|
|
|
|
for (_j = 0, _len1 = _ref4.length; _j < _len1; _j++) {
|
|
|
|
|
cond = _ref4[_j];
|
|
|
|
|
_ref4 = this.cases;
|
|
|
|
|
for (i = _i = 0, _len = _ref4.length; _i < _len; i = ++_i) {
|
|
|
|
|
_ref5 = _ref4[i], conditions = _ref5[0], block = _ref5[1];
|
|
|
|
|
_ref6 = flatten([conditions]);
|
|
|
|
|
for (_j = 0, _len1 = _ref6.length; _j < _len1; _j++) {
|
|
|
|
|
cond = _ref6[_j];
|
|
|
|
|
if (!this.subject) {
|
|
|
|
|
cond = cond.invert();
|
|
|
|
|
}
|
|
|
|
|
@@ -2850,13 +2859,13 @@
|
|
|
|
|
If.prototype.children = ['condition', 'body', 'elseBody'];
|
|
|
|
|
|
|
|
|
|
If.prototype.bodyNode = function() {
|
|
|
|
|
var _ref2;
|
|
|
|
|
return (_ref2 = this.body) != null ? _ref2.unwrap() : void 0;
|
|
|
|
|
var _ref4;
|
|
|
|
|
return (_ref4 = this.body) != null ? _ref4.unwrap() : void 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
If.prototype.elseBodyNode = function() {
|
|
|
|
|
var _ref2;
|
|
|
|
|
return (_ref2 = this.elseBody) != null ? _ref2.unwrap() : void 0;
|
|
|
|
|
var _ref4;
|
|
|
|
|
return (_ref4 = this.elseBody) != null ? _ref4.unwrap() : void 0;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
If.prototype.addElse = function(elseBody) {
|
|
|
|
|
@@ -2870,13 +2879,13 @@
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
If.prototype.isStatement = function(o) {
|
|
|
|
|
var _ref2;
|
|
|
|
|
return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((_ref2 = this.elseBodyNode()) != null ? _ref2.isStatement(o) : void 0);
|
|
|
|
|
var _ref4;
|
|
|
|
|
return (o != null ? o.level : void 0) === LEVEL_TOP || this.bodyNode().isStatement(o) || ((_ref4 = this.elseBodyNode()) != null ? _ref4.isStatement(o) : void 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
If.prototype.jumps = function(o) {
|
|
|
|
|
var _ref2;
|
|
|
|
|
return this.body.jumps(o) || ((_ref2 = this.elseBody) != null ? _ref2.jumps(o) : void 0);
|
|
|
|
|
var _ref4;
|
|
|
|
|
return this.body.jumps(o) || ((_ref4 = this.elseBody) != null ? _ref4.jumps(o) : void 0);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
If.prototype.compileNode = function(o) {
|
|
|
|
|
@@ -3008,6 +3017,9 @@
|
|
|
|
|
"extends": function() {
|
|
|
|
|
return "function(child, parent) { for (var key in parent) { if (" + (utility('hasProp')) + ".call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }";
|
|
|
|
|
},
|
|
|
|
|
bind: function() {
|
|
|
|
|
return 'function(fn, me){ return function(){ return fn.apply(me, arguments); }; }';
|
|
|
|
|
},
|
|
|
|
|
indexOf: function() {
|
|
|
|
|
return "[].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }";
|
|
|
|
|
},
|
|
|
|
|
|