hopefully the last enhancement for my #1380 fix

This commit is contained in:
Michael Ficarra 2011-05-25 12:57:45 -04:00
parent 94fb7e32ea
commit 085874d5f3
5 changed files with 25 additions and 21 deletions

View File

@ -617,7 +617,7 @@
JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED); JS_FORBIDDEN = JS_KEYWORDS.concat(RESERVED);
exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS); exports.RESERVED = RESERVED.concat(JS_KEYWORDS).concat(COFFEE_KEYWORDS);
IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/; IDENTIFIER = /^([$A-Za-z_\x7f-\uffff][$\w\x7f-\uffff]*)([^\n\S]*:(?!:))?/;
NUMBER = /^0x[\da-f]+|^(?:\d+(\.\d+)?|\.\d+)(?:e[+-]?\d+)?/i; NUMBER = /^0x[\da-f]+|^\d*\.?\d+(?:e[+-]?\d+)?/i;
HEREDOC = /^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/; HEREDOC = /^("""|''')([\s\S]*?)(?:\n[^\n\S]*)?\1/;
OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/; OPERATOR = /^(?:[-=]>|[-+*\/%<>&|^!?=]=|>>>=?|([-+:])\1|([&|<>])\2=?|\?\.|\.{2,3})/;
WHITESPACE = /^[^\n\S]+/; WHITESPACE = /^[^\n\S]+/;

View File

@ -589,7 +589,7 @@
throw SyntaxError('cannot call super outside of a function.'); throw SyntaxError('cannot call super outside of a function.');
} }
name = method.name; name = method.name;
if (!name) { if (name == null) {
throw SyntaxError('cannot call super on an anonymous function.'); throw SyntaxError('cannot call super on an anonymous function.');
} }
if (method.klass) { if (method.klass) {
@ -1140,7 +1140,7 @@
return unfoldSoak(o, this, 'variable'); return unfoldSoak(o, this, 'variable');
}; };
Assign.prototype.compileNode = function(o) { Assign.prototype.compileNode = function(o) {
var isValue, match, name, val, _ref2, _ref3, _ref4; var isValue, match, name, val, _ref2, _ref3, _ref4, _ref5;
if (isValue = this.variable instanceof Value) { if (isValue = this.variable instanceof Value) {
if (this.variable.isArray() || this.variable.isObject()) { if (this.variable.isArray() || this.variable.isObject()) {
return this.compilePatternMatch(o); return this.compilePatternMatch(o);
@ -1167,7 +1167,7 @@
if (match[1]) { if (match[1]) {
this.value.klass = match[1]; this.value.klass = match[1];
} }
this.value.name = (_ref3 = (_ref4 = match[2]) != null ? _ref4 : match[3]) != null ? _ref3 : match[4]; this.value.name = (_ref3 = (_ref4 = (_ref5 = match[2]) != null ? _ref5 : match[3]) != null ? _ref4 : match[4]) != null ? _ref3 : match[5];
} }
val = this.value.compile(o, LEVEL_LIST); val = this.value.compile(o, LEVEL_LIST);
if (this.context === 'object') { if (this.context === 'object') {
@ -2263,7 +2263,7 @@
IDENTIFIER_STR = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*"; IDENTIFIER_STR = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*";
IDENTIFIER = RegExp("^" + IDENTIFIER_STR + "$"); IDENTIFIER = RegExp("^" + IDENTIFIER_STR + "$");
SIMPLENUM = /^[+-]?\d+$/; SIMPLENUM = /^[+-]?\d+$/;
METHOD_DEF = RegExp("^(?:(" + IDENTIFIER_STR + ")\\.prototype(?:\\.(" + IDENTIFIER_STR + ")|\\[(\"(?:[^\"\\r\\n]|\\\\\")*\"|'(?:[^'\\r\\n]|\\\\')*')\\]))|(" + IDENTIFIER_STR + ")$"); METHOD_DEF = RegExp("^(?:(" + IDENTIFIER_STR + ")\\.prototype(?:\\.(" + IDENTIFIER_STR + ")|\\[(\"(?:[^\\\\\"\\r\\n]|\\\\.)*\"|'(?:[^\\\\'\\r\\n]|\\\\.)*')\\]|\\[(0x[\\da-fA-F]+|\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\]))|(" + IDENTIFIER_STR + ")$");
IS_STRING = /^['"]/; IS_STRING = /^['"]/;
utility = function(name) { utility = function(name) {
var ref; var ref;

View File

@ -554,7 +554,7 @@ IDENTIFIER = /// ^
NUMBER = /// NUMBER = ///
^ 0x[\da-f]+ | # hex ^ 0x[\da-f]+ | # hex
^ (?: \d+(\.\d+)? | \.\d+ ) (?:e[+-]?\d+)? # decimal ^ \d*\.?\d+ (?:e[+-]?\d+)? # decimal
///i ///i
HEREDOC = /// ^ ("""|''') ([\s\S]*?) (?:\n[^\n\S]*)? \1 /// HEREDOC = /// ^ ("""|''') ([\s\S]*?) (?:\n[^\n\S]*)? \1 ///

