[ruby/yarp] Fix associativity for a couple of operators
https://github.com/ruby/yarp/commit/820774976d
This commit is contained in:
parent
f9898b9eca
commit
90838a9490
@ -6,3 +6,4 @@ foo !bar
|
|||||||
|
|
||||||
foo ~bar
|
foo ~bar
|
||||||
|
|
||||||
|
foo << bar << baz
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
@ ProgramNode (location: (0...39))
|
@ ProgramNode (location: (0...58))
|
||||||
├── locals: []
|
├── locals: []
|
||||||
└── statements:
|
└── statements:
|
||||||
@ StatementsNode (location: (0...39))
|
@ StatementsNode (location: (0...58))
|
||||||
└── body: (length: 4)
|
└── body: (length: 5)
|
||||||
├── @ CallNode (location: (0...8))
|
├── @ CallNode (location: (0...8))
|
||||||
│ ├── receiver: ∅
|
│ ├── receiver: ∅
|
||||||
│ ├── call_operator_loc: ∅
|
│ ├── call_operator_loc: ∅
|
||||||
@ -119,35 +119,89 @@
|
|||||||
│ ├── block: ∅
|
│ ├── block: ∅
|
||||||
│ ├── flags: ∅
|
│ ├── flags: ∅
|
||||||
│ └── name: "**"
|
│ └── name: "**"
|
||||||
└── @ CallNode (location: (31...39))
|
├── @ CallNode (location: (31...39))
|
||||||
├── receiver: ∅
|
│ ├── receiver: ∅
|
||||||
|
│ ├── call_operator_loc: ∅
|
||||||
|
│ ├── message_loc: (31...34) = "foo"
|
||||||
|
│ ├── opening_loc: ∅
|
||||||
|
│ ├── arguments:
|
||||||
|
│ │ @ ArgumentsNode (location: (35...39))
|
||||||
|
│ │ └── arguments: (length: 1)
|
||||||
|
│ │ └── @ CallNode (location: (35...39))
|
||||||
|
│ │ ├── receiver:
|
||||||
|
│ │ │ @ CallNode (location: (36...39))
|
||||||
|
│ │ │ ├── receiver: ∅
|
||||||
|
│ │ │ ├── call_operator_loc: ∅
|
||||||
|
│ │ │ ├── message_loc: (36...39) = "bar"
|
||||||
|
│ │ │ ├── opening_loc: ∅
|
||||||
|
│ │ │ ├── arguments: ∅
|
||||||
|
│ │ │ ├── closing_loc: ∅
|
||||||
|
│ │ │ ├── block: ∅
|
||||||
|
│ │ │ ├── flags: variable_call
|
||||||
|
│ │ │ └── name: "bar"
|
||||||
|
│ │ ├── call_operator_loc: ∅
|
||||||
|
│ │ ├── message_loc: (35...36) = "~"
|
||||||
|
│ │ ├── opening_loc: ∅
|
||||||
|
│ │ ├── arguments: ∅
|
||||||
|
│ │ ├── closing_loc: ∅
|
||||||
|
│ │ ├── block: ∅
|
||||||
|
│ │ ├── flags: ∅
|
||||||
|
│ │ └── name: "~"
|
||||||
|
│ ├── closing_loc: ∅
|
||||||
|
│ ├── block: ∅
|
||||||
|
│ ├── flags: ∅
|
||||||
|
│ └── name: "foo"
|
||||||
|
└── @ CallNode (location: (41...58))
|
||||||
|
├── receiver:
|
||||||
|
│ @ CallNode (location: (41...51))
|
||||||
|
│ ├── receiver:
|
||||||
|
│ │ @ CallNode (location: (41...44))
|
||||||
|
│ │ ├── receiver: ∅
|
||||||
|
│ │ ├── call_operator_loc: ∅
|
||||||
|
│ │ ├── message_loc: (41...44) = "foo"
|
||||||
|
│ │ ├── opening_loc: ∅
|
||||||
|
│ │ ├── arguments: ∅
|
||||||
|
│ │ ├── closing_loc: ∅
|
||||||
|
│ │ ├── block: ∅
|
||||||
|
│ │ ├── flags: variable_call
|
||||||
|
│ │ └── name: "foo"
|
||||||
|
│ ├── call_operator_loc: ∅
|
||||||
|
│ ├── message_loc: (45...47) = "<<"
|
||||||
|
│ ├── opening_loc: ∅
|
||||||
|
│ ├── arguments:
|
||||||
|
│ │ @ ArgumentsNode (location: (48...51))
|
||||||
|
│ │ └── arguments: (length: 1)
|
||||||
|
│ │ └── @ CallNode (location: (48...51))
|
||||||
|
│ │ ├── receiver: ∅
|
||||||
|
│ │ ├── call_operator_loc: ∅
|
||||||
|
│ │ ├── message_loc: (48...51) = "bar"
|
||||||
|
│ │ ├── opening_loc: ∅
|
||||||
|
│ │ ├── arguments: ∅
|
||||||
|
│ │ ├── closing_loc: ∅
|
||||||
|
│ │ ├── block: ∅
|
||||||
|
│ │ ├── flags: variable_call
|
||||||
|
│ │ └── name: "bar"
|
||||||
|
│ ├── closing_loc: ∅
|
||||||
|
│ ├── block: ∅
|
||||||
|
│ ├── flags: ∅
|
||||||
|
│ └── name: "<<"
|
||||||
├── call_operator_loc: ∅
|
├── call_operator_loc: ∅
|
||||||
├── message_loc: (31...34) = "foo"
|
├── message_loc: (52...54) = "<<"
|
||||||
├── opening_loc: ∅
|
├── opening_loc: ∅
|
||||||
├── arguments:
|
├── arguments:
|
||||||
│ @ ArgumentsNode (location: (35...39))
|
│ @ ArgumentsNode (location: (55...58))
|
||||||
│ └── arguments: (length: 1)
|
│ └── arguments: (length: 1)
|
||||||
│ └── @ CallNode (location: (35...39))
|
│ └── @ CallNode (location: (55...58))
|
||||||
│ ├── receiver:
|
│ ├── receiver: ∅
|
||||||
│ │ @ CallNode (location: (36...39))
|
|
||||||
│ │ ├── receiver: ∅
|
|
||||||
│ │ ├── call_operator_loc: ∅
|
|
||||||
│ │ ├── message_loc: (36...39) = "bar"
|
|
||||||
│ │ ├── opening_loc: ∅
|
|
||||||
│ │ ├── arguments: ∅
|
|
||||||
│ │ ├── closing_loc: ∅
|
|
||||||
│ │ ├── block: ∅
|
|
||||||
│ │ ├── flags: variable_call
|
|
||||||
│ │ └── name: "bar"
|
|
||||||
│ ├── call_operator_loc: ∅
|
│ ├── call_operator_loc: ∅
|
||||||
│ ├── message_loc: (35...36) = "~"
|
│ ├── message_loc: (55...58) = "baz"
|
||||||
│ ├── opening_loc: ∅
|
│ ├── opening_loc: ∅
|
||||||
│ ├── arguments: ∅
|
│ ├── arguments: ∅
|
||||||
│ ├── closing_loc: ∅
|
│ ├── closing_loc: ∅
|
||||||
│ ├── block: ∅
|
│ ├── block: ∅
|
||||||
│ ├── flags: ∅
|
│ ├── flags: variable_call
|
||||||
│ └── name: "~"
|
│ └── name: "baz"
|
||||||
├── closing_loc: ∅
|
├── closing_loc: ∅
|
||||||
├── block: ∅
|
├── block: ∅
|
||||||
├── flags: ∅
|
├── flags: ∅
|
||||||
└── name: "foo"
|
└── name: "<<"
|
||||||
|
30
yarp/yarp.c
30
yarp/yarp.c
@ -7894,29 +7894,29 @@ yp_binding_powers_t yp_binding_powers[YP_TOKEN_MAXIMUM] = {
|
|||||||
[YP_TOKEN_AMPERSAND_AMPERSAND] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_LOGICAL_AND),
|
[YP_TOKEN_AMPERSAND_AMPERSAND] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_LOGICAL_AND),
|
||||||
|
|
||||||
// != !~ == === =~ <=>
|
// != !~ == === =~ <=>
|
||||||
[YP_TOKEN_BANG_EQUAL] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
[YP_TOKEN_BANG_EQUAL] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
||||||
[YP_TOKEN_BANG_TILDE] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
[YP_TOKEN_BANG_TILDE] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
||||||
[YP_TOKEN_EQUAL_EQUAL] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
[YP_TOKEN_EQUAL_EQUAL] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
||||||
[YP_TOKEN_EQUAL_EQUAL_EQUAL] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
[YP_TOKEN_EQUAL_EQUAL_EQUAL] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
||||||
[YP_TOKEN_EQUAL_TILDE] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
[YP_TOKEN_EQUAL_TILDE] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
||||||
[YP_TOKEN_LESS_EQUAL_GREATER] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
[YP_TOKEN_LESS_EQUAL_GREATER] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_EQUALITY),
|
||||||
|
|
||||||
// > >= < <=
|
// > >= < <=
|
||||||
[YP_TOKEN_GREATER] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_COMPARISON),
|
[YP_TOKEN_GREATER] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_COMPARISON),
|
||||||
[YP_TOKEN_GREATER_EQUAL] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_COMPARISON),
|
[YP_TOKEN_GREATER_EQUAL] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_COMPARISON),
|
||||||
[YP_TOKEN_LESS] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_COMPARISON),
|
[YP_TOKEN_LESS] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_COMPARISON),
|
||||||
[YP_TOKEN_LESS_EQUAL] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_COMPARISON),
|
[YP_TOKEN_LESS_EQUAL] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_COMPARISON),
|
||||||
|
|
||||||
// ^ |
|
// ^ |
|
||||||
[YP_TOKEN_CARET] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_BITWISE_OR),
|
[YP_TOKEN_CARET] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_BITWISE_OR),
|
||||||
[YP_TOKEN_PIPE] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_BITWISE_OR),
|
[YP_TOKEN_PIPE] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_BITWISE_OR),
|
||||||
|
|
||||||
// &
|
// &
|
||||||
[YP_TOKEN_AMPERSAND] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_BITWISE_AND),
|
[YP_TOKEN_AMPERSAND] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_BITWISE_AND),
|
||||||
|
|
||||||
// >> <<
|
// >> <<
|
||||||
[YP_TOKEN_GREATER_GREATER] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_SHIFT),
|
[YP_TOKEN_GREATER_GREATER] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_SHIFT),
|
||||||
[YP_TOKEN_LESS_LESS] = RIGHT_ASSOCIATIVE(YP_BINDING_POWER_SHIFT),
|
[YP_TOKEN_LESS_LESS] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_SHIFT),
|
||||||
|
|
||||||
// - +
|
// - +
|
||||||
[YP_TOKEN_MINUS] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_TERM),
|
[YP_TOKEN_MINUS] = LEFT_ASSOCIATIVE(YP_BINDING_POWER_TERM),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user