OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/accessors.h" | 7 #include "src/accessors.h" |
8 #include "src/api.h" | 8 #include "src/api.h" |
9 #include "src/arguments.h" | 9 #include "src/arguments.h" |
10 #include "src/codegen.h" | 10 #include "src/codegen.h" |
(...skipping 1416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1427 | 1427 |
1428 Handle<JSObject> holder(lookup->holder()); | 1428 Handle<JSObject> holder(lookup->holder()); |
1429 NamedStoreHandlerCompiler compiler(isolate(), receiver_type(), holder); | 1429 NamedStoreHandlerCompiler compiler(isolate(), receiver_type(), holder); |
1430 | 1430 |
1431 if (lookup->IsTransition()) { | 1431 if (lookup->IsTransition()) { |
1432 // Explicitly pass in the receiver map since LookupForWrite may have | 1432 // Explicitly pass in the receiver map since LookupForWrite may have |
1433 // stored something else than the receiver in the holder. | 1433 // stored something else than the receiver in the holder. |
1434 Handle<Map> transition(lookup->GetTransitionTarget()); | 1434 Handle<Map> transition(lookup->GetTransitionTarget()); |
1435 PropertyDetails details = lookup->GetPropertyDetails(); | 1435 PropertyDetails details = lookup->GetPropertyDetails(); |
1436 | 1436 |
1437 if (details.type() != CALLBACKS && details.attributes() == NONE) { | 1437 if (details.type() != CALLBACKS && details.attributes() == NONE && |
| 1438 holder->HasFastProperties()) { |
1438 return compiler.CompileStoreTransition(transition, name); | 1439 return compiler.CompileStoreTransition(transition, name); |
1439 } | 1440 } |
1440 } else { | 1441 } else { |
1441 switch (lookup->type()) { | 1442 switch (lookup->type()) { |
1442 case FIELD: | 1443 case FIELD: |
1443 return compiler.CompileStoreField(lookup, name); | 1444 return compiler.CompileStoreField(lookup, name); |
1444 case NORMAL: | 1445 case NORMAL: |
1445 if (kind() == Code::KEYED_STORE_IC) break; | 1446 if (kind() == Code::KEYED_STORE_IC) break; |
1446 if (receiver->IsJSGlobalProxy() || receiver->IsGlobalObject()) { | 1447 if (receiver->IsJSGlobalProxy() || receiver->IsGlobalObject()) { |
1447 // The stub generated for the global object picks the value directly | 1448 // The stub generated for the global object picks the value directly |
(...skipping 1612 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3060 #undef ADDR | 3061 #undef ADDR |
3061 }; | 3062 }; |
3062 | 3063 |
3063 | 3064 |
3064 Address IC::AddressFromUtilityId(IC::UtilityId id) { | 3065 Address IC::AddressFromUtilityId(IC::UtilityId id) { |
3065 return IC_utilities[id]; | 3066 return IC_utilities[id]; |
3066 } | 3067 } |
3067 | 3068 |
3068 | 3069 |
3069 } } // namespace v8::internal | 3070 } } // namespace v8::internal |
OLD | NEW |