| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 #library('parser_helper'); | |
| 6 | |
| 7 #import("dart:uri"); | |
| 8 | |
| 9 #import("../../../lib/compiler/implementation/elements/elements.dart"); | |
| 10 #import("../../../lib/compiler/implementation/tree/tree.dart"); | |
| 11 #import('../../../lib/compiler/implementation/scanner/scannerlib.dart'); | |
| 12 #import("../../../lib/compiler/implementation/leg.dart"); | |
| 13 #import("../../../lib/compiler/implementation/util/util.dart"); | |
| 14 | |
| 15 class LoggerCanceler implements DiagnosticListener { | |
| 16 void cancel([String reason, node, token, instruction, element]) { | |
| 17 throw new CompilerCancelledException(reason); | |
| 18 } | |
| 19 | |
| 20 void log(message) { | |
| 21 print(message); | |
| 22 } | |
| 23 } | |
| 24 | |
| 25 Token scan(String text) => new StringScanner(text).tokenize(); | |
| 26 | |
| 27 Node parseBodyCode(String text, Function parseMethod) { | |
| 28 Token tokens = scan(text); | |
| 29 LoggerCanceler lc = new LoggerCanceler(); | |
| 30 NodeListener listener = new NodeListener(lc, null); | |
| 31 Parser parser = new Parser(listener); | |
| 32 Token endToken = parseMethod(parser, tokens); | |
| 33 assert(endToken.kind == EOF_TOKEN); | |
| 34 Node node = listener.popNode(); | |
| 35 Expect.isNotNull(node); | |
| 36 Expect.isTrue(listener.nodes.isEmpty(), 'Not empty: ${listener.nodes}'); | |
| 37 return node; | |
| 38 } | |
| 39 | |
| 40 Node parseStatement(String text) => | |
| 41 parseBodyCode(text, (parser, tokens) => parser.parseStatement(tokens)); | |
| 42 | |
| 43 Node parseFunction(String text, Compiler compiler) { | |
| 44 Element element = parseUnit(text, compiler, compiler.mainApp).head; | |
| 45 Expect.isNotNull(element); | |
| 46 Expect.equals(ElementKind.FUNCTION, element.kind); | |
| 47 return element.parseNode(compiler); | |
| 48 } | |
| 49 | |
| 50 class MockFile { | |
| 51 final filename = '<string>'; | |
| 52 final text; | |
| 53 MockFile(this.text); | |
| 54 } | |
| 55 | |
| 56 Link<Element> parseUnit(String text, Compiler compiler, | |
| 57 LibraryElement library) { | |
| 58 Token tokens = scan(text); | |
| 59 Uri uri = new Uri(scheme: "source"); | |
| 60 var script = new Script(uri, new MockFile(text)); | |
| 61 var unit = new CompilationUnitElement(script, library); | |
| 62 int id = 0; | |
| 63 ElementListener listener = new ElementListener(compiler, unit, () => id++); | |
| 64 PartialParser parser = new PartialParser(listener); | |
| 65 compiler.withCurrentElement(unit, () => parser.parseUnit(tokens)); | |
| 66 return unit.topLevelElements; | |
| 67 } | |
| 68 | |
| 69 // TODO(ahe): We define this method to avoid having to import | |
| 70 // the scanner in the tests. We should move SourceString to another | |
| 71 // location instead. | |
| 72 SourceString buildSourceString(String name) { | |
| 73 return new SourceString(name); | |
| 74 } | |
| OLD | NEW |