| Index: src/deoptimizer.cc
|
| diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc
|
| index 4247e5535b0779c38f6a057c24c4e37564d358a1..430a40f17330c6d20aea69ea3f0e20fd69d8bd8b 100644
|
| --- a/src/deoptimizer.cc
|
| +++ b/src/deoptimizer.cc
|
| @@ -145,8 +145,6 @@ void Deoptimizer::VisitAllOptimizedFunctionsForContext(
|
|
|
| CHECK(context->IsNativeContext());
|
|
|
| - visitor->EnterContext(context);
|
| -
|
| // Visit the list of optimized functions, removing elements that
|
| // no longer refer to optimized code.
|
| JSFunction* prev = NULL;
|
| @@ -180,8 +178,29 @@ void Deoptimizer::VisitAllOptimizedFunctionsForContext(
|
| }
|
| element = next;
|
| }
|
| +}
|
| +
|
| +void Deoptimizer::UnlinkOptimizedCode(Code* code, Context* native_context) {
|
| + class CodeUnlinker : public OptimizedFunctionVisitor {
|
| + public:
|
| + explicit CodeUnlinker(Code* code) : code_(code) {}
|
| +
|
| + virtual void VisitFunction(JSFunction* function) {
|
| + if (function->code() == code_) {
|
| + if (FLAG_trace_deopt) {
|
| + PrintF("[removing optimized code for: ");
|
| + function->ShortPrint();
|
| + PrintF("]\n");
|
| + }
|
| + function->set_code(function->shared()->code());
|
| + }
|
| + }
|
|
|
| - visitor->LeaveContext(context);
|
| + private:
|
| + Code* code_;
|
| + };
|
| + CodeUnlinker unlinker(code);
|
| + VisitAllOptimizedFunctionsForContext(native_context, &unlinker);
|
| }
|
|
|
|
|
| @@ -209,8 +228,6 @@ void Deoptimizer::DeoptimizeMarkedCodeForContext(Context* context) {
|
| // deoptimized from the functions that refer to it.
|
| class SelectedCodeUnlinker: public OptimizedFunctionVisitor {
|
| public:
|
| - virtual void EnterContext(Context* context) { } // Don't care.
|
| - virtual void LeaveContext(Context* context) { } // Don't care.
|
| virtual void VisitFunction(JSFunction* function) {
|
| Code* code = function->code();
|
| if (!code->marked_for_deoptimization()) return;
|
|
|