OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 package com.google.dart.compiler.parser; | 5 package com.google.dart.compiler.parser; |
6 | 6 |
7 import com.google.common.collect.Lists; | 7 import com.google.common.collect.Lists; |
8 import com.google.common.collect.Maps; | 8 import com.google.common.collect.Maps; |
9 import com.google.common.collect.Sets; | 9 import com.google.common.collect.Sets; |
10 import com.google.dart.compiler.DartCompilationError; | 10 import com.google.dart.compiler.DartCompilationError; |
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
183 | 183 |
184 protected Token peek(int n) { | 184 protected Token peek(int n) { |
185 return ctx.peek(n); | 185 return ctx.peek(n); |
186 } | 186 } |
187 | 187 |
188 protected boolean peekPseudoKeyword(int n, String keyword) { | 188 protected boolean peekPseudoKeyword(int n, String keyword) { |
189 return (peek(n) == Token.IDENTIFIER) | 189 return (peek(n) == Token.IDENTIFIER) |
190 && keyword.equals(getPeekTokenValue(n)); | 190 && keyword.equals(getPeekTokenValue(n)); |
191 } | 191 } |
192 | 192 |
193 protected DartScanner.Position position() { | 193 protected int position() { |
194 DartScanner.Location tokenLocation = ctx.getTokenLocation(); | 194 DartScanner.Location tokenLocation = ctx.getTokenLocation(); |
195 return tokenLocation != null ? tokenLocation.getBegin() | 195 return tokenLocation != null ? tokenLocation.getBegin() : 0; |
196 : new DartScanner.Position(0, 1, 1); | |
197 } | 196 } |
198 | 197 |
199 /** | 198 /** |
200 * Report a syntax error, unless an error has already been reported at the | 199 * Report a syntax error, unless an error has already been reported at the |
201 * given or a later position. | 200 * given or a later position. |
202 */ | 201 */ |
203 protected void reportError(DartScanner.Position position, | 202 protected void reportError(int position, |
204 ErrorCode errorCode, Object... arguments) { | 203 ErrorCode errorCode, Object... arguments) { |
205 DartScanner.Location location = ctx.getTokenLocation(); | 204 DartScanner.Location location = ctx.getTokenLocation(); |
206 if (location.getBegin().getPos() <= lastErrorPosition) { | 205 if (location.getBegin() <= lastErrorPosition) { |
207 return; | 206 return; |
208 } | 207 } |
209 DartCompilationError dartError = new DartCompilationError(ctx.getSource(), | 208 DartCompilationError dartError = new DartCompilationError(ctx.getSource(), |
210 location, errorCode, arguments); | 209 location, errorCode, arguments); |
211 lastErrorPosition = position.getPos(); | 210 lastErrorPosition = position; |
212 ctx.error(dartError); | 211 ctx.error(dartError); |
213 } | 212 } |
214 | 213 |
215 /** | 214 /** |
216 * Even though you pass a 'Position' to {@link #reportError} above, it only | 215 * Even though you pass a 'Position' to {@link #reportError} above, it only |
217 * uses that to prevent logging more than one error at that position. This | 216 * uses that to prevent logging more than one error at that position. This |
218 * method actually uses the passed position to create the error event. | 217 * method actually uses the passed position to create the error event. |
219 */ | 218 */ |
220 protected void reportErrorAtPosition(DartScanner.Position startPosition, | 219 protected void reportErrorAtPosition(int startPosition, |
221 DartScanner.Position endPosition, | 220 int endPosition, |
222 ErrorCode errorCode, Object... arguments)
{ | 221 ErrorCode errorCode, Object... arguments)
{ |
223 DartScanner.Location location = ctx.getTokenLocation(); | 222 DartScanner.Location location = ctx.getTokenLocation(); |
224 if (location.getBegin().getPos() <= lastErrorPosition) { | 223 if (location.getBegin() <= lastErrorPosition) { |
225 return; | 224 return; |
226 } | 225 } |
227 DartCompilationError dartError = new DartCompilationError(ctx.getSource(), | 226 DartCompilationError dartError = new DartCompilationError(ctx.getSource(), |
228 new Location(startPosition, endPosition), errorCode, arguments); | 227 new Location(startPosition, endPosition), errorCode, arguments); |
229 ctx.error(dartError); | 228 ctx.error(dartError); |
230 } | 229 } |
231 | 230 |
232 protected void reportUnexpectedToken(DartScanner.Position position, | 231 protected void reportUnexpectedToken(int position, |
233 Token expected, Token actual) { | 232 Token expected, Token actual) { |
234 if (expected == Token.EOS) { | 233 if (expected == Token.EOS) { |
235 reportError(position, ParserErrorCode.EXPECTED_EOS, actual); | 234 reportError(position, ParserErrorCode.EXPECTED_EOS, actual); |
236 } else if (expected == Token.IDENTIFIER) { | 235 } else if (expected == Token.IDENTIFIER) { |
237 reportError(position, ParserErrorCode.INVALID_IDENTIFIER, actual); | 236 reportError(position, ParserErrorCode.INVALID_IDENTIFIER, actual); |
238 } else if (expected == null) { | 237 } else if (expected == null) { |
239 reportError(position, ParserErrorCode.UNEXPECTED_TOKEN, actual); | 238 reportError(position, ParserErrorCode.UNEXPECTED_TOKEN, actual); |
240 } else { | 239 } else { |
241 reportError(position, ParserErrorCode.EXPECTED_TOKEN, actual, expected); | 240 reportError(position, ParserErrorCode.EXPECTED_TOKEN, actual, expected); |
242 } | 241 } |
243 } | 242 } |
244 | 243 |
245 protected void setPeek(int n, Token token) { | 244 protected void setPeek(int n, Token token) { |
246 assert n == 0; // so far, n is always zero | 245 assert n == 0; // so far, n is always zero |
247 ctx.replaceNextToken(token); | 246 ctx.replaceNextToken(token); |
248 } | 247 } |
249 | 248 |
250 protected boolean consume(Token token) { | 249 protected boolean consume(Token token) { |
251 boolean result = (peek(0) == token); | 250 boolean result = (peek(0) == token); |
252 assert (result); | 251 assert (result); |
253 next(); | 252 next(); |
254 return result; | 253 return result; |
255 } | 254 } |
256 } | 255 } |
OLD | NEW |