OLD | NEW |
1 // Copyright 2006-2009 the V8 project authors. All rights reserved. | 1 // Copyright 2006-2009 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 ASSERT_EQ(kSmiTagSize, 1); | 177 ASSERT_EQ(kSmiTagSize, 1); |
178 __ mov(entity_name, Operand(properties, index, times_half_pointer_size, | 178 __ mov(entity_name, Operand(properties, index, times_half_pointer_size, |
179 kElementsStartOffset - kHeapObjectTag)); | 179 kElementsStartOffset - kHeapObjectTag)); |
180 __ cmp(entity_name, Factory::undefined_value()); | 180 __ cmp(entity_name, Factory::undefined_value()); |
181 if (i != kProbes - 1) { | 181 if (i != kProbes - 1) { |
182 __ j(equal, &done, taken); | 182 __ j(equal, &done, taken); |
183 | 183 |
184 // Stop if found the property. | 184 // Stop if found the property. |
185 __ cmp(entity_name, Handle<String>(name)); | 185 __ cmp(entity_name, Handle<String>(name)); |
186 __ j(equal, miss_label, not_taken); | 186 __ j(equal, miss_label, not_taken); |
| 187 |
| 188 // Check if the entry name is not a symbol. |
| 189 __ mov(entity_name, FieldOperand(entity_name, HeapObject::kMapOffset)); |
| 190 __ test_b(FieldOperand(entity_name, Map::kInstanceTypeOffset), |
| 191 kIsSymbolMask); |
| 192 __ j(zero, miss_label, not_taken); |
187 } else { | 193 } else { |
188 // Give up probing if still not found the undefined value. | 194 // Give up probing if still not found the undefined value. |
189 __ j(not_equal, miss_label, not_taken); | 195 __ j(not_equal, miss_label, not_taken); |
190 } | 196 } |
191 } | 197 } |
192 | 198 |
193 __ bind(&done); | 199 __ bind(&done); |
194 __ DecrementCounter(&Counters::negative_lookups_miss, 1); | 200 __ DecrementCounter(&Counters::negative_lookups_miss, 1); |
195 } | 201 } |
196 | 202 |
(...skipping 2538 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2735 // Return the generated code. | 2741 // Return the generated code. |
2736 return GetCode(); | 2742 return GetCode(); |
2737 } | 2743 } |
2738 | 2744 |
2739 | 2745 |
2740 #undef __ | 2746 #undef __ |
2741 | 2747 |
2742 } } // namespace v8::internal | 2748 } } // namespace v8::internal |
2743 | 2749 |
2744 #endif // V8_TARGET_ARCH_IA32 | 2750 #endif // V8_TARGET_ARCH_IA32 |
OLD | NEW |