View File

@ -467,7 +467,7 @@ exports.Call = class Call extends Base
{method} = o.scope {method} = o.scope
throw SyntaxError 'cannot call super outside of a function.' unless method throw SyntaxError 'cannot call super outside of a function.' unless method
{name} = method {name} = method
throw SyntaxError 'cannot call super on an anonymous function.' unless name throw SyntaxError 'cannot call super on an anonymous function.' unless name?
if method.klass if method.klass
(new Value (new Literal method.klass), [new Access(new Literal "__super__"), new Access new Literal name]).compile o (new Value (new Literal method.klass), [new Access(new Literal "__super__"), new Access new Literal name]).compile o
else else
@ -934,7 +934,7 @@ exports.Assign = class Assign extends Base
o.scope.find name o.scope.find name
if @value instanceof Code and match = METHOD_DEF.exec name if @value instanceof Code and match = METHOD_DEF.exec name
@value.klass = match[1] if match[1] @value.klass = match[1] if match[1]
@value.name = match[2] ? match[3] ? match[4] @value.name = match[2] ? match[3] ? match[4] ? match[5]
val = @value.compile o, LEVEL_LIST val = @value.compile o, LEVEL_LIST
return "#{name}: #{val}" if @context is 'object' return "#{name}: #{val}" if @context is 'object'
val = name + " #{ @context or '=' } " + val val = name + " #{ @context or '=' } " + val
@ -1802,19 +1802,19 @@ IDENTIFIER_STR = "[$A-Za-z_\\x7f-\\uffff][$\\w\\x7f-\\uffff]*"
IDENTIFIER = /// ^ #{IDENTIFIER_STR} $ /// IDENTIFIER = /// ^ #{IDENTIFIER_STR} $ ///
SIMPLENUM = /^[+-]?\d+$/ SIMPLENUM = /^[+-]?\d+$/
METHOD_DEF = /// METHOD_DEF = ///
^ ^
(?: (?:
(#{IDENTIFIER_STR}) (#{IDENTIFIER_STR})
\.prototype \.prototype
(?: (?:
\.(#{IDENTIFIER_STR}) \.(#{IDENTIFIER_STR})
| | \[("(?:[^\\"\r\n]|\\.)*"|'(?:[^\\'\r\n]|\\.)*')\]
\[("(?:[^"\r\n]|\\")*"|'(?:[^'\r\n]|\\')*')\] | \[(0x[\da-fA-F]+ | \d*\.?\d+ (?:[eE][+-]?\d+)?)\]
) )
) )
| |
(#{IDENTIFIER_STR}) (#{IDENTIFIER_STR})
$ $
/// ///
# Is a literal value a string? # Is a literal value a string?

View File

@ -486,3 +486,7 @@ test "#1380: `super` with reserved names", ->
class C class C
do: -> super do: -> super
ok C::do ok C::do
class B
0: -> super
ok B::[0]