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 5404 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5415 PushAndAdd(instr); | 5415 PushAndAdd(instr); |
5416 if (instr->HasObservableSideEffects()) AddSimulate(operation->id()); | 5416 if (instr->HasObservableSideEffects()) AddSimulate(operation->id()); |
5417 | 5417 |
5418 HInstruction* store; | 5418 HInstruction* store; |
5419 if (map.is_null()) { | 5419 if (map.is_null()) { |
5420 // If we don't know the monomorphic type, do a generic store. | 5420 // If we don't know the monomorphic type, do a generic store. |
5421 CHECK_ALIVE(store = BuildStoreNamedGeneric(object, name, instr)); | 5421 CHECK_ALIVE(store = BuildStoreNamedGeneric(object, name, instr)); |
5422 } else { | 5422 } else { |
5423 Handle<AccessorPair> accessors; | 5423 Handle<AccessorPair> accessors; |
5424 Handle<JSObject> holder; | 5424 Handle<JSObject> holder; |
5425 if (LookupAccessorPair(map, name, &accessors, &holder)) { | 5425 // Because we re-use the load type feedback, there might be no setter. |
| 5426 if (LookupAccessorPair(map, name, &accessors, &holder) && |
| 5427 accessors->setter()->IsJSFunction()) { |
5426 store = BuildCallSetter(object, instr, map, accessors, holder); | 5428 store = BuildCallSetter(object, instr, map, accessors, holder); |
5427 } else { | 5429 } else { |
5428 CHECK_ALIVE(store = BuildStoreNamedMonomorphic(object, | 5430 CHECK_ALIVE(store = BuildStoreNamedMonomorphic(object, |
5429 name, | 5431 name, |
5430 instr, | 5432 instr, |
5431 map)); | 5433 map)); |
5432 } | 5434 } |
5433 } | 5435 } |
5434 AddInstruction(store); | 5436 AddInstruction(store); |
5435 // Drop the simulated receiver and value. Return the value. | 5437 // Drop the simulated receiver and value. Return the value. |
(...skipping 2440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7876 after = BuildIncrement(returns_original_input, expr); | 7878 after = BuildIncrement(returns_original_input, expr); |
7877 input = Pop(); | 7879 input = Pop(); |
7878 | 7880 |
7879 HInstruction* store; | 7881 HInstruction* store; |
7880 if (map.is_null()) { | 7882 if (map.is_null()) { |
7881 // If we don't know the monomorphic type, do a generic store. | 7883 // If we don't know the monomorphic type, do a generic store. |
7882 CHECK_ALIVE(store = BuildStoreNamedGeneric(object, name, after)); | 7884 CHECK_ALIVE(store = BuildStoreNamedGeneric(object, name, after)); |
7883 } else { | 7885 } else { |
7884 Handle<AccessorPair> accessors; | 7886 Handle<AccessorPair> accessors; |
7885 Handle<JSObject> holder; | 7887 Handle<JSObject> holder; |
7886 if (LookupAccessorPair(map, name, &accessors, &holder)) { | 7888 // Because we re-use the load type feedback, there might be no setter. |
| 7889 if (LookupAccessorPair(map, name, &accessors, &holder) && |
| 7890 accessors->setter()->IsJSFunction()) { |
7887 store = BuildCallSetter(object, after, map, accessors, holder); | 7891 store = BuildCallSetter(object, after, map, accessors, holder); |
7888 } else { | 7892 } else { |
7889 CHECK_ALIVE(store = BuildStoreNamedMonomorphic(object, | 7893 CHECK_ALIVE(store = BuildStoreNamedMonomorphic(object, |
7890 name, | 7894 name, |
7891 after, | 7895 after, |
7892 map)); | 7896 map)); |
7893 } | 7897 } |
7894 } | 7898 } |
7895 AddInstruction(store); | 7899 AddInstruction(store); |
7896 | 7900 |
(...skipping 1763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
9660 } | 9664 } |
9661 } | 9665 } |
9662 | 9666 |
9663 #ifdef DEBUG | 9667 #ifdef DEBUG |
9664 if (graph_ != NULL) graph_->Verify(false); // No full verify. | 9668 if (graph_ != NULL) graph_->Verify(false); // No full verify. |
9665 if (allocator_ != NULL) allocator_->Verify(); | 9669 if (allocator_ != NULL) allocator_->Verify(); |
9666 #endif | 9670 #endif |
9667 } | 9671 } |
9668 | 9672 |
9669 } } // namespace v8::internal | 9673 } } // namespace v8::internal |
OLD | NEW |