Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: src/api.cc

Issue 1294583006: Clean up native context slots and add new ones. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « include/v8.h ('k') | src/bootstrapper.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/api.cc
diff --git a/src/api.cc b/src/api.cc
index 72af664b0847d9b359e0e08bfadadf64b7fbb1a9..07b28536e959baeba7782629e98b43ca7d041d85 100644
--- a/src/api.cc
+++ b/src/api.cc
@@ -2813,34 +2813,23 @@ bool Value::IsUint32() const {
}
-static bool CheckConstructor(i::Isolate* isolate,
- i::Handle<i::JSObject> obj,
- const char* class_name) {
- i::Handle<i::Object> constr(obj->map()->GetConstructor(), isolate);
- if (!constr->IsJSFunction()) return false;
- i::Handle<i::JSFunction> func = i::Handle<i::JSFunction>::cast(constr);
- return func->shared()->native() && constr.is_identical_to(
- i::Object::GetProperty(isolate,
- isolate->js_builtins_object(),
- class_name).ToHandleChecked());
-}
-
-
bool Value::IsNativeError() const {
i::Handle<i::Object> obj = Utils::OpenHandle(this);
- if (obj->IsJSObject()) {
- i::Handle<i::JSObject> js_obj(i::JSObject::cast(*obj));
- i::Isolate* isolate = js_obj->GetIsolate();
- return CheckConstructor(isolate, js_obj, "$Error") ||
- CheckConstructor(isolate, js_obj, "$EvalError") ||
- CheckConstructor(isolate, js_obj, "$RangeError") ||
- CheckConstructor(isolate, js_obj, "$ReferenceError") ||
- CheckConstructor(isolate, js_obj, "$SyntaxError") ||
- CheckConstructor(isolate, js_obj, "$TypeError") ||
- CheckConstructor(isolate, js_obj, "$URIError");
- } else {
- return false;
- }
+ if (!obj->IsJSObject()) return false;
+ i::Handle<i::JSObject> js_obj = i::Handle<i::JSObject>::cast(obj);
+ i::Isolate* isolate = js_obj->GetIsolate();
+ i::Handle<i::Object> constructor(js_obj->map()->GetConstructor(), isolate);
+ if (!constructor->IsJSFunction()) return false;
+ i::Handle<i::JSFunction> function =
+ i::Handle<i::JSFunction>::cast(constructor);
+ if (!function->shared()->native()) return false;
+ return function.is_identical_to(isolate->error_function()) ||
+ function.is_identical_to(isolate->eval_error_function()) ||
+ function.is_identical_to(isolate->range_error_function()) ||
+ function.is_identical_to(isolate->reference_error_function()) ||
+ function.is_identical_to(isolate->syntax_error_function()) ||
+ function.is_identical_to(isolate->type_error_function()) ||
+ function.is_identical_to(isolate->uri_error_function());
}
@@ -7640,26 +7629,27 @@ String::Value::~Value() {
}
-#define DEFINE_ERROR(NAME) \
- Local<Value> Exception::NAME(v8::Local<v8::String> raw_message) { \
- i::Isolate* isolate = i::Isolate::Current(); \
- LOG_API(isolate, #NAME); \
- ENTER_V8(isolate); \
- i::Object* error; \
- { \
- i::HandleScope scope(isolate); \
- i::Handle<i::String> message = Utils::OpenHandle(*raw_message); \
- error = *isolate->factory()->NewError("$" #NAME, message); \
- } \
- i::Handle<i::Object> result(error, isolate); \
- return Utils::ToLocal(result); \
- }
-
-DEFINE_ERROR(RangeError)
-DEFINE_ERROR(ReferenceError)
-DEFINE_ERROR(SyntaxError)
-DEFINE_ERROR(TypeError)
-DEFINE_ERROR(Error)
+#define DEFINE_ERROR(NAME, name) \
+ Local<Value> Exception::NAME(v8::Local<v8::String> raw_message) { \
+ i::Isolate* isolate = i::Isolate::Current(); \
+ LOG_API(isolate, #NAME); \
+ ENTER_V8(isolate); \
+ i::Object* error; \
+ { \
+ i::HandleScope scope(isolate); \
+ i::Handle<i::String> message = Utils::OpenHandle(*raw_message); \
+ i::Handle<i::JSFunction> constructor = isolate->name##_function(); \
+ error = *isolate->factory()->NewError(constructor, message); \
+ } \
+ i::Handle<i::Object> result(error, isolate); \
+ return Utils::ToLocal(result); \
+ }
+
+DEFINE_ERROR(RangeError, range_error)
+DEFINE_ERROR(ReferenceError, reference_error)
+DEFINE_ERROR(SyntaxError, syntax_error)
+DEFINE_ERROR(TypeError, type_error)
+DEFINE_ERROR(Error, error)
#undef DEFINE_ERROR
« no previous file with comments | « include/v8.h ('k') | src/bootstrapper.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698