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

Unified Diff: runtime/vm/object.cc

Issue 397413002: Reimplement Symbols using hash table template. (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 6 years, 5 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/object.cc
===================================================================
--- runtime/vm/object.cc (revision 38342)
+++ runtime/vm/object.cc (working copy)
@@ -6808,6 +6808,8 @@
RawString* Field::GetterName(const String& field_name) {
CompilerStats::make_accessor_name++;
+ // TODO(koda): Avoid most of these allocations by adding prefix-based lookup
+ // to Symbols.
return String::Concat(Symbols::GetterPrefix(), field_name);
}
@@ -6820,6 +6822,8 @@
RawString* Field::SetterName(const String& field_name) {
CompilerStats::make_accessor_name++;
+ // TODO(koda): Avoid most of these allocations by adding prefix-based lookup
+ // to Symbols.
return String::Concat(Symbols::SetterPrefix(), field_name);
}
@@ -7656,6 +7660,10 @@
return String::Cast(key).Hash();
}
}
+
+ static RawObject* NewKey(const Scanner::TokenDescriptor& descriptor) {
+ return LiteralToken::New(descriptor.kind, *descriptor.literal);
+ }
};
typedef UnorderedHashMap<CompressedTokenTraits> CompressedTokenMap;
@@ -7678,32 +7686,20 @@
// Add an IDENT token into the stream and the token hash map.
void AddIdentToken(const String* ident) {
ASSERT(ident->IsSymbol());
- intptr_t index = tokens_.NumOccupied();
- intptr_t entry;
- if (!tokens_.FindKeyOrDeletedOrUnused(*ident, &entry)) {
- tokens_.InsertKey(entry, *ident);
- tokens_.UpdatePayload(entry, 0, Smi::Handle(Smi::New(index)));
- HashTables::EnsureLoadFactor(0.0, kMaxLoadFactor, tokens_);
- } else {
- index = Smi::Value(Smi::RawCast(tokens_.GetPayload(entry, 0)));
- }
+ const intptr_t fresh_index = tokens_.NumOccupied();
+ intptr_t index = Smi::Value(Smi::RawCast(
+ tokens_.InsertOrGetValue(*ident,
+ Smi::Handle(Smi::New(fresh_index)))));
WriteIndex(index);
}
// Add a LITERAL token into the stream and the token hash map.
void AddLiteralToken(const Scanner::TokenDescriptor& descriptor) {
ASSERT(descriptor.literal->IsSymbol());
- intptr_t index = tokens_.NumOccupied();
- intptr_t entry;
- if (!tokens_.FindKeyOrDeletedOrUnused(descriptor, &entry)) {
- LiteralToken& new_literal = LiteralToken::Handle(
- LiteralToken::New(descriptor.kind, *descriptor.literal));
- tokens_.InsertKey(entry, new_literal);
- tokens_.UpdatePayload(entry, 0, Smi::Handle(Smi::New(index)));
- HashTables::EnsureLoadFactor(0.0, kMaxLoadFactor, tokens_);
- } else {
- index = Smi::Value(Smi::RawCast(tokens_.GetPayload(entry, 0)));
- }
+ const intptr_t fresh_index = tokens_.NumOccupied();
+ intptr_t index = Smi::Value(Smi::RawCast(
+ tokens_.InsertNewOrGetValue(descriptor,
+ Smi::Handle(Smi::New(fresh_index)))));
WriteIndex(index);
}
@@ -7745,7 +7741,6 @@
}
static const intptr_t kInitialTableSize = 32;
- static const double kMaxLoadFactor;
uint8_t* buffer_;
WriteStream stream_;
@@ -7755,9 +7750,6 @@
};
-const double CompressedTokenStreamData::kMaxLoadFactor = 0.75;
-
-
RawTokenStream* TokenStream::New(const Scanner::GrowableTokenStream& tokens,
const String& private_key) {
// Copy the relevant data out of the scanner into a compressed stream of
« no previous file with comments | « runtime/vm/object.h ('k') | runtime/vm/symbols.h » ('j') | runtime/vm/symbols.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698