OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef V8_API_H_ | 5 #ifndef V8_API_H_ |
6 #define V8_API_H_ | 6 #define V8_API_H_ |
7 | 7 |
8 #include "src/v8.h" | 8 #include "src/v8.h" |
9 | 9 |
10 #include "include/v8-testing.h" | 10 #include "include/v8-testing.h" |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
74 NeanderObject::NeanderObject(v8::internal::Object* obj) | 74 NeanderObject::NeanderObject(v8::internal::Object* obj) |
75 : value_(v8::internal::Handle<v8::internal::JSObject>( | 75 : value_(v8::internal::Handle<v8::internal::JSObject>( |
76 v8::internal::JSObject::cast(obj))) { } | 76 v8::internal::JSObject::cast(obj))) { } |
77 | 77 |
78 | 78 |
79 NeanderArray::NeanderArray(v8::internal::Handle<v8::internal::Object> obj) | 79 NeanderArray::NeanderArray(v8::internal::Handle<v8::internal::Object> obj) |
80 : obj_(obj) { } | 80 : obj_(obj) { } |
81 | 81 |
82 | 82 |
83 v8::internal::Object* NeanderObject::get(int offset) { | 83 v8::internal::Object* NeanderObject::get(int offset) { |
84 ASSERT(value()->HasFastObjectElements()); | 84 DCHECK(value()->HasFastObjectElements()); |
85 return v8::internal::FixedArray::cast(value()->elements())->get(offset); | 85 return v8::internal::FixedArray::cast(value()->elements())->get(offset); |
86 } | 86 } |
87 | 87 |
88 | 88 |
89 void NeanderObject::set(int offset, v8::internal::Object* value) { | 89 void NeanderObject::set(int offset, v8::internal::Object* value) { |
90 ASSERT(value_->HasFastObjectElements()); | 90 DCHECK(value_->HasFastObjectElements()); |
91 v8::internal::FixedArray::cast(value_->elements())->set(offset, value); | 91 v8::internal::FixedArray::cast(value_->elements())->set(offset, value); |
92 } | 92 } |
93 | 93 |
94 | 94 |
95 template <typename T> inline T ToCData(v8::internal::Object* obj) { | 95 template <typename T> inline T ToCData(v8::internal::Object* obj) { |
96 STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address)); | 96 STATIC_ASSERT(sizeof(T) == sizeof(v8::internal::Address)); |
97 return reinterpret_cast<T>( | 97 return reinterpret_cast<T>( |
98 reinterpret_cast<intptr_t>( | 98 reinterpret_cast<intptr_t>( |
99 v8::internal::Foreign::cast(obj)->foreign_address())); | 99 v8::internal::Foreign::cast(obj)->foreign_address())); |
100 } | 100 } |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
257 #define DECLARE_OPEN_HANDLE(From, To) \ | 257 #define DECLARE_OPEN_HANDLE(From, To) \ |
258 static inline v8::internal::Handle<v8::internal::To> \ | 258 static inline v8::internal::Handle<v8::internal::To> \ |
259 OpenHandle(const From* that, bool allow_empty_handle = false); | 259 OpenHandle(const From* that, bool allow_empty_handle = false); |
260 | 260 |
261 OPEN_HANDLE_LIST(DECLARE_OPEN_HANDLE) | 261 OPEN_HANDLE_LIST(DECLARE_OPEN_HANDLE) |
262 | 262 |
263 #undef DECLARE_OPEN_HANDLE | 263 #undef DECLARE_OPEN_HANDLE |
264 | 264 |
265 template<class From, class To> | 265 template<class From, class To> |
266 static inline Local<To> Convert(v8::internal::Handle<From> obj) { | 266 static inline Local<To> Convert(v8::internal::Handle<From> obj) { |
267 ASSERT(obj.is_null() || !obj->IsTheHole()); | 267 DCHECK(obj.is_null() || !obj->IsTheHole()); |
268 return Local<To>(reinterpret_cast<To*>(obj.location())); | 268 return Local<To>(reinterpret_cast<To*>(obj.location())); |
269 } | 269 } |
270 | 270 |
271 template <class T> | 271 template <class T> |
272 static inline v8::internal::Handle<v8::internal::Object> OpenPersistent( | 272 static inline v8::internal::Handle<v8::internal::Object> OpenPersistent( |
273 const v8::Persistent<T>& persistent) { | 273 const v8::Persistent<T>& persistent) { |
274 return v8::internal::Handle<v8::internal::Object>( | 274 return v8::internal::Handle<v8::internal::Object>( |
275 reinterpret_cast<v8::internal::Object**>(persistent.val_)); | 275 reinterpret_cast<v8::internal::Object**>(persistent.val_)); |
276 } | 276 } |
277 | 277 |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
318 | 318 |
319 #define MAKE_TO_LOCAL(Name, From, To) \ | 319 #define MAKE_TO_LOCAL(Name, From, To) \ |
320 Local<v8::To> Utils::Name(v8::internal::Handle<v8::internal::From> obj) { \ | 320 Local<v8::To> Utils::Name(v8::internal::Handle<v8::internal::From> obj) { \ |
321 return Convert<v8::internal::From, v8::To>(obj); \ | 321 return Convert<v8::internal::From, v8::To>(obj); \ |
322 } | 322 } |
323 | 323 |
324 | 324 |
325 #define MAKE_TO_LOCAL_TYPED_ARRAY(Type, typeName, TYPE, ctype, size) \ | 325 #define MAKE_TO_LOCAL_TYPED_ARRAY(Type, typeName, TYPE, ctype, size) \ |
326 Local<v8::Type##Array> Utils::ToLocal##Type##Array( \ | 326 Local<v8::Type##Array> Utils::ToLocal##Type##Array( \ |
327 v8::internal::Handle<v8::internal::JSTypedArray> obj) { \ | 327 v8::internal::Handle<v8::internal::JSTypedArray> obj) { \ |
328 ASSERT(obj->type() == kExternal##Type##Array); \ | 328 DCHECK(obj->type() == kExternal##Type##Array); \ |
329 return Convert<v8::internal::JSTypedArray, v8::Type##Array>(obj); \ | 329 return Convert<v8::internal::JSTypedArray, v8::Type##Array>(obj); \ |
330 } | 330 } |
331 | 331 |
332 | 332 |
333 MAKE_TO_LOCAL(ToLocal, Context, Context) | 333 MAKE_TO_LOCAL(ToLocal, Context, Context) |
334 MAKE_TO_LOCAL(ToLocal, Object, Value) | 334 MAKE_TO_LOCAL(ToLocal, Object, Value) |
335 MAKE_TO_LOCAL(ToLocal, JSFunction, Function) | 335 MAKE_TO_LOCAL(ToLocal, JSFunction, Function) |
336 MAKE_TO_LOCAL(ToLocal, String, String) | 336 MAKE_TO_LOCAL(ToLocal, String, String) |
337 MAKE_TO_LOCAL(ToLocal, Symbol, Symbol) | 337 MAKE_TO_LOCAL(ToLocal, Symbol, Symbol) |
338 MAKE_TO_LOCAL(ToLocal, JSRegExp, RegExp) | 338 MAKE_TO_LOCAL(ToLocal, JSRegExp, RegExp) |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
527 inline Handle<Context> LastEnteredContext(); | 527 inline Handle<Context> LastEnteredContext(); |
528 | 528 |
529 inline void SaveContext(Context* context); | 529 inline void SaveContext(Context* context); |
530 inline Context* RestoreContext(); | 530 inline Context* RestoreContext(); |
531 inline bool HasSavedContexts(); | 531 inline bool HasSavedContexts(); |
532 | 532 |
533 inline List<internal::Object**>* blocks() { return &blocks_; } | 533 inline List<internal::Object**>* blocks() { return &blocks_; } |
534 Isolate* isolate() const { return isolate_; } | 534 Isolate* isolate() const { return isolate_; } |
535 | 535 |
536 void ReturnBlock(Object** block) { | 536 void ReturnBlock(Object** block) { |
537 ASSERT(block != NULL); | 537 DCHECK(block != NULL); |
538 if (spare_ != NULL) DeleteArray(spare_); | 538 if (spare_ != NULL) DeleteArray(spare_); |
539 spare_ = block; | 539 spare_ = block; |
540 } | 540 } |
541 | 541 |
542 private: | 542 private: |
543 void ResetAfterArchive() { | 543 void ResetAfterArchive() { |
544 blocks_.Initialize(0); | 544 blocks_.Initialize(0); |
545 entered_contexts_.Initialize(0); | 545 entered_contexts_.Initialize(0); |
546 saved_contexts_.Initialize(0); | 546 saved_contexts_.Initialize(0); |
547 spare_ = NULL; | 547 spare_ = NULL; |
548 last_handle_before_deferred_block_ = NULL; | 548 last_handle_before_deferred_block_ = NULL; |
549 call_depth_ = 0; | 549 call_depth_ = 0; |
550 } | 550 } |
551 | 551 |
552 void Free() { | 552 void Free() { |
553 ASSERT(blocks_.length() == 0); | 553 DCHECK(blocks_.length() == 0); |
554 ASSERT(entered_contexts_.length() == 0); | 554 DCHECK(entered_contexts_.length() == 0); |
555 ASSERT(saved_contexts_.length() == 0); | 555 DCHECK(saved_contexts_.length() == 0); |
556 blocks_.Free(); | 556 blocks_.Free(); |
557 entered_contexts_.Free(); | 557 entered_contexts_.Free(); |
558 saved_contexts_.Free(); | 558 saved_contexts_.Free(); |
559 if (spare_ != NULL) { | 559 if (spare_ != NULL) { |
560 DeleteArray(spare_); | 560 DeleteArray(spare_); |
561 spare_ = NULL; | 561 spare_ = NULL; |
562 } | 562 } |
563 ASSERT(call_depth_ == 0); | 563 DCHECK(call_depth_ == 0); |
564 } | 564 } |
565 | 565 |
566 void BeginDeferredScope(); | 566 void BeginDeferredScope(); |
567 DeferredHandles* Detach(Object** prev_limit); | 567 DeferredHandles* Detach(Object** prev_limit); |
568 | 568 |
569 Isolate* isolate_; | 569 Isolate* isolate_; |
570 List<internal::Object**> blocks_; | 570 List<internal::Object**> blocks_; |
571 // Used as a stack to keep track of entered contexts. | 571 // Used as a stack to keep track of entered contexts. |
572 List<Context*> entered_contexts_; | 572 List<Context*> entered_contexts_; |
573 // Used as a stack to keep track of saved contexts. | 573 // Used as a stack to keep track of saved contexts. |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
656 | 656 |
657 blocks_.RemoveLast(); | 657 blocks_.RemoveLast(); |
658 #ifdef ENABLE_HANDLE_ZAPPING | 658 #ifdef ENABLE_HANDLE_ZAPPING |
659 internal::HandleScope::ZapRange(block_start, block_limit); | 659 internal::HandleScope::ZapRange(block_start, block_limit); |
660 #endif | 660 #endif |
661 if (spare_ != NULL) { | 661 if (spare_ != NULL) { |
662 DeleteArray(spare_); | 662 DeleteArray(spare_); |
663 } | 663 } |
664 spare_ = block_start; | 664 spare_ = block_start; |
665 } | 665 } |
666 ASSERT((blocks_.is_empty() && prev_limit == NULL) || | 666 DCHECK((blocks_.is_empty() && prev_limit == NULL) || |
667 (!blocks_.is_empty() && prev_limit != NULL)); | 667 (!blocks_.is_empty() && prev_limit != NULL)); |
668 } | 668 } |
669 | 669 |
670 | 670 |
671 // Interceptor functions called from generated inline caches to notify | 671 // Interceptor functions called from generated inline caches to notify |
672 // CPU profiler that external callbacks are invoked. | 672 // CPU profiler that external callbacks are invoked. |
673 void InvokeAccessorGetterCallback( | 673 void InvokeAccessorGetterCallback( |
674 v8::Local<v8::String> property, | 674 v8::Local<v8::String> property, |
675 const v8::PropertyCallbackInfo<v8::Value>& info, | 675 const v8::PropertyCallbackInfo<v8::Value>& info, |
676 v8::AccessorGetterCallback getter); | 676 v8::AccessorGetterCallback getter); |
677 | 677 |
678 void InvokeFunctionCallback(const v8::FunctionCallbackInfo<v8::Value>& info, | 678 void InvokeFunctionCallback(const v8::FunctionCallbackInfo<v8::Value>& info, |
679 v8::FunctionCallback callback); | 679 v8::FunctionCallback callback); |
680 | 680 |
681 class Testing { | 681 class Testing { |
682 public: | 682 public: |
683 static v8::Testing::StressType stress_type() { return stress_type_; } | 683 static v8::Testing::StressType stress_type() { return stress_type_; } |
684 static void set_stress_type(v8::Testing::StressType stress_type) { | 684 static void set_stress_type(v8::Testing::StressType stress_type) { |
685 stress_type_ = stress_type; | 685 stress_type_ = stress_type; |
686 } | 686 } |
687 | 687 |
688 private: | 688 private: |
689 static v8::Testing::StressType stress_type_; | 689 static v8::Testing::StressType stress_type_; |
690 }; | 690 }; |
691 | 691 |
692 } } // namespace v8::internal | 692 } } // namespace v8::internal |
693 | 693 |
694 #endif // V8_API_H_ | 694 #endif // V8_API_H_ |
OLD | NEW |