9219 "Created: / 19-08-2018 / 11:13:42 / Claus Gittinger" |
9219 "Created: / 19-08-2018 / 11:13:42 / Claus Gittinger" |
9220 "Modified (comment): / 21-06-2019 / 09:50:18 / Claus Gittinger" |
9220 "Modified (comment): / 21-06-2019 / 09:50:18 / Claus Gittinger" |
9221 ! |
9221 ! |
9222 |
9222 |
9223 stringWithEmbeddedExpressions |
9223 stringWithEmbeddedExpressions |
9224 |expressions collectedString pos1 pos2 receiver node lNr| |
9224 |expressions collectedString pos1 pos2 fragPos receiver node lNr| |
9225 |
9225 |
9226 pos1 := tokenPosition. |
9226 pos1 := fragPos := tokenPosition. |
9227 lNr := tokenLineNr. |
9227 lNr := tokenLineNr. |
9228 expressions := OrderedCollection new. |
9228 expressions := OrderedCollection new. |
9229 collectedString := ''. |
9229 collectedString := ''. |
9230 [tokenType == #StringFragment] whileTrue:[ |
9230 [tokenType == #StringFragment] whileTrue:[ |
9231 |expr| |
9231 |expr| |
9232 |
9232 |
|
9233 self markStringFrom:fragPos to:source position-1. |
|
9234 parenthesisLevel := parenthesisLevel + 1. |
|
9235 self markParenthesisAt:source position. |
|
9236 |
9233 collectedString := collectedString,tokenValue. |
9237 collectedString := collectedString,tokenValue. |
9234 self nextToken. |
9238 self nextToken. |
9235 expr := self expression. |
9239 expr := self expression. |
|
9240 expr == #Error ifTrue:[ |
|
9241 self parseError:'error in embedded expression'. |
|
9242 ]. |
9236 "/ there must be a closing brace |
9243 "/ there must be a closing brace |
9237 tokenType == $} ifFalse:[ |
9244 tokenType == $} ifFalse:[ |
9238 self parseError:'"}" expected after embedded expression'. |
9245 self parseError:'"}" expected after embedded expression'. |
9239 ]. |
9246 ]. |
|
9247 self markParenthesisAt:tokenPosition. |
|
9248 parenthesisLevel := parenthesisLevel - 1. |
|
9249 |
9240 expressions add:expr. |
9250 expressions add:expr. |
9241 collectedString := collectedString,'%(',expressions size asString,')'. |
9251 collectedString := collectedString,'%(',expressions size asString,')'. |
|
9252 fragPos := source position+1. |
9242 self continueEscapedString. |
9253 self continueEscapedString. |
9243 ]. |
9254 ]. |
9244 pos2 := tokenPosition. |
9255 pos2 := tokenPosition. |
9245 |
9256 |
9246 tokenType == #String ifFalse:[ |
9257 tokenType == #String ifFalse:[ |
9247 self parseError:'unterminated embedded expression string'. |
9258 self parseError:'unterminated embedded expression string'. |
9248 ]. |
9259 ]. |
|
9260 self markStringFrom:fragPos to:source position-1. |
|
9261 |
9249 collectedString := collectedString,tokenValue. |
9262 collectedString := collectedString,tokenValue. |
9250 self nextToken. |
9263 self nextToken. |
9251 |
9264 |
9252 "/ now make this a message send. |
9265 "/ now make this a message send. |
9253 |
9266 |