| OLD | NEW |
| 1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, 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 dart2js.parser.partial_elements; | 5 library dart2js.parser.partial_elements; |
| 6 | 6 |
| 7 import '../common/resolution.dart' show | 7 import '../common/resolution.dart' show |
| 8 Parsing, | 8 Parsing, |
| 9 Resolution; | 9 Resolution; |
| 10 import '../compiler.dart' show | |
| 11 Compiler; | |
| 12 import '../dart_types.dart' show DynamicType; | 10 import '../dart_types.dart' show DynamicType; |
| 13 import '../diagnostics/diagnostic_listener.dart'; | 11 import '../diagnostics/diagnostic_listener.dart' show |
| 12 DiagnosticReporter; |
| 14 import '../diagnostics/invariant.dart' show | 13 import '../diagnostics/invariant.dart' show |
| 15 invariant; | 14 invariant; |
| 16 import '../diagnostics/messages.dart'; | 15 import '../diagnostics/messages.dart'; |
| 17 import '../elements/elements.dart' show | 16 import '../elements/elements.dart' show |
| 18 CompilationUnitElement, | 17 CompilationUnitElement, |
| 19 ConstructorElement, | 18 ConstructorElement, |
| 20 Element, | 19 Element, |
| 21 ElementKind, | 20 ElementKind, |
| 22 GetterElement, | 21 GetterElement, |
| 23 LibraryElement, | 22 LibraryElement, |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 266 Modifiers modifiers, | 265 Modifiers modifiers, |
| 267 bool hasParseError) | 266 bool hasParseError) |
| 268 : super(modifiers) { | 267 : super(modifiers) { |
| 269 super.beginToken = beginToken; | 268 super.beginToken = beginToken; |
| 270 super.endToken = endToken; | 269 super.endToken = endToken; |
| 271 super.hasParseError = hasParseError; | 270 super.hasParseError = hasParseError; |
| 272 } | 271 } |
| 273 | 272 |
| 274 VariableDefinitions parseNode(Element element, Parsing parsing) { | 273 VariableDefinitions parseNode(Element element, Parsing parsing) { |
| 275 if (definitions != null) return definitions; | 274 if (definitions != null) return definitions; |
| 276 DiagnosticListener listener = parsing.listener; | 275 DiagnosticReporter reporter = parsing.reporter; |
| 277 listener.withCurrentElement(element, () { | 276 reporter.withCurrentElement(element, () { |
| 278 definitions = parse( | 277 definitions = parse( |
| 279 parsing, element, declarationSite, | 278 parsing, element, declarationSite, |
| 280 (Parser parser) => parser.parseMember(beginToken)); | 279 (Parser parser) => parser.parseMember(beginToken)); |
| 281 | 280 |
| 282 if (!hasParseError && | 281 if (!hasParseError && |
| 283 !definitions.modifiers.isVar && | 282 !definitions.modifiers.isVar && |
| 284 !definitions.modifiers.isFinal && | 283 !definitions.modifiers.isFinal && |
| 285 !definitions.modifiers.isConst && | 284 !definitions.modifiers.isConst && |
| 286 definitions.type == null && | 285 definitions.type == null && |
| 287 !definitions.isErroneous) { | 286 !definitions.isErroneous) { |
| 288 listener.reportErrorMessage( | 287 reporter.reportErrorMessage( |
| 289 definitions, | 288 definitions, |
| 290 MessageKind.GENERIC, | 289 MessageKind.GENERIC, |
| 291 { 'text': 'A field declaration must start with var, final, ' | 290 { 'text': 'A field declaration must start with var, final, ' |
| 292 'const, or a type annotation.' }); | 291 'const, or a type annotation.' }); |
| 293 } | 292 } |
| 294 }); | 293 }); |
| 295 return definitions; | 294 return definitions; |
| 296 } | 295 } |
| 297 | 296 |
| 298 computeType(Element element, Resolution resolution) { | 297 computeType(Element element, Resolution resolution) { |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 bool get hasNode => cachedNode != null; | 415 bool get hasNode => cachedNode != null; |
| 417 | 416 |
| 418 ClassNode get node { | 417 ClassNode get node { |
| 419 assert(invariant(this, cachedNode != null, | 418 assert(invariant(this, cachedNode != null, |
| 420 message: "Node has not been computed for $this.")); | 419 message: "Node has not been computed for $this.")); |
| 421 return cachedNode; | 420 return cachedNode; |
| 422 } | 421 } |
| 423 | 422 |
| 424 ClassNode parseNode(Parsing parsing) { | 423 ClassNode parseNode(Parsing parsing) { |
| 425 if (cachedNode != null) return cachedNode; | 424 if (cachedNode != null) return cachedNode; |
| 426 DiagnosticListener diagnosticListener = parsing.listener; | 425 DiagnosticReporter reporter = parsing.reporter; |
| 427 diagnosticListener.withCurrentElement(this, () { | 426 reporter.withCurrentElement(this, () { |
| 428 parsing.measure(() { | 427 parsing.measure(() { |
| 429 MemberListener listener = new MemberListener(diagnosticListener, this); | 428 MemberListener listener = new MemberListener(reporter, this); |
| 430 Parser parser = new ClassElementParser(listener); | 429 Parser parser = new ClassElementParser(listener); |
| 431 try { | 430 try { |
| 432 Token token = parser.parseTopLevelDeclaration(beginToken); | 431 Token token = parser.parseTopLevelDeclaration(beginToken); |
| 433 assert(identical(token, endToken.next)); | 432 assert(identical(token, endToken.next)); |
| 434 cachedNode = listener.popNode(); | 433 cachedNode = listener.popNode(); |
| 435 assert( | 434 assert( |
| 436 invariant( | 435 invariant( |
| 437 beginToken, listener.nodes.isEmpty, | 436 beginToken, listener.nodes.isEmpty, |
| 438 message: "Non-empty listener stack: ${listener.nodes}")); | 437 message: "Non-empty listener stack: ${listener.nodes}")); |
| 439 } on ParserError { | 438 } on ParserError { |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 473 PartialClassElement copyWithEnclosing(CompilationUnitElement enclosing) { | 472 PartialClassElement copyWithEnclosing(CompilationUnitElement enclosing) { |
| 474 return new PartialClassElement(name, beginToken, endToken, enclosing, id); | 473 return new PartialClassElement(name, beginToken, endToken, enclosing, id); |
| 475 } | 474 } |
| 476 } | 475 } |
| 477 | 476 |
| 478 Node parse( | 477 Node parse( |
| 479 Parsing parsing, | 478 Parsing parsing, |
| 480 ElementX element, | 479 ElementX element, |
| 481 PartialElement partial, | 480 PartialElement partial, |
| 482 doParse(Parser parser)) { | 481 doParse(Parser parser)) { |
| 483 DiagnosticListener diagnosticListener = parsing.listener; | 482 DiagnosticReporter reporter = parsing.reporter; |
| 484 return parsing.measure(() { | 483 return parsing.measure(() { |
| 485 return diagnosticListener.withCurrentElement(element, () { | 484 return reporter.withCurrentElement(element, () { |
| 486 CompilationUnitElement unit = element.compilationUnit; | 485 CompilationUnitElement unit = element.compilationUnit; |
| 487 NodeListener listener = new NodeListener(diagnosticListener, unit); | 486 NodeListener listener = new NodeListener(reporter, unit); |
| 488 listener.memberErrors = listener.memberErrors.prepend(false); | 487 listener.memberErrors = listener.memberErrors.prepend(false); |
| 489 try { | 488 try { |
| 490 if (partial.hasParseError) { | 489 if (partial.hasParseError) { |
| 491 listener.suppressParseErrors = true; | 490 listener.suppressParseErrors = true; |
| 492 } | 491 } |
| 493 doParse(new Parser(listener)); | 492 doParse(new Parser(listener)); |
| 494 } on ParserError catch (e) { | 493 } on ParserError catch (e) { |
| 495 partial.hasParseError = true; | 494 partial.hasParseError = true; |
| 496 return new ErrorNode(element.position, e.reason); | 495 return new ErrorNode(element.position, e.reason); |
| 497 } | 496 } |
| 498 Node node = listener.popNode(); | 497 Node node = listener.popNode(); |
| 499 assert(listener.nodes.isEmpty); | 498 assert(listener.nodes.isEmpty); |
| 500 return node; | 499 return node; |
| 501 }); | 500 }); |
| 502 }); | 501 }); |
| 503 } | 502 } |
| OLD | NEW |