| Index: src/d8.cc
|
| diff --git a/src/d8.cc b/src/d8.cc
|
| index e78f568119789df936625c31309ab003a239efcb..57e0c0424f3ddef31a6d517476c6005f61ea74e6 100644
|
| --- a/src/d8.cc
|
| +++ b/src/d8.cc
|
| @@ -287,46 +287,49 @@ int PerIsolateData::RealmFind(Handle<Context> context) {
|
|
|
|
|
| // Realm.current() returns the index of the currently active realm.
|
| -Handle<Value> Shell::RealmCurrent(const Arguments& args) {
|
| +void Shell::RealmCurrent(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| Isolate* isolate = args.GetIsolate();
|
| PerIsolateData* data = PerIsolateData::Get(isolate);
|
| int index = data->RealmFind(Context::GetEntered());
|
| - if (index == -1) return Undefined(isolate);
|
| - return Number::New(index);
|
| + if (index == -1) return;
|
| + args.GetReturnValue().Set(index);
|
| }
|
|
|
|
|
| // Realm.owner(o) returns the index of the realm that created o.
|
| -Handle<Value> Shell::RealmOwner(const Arguments& args) {
|
| +void Shell::RealmOwner(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| Isolate* isolate = args.GetIsolate();
|
| PerIsolateData* data = PerIsolateData::Get(isolate);
|
| if (args.Length() < 1 || !args[0]->IsObject()) {
|
| - return Throw("Invalid argument");
|
| + Throw("Invalid argument");
|
| + return;
|
| }
|
| int index = data->RealmFind(args[0]->ToObject()->CreationContext());
|
| - if (index == -1) return Undefined(isolate);
|
| - return Number::New(index);
|
| + if (index == -1) return;
|
| + args.GetReturnValue().Set(index);
|
| }
|
|
|
|
|
| // Realm.global(i) returns the global object of realm i.
|
| // (Note that properties of global objects cannot be read/written cross-realm.)
|
| -Handle<Value> Shell::RealmGlobal(const Arguments& args) {
|
| +void Shell::RealmGlobal(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| PerIsolateData* data = PerIsolateData::Get(args.GetIsolate());
|
| if (args.Length() < 1 || !args[0]->IsNumber()) {
|
| - return Throw("Invalid argument");
|
| + Throw("Invalid argument");
|
| + return;
|
| }
|
| int index = args[0]->Uint32Value();
|
| if (index >= data->realm_count_ || data->realms_[index].IsEmpty()) {
|
| - return Throw("Invalid realm index");
|
| + Throw("Invalid realm index");
|
| + return;
|
| }
|
| - return
|
| - Local<Context>::New(args.GetIsolate(), data->realms_[index])->Global();
|
| + args.GetReturnValue().Set(
|
| + Local<Context>::New(args.GetIsolate(), data->realms_[index])->Global());
|
| }
|
|
|
|
|
| // Realm.create() creates a new realm and returns its index.
|
| -Handle<Value> Shell::RealmCreate(const Arguments& args) {
|
| +void Shell::RealmCreate(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| Isolate* isolate = args.GetIsolate();
|
| PerIsolateData* data = PerIsolateData::Get(isolate);
|
| Persistent<Context>* old_realms = data->realms_;
|
| @@ -339,78 +342,82 @@ Handle<Value> Shell::RealmCreate(const Arguments& args) {
|
| Handle<ObjectTemplate> global_template = CreateGlobalTemplate(isolate);
|
| data->realms_[index].Reset(
|
| isolate, Context::New(isolate, NULL, global_template));
|
| - return Number::New(index);
|
| + args.GetReturnValue().Set(index);
|
| }
|
|
|
|
|
| // Realm.dispose(i) disposes the reference to the realm i.
|
| -Handle<Value> Shell::RealmDispose(const Arguments& args) {
|
| +void Shell::RealmDispose(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| Isolate* isolate = args.GetIsolate();
|
| PerIsolateData* data = PerIsolateData::Get(isolate);
|
| if (args.Length() < 1 || !args[0]->IsNumber()) {
|
| - return Throw("Invalid argument");
|
| + Throw("Invalid argument");
|
| + return;
|
| }
|
| int index = args[0]->Uint32Value();
|
| if (index >= data->realm_count_ || data->realms_[index].IsEmpty() ||
|
| index == 0 ||
|
| index == data->realm_current_ || index == data->realm_switch_) {
|
| - return Throw("Invalid realm index");
|
| + Throw("Invalid realm index");
|
| + return;
|
| }
|
| data->realms_[index].Dispose(isolate);
|
| data->realms_[index].Clear();
|
| - return Undefined(isolate);
|
| }
|
|
|
|
|
| // Realm.switch(i) switches to the realm i for consecutive interactive inputs.
|
| -Handle<Value> Shell::RealmSwitch(const Arguments& args) {
|
| +void Shell::RealmSwitch(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| Isolate* isolate = args.GetIsolate();
|
| PerIsolateData* data = PerIsolateData::Get(isolate);
|
| if (args.Length() < 1 || !args[0]->IsNumber()) {
|
| - return Throw("Invalid argument");
|
| + Throw("Invalid argument");
|
| + return;
|
| }
|
| int index = args[0]->Uint32Value();
|
| if (index >= data->realm_count_ || data->realms_[index].IsEmpty()) {
|
| - return Throw("Invalid realm index");
|
| + Throw("Invalid realm index");
|
| + return;
|
| }
|
| data->realm_switch_ = index;
|
| - return Undefined(isolate);
|
| }
|
|
|
|
|
| // Realm.eval(i, s) evaluates s in realm i and returns the result.
|
| -Handle<Value> Shell::RealmEval(const Arguments& args) {
|
| +void Shell::RealmEval(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| Isolate* isolate = args.GetIsolate();
|
| PerIsolateData* data = PerIsolateData::Get(isolate);
|
| if (args.Length() < 2 || !args[0]->IsNumber() || !args[1]->IsString()) {
|
| - return Throw("Invalid argument");
|
| + Throw("Invalid argument");
|
| + return;
|
| }
|
| int index = args[0]->Uint32Value();
|
| if (index >= data->realm_count_ || data->realms_[index].IsEmpty()) {
|
| - return Throw("Invalid realm index");
|
| + Throw("Invalid realm index");
|
| + return;
|
| }
|
| Handle<Script> script = Script::New(args[1]->ToString());
|
| - if (script.IsEmpty()) return Undefined(isolate);
|
| + if (script.IsEmpty()) return;
|
| Local<Context> realm = Local<Context>::New(isolate, data->realms_[index]);
|
| realm->Enter();
|
| Handle<Value> result = script->Run();
|
| realm->Exit();
|
| - return result;
|
| + args.GetReturnValue().Set(result);
|
| }
|
|
|
|
|
| // Realm.shared is an accessor for a single shared value across realms.
|
| -Handle<Value> Shell::RealmSharedGet(Local<String> property,
|
| - const AccessorInfo& info) {
|
| +void Shell::RealmSharedGet(Local<String> property,
|
| + const PropertyCallbackInfo<Value>& info) {
|
| Isolate* isolate = info.GetIsolate();
|
| PerIsolateData* data = PerIsolateData::Get(isolate);
|
| - if (data->realm_shared_.IsEmpty()) return Undefined(isolate);
|
| - return Local<Value>::New(isolate, data->realm_shared_);
|
| + if (data->realm_shared_.IsEmpty()) return;
|
| + info.GetReturnValue().Set(data->realm_shared_);
|
| }
|
|
|
| void Shell::RealmSharedSet(Local<String> property,
|
| Local<Value> value,
|
| - const AccessorInfo& info) {
|
| + const PropertyCallbackInfo<void>& info) {
|
| Isolate* isolate = info.GetIsolate();
|
| PerIsolateData* data = PerIsolateData::Get(isolate);
|
| if (!data->realm_shared_.IsEmpty()) data->realm_shared_.Dispose(isolate);
|
| @@ -418,15 +425,14 @@ void Shell::RealmSharedSet(Local<String> property,
|
| }
|
|
|
|
|
| -Handle<Value> Shell::Print(const Arguments& args) {
|
| - Handle<Value> val = Write(args);
|
| +void Shell::Print(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| + Write(args);
|
| printf("\n");
|
| fflush(stdout);
|
| - return val;
|
| }
|
|
|
|
|
| -Handle<Value> Shell::Write(const Arguments& args) {
|
| +void Shell::Write(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| for (int i = 0; i < args.Length(); i++) {
|
| HandleScope handle_scope(args.GetIsolate());
|
| if (i != 0) {
|
| @@ -436,7 +442,10 @@ Handle<Value> Shell::Write(const Arguments& args) {
|
| // Explicitly catch potential exceptions in toString().
|
| v8::TryCatch try_catch;
|
| Handle<String> str_obj = args[i]->ToString();
|
| - if (try_catch.HasCaught()) return try_catch.ReThrow();
|
| + if (try_catch.HasCaught()) {
|
| + try_catch.ReThrow();
|
| + return;
|
| + }
|
|
|
| v8::String::Utf8Value str(str_obj);
|
| int n = static_cast<int>(fwrite(*str, sizeof(**str), str.length(), stdout));
|
| @@ -445,32 +454,31 @@ Handle<Value> Shell::Write(const Arguments& args) {
|
| Exit(1);
|
| }
|
| }
|
| - return Undefined(args.GetIsolate());
|
| }
|
|
|
|
|
| -Handle<Value> Shell::EnableProfiler(const Arguments& args) {
|
| +void Shell::EnableProfiler(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| V8::ResumeProfiler();
|
| - return Undefined(args.GetIsolate());
|
| }
|
|
|
|
|
| -Handle<Value> Shell::DisableProfiler(const Arguments& args) {
|
| +void Shell::DisableProfiler(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| V8::PauseProfiler();
|
| - return Undefined(args.GetIsolate());
|
| }
|
|
|
|
|
| -Handle<Value> Shell::Read(const Arguments& args) {
|
| +void Shell::Read(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| String::Utf8Value file(args[0]);
|
| if (*file == NULL) {
|
| - return Throw("Error loading file");
|
| + Throw("Error loading file");
|
| + return;
|
| }
|
| Handle<String> source = ReadFile(args.GetIsolate(), *file);
|
| if (source.IsEmpty()) {
|
| - return Throw("Error loading file");
|
| + Throw("Error loading file");
|
| + return;
|
| }
|
| - return source;
|
| + args.GetReturnValue().Set(source);
|
| }
|
|
|
|
|
| @@ -504,39 +512,40 @@ Handle<String> Shell::ReadFromStdin(Isolate* isolate) {
|
| }
|
|
|
|
|
| -Handle<Value> Shell::Load(const Arguments& args) {
|
| +void Shell::Load(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| for (int i = 0; i < args.Length(); i++) {
|
| HandleScope handle_scope(args.GetIsolate());
|
| String::Utf8Value file(args[i]);
|
| if (*file == NULL) {
|
| - return Throw("Error loading file");
|
| + Throw("Error loading file");
|
| + return;
|
| }
|
| Handle<String> source = ReadFile(args.GetIsolate(), *file);
|
| if (source.IsEmpty()) {
|
| - return Throw("Error loading file");
|
| + Throw("Error loading file");
|
| + return;
|
| }
|
| if (!ExecuteString(args.GetIsolate(),
|
| source,
|
| String::New(*file),
|
| false,
|
| true)) {
|
| - return Throw("Error executing file");
|
| + Throw("Error executing file");
|
| + return;
|
| }
|
| }
|
| - return Undefined(args.GetIsolate());
|
| }
|
|
|
|
|
| -Handle<Value> Shell::Quit(const Arguments& args) {
|
| +void Shell::Quit(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| int exit_code = args[0]->Int32Value();
|
| OnExit();
|
| exit(exit_code);
|
| - return Undefined(args.GetIsolate());
|
| }
|
|
|
|
|
| -Handle<Value> Shell::Version(const Arguments& args) {
|
| - return String::New(V8::GetVersion());
|
| +void Shell::Version(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| + args.GetReturnValue().Set(String::New(V8::GetVersion()));
|
| }
|
|
|
|
|
| @@ -1077,19 +1086,21 @@ static void ReadBufferWeakCallback(v8::Isolate* isolate,
|
| object->Dispose(isolate);
|
| }
|
|
|
| -Handle<Value> Shell::ReadBuffer(const Arguments& args) {
|
| +void Shell::ReadBuffer(const v8::FunctionCallbackInfo<v8::Value>& args) {
|
| ASSERT(sizeof(char) == sizeof(uint8_t)); // NOLINT
|
| String::Utf8Value filename(args[0]);
|
| int length;
|
| if (*filename == NULL) {
|
| - return Throw("Error loading file");
|
| + Throw("Error loading file");
|
| + return;
|
| }
|
|
|
| Isolate* isolate = args.GetIsolate();
|
| uint8_t* data = reinterpret_cast<uint8_t*>(
|
| ReadChars(args.GetIsolate(), *filename, &length));
|
| if (data == NULL) {
|
| - return Throw("Error reading file");
|
| + Throw("Error reading file");
|
| + return;
|
| }
|
| Handle<v8::ArrayBuffer> buffer = ArrayBuffer::New(data, length);
|
| v8::Persistent<v8::Value> weak_handle(isolate, buffer);
|
| @@ -1097,7 +1108,7 @@ Handle<Value> Shell::ReadBuffer(const Arguments& args) {
|
| weak_handle.MarkIndependent();
|
| isolate->AdjustAmountOfExternalAllocatedMemory(length);
|
|
|
| - return buffer;
|
| + args.GetReturnValue().Set(buffer);
|
| }
|
|
|
|
|
|
|