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

Unified Diff: src/bootstrapper.cc

Issue 2142933003: Move Error methods to C++ (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Handle exception in GetProperty Created 4 years, 5 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 | « src/accessors.cc ('k') | src/builtins/builtins.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/bootstrapper.cc
diff --git a/src/bootstrapper.cc b/src/bootstrapper.cc
index 3d5bcce05e4d9ee0e5c1a170f0fa103adec760f2..5109cd2814a01d89f7320c246a351b2338a7fbfa 100644
--- a/src/bootstrapper.cc
+++ b/src/bootstrapper.cc
@@ -966,6 +966,71 @@ static void InstallWithIntrinsicDefaultProto(Isolate* isolate,
isolate->native_context()->set(context_index, *function);
}
+static void InstallError(Isolate* isolate, Handle<JSObject> global,
+ Handle<String> name, int context_index) {
+ Factory* factory = isolate->factory();
+
+ Handle<JSFunction> error_fun =
+ InstallFunction(global, name, JS_ERROR_TYPE, JSObject::kHeaderSize,
+ isolate->initial_object_prototype(),
+ Builtins::kErrorConstructor, DONT_ENUM);
+ error_fun->shared()->set_instance_class_name(*factory->Error_string());
+ error_fun->shared()->DontAdaptArguments();
+ error_fun->shared()->set_construct_stub(
+ *isolate->builtins()->ErrorConstructor());
+ error_fun->shared()->set_length(1);
+ error_fun->shared()->set_native(true);
+
+ if (context_index == Context::ERROR_FUNCTION_INDEX) {
+ Handle<JSFunction> capture_stack_trace_fun =
+ SimpleInstallFunction(error_fun, "captureStackTrace",
+ Builtins::kErrorCaptureStackTrace, 2, false);
+ capture_stack_trace_fun->shared()->set_native(true);
+ }
+
+ InstallWithIntrinsicDefaultProto(isolate, error_fun, context_index);
+
+ {
+ Handle<JSObject> prototype =
+ factory->NewJSObject(isolate->object_function(), TENURED);
+
+ JSObject::AddProperty(prototype, factory->name_string(), name, DONT_ENUM);
+ JSObject::AddProperty(prototype, factory->message_string(),
+ factory->empty_string(), DONT_ENUM);
+ JSObject::AddProperty(prototype, factory->constructor_string(), error_fun,
+ DONT_ENUM);
+
+ Handle<JSFunction> to_string_fun =
+ SimpleInstallFunction(prototype, factory->toString_string(),
+ Builtins::kErrorPrototypeToString, 0, true);
+ to_string_fun->shared()->set_native(true);
+
+ if (context_index != Context::ERROR_FUNCTION_INDEX) {
+ Handle<JSFunction> global_error = isolate->error_function();
+ CHECK(JSReceiver::SetPrototype(error_fun, global_error, false,
+ Object::THROW_ON_ERROR)
+ .FromMaybe(false));
+ CHECK(JSReceiver::SetPrototype(prototype,
+ handle(global_error->prototype(), isolate),
+ false, Object::THROW_ON_ERROR)
+ .FromMaybe(false));
+ }
+
+ Accessors::FunctionSetPrototype(error_fun, prototype).Assert();
+ }
+
+ Handle<Map> initial_map(error_fun->initial_map());
+ Map::EnsureDescriptorSlack(initial_map, 1);
+
+ PropertyAttributes attribs = DONT_ENUM;
+ Handle<AccessorInfo> error_stack =
+ Accessors::ErrorStackInfo(isolate, attribs);
+ {
+ AccessorConstantDescriptor d(Handle<Name>(Name::cast(error_stack->name())),
+ error_stack, attribs);
+ initial_map->AppendDescriptor(&d);
+ }
+}
// This is only called if we are not using snapshots. The equivalent
// work in the snapshot case is done in HookUpGlobalObject.
@@ -1509,59 +1574,38 @@ void Genesis::InitializeGlobal(Handle<JSGlobalObject> global_object,
}
{ // -- E r r o r
- Handle<JSFunction> error_fun = InstallFunction(
- global, "Error", JS_ERROR_TYPE, JSObject::kHeaderSize,
- isolate->initial_object_prototype(), Builtins::kIllegal);
- InstallWithIntrinsicDefaultProto(isolate, error_fun,
- Context::ERROR_FUNCTION_INDEX);
+ InstallError(isolate, global, factory->Error_string(),
+ Context::ERROR_FUNCTION_INDEX);
}
{ // -- E v a l E r r o r
- Handle<JSFunction> eval_error_fun = InstallFunction(
- global, "EvalError", JS_ERROR_TYPE, JSObject::kHeaderSize,
- isolate->initial_object_prototype(), Builtins::kIllegal);
- InstallWithIntrinsicDefaultProto(isolate, eval_error_fun,
- Context::EVAL_ERROR_FUNCTION_INDEX);
+ InstallError(isolate, global, factory->EvalError_string(),
+ Context::EVAL_ERROR_FUNCTION_INDEX);
}
{ // -- R a n g e E r r o r
- Handle<JSFunction> range_error_fun = InstallFunction(
- global, "RangeError", JS_ERROR_TYPE, JSObject::kHeaderSize,
- isolate->initial_object_prototype(), Builtins::kIllegal);
- InstallWithIntrinsicDefaultProto(isolate, range_error_fun,
- Context::RANGE_ERROR_FUNCTION_INDEX);
+ InstallError(isolate, global, factory->RangeError_string(),
+ Context::RANGE_ERROR_FUNCTION_INDEX);
}
{ // -- R e f e r e n c e E r r o r
- Handle<JSFunction> reference_error_fun = InstallFunction(
- global, "ReferenceError", JS_ERROR_TYPE, JSObject::kHeaderSize,
- isolate->initial_object_prototype(), Builtins::kIllegal);
- InstallWithIntrinsicDefaultProto(isolate, reference_error_fun,
- Context::REFERENCE_ERROR_FUNCTION_INDEX);
+ InstallError(isolate, global, factory->ReferenceError_string(),
+ Context::REFERENCE_ERROR_FUNCTION_INDEX);
}
{ // -- S y n t a x E r r o r
- Handle<JSFunction> syntax_error_fun = InstallFunction(
- global, "SyntaxError", JS_ERROR_TYPE, JSObject::kHeaderSize,
- isolate->initial_object_prototype(), Builtins::kIllegal);
- InstallWithIntrinsicDefaultProto(isolate, syntax_error_fun,
- Context::SYNTAX_ERROR_FUNCTION_INDEX);
+ InstallError(isolate, global, factory->SyntaxError_string(),
+ Context::SYNTAX_ERROR_FUNCTION_INDEX);
}
{ // -- T y p e E r r o r
- Handle<JSFunction> type_error_fun = InstallFunction(
- global, "TypeError", JS_ERROR_TYPE, JSObject::kHeaderSize,
- isolate->initial_object_prototype(), Builtins::kIllegal);
- InstallWithIntrinsicDefaultProto(isolate, type_error_fun,
- Context::TYPE_ERROR_FUNCTION_INDEX);
+ InstallError(isolate, global, factory->TypeError_string(),
+ Context::TYPE_ERROR_FUNCTION_INDEX);
}
{ // -- U R I E r r o r
- Handle<JSFunction> uri_error_fun = InstallFunction(
- global, "URIError", JS_ERROR_TYPE, JSObject::kHeaderSize,
- isolate->initial_object_prototype(), Builtins::kIllegal);
- InstallWithIntrinsicDefaultProto(isolate, uri_error_fun,
- Context::URI_ERROR_FUNCTION_INDEX);
+ InstallError(isolate, global, factory->URIError_string(),
+ Context::URI_ERROR_FUNCTION_INDEX);
}
// Initialize the embedder data slot.
« no previous file with comments | « src/accessors.cc ('k') | src/builtins/builtins.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698