| Index: src/liveedit.cc
|
| diff --git a/src/liveedit.cc b/src/liveedit.cc
|
| index 6f174c34d64b8c5351113e76e7fb4ff1d05e4fd7..7aaef15bddccaba2d7aae80d3dc92bb0a2a01718 100644
|
| --- a/src/liveedit.cc
|
| +++ b/src/liveedit.cc
|
| @@ -349,23 +349,26 @@ static void NarrowDownInput(SubrangableInput* input,
|
| // Each chunk is stored as 3 array elements: (pos1_begin, pos1_end, pos2_end).
|
| class CompareOutputArrayWriter {
|
| public:
|
| - CompareOutputArrayWriter()
|
| - : array_(FACTORY->NewJSArray(10)), current_size_(0) {}
|
| + explicit CompareOutputArrayWriter(Isolate* isolate)
|
| + : array_(isolate->factory()->NewJSArray(10)), current_size_(0) {}
|
|
|
| Handle<JSArray> GetResult() {
|
| return array_;
|
| }
|
|
|
| void WriteChunk(int char_pos1, int char_pos2, int char_len1, int char_len2) {
|
| + Isolate* isolate = array_->GetIsolate();
|
| SetElementNonStrict(array_,
|
| - current_size_,
|
| - Handle<Object>(Smi::FromInt(char_pos1)));
|
| + current_size_,
|
| + Handle<Object>(Smi::FromInt(char_pos1), isolate));
|
| SetElementNonStrict(array_,
|
| current_size_ + 1,
|
| - Handle<Object>(Smi::FromInt(char_pos1 + char_len1)));
|
| + Handle<Object>(Smi::FromInt(char_pos1 + char_len1),
|
| + isolate));
|
| SetElementNonStrict(array_,
|
| current_size_ + 2,
|
| - Handle<Object>(Smi::FromInt(char_pos2 + char_len2)));
|
| + Handle<Object>(Smi::FromInt(char_pos2 + char_len2),
|
| + isolate));
|
| current_size_ += 3;
|
| }
|
|
|
| @@ -527,7 +530,8 @@ class TokenizingLineArrayCompareOutput : public SubrangableOutput {
|
| TokenizingLineArrayCompareOutput(LineEndsWrapper line_ends1,
|
| LineEndsWrapper line_ends2,
|
| Handle<String> s1, Handle<String> s2)
|
| - : line_ends1_(line_ends1), line_ends2_(line_ends2), s1_(s1), s2_(s2),
|
| + : array_writer_(s1->GetIsolate()),
|
| + line_ends1_(line_ends1), line_ends2_(line_ends2), s1_(s1), s2_(s2),
|
| subrange_offset1_(0), subrange_offset2_(0) {
|
| }
|
|
|
| @@ -620,7 +624,7 @@ static void CompileScriptForTracker(Isolate* isolate, Handle<Script> script) {
|
|
|
| // Unwraps JSValue object, returning its field "value"
|
| static Handle<Object> UnwrapJSValue(Handle<JSValue> jsValue) {
|
| - return Handle<Object>(jsValue->value());
|
| + return Handle<Object>(jsValue->value(), jsValue->GetIsolate());
|
| }
|
|
|
|
|
| @@ -682,7 +686,7 @@ class JSArrayBasedStruct {
|
| void SetSmiValueField(int field_position, int value) {
|
| SetElementNonStrict(array_,
|
| field_position,
|
| - Handle<Smi>(Smi::FromInt(value)));
|
| + Handle<Smi>(Smi::FromInt(value), isolate()));
|
| }
|
| Object* GetField(int field_position) {
|
| return array_->GetElementNoExceptionThrown(field_position);
|
| @@ -818,14 +822,14 @@ class SharedInfoWrapper : public JSArrayBasedStruct<SharedInfoWrapper> {
|
|
|
| class FunctionInfoListener {
|
| public:
|
| - FunctionInfoListener() {
|
| + explicit FunctionInfoListener(Isolate* isolate) {
|
| current_parent_index_ = -1;
|
| len_ = 0;
|
| - result_ = FACTORY->NewJSArray(10);
|
| + result_ = isolate->factory()->NewJSArray(10);
|
| }
|
|
|
| void FunctionStarted(FunctionLiteral* fun) {
|
| - HandleScope scope(result_->GetIsolate());
|
| + HandleScope scope(isolate());
|
| FunctionInfoWrapper info = FunctionInfoWrapper::Create();
|
| info.SetInitialProperties(fun->name(), fun->start_position(),
|
| fun->end_position(), fun->parameter_count(),
|
| @@ -837,7 +841,7 @@ class FunctionInfoListener {
|
| }
|
|
|
| void FunctionDone() {
|
| - HandleScope scope(result_->GetIsolate());
|
| + HandleScope scope(isolate());
|
| FunctionInfoWrapper info =
|
| FunctionInfoWrapper::cast(
|
| result_->GetElementNoExceptionThrown(current_parent_index_));
|
| @@ -850,7 +854,9 @@ class FunctionInfoListener {
|
| FunctionInfoWrapper info =
|
| FunctionInfoWrapper::cast(
|
| result_->GetElementNoExceptionThrown(current_parent_index_));
|
| - info.SetFunctionCode(function_code, Handle<Object>(HEAP->null_value()));
|
| + info.SetFunctionCode(function_code,
|
| + Handle<Object>(isolate()->heap()->null_value(),
|
| + isolate()));
|
| }
|
|
|
| // Saves full information about a function: its code, its scope info
|
| @@ -864,21 +870,23 @@ class FunctionInfoListener {
|
| FunctionInfoWrapper::cast(
|
| result_->GetElementNoExceptionThrown(current_parent_index_));
|
| info.SetFunctionCode(Handle<Code>(shared->code()),
|
| - Handle<Object>(shared->scope_info()));
|
| + Handle<Object>(shared->scope_info(), isolate()));
|
| info.SetSharedFunctionInfo(shared);
|
|
|
| - Handle<Object> scope_info_list(
|
| - SerializeFunctionScope(shared->GetIsolate(), scope, zone));
|
| + Handle<Object> scope_info_list(SerializeFunctionScope(scope, zone),
|
| + isolate());
|
| info.SetOuterScopeInfo(scope_info_list);
|
| }
|
|
|
| Handle<JSArray> GetResult() { return result_; }
|
|
|
| private:
|
| - Object* SerializeFunctionScope(Isolate* isolate, Scope* scope, Zone* zone) {
|
| - HandleScope handle_scope(isolate);
|
| + Isolate* isolate() const { return result_->GetIsolate(); }
|
| +
|
| + Object* SerializeFunctionScope(Scope* scope, Zone* zone) {
|
| + HandleScope handle_scope(isolate());
|
|
|
| - Handle<JSArray> scope_info_list = isolate->factory()->NewJSArray(10);
|
| + Handle<JSArray> scope_info_list = isolate()->factory()->NewJSArray(10);
|
| int scope_info_length = 0;
|
|
|
| // Saves some description of scope. It stores name and indexes of
|
| @@ -886,7 +894,7 @@ class FunctionInfoListener {
|
| // scopes of this chain.
|
| Scope* outer_scope = scope->outer_scope();
|
| if (outer_scope == NULL) {
|
| - return isolate->heap()->undefined_value();
|
| + return isolate()->heap()->undefined_value();
|
| }
|
| do {
|
| ZoneList<Variable*> stack_list(outer_scope->StackLocalCount(), zone);
|
| @@ -902,12 +910,13 @@ class FunctionInfoListener {
|
| SetElementNonStrict(
|
| scope_info_list,
|
| scope_info_length,
|
| - Handle<Smi>(Smi::FromInt(context_list[i]->index())));
|
| + Handle<Smi>(Smi::FromInt(context_list[i]->index()), isolate()));
|
| scope_info_length++;
|
| }
|
| SetElementNonStrict(scope_info_list,
|
| scope_info_length,
|
| - Handle<Object>(isolate->heap()->null_value()));
|
| + Handle<Object>(isolate()->heap()->null_value(),
|
| + isolate()));
|
| scope_info_length++;
|
|
|
| outer_scope = outer_scope->outer_scope();
|
| @@ -926,8 +935,9 @@ JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script,
|
| Handle<String> source) {
|
| Isolate* isolate = Isolate::Current();
|
|
|
| - FunctionInfoListener listener;
|
| - Handle<Object> original_source = Handle<Object>(script->source());
|
| + FunctionInfoListener listener(isolate);
|
| + Handle<Object> original_source =
|
| + Handle<Object>(script->source(), isolate);
|
| script->set_source(*source);
|
| isolate->set_active_function_info_listener(&listener);
|
|
|
| @@ -944,7 +954,8 @@ JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script,
|
| // A logical 'catch' section.
|
| Handle<JSObject> rethrow_exception;
|
| if (isolate->has_pending_exception()) {
|
| - Handle<Object> exception(isolate->pending_exception()->ToObjectChecked());
|
| + Handle<Object> exception(isolate->pending_exception()->ToObjectChecked(),
|
| + isolate);
|
| MessageLocation message_location = isolate->GetMessageLocation();
|
|
|
| isolate->clear_pending_message();
|
| @@ -961,8 +972,9 @@ JSArray* LiveEdit::GatherCompileInfo(Handle<Script> script,
|
| factory->LookupOneByteSymbol(STATIC_ASCII_VECTOR("endPosition"));
|
| Handle<String> script_obj_key =
|
| factory->LookupOneByteSymbol(STATIC_ASCII_VECTOR("scriptObject"));
|
| - Handle<Smi> start_pos(Smi::FromInt(message_location.start_pos()));
|
| - Handle<Smi> end_pos(Smi::FromInt(message_location.end_pos()));
|
| + Handle<Smi> start_pos(Smi::FromInt(message_location.start_pos()),
|
| + isolate);
|
| + Handle<Smi> end_pos(Smi::FromInt(message_location.end_pos()), isolate);
|
| Handle<JSValue> script_obj = GetScriptWrapper(message_location.script());
|
| JSReceiver::SetProperty(
|
| rethrow_exception, start_pos_key, start_pos, NONE, kNonStrictMode);
|
| @@ -1552,15 +1564,16 @@ static Handle<Script> CreateScriptCopy(Handle<Script> original) {
|
| Object* LiveEdit::ChangeScriptSource(Handle<Script> original_script,
|
| Handle<String> new_source,
|
| Handle<Object> old_script_name) {
|
| + Isolate* isolate = original_script->GetIsolate();
|
| Handle<Object> old_script_object;
|
| if (old_script_name->IsString()) {
|
| Handle<Script> old_script = CreateScriptCopy(original_script);
|
| old_script->set_name(String::cast(*old_script_name));
|
| old_script_object = old_script;
|
| - Isolate::Current()->debugger()->OnAfterCompile(
|
| + isolate->debugger()->OnAfterCompile(
|
| old_script, Debugger::SEND_WHEN_DEBUGGING);
|
| } else {
|
| - old_script_object = Handle<Object>(HEAP->null_value());
|
| + old_script_object = isolate->factory()->null_value();
|
| }
|
|
|
| original_script->set_source(*new_source);
|
| @@ -1606,6 +1619,7 @@ static bool CheckActivation(Handle<JSArray> shared_info_array,
|
| Handle<JSFunction> function(
|
| JSFunction::cast(JavaScriptFrame::cast(frame)->function()));
|
|
|
| + Isolate* isolate = shared_info_array->GetIsolate();
|
| int len = GetArrayLength(shared_info_array);
|
| for (int i = 0; i < len; i++) {
|
| Object* element = shared_info_array->GetElementNoExceptionThrown(i);
|
| @@ -1615,7 +1629,8 @@ static bool CheckActivation(Handle<JSArray> shared_info_array,
|
| UnwrapSharedFunctionInfoFromJSValue(jsvalue);
|
|
|
| if (function->shared() == *shared || IsInlined(*function, *shared)) {
|
| - SetElementNonStrict(result, i, Handle<Smi>(Smi::FromInt(status)));
|
| + SetElementNonStrict(result, i, Handle<Smi>(Smi::FromInt(status),
|
| + isolate));
|
| return true;
|
| }
|
| }
|
| @@ -1920,6 +1935,7 @@ static const char* DropActivationsInActiveThread(
|
| return message;
|
| }
|
|
|
| + Isolate* isolate = shared_info_array->GetIsolate();
|
| int array_len = GetArrayLength(shared_info_array);
|
|
|
| // Replace "blocked on active" with "replaced on active" status.
|
| @@ -1927,7 +1943,7 @@ static const char* DropActivationsInActiveThread(
|
| if (result->GetElement(i) ==
|
| Smi::FromInt(LiveEdit::FUNCTION_BLOCKED_ON_ACTIVE_STACK)) {
|
| Handle<Object> replaced(
|
| - Smi::FromInt(LiveEdit::FUNCTION_REPLACED_ON_ACTIVE_STACK));
|
| + Smi::FromInt(LiveEdit::FUNCTION_REPLACED_ON_ACTIVE_STACK), isolate);
|
| SetElementNonStrict(result, i, replaced);
|
| }
|
| }
|
| @@ -1962,16 +1978,17 @@ class InactiveThreadActivationsChecker : public ThreadVisitor {
|
|
|
| Handle<JSArray> LiveEdit::CheckAndDropActivations(
|
| Handle<JSArray> shared_info_array, bool do_drop, Zone* zone) {
|
| + Isolate* isolate = shared_info_array->GetIsolate();
|
| int len = GetArrayLength(shared_info_array);
|
|
|
| - Handle<JSArray> result = FACTORY->NewJSArray(len);
|
| + Handle<JSArray> result = isolate->factory()->NewJSArray(len);
|
|
|
| // Fill the default values.
|
| for (int i = 0; i < len; i++) {
|
| SetElementNonStrict(
|
| result,
|
| i,
|
| - Handle<Smi>(Smi::FromInt(FUNCTION_AVAILABLE_FOR_PATCH)));
|
| + Handle<Smi>(Smi::FromInt(FUNCTION_AVAILABLE_FOR_PATCH), isolate));
|
| }
|
|
|
|
|
|
|