Chromium Code Reviews| Index: src/api.cc |
| diff --git a/src/api.cc b/src/api.cc |
| index 5140cd50604ecf88f736135ce1eae9022af7de8b..719b01d55bbe7b8b542b5a17a15e05a6d62d3b0b 100644 |
| --- a/src/api.cc |
| +++ b/src/api.cc |
| @@ -309,24 +309,34 @@ void V8::SetSnapshotDataBlob(StartupData* snapshot_blob) { |
| } |
| -bool RunExtraCode(Isolate* isolate, const char* utf8_source) { |
| +bool RunExtraCode(Isolate* isolate, Local<Context> context, |
| + const char* utf8_source) { |
| // Run custom script if provided. |
| base::ElapsedTimer timer; |
| timer.Start(); |
| TryCatch try_catch(isolate); |
| - Local<String> source_string = String::NewFromUtf8(isolate, utf8_source); |
| - if (try_catch.HasCaught()) return false; |
| - ScriptOrigin origin(String::NewFromUtf8(isolate, "<embedded script>")); |
| + Local<String> source_string; |
| + if (!String::NewFromUtf8(isolate, utf8_source, NewStringType::kNormal) |
| + .ToLocal(&source_string)) { |
| + return false; |
| + } |
| + Local<String> resource_name; |
| + if (!String::NewFromUtf8(isolate, "<embedded script>", NewStringType::kNormal) |
| + .ToLocal(&resource_name)) { |
|
vogelheim
2015/06/03 08:23:13
How could this NewFromUtf8 call fail?
jochen (gone - plz use gerrit)
2015/06/03 09:43:57
it can't. Made it ToLocalChecked()
|
| + return false; |
| + } |
| + ScriptOrigin origin(resource_name); |
| ScriptCompiler::Source source(source_string, origin); |
| - Local<Script> script = ScriptCompiler::Compile(isolate, &source); |
| - if (try_catch.HasCaught()) return false; |
| - script->Run(); |
| + Local<Script> script; |
| + if (!ScriptCompiler::Compile(context, &source).ToLocal(&script)) return false; |
| + if (script->Run(context).IsEmpty()) return false; |
| if (i::FLAG_profile_deserialization) { |
| i::PrintF("Executing custom snapshot script took %0.3f ms\n", |
| timer.Elapsed().InMillisecondsF()); |
| } |
| timer.Stop(); |
| - return !try_catch.HasCaught(); |
| + CHECK(!try_catch.HasCaught()); |
| + return true; |
| } |
| @@ -367,7 +377,7 @@ StartupData V8::CreateSnapshotDataBlob(const char* custom_source) { |
| if (custom_source != NULL) { |
| metadata.set_embeds_script(true); |
| Context::Scope context_scope(new_context); |
| - if (!RunExtraCode(isolate, custom_source)) context.Reset(); |
| + if (!RunExtraCode(isolate, new_context, custom_source)) context.Reset(); |
| } |
| } |
| if (!context.IsEmpty()) { |
| @@ -3867,11 +3877,13 @@ MaybeLocal<String> v8::Object::ObjectProtoToString(Local<Context> context) { |
| // return "[object " + c + "]"; |
| if (!name->IsString()) { |
| - return v8::String::NewFromUtf8(v8_isolate, "[object ]"); |
| + return v8::String::NewFromUtf8(v8_isolate, "[object ]", |
| + NewStringType::kNormal); |
| } |
| auto class_name = i::Handle<i::String>::cast(name); |
| if (i::String::Equals(class_name, isolate->factory()->Arguments_string())) { |
| - return v8::String::NewFromUtf8(v8_isolate, "[object Object]"); |
| + return v8::String::NewFromUtf8(v8_isolate, "[object Object]", |
| + NewStringType::kNormal); |
| } |
| if (internal::FLAG_harmony_tostring) { |
| PREPARE_FOR_EXECUTION(context, "v8::Object::ObjectProtoToString()", String); |
| @@ -3907,8 +3919,8 @@ MaybeLocal<String> v8::Object::ObjectProtoToString(Local<Context> context) { |
| i::MemCopy(ptr, postfix, postfix_len * v8::internal::kCharSize); |
| // Copy the buffer into a heap-allocated string and return it. |
| - return v8::String::NewFromUtf8(v8_isolate, buf.start(), String::kNormalString, |
| - buf_len); |
| + return v8::String::NewFromUtf8(v8_isolate, buf.start(), |
| + NewStringType::kNormal, buf_len); |
| } |
| @@ -5402,7 +5414,6 @@ void v8::Object::SetInternalField(int index, v8::Handle<Value> value) { |
| if (!InternalFieldOK(obj, index, location)) return; |
| i::Handle<i::Object> val = Utils::OpenHandle(*value); |
| obj->SetInternalField(index, *val); |
| - DCHECK(value->Equals(GetInternalField(index))); |
| } |
| @@ -7506,14 +7517,15 @@ void Isolate::VisitHandlesForPartialDependence( |
| String::Utf8Value::Utf8Value(v8::Handle<v8::Value> obj) |
| : str_(NULL), length_(0) { |
| + if (obj.IsEmpty()) return; |
| i::Isolate* isolate = i::Isolate::Current(); |
| Isolate* v8_isolate = reinterpret_cast<Isolate*>(isolate); |
| - if (obj.IsEmpty()) return; |
| ENTER_V8(isolate); |
| i::HandleScope scope(isolate); |
| + Local<Context> context = v8_isolate->GetCurrentContext(); |
| TryCatch try_catch(v8_isolate); |
| - Handle<String> str = obj->ToString(v8_isolate); |
| - if (str.IsEmpty()) return; |
| + Handle<String> str; |
| + if (!obj->ToString(context).ToLocal(&str)) return; |
| i::Handle<i::String> i_str = Utils::OpenHandle(*str); |
| length_ = v8::Utf8Length(*i_str, isolate); |
| str_ = i::NewArray<char>(length_ + 1); |
| @@ -7528,14 +7540,15 @@ String::Utf8Value::~Utf8Value() { |
| String::Value::Value(v8::Handle<v8::Value> obj) |
| : str_(NULL), length_(0) { |
| + if (obj.IsEmpty()) return; |
| i::Isolate* isolate = i::Isolate::Current(); |
| Isolate* v8_isolate = reinterpret_cast<Isolate*>(isolate); |
| - if (obj.IsEmpty()) return; |
| ENTER_V8(isolate); |
| i::HandleScope scope(isolate); |
| + Local<Context> context = v8_isolate->GetCurrentContext(); |
| TryCatch try_catch(v8_isolate); |
| - Handle<String> str = obj->ToString(v8_isolate); |
| - if (str.IsEmpty()) return; |
| + Handle<String> str; |
| + if (!obj->ToString(context).ToLocal(&str)) return; |
| length_ = str->Length(); |
| str_ = i::NewArray<uint16_t>(length_ + 1); |
| str->Write(str_); |