@@ -114,6 +114,7 @@ protected override Token ParseNextToken() {
114114 token = preprocToken ;
115115 }
116116 } else {
117+ var firstTokenLocation = CurrentLocation ;
117118 switch ( preprocToken . Type ) {
118119 case TokenType . DM_Preproc_Whitespace : Advance ( ) ; token = CreateToken ( TokenType . DM_Whitespace , preprocToken . Text ) ; break ;
119120 case TokenType . DM_Preproc_Punctuator_LeftParenthesis : BracketNesting ++ ; Advance ( ) ; token = CreateToken ( TokenType . DM_LeftParenthesis , preprocToken . Text ) ; break ;
@@ -125,19 +126,19 @@ protected override Token ParseNextToken() {
125126 case TokenType . DM_Preproc_Punctuator_Question :
126127 switch ( Advance ( ) . Type ) {
127128 case TokenType . DM_Preproc_Punctuator_Period :
128- token = CreateToken ( TokenType . DM_QuestionPeriod , "?." ) ;
129129 Advance ( ) ;
130+ token = CreateToken ( TokenType . DM_QuestionPeriod , "?." , firstTokenLocation ) ;
130131 break ;
131132
132133 case TokenType . DM_Preproc_Punctuator_Colon :
133- token = CreateToken ( TokenType . DM_QuestionColon , "?:" ) ;
134134 Advance ( ) ;
135+ token = CreateToken ( TokenType . DM_QuestionColon , "?:" , firstTokenLocation ) ;
135136 break ;
136137
137138 case TokenType . DM_Preproc_Punctuator_LeftBracket :
138- token = CreateToken ( TokenType . DM_QuestionLeftBracket , "?[" ) ;
139- BracketNesting ++ ;
140139 Advance ( ) ;
140+ token = CreateToken ( TokenType . DM_QuestionLeftBracket , "?[" , firstTokenLocation ) ;
141+ BracketNesting ++ ;
141142 break ;
142143
143144 default :
@@ -149,11 +150,10 @@ protected override Token ParseNextToken() {
149150 switch ( Advance ( ) . Type ) {
150151 case TokenType . DM_Preproc_Punctuator_Period :
151152 if ( Advance ( ) . Type == TokenType . DM_Preproc_Punctuator_Period ) {
152- token = CreateToken ( TokenType . DM_IndeterminateArgs , "..." ) ;
153-
154153 Advance ( ) ;
154+ token = CreateToken ( TokenType . DM_IndeterminateArgs , "..." , firstTokenLocation ) ;
155155 } else {
156- token = CreateToken ( TokenType . DM_SuperProc , ".." ) ;
156+ token = CreateToken ( TokenType . DM_SuperProc , ".." , firstTokenLocation ) ;
157157 }
158158
159159 break ;
@@ -231,6 +231,7 @@ protected override Token ParseNextToken() {
231231 break ;
232232 }
233233 case TokenType . DM_Preproc_ConstantString : {
234+ Advance ( ) ;
234235 string tokenText = preprocToken . Text ;
235236 switch ( preprocToken . Text [ 0 ] ) {
236237 case '"' :
@@ -239,21 +240,19 @@ protected override Token ParseNextToken() {
239240 case '@' : token = CreateToken ( TokenType . DM_RawString , tokenText , preprocToken . Value ) ; break ;
240241 default : token = CreateToken ( TokenType . Error , tokenText , "Invalid string" ) ; break ;
241242 }
242-
243- Advance ( ) ;
244243 break ;
245244 }
246245 case TokenType . DM_Preproc_StringBegin :
247- token = CreateToken ( TokenType . DM_StringBegin , preprocToken . Text , preprocToken . Value ) ;
248246 Advance ( ) ;
247+ token = CreateToken ( TokenType . DM_StringBegin , preprocToken . Text , preprocToken . Value ) ;
249248 break ;
250249 case TokenType . DM_Preproc_StringMiddle :
251- token = CreateToken ( TokenType . DM_StringMiddle , preprocToken . Text , preprocToken . Value ) ;
252250 Advance ( ) ;
251+ token = CreateToken ( TokenType . DM_StringMiddle , preprocToken . Text , preprocToken . Value ) ;
253252 break ;
254253 case TokenType . DM_Preproc_StringEnd :
255- token = CreateToken ( TokenType . DM_StringEnd , preprocToken . Text , preprocToken . Value ) ;
256254 Advance ( ) ;
255+ token = CreateToken ( TokenType . DM_StringEnd , preprocToken . Text , preprocToken . Value ) ;
257256 break ;
258257 case TokenType . DM_Preproc_Identifier : {
259258 TokenTextBuilder . Clear ( ) ;
@@ -267,7 +266,7 @@ protected override Token ParseNextToken() {
267266 var identifierText = TokenTextBuilder . ToString ( ) ;
268267 var tokenType = Keywords . GetValueOrDefault ( identifierText , TokenType . DM_Identifier ) ;
269268
270- token = CreateToken ( tokenType , identifierText ) ;
269+ token = CreateToken ( tokenType , identifierText , firstTokenLocation ) ;
271270 break ;
272271 }
273272 case TokenType . DM_Preproc_Number : {
@@ -290,7 +289,7 @@ protected override Token ParseNextToken() {
290289
291290 break ;
292291 }
293- case TokenType . EndOfFile : token = preprocToken ; Advance ( ) ; break ;
292+ case TokenType . EndOfFile : Advance ( ) ; token = preprocToken ; break ;
294293 default : token = CreateToken ( TokenType . Error , preprocToken . Text , "Invalid token" ) ; break ;
295294 }
296295 }
0 commit comments