mirror of
https://github.com/jashkenas/coffeescript.git
synced 2022-11-09 12:23:24 -05:00
Issue #795 -- clean up low precedence levels
This commit is contained in:
parent
3a64e6a711
commit
d6d46697d0
6 changed files with 20 additions and 20 deletions
|
@ -596,7 +596,7 @@
|
||||||
})
|
})
|
||||||
]
|
]
|
||||||
};
|
};
|
||||||
operators = [["left", 'CALL_START', 'CALL_END'], ["nonassoc", '++', '--'], ["left", '?'], ["right", 'UNARY'], ["left", 'MATH'], ["left", '+', '-'], ["left", 'SHIFT'], ["left", 'RELATION'], ["left", 'COMPARE'], ["left", 'LOGIC'], ["left", '.'], ["nonassoc", 'INDENT', 'OUTDENT'], ["right", 'WHEN', 'LEADING_WHEN', 'FORIN', 'FOROF', 'FROM', 'TO', 'BY', 'THROW'], ["right", 'IF', 'UNLESS', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS', 'EXTENDS'], ["right", '=', ':', 'COMPOUND_ASSIGN', 'RETURN'], ["right", 'POST_IF', 'POST_UNLESS']];
|
operators = [["left", 'CALL_START', 'CALL_END'], ["nonassoc", '++', '--'], ["left", '?'], ["right", 'UNARY'], ["left", 'MATH'], ["left", '+', '-'], ["left", 'SHIFT'], ["left", 'RELATION'], ["left", 'COMPARE'], ["left", 'LOGIC'], ["left", '.'], ["nonassoc", 'INDENT', 'OUTDENT'], ["right", '=', ':', 'COMPOUND_ASSIGN', 'RETURN'], ["right", 'WHEN', 'LEADING_WHEN', 'FORIN', 'FOROF', 'FROM', 'TO', 'BY', 'THROW'], ["right", 'IF', 'UNLESS', 'POST_IF', 'POST_UNLESS', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS', 'EXTENDS']];
|
||||||
tokens = [];
|
tokens = [];
|
||||||
for (name in grammar) {
|
for (name in grammar) {
|
||||||
alternatives = grammar[name];
|
alternatives = grammar[name];
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -569,10 +569,10 @@ operators = [
|
||||||
["left", 'LOGIC']
|
["left", 'LOGIC']
|
||||||
["left", '.']
|
["left", '.']
|
||||||
["nonassoc", 'INDENT', 'OUTDENT']
|
["nonassoc", 'INDENT', 'OUTDENT']
|
||||||
["right", 'WHEN', 'LEADING_WHEN', 'FORIN', 'FOROF', 'FROM', 'TO', 'BY', 'THROW']
|
|
||||||
["right", 'IF', 'UNLESS', 'ELSE', 'FOR', 'WHILE', 'UNTIL', 'LOOP', 'SUPER', 'CLASS', 'EXTENDS']
|
|
||||||
["right", '=', ':', 'COMPOUND_ASSIGN', 'RETURN']
|
["right", '=', ':', 'COMPOUND_ASSIGN', 'RETURN']
|
||||||
["right", 'POST_IF', 'POST_UNLESS']
|
["right", 'WHEN', 'LEADING_WHEN', 'FORIN', 'FOROF', 'FROM', 'TO', 'BY', 'THROW']
|
||||||
|
["right", 'IF', 'UNLESS', 'POST_IF', 'POST_UNLESS', 'ELSE', 'FOR', 'WHILE',
|
||||||
|
'UNTIL', 'LOOP', 'SUPER', 'CLASS', 'EXTENDS']
|
||||||
]
|
]
|
||||||
|
|
||||||
# Wrapping Up
|
# Wrapping Up
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
# Basic array comprehensions.
|
# Basic array comprehensions.
|
||||||
nums = n * n for n in [1, 2, 3] when n % 2 isnt 0
|
nums = (n * n for n in [1, 2, 3] when n % 2 isnt 0)
|
||||||
results = n * 2 for n in nums
|
results = (n * 2 for n in nums)
|
||||||
|
|
||||||
ok results.join(',') is '2,18'
|
ok results.join(',') is '2,18'
|
||||||
|
|
||||||
|
|
||||||
# Basic object comprehensions.
|
# Basic object comprehensions.
|
||||||
obj = {one: 1, two: 2, three: 3}
|
obj = {one: 1, two: 2, three: 3}
|
||||||
names = prop + '!' for prop of obj
|
names = (prop + '!' for prop of obj)
|
||||||
odds = prop + '!' for prop, value of obj when value % 2 isnt 0
|
odds = (prop + '!' for prop, value of obj when value % 2 isnt 0)
|
||||||
|
|
||||||
ok names.join(' ') is "one! two! three!"
|
ok names.join(' ') is "one! two! three!"
|
||||||
ok odds.join(' ') is "one! three!"
|
ok odds.join(' ') is "one! three!"
|
||||||
|
|
||||||
|
|
||||||
# Basic range comprehensions.
|
# Basic range comprehensions.
|
||||||
nums = i * 3 for i from 1 to 3
|
nums = (i * 3 for i from 1 to 3)
|
||||||
negs = x for x from -20 to -5*2
|
negs = (x for x from -20 to -5*2)
|
||||||
eq nums.concat(negs.slice 0, 3).join(' '), '3 6 9 -20 -19 -18'
|
eq nums.concat(negs.slice 0, 3).join(' '), '3 6 9 -20 -19 -18'
|
||||||
|
|
||||||
|
|
||||||
|
@ -35,7 +35,7 @@ eq evens + '', '4,6,8'
|
||||||
|
|
||||||
|
|
||||||
# Backward traversing.
|
# Backward traversing.
|
||||||
odds = num for num in [0, 1, 2, 3, 4, 5] by -2
|
odds = (num for num in [0, 1, 2, 3, 4, 5] by -2)
|
||||||
eq odds + '', '5,3,1'
|
eq odds + '', '5,3,1'
|
||||||
|
|
||||||
|
|
||||||
|
@ -53,7 +53,7 @@ multiLiner =
|
||||||
[x, y]
|
[x, y]
|
||||||
|
|
||||||
singleLiner =
|
singleLiner =
|
||||||
[x, y] for y from 3 to 5 for x from 3 to 5
|
(([x, y] for y from 3 to 5) for x from 3 to 5)
|
||||||
|
|
||||||
ok multiLiner.length is singleLiner.length
|
ok multiLiner.length is singleLiner.length
|
||||||
ok 5 is multiLiner[2][2][1]
|
ok 5 is multiLiner[2][2][1]
|
||||||
|
@ -70,7 +70,7 @@ ok result.join(' ') is '6 4 2'
|
||||||
|
|
||||||
# Closure-wrapped comprehensions that refer to the "arguments" object.
|
# Closure-wrapped comprehensions that refer to the "arguments" object.
|
||||||
expr = ->
|
expr = ->
|
||||||
result = item * item for item in arguments
|
result = (item * item for item in arguments)
|
||||||
|
|
||||||
ok expr(2, 4, 8).join(' ') is '4 16 64'
|
ok expr(2, 4, 8).join(' ') is '4 16 64'
|
||||||
|
|
||||||
|
@ -82,8 +82,8 @@ class Cat
|
||||||
hair: 'cream'
|
hair: 'cream'
|
||||||
|
|
||||||
whiskers = new Cat
|
whiskers = new Cat
|
||||||
own = value for key, value of whiskers
|
own = (value for key, value of whiskers)
|
||||||
all = value for all key, value of whiskers
|
all = (value for all key, value of whiskers)
|
||||||
|
|
||||||
ok own.join(' ') is 'Whiskers'
|
ok own.join(' ') is 'Whiskers'
|
||||||
ok all.sort().join(' ') is 'Whiskers cream tabby'
|
ok all.sort().join(' ') is 'Whiskers cream tabby'
|
||||||
|
|
|
@ -111,7 +111,7 @@ persons = {
|
||||||
Christopher: { name: "Stan" }
|
Christopher: { name: "Stan" }
|
||||||
}
|
}
|
||||||
|
|
||||||
join1 = "#{key}: #{name}" for key, { name } of persons
|
join1 = ("#{key}: #{name}" for key, { name } of persons)
|
||||||
|
|
||||||
eq join1.join(' / '), "George: Bob / Bob: Alice / Christopher: Stan"
|
eq join1.join(' / '), "George: Bob / Bob: Alice / Christopher: Stan"
|
||||||
|
|
||||||
|
@ -121,12 +121,12 @@ persons = [
|
||||||
{ name: "Stan", parent: { name: "Christopher" } }
|
{ name: "Stan", parent: { name: "Christopher" } }
|
||||||
]
|
]
|
||||||
|
|
||||||
join2 = "#{parent}: #{name}" for { name, parent: { name: parent } } in persons
|
join2 = ("#{parent}: #{name}" for { name, parent: { name: parent } } in persons)
|
||||||
|
|
||||||
eq join1.join(' '), join2.join(' ')
|
eq join1.join(' '), join2.join(' ')
|
||||||
|
|
||||||
persons = [['Bob', ['George']], ['Alice', ['Bob']], ['Stan', ['Christopher']]]
|
persons = [['Bob', ['George']], ['Alice', ['Bob']], ['Stan', ['Christopher']]]
|
||||||
join3 = "#{parent}: #{name}" for [name, [parent]] in persons
|
join3 = ("#{parent}: #{name}" for [name, [parent]] in persons)
|
||||||
|
|
||||||
eq join2.join(' '), join3.join(' ')
|
eq join2.join(' '), join3.join(' ')
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Expression conversion under explicit returns.
|
# Expression conversion under explicit returns.
|
||||||
first = ->
|
first = ->
|
||||||
return 'do' for x in [1,2,3]
|
return ('do' for x in [1,2,3])
|
||||||
|
|
||||||
second = ->
|
second = ->
|
||||||
return ['re' for x in [1,2,3]]
|
return ['re' for x in [1,2,3]]
|
||||||
|
|
Loading…
Add table
Reference in a new issue