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

Side by Side Diff: include/v8.h

Issue 1875263003: [api] Introduce ReturnValue::Get (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 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
« no previous file with comments | « no previous file | src/heap/heap.h » ('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 // 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 /** \mainpage V8 API Reference Guide 5 /** \mainpage V8 API Reference Guide
6 * 6 *
7 * V8 is Google's open source JavaScript engine. 7 * V8 is Google's open source JavaScript engine.
8 * 8 *
9 * This set of documents provides reference material generated from the 9 * This set of documents provides reference material generated from the
10 * V8 header file, include/v8.h. 10 * V8 header file, include/v8.h.
(...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after
323 template<class F> friend class internal::CustomArguments; 323 template<class F> friend class internal::CustomArguments;
324 friend Local<Primitive> Undefined(Isolate* isolate); 324 friend Local<Primitive> Undefined(Isolate* isolate);
325 friend Local<Primitive> Null(Isolate* isolate); 325 friend Local<Primitive> Null(Isolate* isolate);
326 friend Local<Boolean> True(Isolate* isolate); 326 friend Local<Boolean> True(Isolate* isolate);
327 friend Local<Boolean> False(Isolate* isolate); 327 friend Local<Boolean> False(Isolate* isolate);
328 friend class HandleScope; 328 friend class HandleScope;
329 friend class EscapableHandleScope; 329 friend class EscapableHandleScope;
330 template <class F1, class F2, class F3> 330 template <class F1, class F2, class F3>
331 friend class PersistentValueMapBase; 331 friend class PersistentValueMapBase;
332 template<class F1, class F2> friend class PersistentValueVector; 332 template<class F1, class F2> friend class PersistentValueVector;
333 template <class F>
334 friend class ReturnValue;
333 335
334 explicit V8_INLINE Local(T* that) : val_(that) {} 336 explicit V8_INLINE Local(T* that) : val_(that) {}
335 V8_INLINE static Local<T> New(Isolate* isolate, T* that); 337 V8_INLINE static Local<T> New(Isolate* isolate, T* that);
336 T* val_; 338 T* val_;
337 }; 339 };
338 340
339 341
340 #if !defined(V8_IMMINENT_DEPRECATION_WARNINGS) 342 #if !defined(V8_IMMINENT_DEPRECATION_WARNINGS)
341 // Local is an alias for Local for historical reasons. 343 // Local is an alias for Local for historical reasons.
342 template <class T> 344 template <class T>
(...skipping 2777 matching lines...) Expand 10 before | Expand all | Expand 10 after
3120 // Fast primitive setters 3122 // Fast primitive setters
3121 V8_INLINE void Set(bool value); 3123 V8_INLINE void Set(bool value);
3122 V8_INLINE void Set(double i); 3124 V8_INLINE void Set(double i);
3123 V8_INLINE void Set(int32_t i); 3125 V8_INLINE void Set(int32_t i);
3124 V8_INLINE void Set(uint32_t i); 3126 V8_INLINE void Set(uint32_t i);
3125 // Fast JS primitive setters 3127 // Fast JS primitive setters
3126 V8_INLINE void SetNull(); 3128 V8_INLINE void SetNull();
3127 V8_INLINE void SetUndefined(); 3129 V8_INLINE void SetUndefined();
3128 V8_INLINE void SetEmptyString(); 3130 V8_INLINE void SetEmptyString();
3129 // Convenience getter for Isolate 3131 // Convenience getter for Isolate
3130 V8_INLINE Isolate* GetIsolate(); 3132 V8_INLINE Isolate* GetIsolate() const;
3131 3133
3132 // Pointer setter: Uncompilable to prevent inadvertent misuse. 3134 // Pointer setter: Uncompilable to prevent inadvertent misuse.
3133 template <typename S> 3135 template <typename S>
3134 V8_INLINE void Set(S* whatever); 3136 V8_INLINE void Set(S* whatever);
3135 3137
3138 // Getter. Creates a new Local<> so it comes with a certain performance
3139 // hit. If the ReturnValue was not yet set, this will return the undefined
3140 // value.
3141 V8_INLINE Local<Value> Get() const;
3142
3136 private: 3143 private:
3137 template<class F> friend class ReturnValue; 3144 template<class F> friend class ReturnValue;
3138 template<class F> friend class FunctionCallbackInfo; 3145 template<class F> friend class FunctionCallbackInfo;
3139 template<class F> friend class PropertyCallbackInfo; 3146 template<class F> friend class PropertyCallbackInfo;
3140 template <class F, class G, class H> 3147 template <class F, class G, class H>
3141 friend class PersistentValueMapBase; 3148 friend class PersistentValueMapBase;
3142 V8_INLINE void SetInternal(internal::Object* value) { *value_ = value; } 3149 V8_INLINE void SetInternal(internal::Object* value) { *value_ = value; }
3143 V8_INLINE internal::Object* GetDefaultValue(); 3150 V8_INLINE internal::Object* GetDefaultValue();
3144 V8_INLINE explicit ReturnValue(internal::Object** slot); 3151 V8_INLINE explicit ReturnValue(internal::Object** slot);
3145 internal::Object** value_; 3152 internal::Object** value_;
(...skipping 4181 matching lines...) Expand 10 before | Expand all | Expand 10 after
7327 7334
7328 static const int kIsolateEmbedderDataOffset = 0 * kApiPointerSize; 7335 static const int kIsolateEmbedderDataOffset = 0 * kApiPointerSize;
7329 static const int kAmountOfExternalAllocatedMemoryOffset = 7336 static const int kAmountOfExternalAllocatedMemoryOffset =
7330 4 * kApiPointerSize; 7337 4 * kApiPointerSize;
7331 static const int kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset = 7338 static const int kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset =
7332 kAmountOfExternalAllocatedMemoryOffset + kApiInt64Size; 7339 kAmountOfExternalAllocatedMemoryOffset + kApiInt64Size;
7333 static const int kIsolateRootsOffset = 7340 static const int kIsolateRootsOffset =
7334 kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset + kApiInt64Size + 7341 kAmountOfExternalAllocatedMemoryAtLastGlobalGCOffset + kApiInt64Size +
7335 kApiPointerSize; 7342 kApiPointerSize;
7336 static const int kUndefinedValueRootIndex = 4; 7343 static const int kUndefinedValueRootIndex = 4;
7344 static const int kTheHoleValueRootIndex = 5;
7337 static const int kNullValueRootIndex = 6; 7345 static const int kNullValueRootIndex = 6;
7338 static const int kTrueValueRootIndex = 7; 7346 static const int kTrueValueRootIndex = 7;
7339 static const int kFalseValueRootIndex = 8; 7347 static const int kFalseValueRootIndex = 8;
7340 static const int kEmptyStringRootIndex = 9; 7348 static const int kEmptyStringRootIndex = 9;
7341 7349
7342 // The external allocation limit should be below 256 MB on all architectures 7350 // The external allocation limit should be below 256 MB on all architectures
7343 // to avoid that resource-constrained embedders run low on memory. 7351 // to avoid that resource-constrained embedders run low on memory.
7344 static const int kExternalAllocationLimit = 192 * 1024 * 1024; 7352 static const int kExternalAllocationLimit = 192 * 1024 * 1024;
7345 7353
7346 static const int kNodeClassIdOffset = 1 * kApiPointerSize; 7354 static const int kNodeClassIdOffset = 1 * kApiPointerSize;
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
7806 *value_ = *I::GetRoot(GetIsolate(), I::kUndefinedValueRootIndex); 7814 *value_ = *I::GetRoot(GetIsolate(), I::kUndefinedValueRootIndex);
7807 } 7815 }
7808 7816
7809 template<typename T> 7817 template<typename T>
7810 void ReturnValue<T>::SetEmptyString() { 7818 void ReturnValue<T>::SetEmptyString() {
7811 TYPE_CHECK(T, String); 7819 TYPE_CHECK(T, String);
7812 typedef internal::Internals I; 7820 typedef internal::Internals I;
7813 *value_ = *I::GetRoot(GetIsolate(), I::kEmptyStringRootIndex); 7821 *value_ = *I::GetRoot(GetIsolate(), I::kEmptyStringRootIndex);
7814 } 7822 }
7815 7823
7816 template<typename T> 7824 template <typename T>
7817 Isolate* ReturnValue<T>::GetIsolate() { 7825 Isolate* ReturnValue<T>::GetIsolate() const {
7818 // Isolate is always the pointer below the default value on the stack. 7826 // Isolate is always the pointer below the default value on the stack.
7819 return *reinterpret_cast<Isolate**>(&value_[-2]); 7827 return *reinterpret_cast<Isolate**>(&value_[-2]);
7820 } 7828 }
7821 7829
7822 template<typename T> 7830 template <typename T>
7823 template<typename S> 7831 Local<Value> ReturnValue<T>::Get() const {
7832 typedef internal::Internals I;
7833 if (*value_ == *I::GetRoot(GetIsolate(), I::kTheHoleValueRootIndex))
7834 return Local<Value>(*Undefined(GetIsolate()));
7835 return Local<Value>::New(GetIsolate(), reinterpret_cast<Value*>(value_));
7836 }
7837
7838 template <typename T>
7839 template <typename S>
7824 void ReturnValue<T>::Set(S* whatever) { 7840 void ReturnValue<T>::Set(S* whatever) {
7825 // Uncompilable to prevent inadvertent misuse. 7841 // Uncompilable to prevent inadvertent misuse.
7826 TYPE_CHECK(S*, Primitive); 7842 TYPE_CHECK(S*, Primitive);
7827 } 7843 }
7828 7844
7829 template<typename T> 7845 template<typename T>
7830 internal::Object* ReturnValue<T>::GetDefaultValue() { 7846 internal::Object* ReturnValue<T>::GetDefaultValue() {
7831 // Default value is always the pointer below value_ on the stack. 7847 // Default value is always the pointer below value_ on the stack.
7832 return value_[-1]; 7848 return value_[-1];
7833 } 7849 }
(...skipping 915 matching lines...) Expand 10 before | Expand all | Expand 10 after
8749 */ 8765 */
8750 8766
8751 8767
8752 } // namespace v8 8768 } // namespace v8
8753 8769
8754 8770
8755 #undef TYPE_CHECK 8771 #undef TYPE_CHECK
8756 8772
8757 8773
8758 #endif // INCLUDE_V8_H_ 8774 #endif // INCLUDE_V8_H_
OLDNEW
« no previous file with comments | « no previous file | src/heap/heap.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698