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 part of scanner; | |
6 | |
7 class ScannerTask extends CompilerTask { | |
8 ScannerTask(Compiler compiler) : super(compiler); | |
9 String get name => 'Scanner'; | |
10 | |
11 void scanLibrary(LibraryElement library) { | |
12 CompilationUnitElement compilationUnit = library.entryCompilationUnit; | |
13 String canonicalUri = library.canonicalUri.toString(); | |
14 String resolvedUri = compilationUnit.script.readableUri.toString(); | |
15 if (canonicalUri == resolvedUri) { | |
16 compiler.log("Scanning library $canonicalUri"); | |
17 } else { | |
18 compiler.log("Scanning library $canonicalUri ($resolvedUri)"); | |
19 } | |
20 scan(compilationUnit); | |
21 } | |
22 | |
23 void scan(CompilationUnitElement compilationUnit) { | |
24 measure(() { | |
25 scanElements(compilationUnit); | |
26 }); | |
27 } | |
28 | |
29 void scanElements(CompilationUnitElement compilationUnit) { | |
30 Script script = compilationUnit.script; | |
31 Token tokens = new Scanner(script.file, | |
32 includeComments: compiler.preserveComments).tokenize(); | |
33 if (compiler.preserveComments) { | |
34 tokens = compiler.processAndStripComments(tokens); | |
35 } | |
36 compiler.dietParser.dietParse(compilationUnit, tokens); | |
37 } | |
38 | |
39 /** | |
40 * Returns the tokens for the [source]. | |
41 * | |
42 * The [StringScanner] implementation works on strings that end with a '0' | |
43 * value ('\x00'). If [source] does not end with '0', the string is copied | |
44 * before scanning. | |
45 */ | |
46 Token tokenize(String source) { | |
47 return measure(() { | |
48 return new StringScanner.fromString(source, includeComments: false) | |
49 .tokenize(); | |
50 }); | |
51 } | |
52 } | |
53 | |
54 class DietParserTask extends CompilerTask { | |
55 DietParserTask(Compiler compiler) : super(compiler); | |
56 final String name = 'Diet Parser'; | |
57 | |
58 dietParse(CompilationUnitElement compilationUnit, Token tokens) { | |
59 measure(() { | |
60 Function idGenerator = compiler.getNextFreeClassId; | |
61 ElementListener listener = | |
62 new ElementListener(compiler, compilationUnit, idGenerator); | |
63 PartialParser parser = new PartialParser(listener); | |
64 parser.parseUnit(tokens); | |
65 }); | |
66 } | |
67 } | |
OLD | NEW |