зеркало из 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((jschar)-1 > 0);
|
||||||
JS_STATIC_ASSERT(sizeof(jschar) == 2);
|
JS_STATIC_ASSERT(sizeof(jschar) == 2);
|
||||||
|
|
||||||
|
const JS::HandleValueArray JS::EmptyValueArray;
|
||||||
|
|
||||||
JS_PUBLIC_API(int64_t)
|
JS_PUBLIC_API(int64_t)
|
||||||
JS_Now()
|
JS_Now()
|
||||||
{
|
{
|
||||||
|
|
|
@ -600,6 +600,48 @@ class JS_PUBLIC_API(CustomAutoRooter) : private AutoGCRooter
|
||||||
MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER
|
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 */
|
} /* namespace JS */
|
||||||
|
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
|
Загрузка…
Ссылка в новой задаче