Index: src/runtime/runtime-test.cc |
diff --git a/src/runtime/runtime-test.cc b/src/runtime/runtime-test.cc |
index 36d359712e541066ca24dd8c81cece0be4121909..356c6c771720c27116f0784f1412e2b92a91d543 100644 |
--- a/src/runtime/runtime-test.cc |
+++ b/src/runtime/runtime-test.cc |
@@ -140,6 +140,46 @@ RUNTIME_FUNCTION(Runtime_OptimizeFunctionOnNextCall) { |
return isolate->heap()->undefined_value(); |
} |
+RUNTIME_FUNCTION(Runtime_InterpretFunctionOnNextCall) { |
+ HandleScope scope(isolate); |
+ DCHECK(args.length() == 1); |
+ CONVERT_ARG_HANDLE_CHECKED(Object, function_object, 0); |
+ if (!function_object->IsJSFunction()) { |
+ return isolate->heap()->undefined_value(); |
+ } |
+ Handle<JSFunction> function = Handle<JSFunction>::cast(function_object); |
+ |
+ // Do not tier down if we are already on optimized code. Replacing optimized |
+ // code without actual deoptimization can lead to funny bugs. |
+ if (function->code()->kind() != Code::OPTIMIZED_FUNCTION && |
+ function->shared()->HasBytecodeArray()) { |
+ function->ReplaceCode(*isolate->builtins()->InterpreterEntryTrampoline()); |
+ } |
+ return isolate->heap()->undefined_value(); |
+} |
+ |
+RUNTIME_FUNCTION(Runtime_BaselineFunctionOnNextCall) { |
+ HandleScope scope(isolate); |
+ DCHECK(args.length() == 1); |
+ CONVERT_ARG_HANDLE_CHECKED(Object, function_object, 0); |
+ if (!function_object->IsJSFunction()) { |
+ return isolate->heap()->undefined_value(); |
+ } |
+ Handle<JSFunction> function = Handle<JSFunction>::cast(function_object); |
+ |
+ // Do not tier down if we are already on optimized code. Replacing optimized |
+ // code without actual deoptimization can lead to funny bugs. |
+ if (function->code()->kind() != Code::OPTIMIZED_FUNCTION && |
+ function->code()->kind() != Code::FUNCTION) { |
+ if (function->shared()->HasBaselineCode()) { |
+ function->ReplaceCode(function->shared()->code()); |
+ } else { |
+ function->MarkForBaseline(); |
+ } |
+ } |
+ |
+ return isolate->heap()->undefined_value(); |
+} |
RUNTIME_FUNCTION(Runtime_OptimizeOsr) { |
HandleScope scope(isolate); |