| 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 library fasta.parser.listener; | 5 library fasta.parser.listener; |
| 6 | 6 |
| 7 import '../../scanner/token.dart' show BeginToken, Token, TokenType; |
| 8 |
| 7 import '../fasta_codes.dart' show Message; | 9 import '../fasta_codes.dart' show Message; |
| 8 | 10 |
| 9 import '../../scanner/token.dart' show BeginToken, Token, TokenType; | |
| 10 | |
| 11 import '../util/link.dart' show Link; | 11 import '../util/link.dart' show Link; |
| 12 | 12 |
| 13 import 'parser.dart' show Assert, FormalParameterType, MemberKind; | 13 import 'assert.dart' show Assert; |
| 14 |
| 15 import 'formal_parameter_kind.dart' show FormalParameterKind; |
| 14 | 16 |
| 15 import 'identifier_context.dart' show IdentifierContext; | 17 import 'identifier_context.dart' show IdentifierContext; |
| 16 | 18 |
| 19 import 'member_kind.dart' show MemberKind; |
| 20 |
| 21 import 'parser_error.dart' show ParserError; |
| 22 |
| 17 /// A parser event listener that does nothing except throw exceptions | 23 /// A parser event listener that does nothing except throw exceptions |
| 18 /// on parser errors. | 24 /// on parser errors. |
| 19 /// | 25 /// |
| 20 /// Events are methods that begin with one of: `begin`, `end`, or `handle`. | 26 /// Events are methods that begin with one of: `begin`, `end`, or `handle`. |
| 21 /// | 27 /// |
| 22 /// Events starting with `begin` and `end` come in pairs. Normally, a | 28 /// Events starting with `begin` and `end` come in pairs. Normally, a |
| 23 /// `beginFoo` event is followed by an `endFoo` event. There's a few exceptions | 29 /// `beginFoo` event is followed by an `endFoo` event. There's a few exceptions |
| 24 /// documented below. | 30 /// documented below. |
| 25 /// | 31 /// |
| 26 /// Events starting with `handle` are used when isn't possible to have a begin | 32 /// Events starting with `handle` are used when isn't possible to have a begin |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 189 void beginFactoryMethod(Token token) {} | 195 void beginFactoryMethod(Token token) {} |
| 190 | 196 |
| 191 void endFactoryMethod( | 197 void endFactoryMethod( |
| 192 Token beginToken, Token factoryKeyword, Token endToken) { | 198 Token beginToken, Token factoryKeyword, Token endToken) { |
| 193 logEvent("FactoryMethod"); | 199 logEvent("FactoryMethod"); |
| 194 } | 200 } |
| 195 | 201 |
| 196 void beginFormalParameter(Token token, MemberKind kind) {} | 202 void beginFormalParameter(Token token, MemberKind kind) {} |
| 197 | 203 |
| 198 void endFormalParameter(Token thisKeyword, Token nameToken, | 204 void endFormalParameter(Token thisKeyword, Token nameToken, |
| 199 FormalParameterType kind, MemberKind memberKind) { | 205 FormalParameterKind kind, MemberKind memberKind) { |
| 200 logEvent("FormalParameter"); | 206 logEvent("FormalParameter"); |
| 201 } | 207 } |
| 202 | 208 |
| 203 void handleNoFormalParameters(Token token, MemberKind kind) { | 209 void handleNoFormalParameters(Token token, MemberKind kind) { |
| 204 logEvent("NoFormalParameters"); | 210 logEvent("NoFormalParameters"); |
| 205 } | 211 } |
| 206 | 212 |
| 207 void beginFormalParameters(Token token, MemberKind kind) {} | 213 void beginFormalParameters(Token token, MemberKind kind) {} |
| 208 | 214 |
| 209 void endFormalParameters( | 215 void endFormalParameters( |
| (...skipping 885 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 void discardTypeReplacedWithCommentTypeAssign() {} | 1101 void discardTypeReplacedWithCommentTypeAssign() {} |
| 1096 | 1102 |
| 1097 /// Creates a new synthetic token whose `next` pointer points to [next]. | 1103 /// Creates a new synthetic token whose `next` pointer points to [next]. |
| 1098 /// | 1104 /// |
| 1099 /// If [next] is `null`, `null` is returned. | 1105 /// If [next] is `null`, `null` is returned. |
| 1100 Token newSyntheticToken(Token next) { | 1106 Token newSyntheticToken(Token next) { |
| 1101 if (next == null) return null; | 1107 if (next == null) return null; |
| 1102 return new Token(TokenType.RECOVERY, next.charOffset)..next = next; | 1108 return new Token(TokenType.RECOVERY, next.charOffset)..next = next; |
| 1103 } | 1109 } |
| 1104 } | 1110 } |
| 1105 | |
| 1106 class ParserError { | |
| 1107 /// Character offset from the beginning of file where this error starts. | |
| 1108 final int beginOffset; | |
| 1109 | |
| 1110 /// Character offset from the beginning of file where this error ends. | |
| 1111 final int endOffset; | |
| 1112 | |
| 1113 final Message message; | |
| 1114 | |
| 1115 ParserError(this.beginOffset, this.endOffset, this.message); | |
| 1116 | |
| 1117 ParserError.fromTokens(Token begin, Token end, Message message) | |
| 1118 : this(begin.charOffset, end.charOffset + end.charCount, message); | |
| 1119 | |
| 1120 String toString() => "@${beginOffset}: ${message.message}\n${message.tip}"; | |
| 1121 } | |
| OLD | NEW |