Chromium Code Reviews| Index: src/api.cc |
| diff --git a/src/api.cc b/src/api.cc |
| index 46cac758f08ba3c75a0bc0767554f7bb431ea426..469d9c6336327f20b6b231c17e704d165c93aafa 100644 |
| --- a/src/api.cc |
| +++ b/src/api.cc |
| @@ -2275,31 +2275,15 @@ v8::Local<v8::StackTrace> Message::GetStackTrace() const { |
| } |
| -MUST_USE_RESULT static i::MaybeHandle<i::Object> CallV8HeapFunction( |
| - i::Isolate* isolate, const char* name, i::Handle<i::Object> recv, int argc, |
| - i::Handle<i::Object> argv[]) { |
| - i::Handle<i::Object> object_fun = |
| - i::Object::GetProperty( |
| - isolate, isolate->js_builtins_object(), name).ToHandleChecked(); |
| - i::Handle<i::JSFunction> fun = i::Handle<i::JSFunction>::cast(object_fun); |
| - return i::Execution::Call(isolate, fun, recv, argc, argv); |
| -} |
| - |
| - |
| -MUST_USE_RESULT static i::MaybeHandle<i::Object> CallV8HeapFunction( |
| - i::Isolate* isolate, const char* name, i::Handle<i::Object> data) { |
| - i::Handle<i::Object> argv[] = { data }; |
| - return CallV8HeapFunction(isolate, name, isolate->js_builtins_object(), |
| - arraysize(argv), argv); |
| -} |
| - |
| - |
| Maybe<int> Message::GetLineNumber(Local<Context> context) const { |
| PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Message::GetLineNumber()", int); |
| + i::Handle<i::JSFunction> fun = isolate->message_get_line_number(); |
| + i::Handle<i::Object> undefined = isolate->factory()->undefined_value(); |
| + i::Handle<i::Object> args[] = {Utils::OpenHandle(this)}; |
| i::Handle<i::Object> result; |
| has_pending_exception = |
| - !CallV8HeapFunction(isolate, "$messageGetLineNumber", |
| - Utils::OpenHandle(this)).ToHandle(&result); |
| + !i::Execution::Call(isolate, fun, undefined, arraysize(args), args) |
|
Camillo Bruni
2015/08/17 14:43:35
Would it make sense to create a helper function to
|
| + .ToHandle(&result); |
| RETURN_ON_FAILED_EXECUTION_PRIMITIVE(int); |
| return Just(static_cast<int>(result->Number())); |
| } |
| @@ -2326,13 +2310,15 @@ int Message::GetEndPosition() const { |
| Maybe<int> Message::GetStartColumn(Local<Context> context) const { |
| PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Message::GetStartColumn()", |
| int); |
| - auto self = Utils::OpenHandle(this); |
| - i::Handle<i::Object> start_col_obj; |
| + i::Handle<i::JSFunction> fun = isolate->message_get_column_number(); |
| + i::Handle<i::Object> undefined = isolate->factory()->undefined_value(); |
| + i::Handle<i::Object> args[] = {Utils::OpenHandle(this)}; |
| + i::Handle<i::Object> result; |
| has_pending_exception = |
| - !CallV8HeapFunction(isolate, "$messageGetPositionInLine", self) |
| - .ToHandle(&start_col_obj); |
| + !i::Execution::Call(isolate, fun, undefined, arraysize(args), args) |
| + .ToHandle(&result); |
| RETURN_ON_FAILED_EXECUTION_PRIMITIVE(int); |
| - return Just(static_cast<int>(start_col_obj->Number())); |
| + return Just(static_cast<int>(result->Number())); |
| } |
| @@ -2344,16 +2330,19 @@ int Message::GetStartColumn() const { |
| Maybe<int> Message::GetEndColumn(Local<Context> context) const { |
| - PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Message::GetEndColumn()", int); |
| auto self = Utils::OpenHandle(this); |
| - i::Handle<i::Object> start_col_obj; |
| + PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Message::GetEndColumn()", int); |
| + i::Handle<i::JSFunction> fun = isolate->message_get_column_number(); |
| + i::Handle<i::Object> undefined = isolate->factory()->undefined_value(); |
| + i::Handle<i::Object> args[] = {self}; |
| + i::Handle<i::Object> result; |
| has_pending_exception = |
| - !CallV8HeapFunction(isolate, "$messageGetPositionInLine", self) |
| - .ToHandle(&start_col_obj); |
| + !i::Execution::Call(isolate, fun, undefined, arraysize(args), args) |
| + .ToHandle(&result); |
| RETURN_ON_FAILED_EXECUTION_PRIMITIVE(int); |
| int start = self->start_position(); |
| int end = self->end_position(); |
| - return Just(static_cast<int>(start_col_obj->Number()) + (end - start)); |
| + return Just(static_cast<int>(result->Number()) + (end - start)); |
| } |
| @@ -2387,10 +2376,13 @@ bool Message::IsOpaque() const { |
| MaybeLocal<String> Message::GetSourceLine(Local<Context> context) const { |
| PREPARE_FOR_EXECUTION(context, "v8::Message::GetSourceLine()", String); |
| + i::Handle<i::JSFunction> fun = isolate->message_get_source_line(); |
| + i::Handle<i::Object> undefined = isolate->factory()->undefined_value(); |
| + i::Handle<i::Object> args[] = {Utils::OpenHandle(this)}; |
| i::Handle<i::Object> result; |
| has_pending_exception = |
| - !CallV8HeapFunction(isolate, "$messageGetSourceLine", |
| - Utils::OpenHandle(this)).ToHandle(&result); |
| + !i::Execution::Call(isolate, fun, undefined, arraysize(args), args) |
| + .ToHandle(&result); |
| RETURN_ON_FAILED_EXECUTION(String); |
| Local<String> str; |
| if (result->IsString()) { |
| @@ -3380,9 +3372,11 @@ Maybe<bool> Value::Equals(Local<Context> context, Local<Value> that) const { |
| } |
| PREPARE_FOR_EXECUTION_PRIMITIVE(context, "v8::Value::Equals()", bool); |
| i::Handle<i::Object> args[] = { other }; |
| + i::Handle<i::JSFunction> fun(i::JSFunction::cast( |
| + isolate->js_builtins_object()->javascript_builtin(i::Builtins::EQUALS))); |
| i::Handle<i::Object> result; |
| has_pending_exception = |
| - !CallV8HeapFunction(isolate, "EQUALS", self, arraysize(args), args) |
| + !i::Execution::Call(isolate, fun, self, arraysize(args), args) |
| .ToHandle(&result); |
| RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); |
| return Just(*result == i::Smi::FromInt(i::EQUAL)); |
| @@ -3512,11 +3506,12 @@ Maybe<bool> v8::Object::DefineOwnProperty(v8::Local<v8::Context> context, |
| i::Handle<i::JSArray> desc_array = |
| isolate->factory()->NewJSArrayWithElements(desc, i::FAST_ELEMENTS, 3); |
| i::Handle<i::Object> args[] = {self, key_obj, value_obj, desc_array}; |
| + i::Handle<i::Object> undefined = isolate->factory()->undefined_value(); |
| + i::Handle<i::JSFunction> fun = isolate->object_define_own_property(); |
| i::Handle<i::Object> result; |
| has_pending_exception = |
| - !CallV8HeapFunction(isolate, "$objectDefineOwnProperty", |
| - isolate->factory()->undefined_value(), |
| - arraysize(args), args).ToHandle(&result); |
| + !i::Execution::Call(isolate, fun, undefined, arraysize(args), args) |
| + .ToHandle(&result); |
| RETURN_ON_FAILED_EXECUTION_PRIMITIVE(bool); |
| return Just(result->BooleanValue()); |
| } |
| @@ -3648,11 +3643,12 @@ MaybeLocal<Value> v8::Object::GetOwnPropertyDescriptor(Local<Context> context, |
| auto obj = Utils::OpenHandle(this); |
| auto key_name = Utils::OpenHandle(*key); |
| i::Handle<i::Object> args[] = { obj, key_name }; |
| + i::Handle<i::JSFunction> fun = isolate->object_get_own_property_descriptor(); |
| + i::Handle<i::Object> undefined = isolate->factory()->undefined_value(); |
| i::Handle<i::Object> result; |
| has_pending_exception = |
| - !CallV8HeapFunction(isolate, "$objectGetOwnPropertyDescriptor", |
| - isolate->factory()->undefined_value(), |
| - arraysize(args), args).ToHandle(&result); |
| + !i::Execution::Call(isolate, fun, undefined, arraysize(args), args) |
| + .ToHandle(&result); |
| RETURN_ON_FAILED_EXECUTION(Value); |
| RETURN_ESCAPED(Utils::ToLocal(result)); |
| } |