mirror of
https://github.com/jashkenas/coffeescript.git
synced 2026-05-03 03:00:14 -04:00
Merge pull request #3677 from alubbe/master
implemented proper precedence for 'yield'
This commit is contained in:
@@ -600,7 +600,7 @@
|
||||
]
|
||||
};
|
||||
|
||||
operators = [['left', '.', '?.', '::', '?::'], ['left', 'CALL_START', 'CALL_END'], ['nonassoc', '++', '--'], ['left', '?'], ['right', 'UNARY'], ['right', 'YIELD'], ['right', '**'], ['right', 'UNARY_MATH'], ['left', 'MATH'], ['left', '+', '-'], ['left', 'SHIFT'], ['left', 'RELATION'], ['left', 'COMPARE'], ['left', 'LOGIC'], ['nonassoc', 'INDENT', 'OUTDENT'], ['right', '=', ':', 'COMPOUND_ASSIGN', 'RETURN', 'THROW', 'EXTENDS'], ['right', 'FORIN', 'FOROF', 'BY', 'WHEN'], ['right', 'IF', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS'], ['left', 'POST_IF']];
|
||||
operators = [['left', '.', '?.', '::', '?::'], ['left', 'CALL_START', 'CALL_END'], ['nonassoc', '++', '--'], ['left', '?'], ['right', 'UNARY'], ['right', '**'], ['right', 'UNARY_MATH'], ['left', 'MATH'], ['left', '+', '-'], ['left', 'SHIFT'], ['left', 'RELATION'], ['left', 'COMPARE'], ['left', 'LOGIC'], ['nonassoc', 'INDENT', 'OUTDENT'], ['right', 'YIELD'], ['right', '=', ':', 'COMPOUND_ASSIGN', 'RETURN', 'THROW', 'EXTENDS'], ['right', 'FORIN', 'FOROF', 'BY', 'WHEN'], ['right', 'IF', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS'], ['left', 'POST_IF']];
|
||||
|
||||
tokens = [];
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -589,7 +589,6 @@ operators = [
|
||||
['nonassoc', '++', '--']
|
||||
['left', '?']
|
||||
['right', 'UNARY']
|
||||
['right', 'YIELD']
|
||||
['right', '**']
|
||||
['right', 'UNARY_MATH']
|
||||
['left', 'MATH']
|
||||
@@ -599,6 +598,7 @@ operators = [
|
||||
['left', 'COMPARE']
|
||||
['left', 'LOGIC']
|
||||
['nonassoc', 'INDENT', 'OUTDENT']
|
||||
['right', 'YIELD']
|
||||
['right', '=', ':', 'COMPOUND_ASSIGN', 'RETURN', 'THROW', 'EXTENDS']
|
||||
['right', 'FORIN', 'FOROF', 'BY', 'WHEN']
|
||||
['right', 'IF', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS']
|
||||
|
||||
@@ -63,7 +63,7 @@ test "empty generator", ->
|
||||
x = do -> yield return
|
||||
|
||||
y = x.next()
|
||||
ok y.value is undefined and y.done is true
|
||||
ok y.value is undefined and y.done is true
|
||||
|
||||
test "`yield` by itself not at the end of a function errors", ->
|
||||
throws -> CoffeeScript.compile 'x = -> yield; return'
|
||||
@@ -79,3 +79,27 @@ test "yield in if statements", ->
|
||||
|
||||
y = x.next 1
|
||||
ok y.value is 3 and y.done is true
|
||||
|
||||
test "symbolic operators has precedence over the `yield`", ->
|
||||
|
||||
symbolic = '+ - * / << >> & | || && ** ^ // or and'.split ' '
|
||||
compound = ("#{op}=" for op in symbolic)
|
||||
relations = '< > == != <= >= is isnt'.split ' '
|
||||
|
||||
operators = [symbolic..., '=', compound..., relations...]
|
||||
|
||||
collect = (gen) -> ref.value until (ref = gen.next()).done
|
||||
|
||||
values = [0, 1, 2, 3]
|
||||
|
||||
for op in operators
|
||||
|
||||
expression = "i #{op} 2"
|
||||
|
||||
yielded = CoffeeScript.eval "(arr) -> yield #{expression} for i in arr"
|
||||
mapped = CoffeeScript.eval "(arr) -> (#{expression} for i in arr)"
|
||||
|
||||
expected = mapped values
|
||||
actual = collect yielded values
|
||||
|
||||
arrayEq actual, expected
|
||||
|
||||
Reference in New Issue
Block a user