| Index: src/debug/liveedit.cc
|
| diff --git a/src/debug/liveedit.cc b/src/debug/liveedit.cc
|
| index e9c373e95b6bd1bb6d20567c3012a7b4c8d156c5..39db3dbcca572b7c04d9173aaf21aef7ac5ec7ab 100644
|
| --- a/src/debug/liveedit.cc
|
| +++ b/src/debug/liveedit.cc
|
| @@ -621,11 +621,9 @@ void FunctionInfoWrapper::SetInitialProperties(Handle<String> name,
|
| this->SetSmiValueField(kParentIndexOffset_, parent_index);
|
| }
|
|
|
| -
|
| -void FunctionInfoWrapper::SetFunctionCode(Handle<Code> function_code,
|
| +void FunctionInfoWrapper::SetFunctionCode(Handle<AbstractCode> function_code,
|
| Handle<HeapObject> code_scope_info) {
|
| // CompileForLiveEdit must deliver full-codegen code.
|
| - DCHECK(function_code->kind() == Code::FUNCTION);
|
| Handle<JSValue> code_wrapper = WrapInJSValue(function_code);
|
| this->SetField(kCodeOffset_, code_wrapper);
|
|
|
| @@ -640,13 +638,12 @@ void FunctionInfoWrapper::SetSharedFunctionInfo(
|
| this->SetField(kSharedFunctionInfoOffset_, info_holder);
|
| }
|
|
|
| -
|
| -Handle<Code> FunctionInfoWrapper::GetFunctionCode() {
|
| +Handle<AbstractCode> FunctionInfoWrapper::GetFunctionCode() {
|
| Handle<Object> element = this->GetField(kCodeOffset_);
|
| Handle<JSValue> value_wrapper = Handle<JSValue>::cast(element);
|
| Handle<Object> raw_result = UnwrapJSValue(value_wrapper);
|
| - CHECK(raw_result->IsCode());
|
| - return Handle<Code>::cast(raw_result);
|
| + CHECK(raw_result->IsAbstractCode());
|
| + return Handle<AbstractCode>::cast(raw_result);
|
| }
|
|
|
| MaybeHandle<TypeFeedbackMetadata> FunctionInfoWrapper::GetFeedbackMetadata() {
|
| @@ -1012,16 +1009,17 @@ void LiveEdit::ReplaceFunctionCode(
|
| bool feedback_metadata_changed = false;
|
|
|
| if (shared_info->is_compiled()) {
|
| - Handle<Code> new_code = compile_info_wrapper.GetFunctionCode();
|
| - Handle<Code> old_code(shared_info->code());
|
| + Handle<AbstractCode> new_code = compile_info_wrapper.GetFunctionCode();
|
| if (shared_info->HasBytecodeArray()) {
|
| - // The old code is interpreted. If we clear the bytecode array, the
|
| - // interpreter entry trampoline will self-heal and go to compiled code.
|
| + DCHECK(new_code->IsBytecodeArray());
|
| + // The old code is interpreted, the new code must be interpreted as well.
|
| shared_info->ClearBytecodeArray();
|
| - shared_info->ReplaceCode(*new_code);
|
| + shared_info->set_bytecode_array(BytecodeArray::cast(*new_code));
|
| } else {
|
| + Handle<Code> old_code(shared_info->code());
|
| DCHECK(old_code->kind() == Code::FUNCTION);
|
| - ReplaceCodeObject(old_code, new_code);
|
| + DCHECK(new_code->kind() == AbstractCode::FUNCTION);
|
| + ReplaceCodeObject(old_code, Handle<Code>::cast(new_code));
|
| }
|
| if (shared_info->HasDebugInfo()) {
|
| // Existing break points will be re-applied. Reset the debug info here.
|
| @@ -2002,7 +2000,7 @@ void LiveEditFunctionTracker::FunctionDone(Handle<SharedFunctionInfo> shared,
|
| FunctionInfoWrapper info = FunctionInfoWrapper::cast(
|
| *JSReceiver::GetElement(isolate_, result_, current_parent_index_)
|
| .ToHandleChecked());
|
| - info.SetFunctionCode(Handle<Code>(shared->code()),
|
| + info.SetFunctionCode(Handle<AbstractCode>(shared->abstract_code()),
|
| Handle<HeapObject>(shared->scope_info()));
|
| info.SetSharedFunctionInfo(shared);
|
|
|
|
|