| OLD | NEW | 
|     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 732 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   743 i::Object** HandleScope::CreateHandle(i::HeapObject* value) { |   743 i::Object** HandleScope::CreateHandle(i::HeapObject* value) { | 
|   744   ASSERT(value->IsHeapObject()); |   744   ASSERT(value->IsHeapObject()); | 
|   745   return reinterpret_cast<i::Object**>( |   745   return reinterpret_cast<i::Object**>( | 
|   746       i::HandleScope::CreateHandle(value->GetIsolate(), value)); |   746       i::HandleScope::CreateHandle(value->GetIsolate(), value)); | 
|   747 } |   747 } | 
|   748  |   748  | 
|   749  |   749  | 
|   750 void Context::Enter() { |   750 void Context::Enter() { | 
|   751   i::Handle<i::Context> env = Utils::OpenHandle(this); |   751   i::Handle<i::Context> env = Utils::OpenHandle(this); | 
|   752   i::Isolate* isolate = env->GetIsolate(); |   752   i::Isolate* isolate = env->GetIsolate(); | 
|   753   if (IsDeadCheck(isolate, "v8::Context::Enter()")) return; |  | 
|   754   ENTER_V8(isolate); |   753   ENTER_V8(isolate); | 
|   755  |  | 
|   756   isolate->handle_scope_implementer()->EnterContext(env); |   754   isolate->handle_scope_implementer()->EnterContext(env); | 
|   757  |  | 
|   758   isolate->handle_scope_implementer()->SaveContext(isolate->context()); |   755   isolate->handle_scope_implementer()->SaveContext(isolate->context()); | 
|   759   isolate->set_context(*env); |   756   isolate->set_context(*env); | 
|   760 } |   757 } | 
|   761  |   758  | 
|   762  |   759  | 
|   763 void Context::Exit() { |   760 void Context::Exit() { | 
|   764   // Exit is essentially a static function and doesn't use the |   761   i::Handle<i::Context> context = Utils::OpenHandle(this); | 
|   765   // receiver, so we have to get the current isolate from the thread |   762   i::Isolate* isolate = context->GetIsolate(); | 
|   766   // local. |   763   ENTER_V8(isolate); | 
|   767   i::Isolate* isolate = i::Isolate::Current(); |   764   if (!ApiCheck(isolate->handle_scope_implementer()->LeaveContext(context), | 
|   768   if (!isolate->IsInitialized()) return; |  | 
|   769  |  | 
|   770   if (!ApiCheck(isolate->handle_scope_implementer()->LeaveLastContext(), |  | 
|   771                 "v8::Context::Exit()", |   765                 "v8::Context::Exit()", | 
|   772                 "Cannot exit non-entered context")) { |   766                 "Cannot exit non-entered context")) { | 
|   773     return; |   767     return; | 
|   774   } |   768   } | 
|   775  |  | 
|   776   // Content of 'last_context' could be NULL. |   769   // Content of 'last_context' could be NULL. | 
|   777   i::Context* last_context = |   770   i::Context* last_context = | 
|   778       isolate->handle_scope_implementer()->RestoreContext(); |   771       isolate->handle_scope_implementer()->RestoreContext(); | 
|   779   isolate->set_context(last_context); |   772   isolate->set_context(last_context); | 
|   780 } |   773 } | 
|   781  |   774  | 
|   782  |   775  | 
|   783 static void* DecodeSmiToAligned(i::Object* value, const char* location) { |   776 static void* DecodeSmiToAligned(i::Object* value, const char* location) { | 
|   784   ApiCheck(value->IsSmi(), location, "Not a Smi"); |   777   ApiCheck(value->IsSmi(), location, "Not a Smi"); | 
|   785   return reinterpret_cast<void*>(value); |   778   return reinterpret_cast<void*>(value); | 
| (...skipping 4701 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  5487   i::Handle<i::Context> env = Utils::OpenHandle(this); |  5480   i::Handle<i::Context> env = Utils::OpenHandle(this); | 
|  5488   return reinterpret_cast<Isolate*>(env->GetIsolate()); |  5481   return reinterpret_cast<Isolate*>(env->GetIsolate()); | 
|  5489 } |  5482 } | 
|  5490  |  5483  | 
|  5491  |  5484  | 
|  5492 v8::Local<v8::Context> Context::GetEntered() { |  5485 v8::Local<v8::Context> Context::GetEntered() { | 
|  5493   i::Isolate* isolate = i::Isolate::Current(); |  5486   i::Isolate* isolate = i::Isolate::Current(); | 
|  5494   if (!EnsureInitializedForIsolate(isolate, "v8::Context::GetEntered()")) { |  5487   if (!EnsureInitializedForIsolate(isolate, "v8::Context::GetEntered()")) { | 
|  5495     return Local<Context>(); |  5488     return Local<Context>(); | 
|  5496   } |  5489   } | 
|  5497   i::Handle<i::Object> last = |  5490   return reinterpret_cast<Isolate*>(isolate)->GetEnteredContext(); | 
|  5498       isolate->handle_scope_implementer()->LastEnteredContext(); |  | 
|  5499   if (last.is_null()) return Local<Context>(); |  | 
|  5500   i::Handle<i::Context> context = i::Handle<i::Context>::cast(last); |  | 
|  5501   return Utils::ToLocal(context); |  | 
|  5502 } |  5491 } | 
|  5503  |  5492  | 
|  5504  |  5493  | 
|  5505 v8::Local<v8::Context> Context::GetCurrent() { |  5494 v8::Local<v8::Context> Context::GetCurrent() { | 
|  5506   i::Isolate* isolate = i::Isolate::Current(); |  5495   i::Isolate* isolate = i::Isolate::Current(); | 
|  5507   if (IsDeadCheck(isolate, "v8::Context::GetCurrent()")) { |  5496   if (IsDeadCheck(isolate, "v8::Context::GetCurrent()")) { | 
|  5508     return Local<Context>(); |  5497     return Local<Context>(); | 
|  5509   } |  5498   } | 
|  5510   return reinterpret_cast<Isolate*>(isolate)->GetCurrentContext(); |  5499   return reinterpret_cast<Isolate*>(isolate)->GetCurrentContext(); | 
|  5511 } |  5500 } | 
|  5512  |  5501  | 
|  5513  |  5502  | 
|  5514 v8::Local<v8::Context> Context::GetCalling() { |  5503 v8::Local<v8::Context> Context::GetCalling() { | 
|  5515   i::Isolate* isolate = i::Isolate::Current(); |  5504   i::Isolate* isolate = i::Isolate::Current(); | 
|  5516   if (IsDeadCheck(isolate, "v8::Context::GetCalling()")) { |  5505   if (IsDeadCheck(isolate, "v8::Context::GetCalling()")) { | 
|  5517     return Local<Context>(); |  5506     return Local<Context>(); | 
|  5518   } |  5507   } | 
|  5519   i::Handle<i::Object> calling = |  5508   return reinterpret_cast<Isolate*>(isolate)->GetCallingContext(); | 
|  5520       isolate->GetCallingNativeContext(); |  | 
|  5521   if (calling.is_null()) return Local<Context>(); |  | 
|  5522   i::Handle<i::Context> context = i::Handle<i::Context>::cast(calling); |  | 
|  5523   return Utils::ToLocal(context); |  | 
|  5524 } |  5509 } | 
|  5525  |  5510  | 
|  5526  |  5511  | 
|  5527 v8::Local<v8::Object> Context::Global() { |  5512 v8::Local<v8::Object> Context::Global() { | 
|  5528   i::Isolate* isolate = i::Isolate::Current(); |  5513   i::Handle<i::Context> context = Utils::OpenHandle(this); | 
|  5529   if (IsDeadCheck(isolate, "v8::Context::Global()")) { |  5514   i::Isolate* isolate = context->GetIsolate(); | 
|  5530     return Local<v8::Object>(); |  | 
|  5531   } |  | 
|  5532   i::Object** ctx = reinterpret_cast<i::Object**>(this); |  | 
|  5533   i::Handle<i::Context> context = |  | 
|  5534       i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); |  | 
|  5535   i::Handle<i::Object> global(context->global_proxy(), isolate); |  5515   i::Handle<i::Object> global(context->global_proxy(), isolate); | 
|  5536   return Utils::ToLocal(i::Handle<i::JSObject>::cast(global)); |  5516   return Utils::ToLocal(i::Handle<i::JSObject>::cast(global)); | 
|  5537 } |  5517 } | 
|  5538  |  5518  | 
|  5539  |  5519  | 
|  5540 void Context::DetachGlobal() { |  5520 void Context::DetachGlobal() { | 
|  5541   i::Isolate* isolate = i::Isolate::Current(); |  5521   i::Handle<i::Context> context = Utils::OpenHandle(this); | 
|  5542   if (IsDeadCheck(isolate, "v8::Context::DetachGlobal()")) return; |  5522   i::Isolate* isolate = context->GetIsolate(); | 
|  5543   ENTER_V8(isolate); |  5523   ENTER_V8(isolate); | 
|  5544   i::Object** ctx = reinterpret_cast<i::Object**>(this); |  | 
|  5545   i::Handle<i::Context> context = |  | 
|  5546       i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); |  | 
|  5547   isolate->bootstrapper()->DetachGlobal(context); |  5524   isolate->bootstrapper()->DetachGlobal(context); | 
|  5548 } |  5525 } | 
|  5549  |  5526  | 
|  5550  |  5527  | 
|  5551 void Context::ReattachGlobal(Handle<Object> global_object) { |  5528 void Context::ReattachGlobal(Handle<Object> global_object) { | 
|  5552   i::Isolate* isolate = i::Isolate::Current(); |  5529   i::Handle<i::Context> context = Utils::OpenHandle(this); | 
|  5553   if (IsDeadCheck(isolate, "v8::Context::ReattachGlobal()")) return; |  5530   i::Isolate* isolate = context->GetIsolate(); | 
|  5554   ENTER_V8(isolate); |  5531   ENTER_V8(isolate); | 
|  5555   i::Object** ctx = reinterpret_cast<i::Object**>(this); |  | 
|  5556   i::Handle<i::Context> context = |  | 
|  5557       i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); |  | 
|  5558   i::Handle<i::JSGlobalProxy> global_proxy = |  5532   i::Handle<i::JSGlobalProxy> global_proxy = | 
|  5559       i::Handle<i::JSGlobalProxy>::cast(Utils::OpenHandle(*global_object)); |  5533       i::Handle<i::JSGlobalProxy>::cast(Utils::OpenHandle(*global_object)); | 
|  5560   isolate->bootstrapper()->ReattachGlobal(context, global_proxy); |  5534   isolate->bootstrapper()->ReattachGlobal(context, global_proxy); | 
|  5561 } |  5535 } | 
|  5562  |  5536  | 
|  5563  |  5537  | 
|  5564 void Context::AllowCodeGenerationFromStrings(bool allow) { |  5538 void Context::AllowCodeGenerationFromStrings(bool allow) { | 
|  5565   i::Isolate* isolate = i::Isolate::Current(); |  5539   i::Handle<i::Context> context = Utils::OpenHandle(this); | 
|  5566   if (IsDeadCheck(isolate, "v8::Context::AllowCodeGenerationFromStrings()")) { |  5540   i::Isolate* isolate = context->GetIsolate(); | 
|  5567     return; |  | 
|  5568   } |  | 
|  5569   ENTER_V8(isolate); |  5541   ENTER_V8(isolate); | 
|  5570   i::Object** ctx = reinterpret_cast<i::Object**>(this); |  | 
|  5571   i::Handle<i::Context> context = |  | 
|  5572       i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); |  | 
|  5573   context->set_allow_code_gen_from_strings( |  5542   context->set_allow_code_gen_from_strings( | 
|  5574       allow ? isolate->heap()->true_value() : isolate->heap()->false_value()); |  5543       allow ? isolate->heap()->true_value() : isolate->heap()->false_value()); | 
|  5575 } |  5544 } | 
|  5576  |  5545  | 
|  5577  |  5546  | 
|  5578 bool Context::IsCodeGenerationFromStringsAllowed() { |  5547 bool Context::IsCodeGenerationFromStringsAllowed() { | 
|  5579   i::Isolate* isolate = i::Isolate::Current(); |  5548   i::Handle<i::Context> context = Utils::OpenHandle(this); | 
|  5580   if (IsDeadCheck(isolate, |  | 
|  5581                   "v8::Context::IsCodeGenerationFromStringsAllowed()")) { |  | 
|  5582     return false; |  | 
|  5583   } |  | 
|  5584   ENTER_V8(isolate); |  | 
|  5585   i::Object** ctx = reinterpret_cast<i::Object**>(this); |  | 
|  5586   i::Handle<i::Context> context = |  | 
|  5587       i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); |  | 
|  5588   return !context->allow_code_gen_from_strings()->IsFalse(); |  5549   return !context->allow_code_gen_from_strings()->IsFalse(); | 
|  5589 } |  5550 } | 
|  5590  |  5551  | 
|  5591  |  5552  | 
|  5592 void Context::SetErrorMessageForCodeGenerationFromStrings( |  5553 void Context::SetErrorMessageForCodeGenerationFromStrings( | 
|  5593     Handle<String> error) { |  5554     Handle<String> error) { | 
|  5594   i::Isolate* isolate = i::Isolate::Current(); |  5555   i::Handle<i::Context> context = Utils::OpenHandle(this); | 
|  5595   if (IsDeadCheck(isolate, |  | 
|  5596       "v8::Context::SetErrorMessageForCodeGenerationFromStrings()")) { |  | 
|  5597     return; |  | 
|  5598   } |  | 
|  5599   ENTER_V8(isolate); |  | 
|  5600   i::Object** ctx = reinterpret_cast<i::Object**>(this); |  | 
|  5601   i::Handle<i::Context> context = |  | 
|  5602       i::Handle<i::Context>::cast(i::Handle<i::Object>(ctx)); |  | 
|  5603   i::Handle<i::String> error_handle = Utils::OpenHandle(*error); |  5556   i::Handle<i::String> error_handle = Utils::OpenHandle(*error); | 
|  5604   context->set_error_message_for_code_gen_from_strings(*error_handle); |  5557   context->set_error_message_for_code_gen_from_strings(*error_handle); | 
|  5605 } |  5558 } | 
|  5606  |  5559  | 
|  5607  |  5560  | 
|  5608 Local<v8::Object> ObjectTemplate::NewInstance() { |  5561 Local<v8::Object> ObjectTemplate::NewInstance() { | 
|  5609   i::Isolate* isolate = i::Isolate::Current(); |  5562   i::Isolate* isolate = i::Isolate::Current(); | 
|  5610   ON_BAILOUT(isolate, "v8::ObjectTemplate::NewInstance()", |  5563   ON_BAILOUT(isolate, "v8::ObjectTemplate::NewInstance()", | 
|  5611              return Local<v8::Object>()); |  5564              return Local<v8::Object>()); | 
|  5612   LOG_API(isolate, "ObjectTemplate::NewInstance"); |  5565   LOG_API(isolate, "ObjectTemplate::NewInstance"); | 
| (...skipping 1027 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  6640 } |  6593 } | 
|  6641  |  6594  | 
|  6642  |  6595  | 
|  6643 CpuProfiler* Isolate::GetCpuProfiler() { |  6596 CpuProfiler* Isolate::GetCpuProfiler() { | 
|  6644   i::CpuProfiler* cpu_profiler = |  6597   i::CpuProfiler* cpu_profiler = | 
|  6645       reinterpret_cast<i::Isolate*>(this)->cpu_profiler(); |  6598       reinterpret_cast<i::Isolate*>(this)->cpu_profiler(); | 
|  6646   return reinterpret_cast<CpuProfiler*>(cpu_profiler); |  6599   return reinterpret_cast<CpuProfiler*>(cpu_profiler); | 
|  6647 } |  6600 } | 
|  6648  |  6601  | 
|  6649  |  6602  | 
 |  6603 bool Isolate::InContext() { | 
 |  6604   i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | 
 |  6605   return isolate->context() != NULL; | 
 |  6606 } | 
 |  6607  | 
 |  6608  | 
|  6650 v8::Local<v8::Context> Isolate::GetCurrentContext() { |  6609 v8::Local<v8::Context> Isolate::GetCurrentContext() { | 
|  6651   i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this); |  6610   i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | 
|  6652   i::Context* context = internal_isolate->context(); |  6611   i::Context* context = isolate->context(); | 
|  6653   if (context == NULL) return Local<Context>(); |  6612   if (context == NULL) return Local<Context>(); | 
|  6654   i::Context* native_context = context->global_object()->native_context(); |  6613   i::Context* native_context = context->global_object()->native_context(); | 
|  6655   if (native_context == NULL) return Local<Context>(); |  6614   if (native_context == NULL) return Local<Context>(); | 
|  6656   return Utils::ToLocal(i::Handle<i::Context>(native_context)); |  6615   return Utils::ToLocal(i::Handle<i::Context>(native_context)); | 
|  6657 } |  6616 } | 
|  6658  |  6617  | 
|  6659  |  6618  | 
 |  6619 v8::Local<v8::Context> Isolate::GetCallingContext() { | 
 |  6620   i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | 
 |  6621   i::Handle<i::Object> calling = isolate->GetCallingNativeContext(); | 
 |  6622   if (calling.is_null()) return Local<Context>(); | 
 |  6623   return Utils::ToLocal(i::Handle<i::Context>::cast(calling)); | 
 |  6624 } | 
 |  6625  | 
 |  6626  | 
 |  6627 v8::Local<v8::Context> Isolate::GetEnteredContext() { | 
 |  6628   i::Isolate* isolate = reinterpret_cast<i::Isolate*>(this); | 
 |  6629   i::Handle<i::Object> last = | 
 |  6630       isolate->handle_scope_implementer()->LastEnteredContext(); | 
 |  6631   if (last.is_null()) return Local<Context>(); | 
 |  6632   return Utils::ToLocal(i::Handle<i::Context>::cast(last)); | 
 |  6633 } | 
 |  6634  | 
 |  6635  | 
