mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-02-18 11:31:20 -05:00
Issue #602. Adding JS's Bitwise Assignment operators.
This commit is contained in:
@@ -585,6 +585,18 @@
|
|||||||
return new OpNode('|', $1, $3);
|
return new OpNode('|', $1, $3);
|
||||||
}), o("Expression ^ Expression", function() {
|
}), o("Expression ^ Expression", function() {
|
||||||
return new OpNode('^', $1, $3);
|
return new OpNode('^', $1, $3);
|
||||||
|
}), o("Expression <<= Expression", function() {
|
||||||
|
return new OpNode('<<=', $1, $3);
|
||||||
|
}), o("Expression >>= Expression", function() {
|
||||||
|
return new OpNode('>>=', $1, $3);
|
||||||
|
}), o("Expression >>>= Expression", function() {
|
||||||
|
return new OpNode('>>>=', $1, $3);
|
||||||
|
}), o("Expression &= Expression", function() {
|
||||||
|
return new OpNode('&=', $1, $3);
|
||||||
|
}), o("Expression |= Expression", function() {
|
||||||
|
return new OpNode('|=', $1, $3);
|
||||||
|
}), o("Expression ^= Expression", function() {
|
||||||
|
return new OpNode('^=', $1, $3);
|
||||||
}), o("Expression <= Expression", function() {
|
}), o("Expression <= Expression", function() {
|
||||||
return new OpNode('<=', $1, $3);
|
return new OpNode('<=', $1, $3);
|
||||||
}), o("Expression < Expression", function() {
|
}), o("Expression < Expression", function() {
|
||||||
@@ -632,7 +644,7 @@
|
|||||||
})
|
})
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
operators = [["left", '?'], ["nonassoc", 'UMINUS', 'UPLUS', '!', '!!', '~', '++', '--'], ["left", '*', '/', '%'], ["left", '+', '-'], ["left", '<<', '>>', '>>>'], ["left", '&', '|', '^'], ["left", '<=', '<', '>', '>='], ["right", 'DELETE', 'INSTANCEOF', 'TYPEOF'], ["left", '==', '!='], ["left", '&&', '||', 'OP?'], ["right", '-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?='], ["left", '.'], ["right", 'INDENT'], ["left", 'OUTDENT'], ["right", 'WHEN', 'LEADING_WHEN', 'IN', 'OF', 'BY', 'THROW'], ["right", 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'NEW', 'SUPER', 'CLASS'], ["left", 'EXTENDS'], ["right", '=', ':', 'RETURN'], ["right", '->', '=>', 'UNLESS', 'IF', 'ELSE']];
|
operators = [["left", '?'], ["nonassoc", 'UMINUS', 'UPLUS', '!', '!!', '~', '++', '--'], ["left", '*', '/', '%'], ["left", '+', '-'], ["left", '<<', '>>', '>>>'], ["left", '<=', '<', '>', '>='], ["right", 'DELETE', 'INSTANCEOF', 'TYPEOF'], ["left", '==', '!='], ["left", '&', '|', '^'], ["left", '&&', '||', 'OP?'], ["right", '-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|='], ["left", '.'], ["right", 'INDENT'], ["left", 'OUTDENT'], ["right", 'WHEN', 'LEADING_WHEN', 'IN', 'OF', 'BY', 'THROW'], ["right", 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'NEW', 'SUPER', 'CLASS'], ["left", 'EXTENDS'], ["right", '=', ':', 'RETURN'], ["right", '->', '=>', 'UNLESS', 'IF', 'ELSE']];
|
||||||
tokens = [];
|
tokens = [];
|
||||||
_a = grammar;
|
_a = grammar;
|
||||||
for (name in _a) {
|
for (name in _a) {
|
||||||
|
|||||||
@@ -579,7 +579,7 @@
|
|||||||
IDENTIFIER = /^([a-zA-Z\$_](\w|\$)*)/;
|
IDENTIFIER = /^([a-zA-Z\$_](\w|\$)*)/;
|
||||||
NUMBER = /^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b/i;
|
NUMBER = /^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b/i;
|
||||||
HEREDOC = /^("{6}|'{6}|"{3}\n?([\s\S]*?)\n?([ \t]*)"{3}|'{3}\n?([\s\S]*?)\n?([ \t]*)'{3})/;
|
HEREDOC = /^("{6}|'{6}|"{3}\n?([\s\S]*?)\n?([ \t]*)"{3}|'{3}\n?([\s\S]*?)\n?([ \t]*)'{3})/;
|
||||||
OPERATOR = /^(-[\-=>]?|\+[+=]?|[*&|\/%=<>:!?]+)([ \t]*)/;
|
OPERATOR = /^(-[\-=>]?|\+[+=]?|[*&|\/%=<>^:!?]+)([ \t]*)/;
|
||||||
WHITESPACE = /^([ \t]+)/;
|
WHITESPACE = /^([ \t]+)/;
|
||||||
COMMENT = /^(\s*\#{3}(?!#)[ \t]*\n+([\s\S]*?)[ \t]*\n+[ \t]*\#{3}|(\s*#(?!##[^#])[^\n]*)+)/;
|
COMMENT = /^(\s*\#{3}(?!#)[ \t]*\n+([\s\S]*?)[ \t]*\n+[ \t]*\#{3}|(\s*#(?!##[^#])[^\n]*)+)/;
|
||||||
CODE = /^((-|=)>)/;
|
CODE = /^((-|=)>)/;
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
@@ -546,6 +546,13 @@ grammar =
|
|||||||
o "Expression | Expression", -> new OpNode '|', $1, $3
|
o "Expression | Expression", -> new OpNode '|', $1, $3
|
||||||
o "Expression ^ Expression", -> new OpNode '^', $1, $3
|
o "Expression ^ Expression", -> new OpNode '^', $1, $3
|
||||||
|
|
||||||
|
o "Expression <<= Expression", -> new OpNode '<<=', $1, $3
|
||||||
|
o "Expression >>= Expression", -> new OpNode '>>=', $1, $3
|
||||||
|
o "Expression >>>= Expression", -> new OpNode '>>>=', $1, $3
|
||||||
|
o "Expression &= Expression", -> new OpNode '&=', $1, $3
|
||||||
|
o "Expression |= Expression", -> new OpNode '|=', $1, $3
|
||||||
|
o "Expression ^= Expression", -> new OpNode '^=', $1, $3
|
||||||
|
|
||||||
o "Expression <= Expression", -> new OpNode '<=', $1, $3
|
o "Expression <= Expression", -> new OpNode '<=', $1, $3
|
||||||
o "Expression < Expression", -> new OpNode '<', $1, $3
|
o "Expression < Expression", -> new OpNode '<', $1, $3
|
||||||
o "Expression > Expression", -> new OpNode '>', $1, $3
|
o "Expression > Expression", -> new OpNode '>', $1, $3
|
||||||
@@ -592,12 +599,12 @@ operators = [
|
|||||||
["left", '*', '/', '%']
|
["left", '*', '/', '%']
|
||||||
["left", '+', '-']
|
["left", '+', '-']
|
||||||
["left", '<<', '>>', '>>>']
|
["left", '<<', '>>', '>>>']
|
||||||
["left", '&', '|', '^']
|
|
||||||
["left", '<=', '<', '>', '>=']
|
["left", '<=', '<', '>', '>=']
|
||||||
["right", 'DELETE', 'INSTANCEOF', 'TYPEOF']
|
["right", 'DELETE', 'INSTANCEOF', 'TYPEOF']
|
||||||
["left", '==', '!=']
|
["left", '==', '!=']
|
||||||
|
["left", '&', '|', '^']
|
||||||
["left", '&&', '||', 'OP?']
|
["left", '&&', '||', 'OP?']
|
||||||
["right", '-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=']
|
["right", '-=', '+=', '/=', '*=', '%=', '||=', '&&=', '?=', '<<=', '>>=', '>>>=', '&=', '^=', '|=']
|
||||||
["left", '.']
|
["left", '.']
|
||||||
["right", 'INDENT']
|
["right", 'INDENT']
|
||||||
["left", 'OUTDENT']
|
["left", 'OUTDENT']
|
||||||
|
|||||||
@@ -511,7 +511,7 @@ JS_FORBIDDEN = JS_KEYWORDS.concat RESERVED
|
|||||||
IDENTIFIER = /^([a-zA-Z\$_](\w|\$)*)/
|
IDENTIFIER = /^([a-zA-Z\$_](\w|\$)*)/
|
||||||
NUMBER = /^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b/i
|
NUMBER = /^(((\b0(x|X)[0-9a-fA-F]+)|((\b[0-9]+(\.[0-9]+)?|\.[0-9]+)(e[+\-]?[0-9]+)?)))\b/i
|
||||||
HEREDOC = /^("{6}|'{6}|"{3}\n?([\s\S]*?)\n?([ \t]*)"{3}|'{3}\n?([\s\S]*?)\n?([ \t]*)'{3})/
|
HEREDOC = /^("{6}|'{6}|"{3}\n?([\s\S]*?)\n?([ \t]*)"{3}|'{3}\n?([\s\S]*?)\n?([ \t]*)'{3})/
|
||||||
OPERATOR = /^(-[\-=>]?|\+[+=]?|[*&|\/%=<>:!?]+)([ \t]*)/
|
OPERATOR = /^(-[\-=>]?|\+[+=]?|[*&|\/%=<>^:!?]+)([ \t]*)/
|
||||||
WHITESPACE = /^([ \t]+)/
|
WHITESPACE = /^([ \t]+)/
|
||||||
COMMENT = /^(\s*\#{3}(?!#)[ \t]*\n+([\s\S]*?)[ \t]*\n+[ \t]*\#{3}|(\s*#(?!##[^#])[^\n]*)+)/
|
COMMENT = /^(\s*\#{3}(?!#)[ \t]*\n+([\s\S]*?)[ \t]*\n+[ \t]*\#{3}|(\s*#(?!##[^#])[^\n]*)+)/
|
||||||
CODE = /^((-|=)>)/
|
CODE = /^((-|=)>)/
|
||||||
|
|||||||
@@ -100,3 +100,21 @@ ok list.join(' ') is '0 100 5 10'
|
|||||||
a = b = false
|
a = b = false
|
||||||
a and= b or true
|
a and= b or true
|
||||||
ok a is false
|
ok a is false
|
||||||
|
|
||||||
|
|
||||||
|
# Bitwise operators:
|
||||||
|
ok (10 & 3) is 2
|
||||||
|
ok (10 | 3) is 11
|
||||||
|
ok (10 ^ 3) is 9
|
||||||
|
ok (10 << 3) is 80
|
||||||
|
ok (10 >> 3) is 1
|
||||||
|
ok (10 >>> 3) is 1
|
||||||
|
|
||||||
|
num = 10; ok (num <<= 3) is 80
|
||||||
|
num = 10; ok (num >>= 3) is 1
|
||||||
|
num = 10; ok (num >>>= 3) is 1
|
||||||
|
num = 10; ok (num &= 3) is 2
|
||||||
|
num = 10; ok (num ^= 3) is 9
|
||||||
|
num = 10; ok (num |= 3) is 11
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user