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

Unified Diff: runtime/vm/parser.cc

Issue 8724015: Properly detect name collisions at library level (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 9 years, 1 month 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 1908)
+++ runtime/vm/parser.cc (working copy)
@@ -2940,6 +2940,17 @@
if (library_.LookupObject(var_name) != Object::null()) {
ErrorMsg(name_pos, "'%s' is already defined", var_name.ToCString());
}
+ String& accessor_name = String::Handle(Field::GetterName(var_name));
+ if (library_.LookupObject(accessor_name) != Object::null()) {
+ ErrorMsg(name_pos, "getter for '%s' is already defined",
+ var_name.ToCString());
+ }
+ accessor_name = Field::SetterName(var_name);
+ if (library_.LookupObject(accessor_name) != Object::null()) {
+ ErrorMsg(name_pos, "setter for '%s' is already defined",
+ var_name.ToCString());
+ }
+
Field& field = Field::ZoneHandle(
Field::New(var_name, is_static, is_final, name_pos));
field.set_type(type);
@@ -2992,6 +3003,16 @@
if (library_.LookupObject(func_name) != Object::null()) {
ErrorMsg(name_pos, "'%s' is already defined", func_name.ToCString());
}
+ String& accessor_name = String::Handle(Field::GetterName(func_name));
+ if (library_.LookupObject(accessor_name) != Object::null()) {
+ ErrorMsg(name_pos, "'%s' is already defined as getter",
+ func_name.ToCString());
+ }
+ accessor_name = Field::SetterName(func_name);
+ if (library_.LookupObject(accessor_name) != Object::null()) {
+ ErrorMsg(name_pos, "'%s' is already defined as setter",
+ func_name.ToCString());
+ }
if (CurrentToken() != Token::kLPAREN) {
ErrorMsg("'(' expected");
@@ -3069,6 +3090,16 @@
is_getter ? "getter" : "setter");
}
+ if (library_.LookupObject(*field_name) != Object::null()) {
+ ErrorMsg(name_pos, "'%s' is already defined in this library",
+ field_name->ToCString());
+ }
+ if (library_.LookupObject(accessor_name) != Object::null()) {
+ ErrorMsg(name_pos, "%s for '%s' is already defined",
+ is_getter ? "getter" : "setter",
+ field_name->ToCString());
+ }
+
if (CurrentToken() == Token::kLBRACE) {
SkipBlock();
} else if (CurrentToken() == Token::kARROW) {
« no previous file with comments | « no previous file | tests/language/src/ToplevelCollision1Test.dart » ('j') | tests/language/src/ToplevelCollision2Test.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698