зеркало из https://github.com/mozilla/gecko-dev.git
Bug 965830 - Add HandleValueArray class to receive rooted arrays of Values r=terrence
This commit is contained in:
Родитель
f9b9e81392
Коммит
457e5b82c5
|
@ -115,6 +115,8 @@ using js::frontend::Parser;
|
|||
JS_STATIC_ASSERT((jschar)-1 > 0);
|
||||
JS_STATIC_ASSERT(sizeof(jschar) == 2);
|
||||
|
||||
const JS::HandleValueArray JS::EmptyValueArray;
|
||||
|
||||
JS_PUBLIC_API(int64_t)
|
||||
JS_Now()
|
||||
{
|
||||
|
|
|
@ -600,6 +600,48 @@ class JS_PUBLIC_API(CustomAutoRooter) : private AutoGCRooter
|
|||
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
|
||||
};
|
||||
|
||||
/* A handle to an array of rooted values. */
|
||||
class HandleValueArray
|
||||
{
|
||||
const size_t length_;
|
||||
const Value *elements_;
|
||||
|
||||
HandleValueArray(size_t len, const Value *elements) : length_(len), elements_(elements) {}
|
||||
|
||||
public:
|
||||
HandleValueArray() : length_(0), elements_(nullptr) {}
|
||||
HandleValueArray(const RootedValue& value) : length_(1), elements_(value.address()) {}
|
||||
|
||||
HandleValueArray(const AutoValueVector& values)
|
||||
: length_(values.length()), elements_(values.begin()) {}
|
||||
|
||||
template <size_t N>
|
||||
HandleValueArray(const AutoValueArray<N>& values) : length_(N), elements_(values.begin()) {}
|
||||
|
||||
/* CallArgs must already be rooted somewhere up the stack. */
|
||||
HandleValueArray(const JS::CallArgs& args) : length_(args.length()), elements_(args.array()) {}
|
||||
|
||||
/* Use with care! Only call this if the data is guaranteed to be marked. */
|
||||
static HandleValueArray fromMarkedLocation(size_t len, const Value *elements) {
|
||||
return HandleValueArray(len, elements);
|
||||
}
|
||||
|
||||
static HandleValueArray subarray(const AutoValueVector& values, size_t startIndex, size_t len) {
|
||||
JS_ASSERT(startIndex + len <= values.length());
|
||||
return HandleValueArray(len, values.begin() + startIndex);
|
||||
}
|
||||
|
||||
size_t length() const { return length_; }
|
||||
const Value *begin() const { return elements_; }
|
||||
|
||||
HandleValue operator[](size_t i) const {
|
||||
JS_ASSERT(i < length_);
|
||||
return HandleValue::fromMarkedLocation(&elements_[i]);
|
||||
}
|
||||
};
|
||||
|
||||
extern JS_PUBLIC_DATA(const HandleValueArray) EmptyValueArray;
|
||||
|
||||
} /* namespace JS */
|
||||
|
||||
/************************************************************************/
|
||||
|
|
Загрузка…
Ссылка в новой задаче