| Index: runtime/vm/symbols.cc
|
| ===================================================================
|
| --- runtime/vm/symbols.cc (revision 17246)
|
| +++ runtime/vm/symbols.cc (working copy)
|
| @@ -110,7 +110,7 @@
|
| isolate->object_store()->symbol_table());
|
| intptr_t table_size_index = symbol_table.Length() - 1;
|
| dart::Smi& used = Smi::Handle();
|
| - used ^= symbol_table.At(table_size_index);
|
| + used |= symbol_table.At(table_size_index);
|
| return used.Value();
|
| }
|
|
|
| @@ -182,14 +182,14 @@
|
| // First check if a symbol exists in the vm isolate for these characters.
|
| symbol_table = Dart::vm_isolate()->object_store()->symbol_table();
|
| intptr_t index = FindIndex(symbol_table, characters, len, hash);
|
| - symbol ^= symbol_table.At(index);
|
| + symbol |= symbol_table.At(index);
|
| if (symbol.IsNull()) {
|
| // Now try in the symbol table of the current isolate.
|
| symbol_table = isolate->object_store()->symbol_table();
|
| index = FindIndex(symbol_table, characters, len, hash);
|
| // Since we leave enough room in the table to guarantee, that we find an
|
| // empty spot, index is the insertion point if symbol is null.
|
| - symbol ^= symbol_table.At(index);
|
| + symbol |= symbol_table.At(index);
|
| if (symbol.IsNull()) {
|
| // Allocate new result string.
|
| symbol = (*new_string)(characters, len, Heap::kOld);
|
| @@ -243,14 +243,14 @@
|
| // First check if a symbol exists in the vm isolate for these characters.
|
| symbol_table = Dart::vm_isolate()->object_store()->symbol_table();
|
| intptr_t index = FindIndex(symbol_table, str, begin_index, len, hash);
|
| - symbol ^= symbol_table.At(index);
|
| + symbol |= symbol_table.At(index);
|
| if (symbol.IsNull()) {
|
| // Now try in the symbol table of the current isolate.
|
| symbol_table = isolate->object_store()->symbol_table();
|
| index = FindIndex(symbol_table, str, begin_index, len, hash);
|
| // Since we leave enough room in the table to guarantee, that we find an
|
| // empty spot, index is the insertion point if symbol is null.
|
| - symbol ^= symbol_table.At(index);
|
| + symbol |= symbol_table.At(index);
|
| if (symbol.IsNull()) {
|
| if (str.IsOld() && begin_index == 0 && len == str.Length()) {
|
| // Reuse the incoming str as the symbol value.
|
| @@ -285,14 +285,14 @@
|
| // First dump VM symbol table stats.
|
| symbol_table = Dart::vm_isolate()->object_store()->symbol_table();
|
| table_size = symbol_table.Length() - 1;
|
| - used ^= symbol_table.At(table_size);
|
| + used |= symbol_table.At(table_size);
|
| OS::Print("VM Isolate: Number of symbols : %"Pd"\n", used.Value());
|
| OS::Print("VM Isolate: Symbol table capacity : %"Pd"\n", table_size);
|
|
|
| // Now dump regular isolate symbol table stats.
|
| symbol_table = Isolate::Current()->object_store()->symbol_table();
|
| table_size = symbol_table.Length() - 1;
|
| - used ^= symbol_table.At(table_size);
|
| + used |= symbol_table.At(table_size);
|
| OS::Print("Isolate: Number of symbols : %"Pd"\n", used.Value());
|
| OS::Print("Isolate: Symbol table capacity : %"Pd"\n", table_size);
|
|
|
| @@ -319,7 +319,7 @@
|
| String& element = String::Handle();
|
| dart::Object& new_element = Object::Handle();
|
| for (intptr_t i = 0; i < table_size; i++) {
|
| - element ^= symbol_table.At(i);
|
| + element |= symbol_table.At(i);
|
| if (!element.IsNull()) {
|
| intptr_t hash = element.Hash();
|
| intptr_t index = hash % new_table_size;
|
| @@ -354,7 +354,7 @@
|
| symbol.SetCanonical(); // Mark object as being canonical.
|
| symbol_table.SetAt(index, symbol); // Remember the new symbol.
|
| dart::Smi& used = Smi::Handle();
|
| - used ^= symbol_table.At(table_size);
|
| + used |= symbol_table.At(table_size);
|
| intptr_t used_elements = used.Value() + 1; // One more element added.
|
| used = Smi::New(used_elements);
|
| symbol_table.SetAt(table_size, used); // Update used count.
|
| @@ -377,10 +377,10 @@
|
| intptr_t num_collisions = 0;
|
|
|
| String& symbol = String::Handle();
|
| - symbol ^= symbol_table.At(index);
|
| + symbol |= symbol_table.At(index);
|
| while (!symbol.IsNull() && !symbol.Equals(characters, len)) {
|
| index = (index + 1) % table_size; // Move to next element.
|
| - symbol ^= symbol_table.At(index);
|
| + symbol |= symbol_table.At(index);
|
| num_collisions += 1;
|
| }
|
| if (FLAG_dump_symbol_stats) {
|
| @@ -418,10 +418,10 @@
|
| intptr_t num_collisions = 0;
|
|
|
| String& symbol = String::Handle();
|
| - symbol ^= symbol_table.At(index);
|
| + symbol |= symbol_table.At(index);
|
| while (!symbol.IsNull() && !symbol.Equals(str, begin_index, len)) {
|
| index = (index + 1) % table_size; // Move to next element.
|
| - symbol ^= symbol_table.At(index);
|
| + symbol |= symbol_table.At(index);
|
| num_collisions += 1;
|
| }
|
| if (FLAG_dump_symbol_stats) {
|
|
|