mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-04-11 03:00:13 -04:00
Fix #1069. Non-callable literals shouldn't compile
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
// Generated by CoffeeScript 1.6.2
|
||||
(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, _ref2, _ref3,
|
||||
var Access, Arr, Assign, Base, Block, Call, Class, Closure, Code, CodeFragment, Comment, Existence, Extends, For, IDENTIFIER, IDENTIFIER_STR, IS_REGEX, 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; },
|
||||
@@ -675,8 +675,16 @@
|
||||
return !!this.properties.length;
|
||||
};
|
||||
|
||||
Value.prototype.bareLiteral = function(type) {
|
||||
return !this.properties.length && this.base instanceof type;
|
||||
};
|
||||
|
||||
Value.prototype.isArray = function() {
|
||||
return !this.properties.length && this.base instanceof Arr;
|
||||
return this.bareLiteral(Arr);
|
||||
};
|
||||
|
||||
Value.prototype.isRange = function() {
|
||||
return this.bareLiteral(Range);
|
||||
};
|
||||
|
||||
Value.prototype.isComplex = function() {
|
||||
@@ -688,11 +696,15 @@
|
||||
};
|
||||
|
||||
Value.prototype.isSimpleNumber = function() {
|
||||
return this.base instanceof Literal && SIMPLENUM.test(this.base.value);
|
||||
return this.bareLiteral(Literal) && SIMPLENUM.test(this.base.value);
|
||||
};
|
||||
|
||||
Value.prototype.isString = function() {
|
||||
return this.base instanceof Literal && IS_STRING.test(this.base.value);
|
||||
return this.bareLiteral(Literal) && IS_STRING.test(this.base.value);
|
||||
};
|
||||
|
||||
Value.prototype.isRegex = function() {
|
||||
return this.bareLiteral(Literal) && IS_REGEX.test(this.base.value);
|
||||
};
|
||||
|
||||
Value.prototype.isAtomic = function() {
|
||||
@@ -707,6 +719,10 @@
|
||||
return true;
|
||||
};
|
||||
|
||||
Value.prototype.isNotCallable = function() {
|
||||
return this.isSimpleNumber() || this.isString() || this.isRegex() || this.isArray() || this.isRange() || this.isSplice() || this.isObject();
|
||||
};
|
||||
|
||||
Value.prototype.isStatement = function(o) {
|
||||
return !this.properties.length && this.base.isStatement(o);
|
||||
};
|
||||
@@ -842,6 +858,9 @@
|
||||
this.isNew = false;
|
||||
this.isSuper = variable === 'super';
|
||||
this.variable = this.isSuper ? null : variable;
|
||||
if (variable instanceof Value && variable.isNotCallable()) {
|
||||
variable.error("literal is not a function");
|
||||
}
|
||||
}
|
||||
|
||||
Call.prototype.children = ['variable', 'args'];
|
||||
@@ -3030,6 +3049,8 @@
|
||||
|
||||
IS_STRING = /^['"]/;
|
||||
|
||||
IS_REGEX = /^\//;
|
||||
|
||||
utility = function(name) {
|
||||
var ref;
|
||||
ref = "__" + name;
|
||||
|
||||
Reference in New Issue
Block a user