OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 1725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1736 break; | 1736 break; |
1737 case TRANSITION: | 1737 case TRANSITION: |
1738 case INTERCEPTOR: | 1738 case INTERCEPTOR: |
1739 case NONEXISTENT: | 1739 case NONEXISTENT: |
1740 case NORMAL: | 1740 case NORMAL: |
1741 case HANDLER: | 1741 case HANDLER: |
1742 UNREACHABLE(); | 1742 UNREACHABLE(); |
1743 break; | 1743 break; |
1744 } | 1744 } |
1745 } else if (lookup.IsCacheable() && | 1745 } else if (lookup.IsCacheable() && |
| 1746 // For dicts the lookup on the map will fail, but the object may |
| 1747 // contain the property so we cannot generate a negative lookup |
| 1748 // (which would just be a map check and return undefined). |
| 1749 !map->is_dictionary_map() && |
1746 PrototypeChainCanNeverResolve(map, name)) { | 1750 PrototypeChainCanNeverResolve(map, name)) { |
1747 negative_lookups.Add(types->at(i), zone); | 1751 negative_lookups.Add(types->at(i), zone); |
1748 } | 1752 } |
1749 } | 1753 } |
1750 | 1754 |
1751 bool need_generic = | 1755 bool need_generic = |
1752 (types->length() != negative_lookups.length() + types_.length()); | 1756 (types->length() != negative_lookups.length() + types_.length()); |
1753 if (!need_generic && FLAG_deoptimize_uncommon_cases) { | 1757 if (!need_generic && FLAG_deoptimize_uncommon_cases) { |
1754 SetFlag(kUseGVN); | 1758 SetFlag(kUseGVN); |
1755 for (int i = 0; i < negative_lookups.length(); i++) { | 1759 for (int i = 0; i < negative_lookups.length(); i++) { |
(...skipping 828 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2584 | 2588 |
2585 | 2589 |
2586 void HCheckPrototypeMaps::Verify() { | 2590 void HCheckPrototypeMaps::Verify() { |
2587 HInstruction::Verify(); | 2591 HInstruction::Verify(); |
2588 ASSERT(HasNoUses()); | 2592 ASSERT(HasNoUses()); |
2589 } | 2593 } |
2590 | 2594 |
2591 #endif | 2595 #endif |
2592 | 2596 |
2593 } } // namespace v8::internal | 2597 } } // namespace v8::internal |
OLD | NEW |