File tree Expand file tree Collapse file tree 2 files changed +36
-11
lines changed
Sources/SwiftOperatorPrecedence Expand file tree Collapse file tree 2 files changed +36
-11
lines changed Original file line number Diff line number Diff line change @@ -196,23 +196,22 @@ extension OperatorPrecedence {
196
196
return group. associativity
197
197
}
198
198
199
- if try precedence (
199
+ let prec = try precedence (
200
200
relating: firstGroup, to: secondGroup,
201
201
startSyntax: firstGroupSyntax, endSyntax: secondGroupSyntax,
202
202
errorHandler: errorHandler
203
- ) == . higherThan {
203
+ )
204
+
205
+ switch prec {
206
+ case . higherThan:
204
207
return . left
205
- }
206
208
207
- if try precedence (
208
- relating: secondGroup, to: firstGroup,
209
- startSyntax: secondGroupSyntax, endSyntax: firstGroupSyntax,
210
- errorHandler: errorHandler
211
- ) == . higherThan {
209
+ case . lowerThan:
212
210
return . right
213
- }
214
211
215
- return . none
212
+ case . unrelated:
213
+ return . none
214
+ }
216
215
}
217
216
218
217
/// "Fold" an expression sequence where the left-hand side has been broken
Original file line number Diff line number Diff line change @@ -12,6 +12,20 @@ enum Precedence {
12
12
case unrelated
13
13
case higherThan
14
14
case lowerThan
15
+
16
+ /// Flip the precedence order around.
17
+ var flipped : Precedence {
18
+ switch self {
19
+ case . unrelated:
20
+ return . unrelated
21
+
22
+ case . higherThan:
23
+ return . lowerThan
24
+
25
+ case . lowerThan:
26
+ return . higherThan
27
+ }
28
+ }
15
29
}
16
30
17
31
/// A graph formed from a set of precedence groups, which can be used to
@@ -114,6 +128,18 @@ struct PrecedenceGraph {
114
128
initialGroupName: startGroupName, initialSyntax: startSyntax,
115
129
targetGroupName: endGroupName, direction: . higherThan,
116
130
errorHandler: errorHandler
117
- ) ?? . unrelated
131
+ ) ?? searchRelationships (
132
+ initialGroupName: startGroupName, initialSyntax: startSyntax,
133
+ targetGroupName: endGroupName, direction: . lowerThan,
134
+ errorHandler: errorHandler
135
+ ) . map {
136
+ $0. flipped
137
+ } ?? searchRelationships (
138
+ initialGroupName: endGroupName, initialSyntax: endSyntax,
139
+ targetGroupName: startGroupName, direction: . higherThan,
140
+ errorHandler: errorHandler
141
+ ) . map {
142
+ $0. flipped
143
+ } ?? . unrelated
118
144
}
119
145
}
You can’t perform that action at this time.
0 commit comments