43 testChoiceInlining |
43 testChoiceInlining |
44 | tree | |
44 | tree | |
45 tree := self optimize: $a asParser / $b asParser. |
45 tree := self optimize: $a asParser / $b asParser. |
46 |
46 |
47 self assert: tree type: PPCChoiceNode. |
47 self assert: tree type: PPCChoiceNode. |
48 self assert: tree children first type: PPCInlineCharacterNode. |
48 self assert: tree children first type: PPCCharacterNode. |
49 self assert: tree children second type: PPCInlineCharacterNode. |
49 self assert: tree children first isMarkedForInline. |
|
50 self assert: tree children second type: PPCCharacterNode. |
|
51 self assert: tree children first isMarkedForInline. |
|
52 |
50 ! |
53 ! |
51 |
54 |
52 testForwarding |
55 testForwarding |
53 | tree p1 p2 | |
56 | tree p1 p2 | |
54 p2 := $a asParser. |
57 p2 := $a asParser. |
55 p1 := p2 wrapped. |
58 p1 := p2 wrapped. |
56 p1 name: 'p1'. |
59 p1 name: 'p1'. |
57 tree := self optimize: p1. |
60 tree := self optimize: p1. |
58 |
61 |
59 self assert: tree type: PPCCharacterNode. |
62 self assert: tree type: PPCAbstractCharacterNode. |
60 self assert: tree name = 'p1'. |
63 self assert: tree name = 'p1'. |
61 |
64 |
62 p2 name: 'p2'. |
65 p2 name: 'p2'. |
63 tree := self optimize: p1. |
66 tree := self optimize: p1. |
64 self assert: tree type: PPCForwardNode. |
67 self assert: tree type: PPCForwardNode. |
69 testInlineCharacter |
72 testInlineCharacter |
70 | tree | |
73 | tree | |
71 tree := self optimize: $a asParser plus. |
74 tree := self optimize: $a asParser plus. |
72 |
75 |
73 self assert: tree type: PPCPlusNode. |
76 self assert: tree type: PPCPlusNode. |
74 self assert: tree child type: PPCInlineCharacterNode. |
77 self assert: tree child type: PPCCharacterNode. |
|
78 self assert: tree child isMarkedForInline. |
75 self assert: tree child character = $a. |
79 self assert: tree child character = $a. |
76 ! |
80 ! |
77 |
81 |
78 testInlineCharacter2 |
82 testInlineCharacter2 |
79 | tree | |
83 | tree | |
80 tree := self optimize: $a asParser star. |
84 tree := self optimize: $a asParser star. |
81 |
85 |
82 self assert: tree type: PPCStarNode. |
86 self assert: tree type: PPCStarNode. |
83 self assert: tree child type: PPCInlineCharacterNode. |
87 self assert: tree child type: PPCCharacterNode. |
|
88 self assert: tree child isMarkedForInline. |
84 self assert: tree child character = $a. |
89 self assert: tree child character = $a. |
85 ! |
90 ! |
86 |
91 |
87 testInlineCharacter3 |
92 testInlineCharacter3 |
88 | tree | |
93 | tree | |
89 tree := self optimize: $a asParser, $b asParser. |
94 tree := self optimize: $a asParser, $b asParser. |
90 |
95 |
91 self assert: tree type: PPCSequenceNode. |
96 self assert: tree type: PPCSequenceNode. |
92 self assert: tree children first type: PPCInlineCharacterNode. |
97 self assert: tree children first type: PPCCharacterNode. |
|
98 self assert: tree children first isMarkedForInline. |
93 self assert: tree children first character = $a. |
99 self assert: tree children first character = $a. |
94 self assert: tree children second type: PPCInlineCharacterNode. |
100 self assert: tree children second type: PPCCharacterNode. |
|
101 self assert: tree children second isMarkedForInline. |
95 self assert: tree children second character = $b. |
102 self assert: tree children second character = $b. |
96 ! |
103 ! |
97 |
104 |
98 testInlineNil |
105 testInlineNil |
99 | tree | |
106 | tree | |
100 tree := self optimize: nil asParser star. |
107 tree := self optimize: nil asParser star. |
101 |
108 |
102 self assert: tree type: PPCStarNode. |
109 self assert: tree type: PPCStarNode. |
103 self assert: tree child type: PPCInlineNilNode. |
110 self assert: tree child type: PPCNilNode. |
|
111 self assert: tree child isMarkedForInline. |
104 ! |
112 ! |
105 |
113 |
106 testInlineNotLiteral |
114 testInlineNotLiteral |
107 | tree | |
115 | tree | |
108 tree := self optimize: 'foo' asParser not star. |
116 tree := self optimize: 'foo' asParser not star. |
109 |
117 |
110 self assert: tree type: PPCStarNode. |
118 self assert: tree type: PPCStarNode. |
111 self assert: tree child type: PPCInlineNotLiteralNode. |
119 self assert: tree child type: PPCNotLiteralNode. |
112 self assert: tree child literal = 'foo'. |
120 self assert: tree child literal = 'foo'. |
|
121 self assert: tree child isMarkedForInline. |
113 ! |
122 ! |
114 |
123 |
115 testInlineNotPredicate |
124 testInlineNotPredicate |
116 | tree | |
125 | tree | |
117 tree := self optimize: (#letter asParser not, (PPPredicateObjectParser on: [ :e | e = $a or: [ e = $b ]] message: #foo) not). |
126 tree := self optimize: (#letter asParser not, (PPPredicateObjectParser on: [ :e | e = $a or: [ e = $b ]] message: #foo) not). |
118 |
127 |
119 self assert: tree type: PPCSequenceNode. |
128 self assert: tree type: PPCSequenceNode. |
120 self assert: tree children first type: PPCInlineNotMessagePredicateNode. |
129 self assert: tree children first type: PPCNotMessagePredicateNode. |
121 self assert: tree children second type: PPCInlineNotCharSetPredicateNode. |
130 self assert: tree children first isMarkedForInline. |
|
131 self assert: tree children second type: PPCNotCharSetPredicateNode. |
|
132 self assert: tree children second isMarkedForInline. |
|
133 |
122 ! |
134 ! |
123 |
135 |
124 testInlinePluggable |
136 testInlinePluggable |
125 | tree | |
137 | tree | |
126 tree := self optimize: [:ctx | nil] asParser star. |
138 tree := self optimize: [:ctx | nil] asParser star. |
127 |
139 |
128 self assert: tree type: PPCStarNode. |
140 ((Smalltalk respondsTo:#isSmalltalkX) and:[ Smalltalk isSmalltalkX ]) |
129 self assert: tree child type: PPCInlinePluggableNode. |
141 ifTrue:[ self skip: 'not supported in St/X' ]. |
|
142 |
|
143 self assert: tree type: PPCStarNode. |
|
144 self assert: tree child type: PPCPluggableNode. |
|
145 self assert: tree child isMarkedForInline. |
|
146 |
|
147 "Modified: / 23-04-2015 / 12:19:42 / Jan Vrany <jan.vrany@fit.cvut.cz>" |
130 ! |
148 ! |
131 |
149 |
132 testInlinePredicate |
150 testInlinePredicate |
133 | tree | |
151 | tree | |
134 tree := self optimize: (#letter asParser, (PPPredicateObjectParser on: [ :e | e = $a or: [ e = $b ]] message: #foo)). |
152 tree := self optimize: (#letter asParser, (PPPredicateObjectParser on: [ :e | e = $a or: [ e = $b ]] message: #foo)). |
135 |
153 |
136 self assert: tree type: PPCSequenceNode. |
154 self assert: tree type: PPCSequenceNode. |
137 self assert: tree children first type: PPCInlineMessagePredicateNode. |
155 self assert: tree children first type: PPCMessagePredicateNode. |
138 self assert: tree children second type: PPCInlineCharSetPredicateNode. |
156 self assert: tree children first isMarkedForInline. |
|
157 self assert: tree children second type: PPCCharSetPredicateNode. |
|
158 self assert: tree children second isMarkedForInline. |
|
159 |
139 ! |
160 ! |
140 |
161 |
141 testLetterPredicate |
162 testLetterPredicate |
142 | tree | |
163 | tree | |
143 tree := self optimize: #letter asParser. |
164 tree := self optimize: #letter asParser. |
237 tree := self optimize: ((#letter asParser, #word asParser star) token). |
259 tree := self optimize: ((#letter asParser, #word asParser star) token). |
238 |
260 |
239 self assert: tree type: PPCTokenNode. |
261 self assert: tree type: PPCTokenNode. |
240 self assert: tree child type: PPCTokenSequenceNode. |
262 self assert: tree child type: PPCTokenSequenceNode. |
241 self assert: tree child children size = 2. |
263 self assert: tree child children size = 2. |
242 self assert: tree child children first type: PPCInlineMessagePredicateNode. |
264 self assert: tree child children first type: PPCMessagePredicateNode. |
243 self assert: tree child children second type: PPCInlineTokenStarMessagePredicateNode. |
265 self assert: tree child children first isMarkedForInline. |
244 ! |
266 self assert: tree child children second type: PPCTokenStarMessagePredicateNode. |
245 |
267 self assert: tree child children second isMarkedForInline. |
246 testTokenSequence |
268 |
|
269 ! |
|
270 |
|
271 testTokenSequence2 |
247 | tree | |
272 | tree | |
248 tree := self optimize: ($a asParser, $b asParser) token. |
273 tree := self optimize: ($a asParser, $b asParser) token. |
249 |
274 |
250 self assert: tree type: PPCTokenNode. |
275 self assert: tree type: PPCTokenNode. |
251 self assert: tree child type: PPCTokenSequenceNode. |
276 self assert: tree child type: PPCTokenSequenceNode. |
259 testTrimmingToken |
284 testTrimmingToken |
260 | tree | |
285 | tree | |
261 tree := self optimize: ((#letter asParser, #word asParser star) trimmingToken). |
286 tree := self optimize: ((#letter asParser, #word asParser star) trimmingToken). |
262 |
287 |
263 self assert: tree type: PPCTrimmingTokenNode. |
288 self assert: tree type: PPCTrimmingTokenNode. |
264 self assert: tree whitespace type: PPCInlineTokenStarSeparatorNode. |
289 self assert: tree whitespace type: PPCTokenStarSeparatorNode. |
|
290 self assert: tree whitespace isMarkedForInline. |
|
291 |
265 self assert: tree child type: PPCTokenSequenceNode. |
292 self assert: tree child type: PPCTokenSequenceNode. |
266 self assert: tree child children size = 2. |
293 self assert: tree child children size = 2. |
267 self assert: tree child children first type: PPCInlineMessagePredicateNode. |
294 self assert: tree child children first type: PPCMessagePredicateNode. |
268 self assert: tree child children second type: PPCInlineTokenStarMessagePredicateNode. |
295 self assert: tree child children first isMarkedForInline. |
|
296 self assert: tree child children second type: PPCTokenStarMessagePredicateNode. |
|
297 self assert: tree child children first isMarkedForInline. |
269 ! |
298 ! |
270 |
299 |
271 testTrimmingToken2 |
300 testTrimmingToken2 |
272 | parser tree | |
301 | parser tree | |
273 parser := 'foo' asParser trimmingToken. |
302 parser := 'foo' asParser trimmingToken. |
274 tree := parser asCompilerTree optimizeTree. |
303 tree := parser asCompilerTree optimizeTree. |
275 |
304 |
276 self assert: tree type: PPCTrimmingTokenNode. |
305 self assert: tree type: PPCTrimmingTokenNode. |
277 self assert: tree child type: PPCInlineLiteralNode. |
306 self assert: tree child type: PPCLiteralNode. |
|
307 self assert: tree child isMarkedForInline. |
278 self assert: (tree whitespace allNodes allSatisfy: [ :n | n isKindOf: PPCNode ]). |
308 self assert: (tree whitespace allNodes allSatisfy: [ :n | n isKindOf: PPCNode ]). |
279 |
309 |
280 parser := ('foo' asParser, $b asParser) trimmingToken. |
310 parser := ('foo' asParser, $b asParser) trimmingToken. |
281 tree := parser asCompilerTree optimizeTree. |
311 tree := parser asCompilerTree optimizeTree. |
282 |
312 |
283 self assert: tree type: PPCTrimmingTokenNode. |
313 self assert: tree type: PPCTrimmingTokenNode. |
284 self assert: tree child type: PPCTokenSequenceNode. |
314 self assert: tree child type: PPCTokenSequenceNode. |
285 self assert: tree whitespace type: PPCInlineTokenStarSeparatorNode. |
315 self assert: tree whitespace type: PPCTokenStarSeparatorNode. |
|
316 self assert: tree whitespace isMarkedForInline. |
286 |
317 |
287 parser := $d asParser trimmingToken star. |
318 parser := $d asParser trimmingToken star. |
288 tree := parser asCompilerTree optimizeTree. |
319 tree := parser asCompilerTree optimizeTree. |
289 |
320 |
290 self assert: tree type: PPCStarNode. |
321 self assert: tree type: PPCStarNode. |
291 self assert: tree child type: PPCTrimmingTokenNode. |
322 self assert: tree child type: PPCTrimmingTokenNode. |
292 self assert: tree child child type: PPCInlineCharacterNode. |
323 self assert: tree child child type: PPCCharacterNode. |
|
324 self assert: tree child child isMarkedForInline. |
293 ! |
325 ! |
294 |
326 |
295 testTrimmingToken3 |
327 testTrimmingToken3 |
296 | parser tree | |
328 | parser tree | |
297 parser := ('foo' asParser trimmingToken name: 'foo'), ('bar' asParser trimmingToken name: 'bar'). |
329 parser := ('foo' asParser trimmingToken name: 'foo'), ('bar' asParser trimmingToken name: 'bar'). |