|  6660 void Isolate::SetObjectGroupId(const Persistent<Value>& object, |  6636 void Isolate::SetObjectGroupId(const Persistent<Value>& object, | 
|  6661                                UniqueId id) { |  6637                                UniqueId id) { | 
|  6662   i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this); |  6638   i::Isolate* internal_isolate = reinterpret_cast<i::Isolate*>(this); | 
|  6663   internal_isolate->global_handles()->SetObjectGroupId( |  6639   internal_isolate->global_handles()->SetObjectGroupId( | 
|  6664       Utils::OpenPersistent(object).location(), |  6640       Utils::OpenPersistent(object).location(), | 
|  6665       id); |  6641       id); | 
|  6666 } |  6642 } | 
|  6667  |  6643  | 
|  6668  |  6644  | 
|  6669 void Isolate::SetReferenceFromGroup(UniqueId id, |  6645 void Isolate::SetReferenceFromGroup(UniqueId id, | 
| (...skipping 1222 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  7892   Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); |  7868   Isolate* isolate = reinterpret_cast<Isolate*>(info.GetIsolate()); | 
|  7893   Address callback_address = |  7869   Address callback_address = | 
|  7894       reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); |  7870       reinterpret_cast<Address>(reinterpret_cast<intptr_t>(callback)); | 
|  7895   VMState<EXTERNAL> state(isolate); |  7871   VMState<EXTERNAL> state(isolate); | 
|  7896   ExternalCallbackScope call_scope(isolate, callback_address); |  7872   ExternalCallbackScope call_scope(isolate, callback_address); | 
|  7897   callback(info); |  7873   callback(info); | 
|  7898 } |  7874 } | 
|  7899  |  7875  | 
|  7900  |  7876  | 
|  7901 } }  // namespace v8::internal |  7877 } }  // namespace v8::internal | 
| OLD | NEW |