finishing up fix for #1009: class @do; it's a little bit ugly, but it

makes sense to do it this way
This commit is contained in:
Michael Ficarra 2011-08-11 01:52:10 -04:00
parent df5aca9348
commit c3fe29455b
5 changed files with 10 additions and 7 deletions

View File

@ -63,7 +63,7 @@
}
}
}
if (__indexOf.call(JS_FORBIDDEN, id) >= 0) {
if (__indexOf.call(['eval', 'arguments'].concat(JS_FORBIDDEN), id) >= 0) {
if (forcedIdentifier) {
tag = 'IDENTIFIER';
id = new String(id);

View File

@ -333,8 +333,8 @@
}
};
Literal.prototype.compileNode = function(o) {
var code;
code = this.isUndefined ? o.level >= LEVEL_ACCESS ? '(void 0)' : 'void 0' : this.value.reserved ? "\"" + this.value + "\"" : this.value;
var code, _ref2;
code = this.isUndefined ? o.level >= LEVEL_ACCESS ? '(void 0)' : 'void 0' : this.value.reserved && ((_ref2 = "" + this.value) !== 'eval' && _ref2 !== 'arguments') ? "\"" + this.value + "\"" : this.value;
if (this.isStatement()) {
return "" + this.tab + code + ";";
} else {

View File

@ -104,7 +104,7 @@ exports.Lexer = class Lexer
@tokens.pop()
id = '!' + id
if id in JS_FORBIDDEN
if id in ['eval', 'arguments'].concat JS_FORBIDDEN
if forcedIdentifier
tag = 'IDENTIFIER'
id = new String id

View File

@ -301,7 +301,7 @@ exports.Literal = class Literal extends Base
compileNode: (o) ->
code = if @isUndefined
if o.level >= LEVEL_ACCESS then '(void 0)' else 'void 0'
else if @value.reserved
else if @value.reserved and "#{@value}" not in ['eval', 'arguments']
"\"#{@value}\""
else
@value

View File

@ -501,8 +501,11 @@ test "#1464: bound class methods should keep context", ->
eq nonce, C.boundStaticColon().id
eq nonce2, C.boundStaticEqual().id
test "#1009: classes with reserved words as determined names", ->
eq 'function', typeof (-> class @for).call {}
test "#1009: classes with reserved words as determined names", -> (->
eq 'function', typeof (class @for)
ok not /\beval\b/.test (class @eval).toString()
ok not /\barguments\b/.test (class @arguments).toString()
).call {}
test "#1482: classes can extend expressions", ->
id = (x) -> x