fixing issue #745 ... precedence of huh operator.

This commit is contained in:
Jeremy Ashkenas
2010-10-07 22:22:33 -04:00
parent 4f486bc444
commit b21057d166
6 changed files with 29 additions and 37 deletions

View File

@@ -313,7 +313,7 @@
return true;
};
Lexer.prototype.literalToken = function() {
var match, prev, ptag, pval, tag, value;
var _ref2, match, prev, tag, value;
if (match = OPERATOR.exec(this.chunk)) {
value = match[0];
if (CODE.test(value)) {
@@ -324,15 +324,14 @@
}
this.i += value.length;
tag = value;
prev = last(this.tokens);
if (value === '=') {
pval = this.value();
if (!pval.reserved && include(JS_FORBIDDEN, pval)) {
if (!prev[1].reserved && include(JS_FORBIDDEN, prev[1])) {
this.assignmentError();
}
if (('or' === pval || 'and' === pval)) {
prev = last(this.tokens);
if (('or' === (_ref2 = prev[1]) || 'and' === _ref2)) {
prev[0] = 'COMPOUND_ASSIGN';
prev[1] = COFFEE_ALIASES[pval] + '=';
prev[1] = COFFEE_ALIASES[prev[1]] + '=';
return true;
}
}
@@ -350,15 +349,17 @@
tag = 'UNARY';
} else if (include(SHIFT, value)) {
tag = 'SHIFT';
} else if ((prev = last(this.tokens)) && !prev.spaced && include(CALLABLE, ptag = prev[0])) {
} else if (value === '?' && prev.spaced) {
tag = 'LOGIC';
} else if (prev && !prev.spaced && include(CALLABLE, prev[0])) {
if (value === '(') {
if (ptag === '?') {
if (prev[0] === '?') {
prev[0] = 'FUNC_EXIST';
}
tag = 'CALL_START';
} else if (value === '[') {
tag = 'INDEX_START';
switch (ptag) {
switch (prev[0]) {
case '?':
prev[0] = 'INDEX_SOAK';
break;