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

Side by Side Diff: src/api.cc

Issue 13799003: Change Context::New not create persistent handles. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Adapted cctest initialization to new API. Created 7 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « include/v8.h ('k') | src/bootstrapper.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 4845 matching lines...) Expand 10 before | Expand all | Expand 10 after
4856 if (templ->constructor()->IsUndefined()) { 4856 if (templ->constructor()->IsUndefined()) {
4857 Local<FunctionTemplate> constructor = FunctionTemplate::New(); 4857 Local<FunctionTemplate> constructor = FunctionTemplate::New();
4858 Utils::OpenHandle(*constructor)->set_instance_template(*templ); 4858 Utils::OpenHandle(*constructor)->set_instance_template(*templ);
4859 templ->set_constructor(*Utils::OpenHandle(*constructor)); 4859 templ->set_constructor(*Utils::OpenHandle(*constructor));
4860 } 4860 }
4861 return i::Handle<i::FunctionTemplateInfo>( 4861 return i::Handle<i::FunctionTemplateInfo>(
4862 i::FunctionTemplateInfo::cast(templ->constructor())); 4862 i::FunctionTemplateInfo::cast(templ->constructor()));
4863 } 4863 }
4864 4864
4865 4865
4866 Persistent<Context> v8::Context::New( 4866 static i::Handle<i::Context> CreateEnvironment(
4867 i::Isolate* isolate,
4867 v8::ExtensionConfiguration* extensions, 4868 v8::ExtensionConfiguration* extensions,
4868 v8::Handle<ObjectTemplate> global_template, 4869 v8::Handle<ObjectTemplate> global_template,
4869 v8::Handle<Value> global_object) { 4870 v8::Handle<Value> global_object) {
4870 i::Isolate::EnsureDefaultIsolate(); 4871 i::Handle<i::Context> env;
4871 i::Isolate* isolate = i::Isolate::Current();
4872 EnsureInitializedForIsolate(isolate, "v8::Context::New()");
4873 LOG_API(isolate, "Context::New");
4874 ON_BAILOUT(isolate, "v8::Context::New()", return Persistent<Context>());
4875 4872
4876 // Enter V8 via an ENTER_V8 scope. 4873 // Enter V8 via an ENTER_V8 scope.
4877 i::Handle<i::Context> env;
4878 { 4874 {
4879 ENTER_V8(isolate); 4875 ENTER_V8(isolate);
4880 v8::Handle<ObjectTemplate> proxy_template = global_template; 4876 v8::Handle<ObjectTemplate> proxy_template = global_template;
4881 i::Handle<i::FunctionTemplateInfo> proxy_constructor; 4877 i::Handle<i::FunctionTemplateInfo> proxy_constructor;
4882 i::Handle<i::FunctionTemplateInfo> global_constructor; 4878 i::Handle<i::FunctionTemplateInfo> global_constructor;
4883 4879
4884 if (!global_template.IsEmpty()) { 4880 if (!global_template.IsEmpty()) {
4885 // Make sure that the global_template has a constructor. 4881 // Make sure that the global_template has a constructor.
4886 global_constructor = 4882 global_constructor =
4887 EnsureConstructor(Utils::OpenHandle(*global_template)); 4883 EnsureConstructor(Utils::OpenHandle(*global_template));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
4922 ASSERT(!proxy_constructor.is_null()); 4918 ASSERT(!proxy_constructor.is_null());
4923 global_constructor->set_access_check_info( 4919 global_constructor->set_access_check_info(
4924 proxy_constructor->access_check_info()); 4920 proxy_constructor->access_check_info());
4925 global_constructor->set_needs_access_check( 4921 global_constructor->set_needs_access_check(
4926 proxy_constructor->needs_access_check()); 4922 proxy_constructor->needs_access_check());
4927 } 4923 }
4928 isolate->runtime_profiler()->Reset(); 4924 isolate->runtime_profiler()->Reset();
4929 } 4925 }
4930 // Leave V8. 4926 // Leave V8.
4931 4927
4932 if (env.is_null()) { 4928 return env;
4933 return Persistent<Context>();
4934 }
4935 return Persistent<Context>(Utils::ToLocal(env));
4936 } 4929 }
4937 4930
4938 4931
4932 Persistent<Context> v8::Context::New(
4933 v8::ExtensionConfiguration* extensions,
4934 v8::Handle<ObjectTemplate> global_template,
4935 v8::Handle<Value> global_object) {
4936 i::Isolate::EnsureDefaultIsolate();
4937 i::Isolate* isolate = i::Isolate::Current();
4938 Isolate* external_isolate = reinterpret_cast<Isolate*>(isolate);
4939 EnsureInitializedForIsolate(isolate, "v8::Context::New()");
4940 LOG_API(isolate, "Context::New");
4941 ON_BAILOUT(isolate, "v8::Context::New()", return Persistent<Context>());
4942 i::HandleScope scope(isolate);
4943 i::Handle<i::Context> env =
4944 CreateEnvironment(isolate, extensions, global_template, global_object);
4945 if (env.is_null()) return Persistent<Context>();
4946 return Persistent<Context>::New(external_isolate, Utils::ToLocal(env));
4947 }
4948
4949
4950 Local<Context> v8::Context::New(
4951 v8::Isolate* external_isolate,
4952 v8::ExtensionConfiguration* extensions,
4953 v8::Handle<ObjectTemplate> global_template,
4954 v8::Handle<Value> global_object) {
4955 i::Isolate::EnsureDefaultIsolate();
4956 i::Isolate* isolate = reinterpret_cast<i::Isolate*>(external_isolate);
4957 EnsureInitializedForIsolate(isolate, "v8::Context::New()");
4958 LOG_API(isolate, "Context::New");
4959 ON_BAILOUT(isolate, "v8::Context::New()", return Local<Context>());
4960 i::HandleScope scope(isolate);
4961 i::Handle<i::Context> env =
4962 CreateEnvironment(isolate, extensions, global_template, global_object);
4963 if (env.is_null()) return Local<Context>();
4964 return Utils::ToLocal(scope.CloseAndEscape(env));
4965 }
4966
4967
4939 void v8::Context::SetSecurityToken(Handle<Value> token) { 4968 void v8::Context::SetSecurityToken(Handle<Value> token) {
4940 i::Isolate* isolate = i::Isolate::Current(); 4969 i::Isolate* isolate = i::Isolate::Current();
4941 if (IsDeadCheck(isolate, "v8::Context::SetSecurityToken()")) { 4970 if (IsDeadCheck(isolate, "v8::Context::SetSecurityToken()")) {
4942 return; 4971 return;
4943 } 4972 }
4944 ENTER_V8(isolate); 4973 ENTER_V8(isolate);
4945 i::Handle<i::Context> env = Utils::OpenHandle(this); 4974 i::Handle<i::Context> env = Utils::OpenHandle(this);
4946 i::Handle<i::Object> token_handle = Utils::OpenHandle(*token); 4975 i::Handle<i::Object> token_handle = Utils::OpenHandle(*token);
4947 env->set_security_token(*token_handle); 4976 env->set_security_token(*token_handle);
4948 } 4977 }
(...skipping 2272 matching lines...) Expand 10 before | Expand all | Expand 10 after
7221 7250
7222 v->VisitPointers(blocks_.first(), first_block_limit_); 7251 v->VisitPointers(blocks_.first(), first_block_limit_);
7223 7252
7224 for (int i = 1; i < blocks_.length(); i++) { 7253 for (int i = 1; i < blocks_.length(); i++) {
7225 v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]); 7254 v->VisitPointers(blocks_[i], &blocks_[i][kHandleBlockSize]);
7226 } 7255 }
7227 } 7256 }
7228 7257
7229 7258
7230 } } // namespace v8::internal 7259 } } // namespace v8::internal
OLDNEW
« 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