| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 #include "vm/object.h" | 5 #include "vm/object.h" |
| 6 | 6 |
| 7 #include "include/dart_api.h" | 7 #include "include/dart_api.h" |
| 8 #include "platform/assert.h" | 8 #include "platform/assert.h" |
| 9 #include "vm/assembler.h" | 9 #include "vm/assembler.h" |
| 10 #include "vm/cpu.h" | 10 #include "vm/cpu.h" |
| (...skipping 2496 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2507 continue; | 2507 continue; |
| 2508 } | 2508 } |
| 2509 | 2509 |
| 2510 function ^= code.function(); | 2510 function ^= code.function(); |
| 2511 // If function uses dependent code switch it to unoptimized. | 2511 // If function uses dependent code switch it to unoptimized. |
| 2512 if (code.is_optimized() && (function.CurrentCode() == code.raw())) { | 2512 if (code.is_optimized() && (function.CurrentCode() == code.raw())) { |
| 2513 ReportSwitchingCode(code); | 2513 ReportSwitchingCode(code); |
| 2514 function.SwitchToUnoptimizedCode(); | 2514 function.SwitchToUnoptimizedCode(); |
| 2515 } else if (function.unoptimized_code() == code.raw()) { | 2515 } else if (function.unoptimized_code() == code.raw()) { |
| 2516 ReportSwitchingCode(code); | 2516 ReportSwitchingCode(code); |
| 2517 // Remove the code object from the function. The next time the |
| 2518 // function is invoked, it will be compiled again. |
| 2517 function.ClearCode(); | 2519 function.ClearCode(); |
| 2520 // Invalidate the old code object so existing references to it |
| 2521 // (from optimized code) will fail when invoked. |
| 2522 if (!CodePatcher::IsEntryPatched(code)) { |
| 2523 CodePatcher::PatchEntry(code); |
| 2524 } |
| 2518 } | 2525 } |
| 2519 } | 2526 } |
| 2520 } | 2527 } |
| 2521 | 2528 |
| 2522 private: | 2529 private: |
| 2523 const Array& array_; | 2530 const Array& array_; |
| 2524 DISALLOW_COPY_AND_ASSIGN(WeakCodeReferences); | 2531 DISALLOW_COPY_AND_ASSIGN(WeakCodeReferences); |
| 2525 }; | 2532 }; |
| 2526 | 2533 |
| 2527 | 2534 |
| (...skipping 7024 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 9552 virtual void ReportDeoptimization(const Code& code) { | 9559 virtual void ReportDeoptimization(const Code& code) { |
| 9553 // This gets called when the code object is on the stack | 9560 // This gets called when the code object is on the stack |
| 9554 // while nuking code that depends on a prefix. We don't expect | 9561 // while nuking code that depends on a prefix. We don't expect |
| 9555 // this to happen, so make sure we die loudly if we find | 9562 // this to happen, so make sure we die loudly if we find |
| 9556 // ourselves here. | 9563 // ourselves here. |
| 9557 UNIMPLEMENTED(); | 9564 UNIMPLEMENTED(); |
| 9558 } | 9565 } |
| 9559 | 9566 |
| 9560 virtual void ReportSwitchingCode(const Code& code) { | 9567 virtual void ReportSwitchingCode(const Code& code) { |
| 9561 if (FLAG_trace_deoptimization || FLAG_trace_deoptimization_verbose) { | 9568 if (FLAG_trace_deoptimization || FLAG_trace_deoptimization_verbose) { |
| 9562 OS::PrintErr("Prefix '%s': deleting %s code for function '%s'\n", | 9569 OS::PrintErr("Prefix '%s': deleting %s code for %s function '%s'\n", |
| 9563 String::Handle(prefix_.name()).ToCString(), | 9570 String::Handle(prefix_.name()).ToCString(), |
| 9564 code.is_optimized() ? "optimized" : "unoptimized", | 9571 code.is_optimized() ? "optimized" : "unoptimized", |
| 9572 CodePatcher::IsEntryPatched(code) ? "patched" : "unpatched", |
| 9565 Function::Handle(code.function()).ToCString()); | 9573 Function::Handle(code.function()).ToCString()); |
| 9566 } | 9574 } |
| 9567 } | 9575 } |
| 9568 | 9576 |
| 9569 private: | 9577 private: |
| 9570 const LibraryPrefix& prefix_; | 9578 const LibraryPrefix& prefix_; |
| 9571 DISALLOW_COPY_AND_ASSIGN(PrefixDependentArray); | 9579 DISALLOW_COPY_AND_ASSIGN(PrefixDependentArray); |
| 9572 }; | 9580 }; |
| 9573 | 9581 |
| 9574 | 9582 |
| (...skipping 9271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 18846 return tag_label.ToCString(); | 18854 return tag_label.ToCString(); |
| 18847 } | 18855 } |
| 18848 | 18856 |
| 18849 | 18857 |
| 18850 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { | 18858 void UserTag::PrintJSONImpl(JSONStream* stream, bool ref) const { |
| 18851 Instance::PrintJSONImpl(stream, ref); | 18859 Instance::PrintJSONImpl(stream, ref); |
| 18852 } | 18860 } |
| 18853 | 18861 |
| 18854 | 18862 |
| 18855 } // namespace dart | 18863 } // namespace dart |
| OLD | NEW |