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

Side by Side Diff: src/api.cc

Issue 137963002: Various API-related simplifications. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: upload trouble Created 6 years, 11 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 | « src/api.h ('k') | src/checks.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 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 111
112 #define EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, value) \ 112 #define EXCEPTION_BAILOUT_CHECK_DO_CALLBACK(isolate, value) \
113 EXCEPTION_BAILOUT_CHECK_GENERIC( \ 113 EXCEPTION_BAILOUT_CHECK_GENERIC( \
114 isolate, value, i::V8::FireCallCompletedCallback(isolate);) 114 isolate, value, i::V8::FireCallCompletedCallback(isolate);)
115 115
116 116
117 #define EXCEPTION_BAILOUT_CHECK(isolate, value) \ 117 #define EXCEPTION_BAILOUT_CHECK(isolate, value) \
118 EXCEPTION_BAILOUT_CHECK_GENERIC(isolate, value, ;) 118 EXCEPTION_BAILOUT_CHECK_GENERIC(isolate, value, ;)
119 119
120 120
121 #define API_ENTRY_CHECK(isolate, msg) \
122 do { \
123 if (v8::Locker::IsActive()) { \
124 Utils::ApiCheck(isolate->thread_manager()->IsLockedByCurrentThread(), \
125 msg, \
126 "Entering the V8 API without proper locking in place"); \
127 } \
128 } while (false)
129
130
131 // --- E x c e p t i o n B e h a v i o r --- 121 // --- E x c e p t i o n B e h a v i o r ---
132 122
133 123
134 static void DefaultFatalErrorHandler(const char* location,
135 const char* message) {
136 i::Isolate* isolate = i::Isolate::Current();
137 if (isolate->IsInitialized()) {
138 i::VMState<i::OTHER> state(isolate);
139 API_Fatal(location, message);
140 } else {
141 API_Fatal(location, message);
142 }
143 }
144
145
146 void i::FatalProcessOutOfMemory(const char* location) { 124 void i::FatalProcessOutOfMemory(const char* location) {
147 i::V8::FatalProcessOutOfMemory(location, false); 125 i::V8::FatalProcessOutOfMemory(location, false);
148 } 126 }
149 127
150 128
151 // When V8 cannot allocated memory FatalProcessOutOfMemory is called. 129 // When V8 cannot allocated memory FatalProcessOutOfMemory is called.
152 // The default fatal error handler is called and execution is stopped. 130 // The default fatal error handler is called and execution is stopped.
153 void i::V8::FatalProcessOutOfMemory(const char* location, bool take_snapshot) { 131 void i::V8::FatalProcessOutOfMemory(const char* location, bool take_snapshot) {
154 i::HeapStats heap_stats; 132 i::HeapStats heap_stats;
155 int start_marker; 133 int start_marker;
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
213 isolate->heap()->RecordStats(&heap_stats, false); 191 isolate->heap()->RecordStats(&heap_stats, false);
214 } 192 }
215 Utils::ApiCheck(false, location, "Allocation failed - process out of memory"); 193 Utils::ApiCheck(false, location, "Allocation failed - process out of memory");
216 // If the fatal error handler returns, we stop execution. 194 // If the fatal error handler returns, we stop execution.
217 FATAL("API fatal error handler returned after process out of memory"); 195 FATAL("API fatal error handler returned after process out of memory");
218 } 196 }
219 197
220 198
221 void Utils::ReportApiFailure(const char* location, const char* message) { 199 void Utils::ReportApiFailure(const char* location, const char* message) {
222 i::Isolate* isolate = i::Isolate::Current(); 200 i::Isolate* isolate = i::Isolate::Current();
223 FatalErrorCallback callback = isolate->exception_behavior() == NULL 201 FatalErrorCallback callback = isolate->exception_behavior();
224 ? DefaultFatalErrorHandler 202 if (callback == NULL) {
225 : isolate->exception_behavior(); 203 i::OS::PrintError("\n#\n# Fatal error in %s\n# %s\n#\n\n",
226 callback(location, message); 204 location, message);
205 i::OS::Abort();
206 } else {
207 callback(location, message);
208 }
227 isolate->SignalFatalError(); 209 isolate->SignalFatalError();
228 } 210 }
229 211
230 212
231 bool V8::IsDead() { 213 bool V8::IsDead() {
232 i::Isolate* isolate = i::Isolate::Current(); 214 i::Isolate* isolate = i::Isolate::Current();
233 return isolate->IsDead(); 215 return isolate->IsDead();
234 } 216 }
235 217
236 218
(...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after
604 // --- H a n d l e s --- 586 // --- H a n d l e s ---
605 587
606 588
607 HandleScope::HandleScope(Isolate* isolate) { 589 HandleScope::HandleScope(Isolate* isolate) {
608 Initialize(isolate); 590 Initialize(isolate);
609 } 591 }
610 592
611 593
612 void HandleScope::Initialize(Isolate* isolate) { 594 void HandleScope::Initialize(Isolate* isolate) {
613 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate); 595 i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(isolate);
614 API_ENTRY_CHECK(internal_isolate, "HandleScope::HandleScope"); 596 // We do not want to check the correct usage of the Locker class all over the
597 // place, so we do it only here: Without a HandleScope, an embedder can do
598 // almost nothing, so it is enough to check in this central place.
599 Utils::ApiCheck(!v8::Locker::IsActive() ||
600 internal_isolate->thread_manager()->IsLockedByCurrentThread(),
601 "HandleScope::HandleScope",
602 "Entering the V8 API without proper locking in place");
615 v8::ImplementationUtilities::HandleScopeData* current = 603 v8::ImplementationUtilities::HandleScopeData* current =
616 internal_isolate->handle_scope_data(); 604 internal_isolate->handle_scope_data();
617 isolate_ = internal_isolate; 605 isolate_ = internal_isolate;
618 prev_next_ = current->next; 606 prev_next_ = current->next;
619 prev_limit_ = current->limit; 607 prev_limit_ = current->limit;
620 current->level++; 608 current->level++;
621 } 609 }
622 610
623 611
624 HandleScope::~HandleScope() { 612 HandleScope::~HandleScope() {
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 } 649 }
662 *escape_slot_ = *escape_value; 650 *escape_slot_ = *escape_value;
663 return escape_slot_; 651 return escape_slot_;
664 } 652 }
665 653
666 654
667 void Context::Enter() { 655 void Context::Enter() {
668 i::Handle<i::Context> env = Utils::OpenHandle(this); 656 i::Handle<i::Context> env = Utils::OpenHandle(this);
669 i::Isolate* isolate = env->GetIsolate(); 657 i::Isolate* isolate = env->GetIsolate();
670 ENTER_V8(isolate); 658 ENTER_V8(isolate);
671 isolate->handle_scope_implementer()->EnterContext(env); 659 i::HandleScopeImplementer* impl = isolate->handle_scope_implementer();
672 isolate->handle_scope_implementer()->SaveContext(isolate->context()); 660 impl->EnterContext(env);
661 impl->SaveContext(isolate->context());
673 isolate->set_context(*env); 662 isolate->set_context(*env);
674 } 663 }
675 664
676 665
677 void Context::Exit() { 666 void Context::Exit() {
678 i::Isolate* isolate = Utils::OpenHandle(this)->GetIsolate(); 667 i::Handle<i::Context> env = Utils::OpenHandle(this);
679 i::Handle<i::Context> context = i::Handle<i::Context>::null(); 668 i::Isolate* isolate = env->GetIsolate();
680 ENTER_V8(isolate); 669 ENTER_V8(isolate);
681 i::HandleScopeImplementer* impl = isolate->handle_scope_implementer(); 670 i::HandleScopeImplementer* impl = isolate->handle_scope_implementer();
682 if (!Utils::ApiCheck(impl->LeaveContext(context), 671 if (!Utils::ApiCheck(impl->LastEnteredContextWas(env),
683 "v8::Context::Exit()", 672 "v8::Context::Exit()",
684 "Cannot exit non-entered context")) { 673 "Cannot exit non-entered context")) {
685 return; 674 return;
686 } 675 }
676 impl->LeaveContext();
687 isolate->set_context(impl->RestoreContext()); 677 isolate->set_context(impl->RestoreContext());
688 } 678 }
689 679
690 680
691 static void* DecodeSmiToAligned(i::Object* value, const char* location) { 681 static void* DecodeSmiToAligned(i::Object* value, const char* location) {
692 Utils::ApiCheck(value->IsSmi(), location, "Not a Smi"); 682 Utils::ApiCheck(value->IsSmi(), location, "Not a Smi");
693 return reinterpret_cast<void*>(value); 683 return reinterpret_cast<void*>(value);
694 } 684 }
695 685
696 686
(...skipping 6736 matching lines...) Expand 10 before | Expand all | Expand 10 after
7433 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); 7423 Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate());
7434 Address callback_address = 7424 Address callback_address =
7435 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); 7425 reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback));
7436 VMState<EXTERNAL> state(isolate); 7426 VMState<EXTERNAL> state(isolate);
7437 ExternalCallbackScope call_scope(isolate, callback_address); 7427 ExternalCallbackScope call_scope(isolate, callback_address);
7438 callback(info); 7428 callback(info);
7439 } 7429 }
7440 7430
7441 7431
7442 } } // namespace v8::internal 7432 } } // namespace v8::internal
OLDNEW
« no previous file with comments | « src/api.h ('k') | src/checks.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698