Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(193)

Unified Diff: dart/lib/compiler/implementation/scanner/parser.dart

Issue 11033003: Unparse new library syntax. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: dart/lib/compiler/implementation/scanner/parser.dart
diff --git a/dart/lib/compiler/implementation/scanner/parser.dart b/dart/lib/compiler/implementation/scanner/parser.dart
index 4f4f5ddba2aba43b2f61400ae36a5585d69f63d0..48fc94ddc6634a2d756a6e30be6e1c36bcc018c2 100644
--- a/dart/lib/compiler/implementation/scanner/parser.dart
+++ b/dart/lib/compiler/implementation/scanner/parser.dart
@@ -31,10 +31,15 @@ class Parser {
Parser(this.listener);
- void parseUnit(Token token) {
+ Token parseUnit(Token token) {
+ listener.beginCompilationUnit(token);
+ int count = 0;
while (token.kind !== EOF_TOKEN) {
token = parseTopLevelDeclaration(token);
+ count++;
}
+ listener.endCompilationUnit(count, token);
+ return token;
}
Token parseTopLevelDeclaration(Token token) {
@@ -54,6 +59,8 @@ class Parser {
return parseImport(token);
} else if (value === 'export') {
return parseExport(token);
+ } else if (value === 'part') {
+ return parsePartOrPartOf(token);
} else {
return parseTopLevelMember(token);
}
@@ -64,10 +71,7 @@ class Parser {
Token libraryKeyword = token;
listener.beginLibraryName(libraryKeyword);
assert(optional('library', token));
- token = parseIdentifier(token.next);
- while (optional('.', token)) {
- token = parseQualifiedRest(token);
- }
+ token = parseQualified(token.next);
Token semicolon = token;
token = expect(';', token);
listener.endLibraryName(libraryKeyword, semicolon);
@@ -155,6 +159,38 @@ class Parser {
return token;
}
+ Token parsePartOrPartOf(Token token) {
+ assert(optional('part', token));
+ if (optional('of', token.next)) {
+ return parsePartOf(token);
+ } else {
+ return parsePart(token);
+ }
+ }
+
+ Token parsePart(Token token) {
+ Token partKeyword = token;
+ listener.beginPart(token);
+ assert(optional('part', token));
+ token = parseLiteralStringOrRecoverExpression(token.next);
+ Token semicolon = token;
+ token = expect(';', token);
+ listener.endPart(partKeyword, semicolon);
+ return token;
+ }
+
+ Token parsePartOf(Token token) {
+ listener.beginPartOf(token);
+ assert(optional('part', token));
+ assert(optional('of', token.next));
+ Token partKeyword = token;
+ token = parseQualified(token.next.next);
+ Token semicolon = token;
+ token = expect(';', token);
+ listener.endPartOf(partKeyword, semicolon);
+ return token;
+ }
+
Token parseMetadataStar(Token token) {
while (optional('@', token)) {
token = parseMetadata(token);
@@ -342,6 +378,14 @@ class Parser {
return token;
}
+ Token parseQualified(Token token) {
+ token = parseIdentifier(token);
+ while (optional('.', token)) {
+ token = parseQualifiedRest(token);
+ }
+ return token;
+ }
+
Token parseQualifiedRestOpt(Token token) {
if (optional('.', token)) {
return parseQualifiedRest(token);
« no previous file with comments | « dart/lib/compiler/implementation/scanner/listener.dart ('k') | dart/lib/compiler/implementation/scanner/scanner_task.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698