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

Unified Diff: runtime/vm/object.cc

Issue 149643007: Small cleanup: move all library private key code to Library class (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 10 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
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/scanner.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/vm/object.cc
===================================================================
--- runtime/vm/object.cc (revision 32509)
+++ runtime/vm/object.cc (working copy)
@@ -6720,12 +6720,12 @@
}
} else if (curr == Token::kINTERPOL_VAR) {
literals.Add(Symbols::Dollar());
- if (literal.CharAt(0) == Scanner::kPrivateIdentifierStart) {
+ if (literal.CharAt(0) == Library::kPrivateIdentifierStart) {
literal = String::SubString(literal, 0, literal.Length() - private_len);
}
literals.Add(literal);
} else if (curr == Token::kIDENT) {
- if (literal.CharAt(0) == Scanner::kPrivateIdentifierStart) {
+ if (literal.CharAt(0) == Library::kPrivateIdentifierStart) {
literal = String::SubString(literal, 0, literal.Length() - private_len);
}
literals.Add(literal);
@@ -7848,6 +7848,7 @@
if (!FLAG_use_lib_cache) {
return;
}
+ ASSERT(!Field::IsGetterName(name) && !Field::IsSetterName(name));
hausner 2014/02/10 21:07:35 Unrelated but on purpose.
const Array& cache = Array::Handle(resolved_names());
// let N = cache.Length();
// The entry cache[N-1] is used as a counter
@@ -8435,7 +8436,6 @@
const Library& result = Library::Handle(Library::New());
result.StorePointer(&result.raw_ptr()->name_, Symbols::Empty().raw());
result.StorePointer(&result.raw_ptr()->url_, url.raw());
- result.raw_ptr()->private_key_ = Scanner::AllocatePrivateKey(result);
result.raw_ptr()->resolved_names_ = Object::empty_array().raw();
result.raw_ptr()->dictionary_ = Object::empty_array().raw();
result.StorePointer(&result.raw_ptr()->metadata_,
@@ -8454,6 +8454,7 @@
result.InitResolvedNamesCache(kInitialNameCacheSize);
result.InitClassDictionary();
result.InitImportList();
+ result.AllocatePrivateKey();
if (import_core_lib) {
const Library& core_lib = Library::Handle(Library::CoreLibrary());
ASSERT(!core_lib.IsNull());
@@ -8550,6 +8551,20 @@
}
+bool Library::IsPrivate(const String& name) {
+ if (ShouldBePrivate(name)) return true;
+ // Factory names: List._fromLiteral.
+ for (intptr_t i = 1; i < name.Length() - 1; i++) {
+ if (name.CharAt(i) == '.') {
+ if (name.CharAt(i + 1) == '_') {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+
bool Library::IsKeyUsed(intptr_t key) {
intptr_t lib_key;
const GrowableObjectArray& libs = GrowableObjectArray::Handle(
@@ -8568,17 +8583,16 @@
}
-bool Library::IsPrivate(const String& name) {
- if (ShouldBePrivate(name)) return true;
- // Factory names: List._fromLiteral.
- for (intptr_t i = 1; i < name.Length() - 1; i++) {
- if (name.CharAt(i) == '.') {
- if (name.CharAt(i + 1) == '_') {
- return true;
- }
- }
+void Library::AllocatePrivateKey() const {
+ const String& url = String::Handle(this->url());
+ intptr_t key_value = url.Hash();
+ while (Library::IsKeyUsed(key_value)) {
+ key_value++;
}
- return false;
+ char private_key[32];
+ OS::SNPrint(private_key, sizeof(private_key),
+ "%c%#" Px "", kPrivateKeySeparator, key_value);
+ StorePointer(&raw_ptr()->private_key_, String::New(private_key, Heap::kOld));
}
@@ -8592,7 +8606,7 @@
RawClass* Library::LookupCoreClass(const String& class_name) {
const Library& core_lib = Library::Handle(Library::CoreLibrary());
String& name = String::Handle(class_name.raw());
- if (class_name.CharAt(0) == Scanner::kPrivateIdentifierStart) {
+ if (class_name.CharAt(0) == kPrivateIdentifierStart) {
// Private identifiers are mangled on a per library basis.
name = String::Concat(name, String::Handle(core_lib.private_key()));
name = Symbols::New(name);
@@ -15493,7 +15507,7 @@
int32_t ch = T1::CharAt(str1, pos);
pos++;
- if (ch == Scanner::kPrivateKeySeparator) {
+ if (ch == Library::kPrivateKeySeparator) {
// Consume a private key separator.
while ((pos < len) && (T1::CharAt(str1, pos) != '.')) {
pos++;
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/scanner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698