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

Unified Diff: runtime/vm/parser.cc

Issue 11047027: Implement export clause in VM (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 8 years, 2 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: runtime/vm/parser.cc
===================================================================
--- runtime/vm/parser.cc (revision 13255)
+++ runtime/vm/parser.cc (working copy)
@@ -4196,87 +4196,87 @@
void Parser::ParseLibraryImportExport() {
- if (IsLiteral("import")) {
- const intptr_t import_pos = TokenPos();
+ bool is_import = IsLiteral("import");
+ bool is_export = IsLiteral("export");
+ ASSERT(is_import || is_export);
+ const intptr_t import_pos = TokenPos();
+ ConsumeToken();
+ if (CurrentToken() != Token::kSTRING) {
+ ErrorMsg("library url expected");
+ }
+ const String& url = *CurrentLiteral();
+ if (url.Length() == 0) {
+ ErrorMsg("library url expected");
+ }
+ ConsumeToken();
+ String& prefix = String::Handle();
+ if (is_import && IsLiteral("as")) {
ConsumeToken();
- if (CurrentToken() != Token::kSTRING) {
- ErrorMsg("library url expected");
+ prefix = ExpectIdentifier("prefix expected")->raw();
+ }
+
+ Array& show_names = Array::Handle();
+ Array& hide_names = Array::Handle();
+ if (IsLiteral("show") || IsLiteral("hide")) {
+ GrowableObjectArray& show_list =
+ GrowableObjectArray::Handle(GrowableObjectArray::New());
+ GrowableObjectArray& hide_list =
+ GrowableObjectArray::Handle(GrowableObjectArray::New());
+ for (;;) {
+ if (IsLiteral("show")) {
+ ConsumeToken();
+ ParseIdentList(&show_list);
+ } else if (IsLiteral("hide")) {
+ ConsumeToken();
+ ParseIdentList(&hide_list);
+ } else {
+ break;
+ }
}
- const String& url = *CurrentLiteral();
- if (url.Length() == 0) {
- ErrorMsg("library url expected");
+ if (show_list.Length() > 0) {
+ show_names = Array::MakeArray(show_list);
}
- ConsumeToken();
- String& prefix = String::Handle();
- if (IsLiteral("as")) {
- ConsumeToken();
- prefix = ExpectIdentifier("prefix expected")->raw();
+ if (hide_list.Length() > 0) {
+ hide_names = Array::MakeArray(hide_list);
}
+ }
+ ExpectSemicolon();
- Array& show_names = Array::Handle();
- Array& hide_names = Array::Handle();
- if (IsLiteral("show") || IsLiteral("hide")) {
- GrowableObjectArray& show_list =
- GrowableObjectArray::Handle(GrowableObjectArray::New());
- GrowableObjectArray& hide_list =
- GrowableObjectArray::Handle(GrowableObjectArray::New());
- for (;;) {
- if (IsLiteral("show")) {
- ConsumeToken();
- ParseIdentList(&show_list);
- } else if (IsLiteral("hide")) {
- ConsumeToken();
- ParseIdentList(&hide_list);
- } else {
- break;
- }
- }
- if (show_list.Length() > 0) {
- show_names = Array::MakeArray(show_list);
- }
- if (hide_list.Length() > 0) {
- hide_names = Array::MakeArray(hide_list);
- }
- }
- ExpectSemicolon();
-
- // Canonicalize library URL.
- Dart_Handle handle =
- CallLibraryTagHandler(kCanonicalizeUrl, import_pos, url);
- const String& canon_url = String::CheckedHandle(Api::UnwrapHandle(handle));
- // Lookup the library URL.
- Library& library = Library::Handle(Library::LookupLibrary(canon_url));
+ // Canonicalize library URL.
+ Dart_Handle handle =
+ CallLibraryTagHandler(kCanonicalizeUrl, import_pos, url);
+ const String& canon_url = String::CheckedHandle(Api::UnwrapHandle(handle));
+ // Lookup the library URL.
+ Library& library = Library::Handle(Library::LookupLibrary(canon_url));
+ if (library.IsNull()) {
+ // Call the library tag handler to load the library.
+ CallLibraryTagHandler(kImportTag, import_pos, canon_url);
+ // If the library tag handler succeded without registering the
+ // library we create an empty library to import.
+ library = Library::LookupLibrary(canon_url);
if (library.IsNull()) {
- // Call the library tag handler to load the library.
- CallLibraryTagHandler(kImportTag, import_pos, canon_url);
- // If the library tag handler succeded without registering the
- // library we create an empty library to import.
- library = Library::LookupLibrary(canon_url);
- if (library.IsNull()) {
- library = Library::New(canon_url);
- library.Register();
- }
+ library = Library::New(canon_url);
+ library.Register();
}
- // Add the import to the library.
- const Namespace& import =
- Namespace::Handle(Namespace::New(library, show_names, hide_names));
+ }
+ const Namespace& ns =
+ Namespace::Handle(Namespace::New(library, show_names, hide_names));
+ if (is_import) {
if (prefix.IsNull() || (prefix.Length() == 0)) {
- library_.AddImport(import);
+ library_.AddImport(ns);
} else {
LibraryPrefix& library_prefix = LibraryPrefix::Handle();
library_prefix = library_.LookupLocalLibraryPrefix(prefix);
if (!library_prefix.IsNull()) {
- library_prefix.AddImport(import);
+ library_prefix.AddImport(ns);
} else {
- library_prefix = LibraryPrefix::New(prefix, import);
+ library_prefix = LibraryPrefix::New(prefix, ns);
library_.AddObject(library_prefix, prefix);
}
}
- } else if (IsLiteral("export")) {
- ErrorMsg("export clause not yet supported");
} else {
- ErrorMsg("unreachable");
- UNREACHABLE();
+ ASSERT(is_export);
+ library_.AddExport(ns);
}
}

Powered by Google App Engine
This is Rietveld 408576698