diff options
author | Moonchild <moonchild@palemoon.org> | 2023-11-04 20:06:50 +0100 |
---|---|---|
committer | Moonchild <moonchild@palemoon.org> | 2023-11-08 13:48:12 +0100 |
commit | 706d07b3d560955745a7dd4addb0ea52ac18d94b (patch) | |
tree | 581db1c66c37f92bf7759aae1ef45acc7ad38201 | |
parent | eb7be8c637b7b382161d009b302ae9713470c553 (diff) | |
download | uxp-706d07b3d560955745a7dd4addb0ea52ac18d94b.tar.gz |
Issue #2342: Use [[nodiscard]] in /js
212 files changed, 2963 insertions, 2959 deletions
diff --git a/js/public/HashTable.h b/js/public/HashTable.h index d0f7dba41f..ab04a2c7b1 100644 --- a/js/public/HashTable.h +++ b/js/public/HashTable.h @@ -88,7 +88,7 @@ class HashMap // HashMap construction is fallible (due to OOM); thus the user must call // init after constructing a HashMap and check the return value. explicit HashMap(AllocPolicy a = AllocPolicy()) : impl(a) {} - MOZ_MUST_USE bool init(uint32_t len = 16) { return impl.init(len); } + [[nodiscard]] bool init(uint32_t len = 16) { return impl.init(len); } bool initialized() const { return impl.initialized(); } // Return whether the given lookup value is present in the map. E.g.: @@ -151,19 +151,19 @@ class HashMap } template<typename KeyInput, typename ValueInput> - MOZ_MUST_USE bool add(AddPtr& p, KeyInput&& k, ValueInput&& v) { + [[nodiscard]] bool add(AddPtr& p, KeyInput&& k, ValueInput&& v) { return impl.add(p, mozilla::Forward<KeyInput>(k), mozilla::Forward<ValueInput>(v)); } template<typename KeyInput> - MOZ_MUST_USE bool add(AddPtr& p, KeyInput&& k) { + [[nodiscard]] bool add(AddPtr& p, KeyInput&& k) { return impl.add(p, mozilla::Forward<KeyInput>(k), Value()); } template<typename KeyInput, typename ValueInput> - MOZ_MUST_USE bool relookupOrAdd(AddPtr& p, KeyInput&& k, ValueInput&& v) { + [[nodiscard]] bool relookupOrAdd(AddPtr& p, KeyInput&& k, ValueInput&& v) { return impl.relookupOrAdd(p, k, mozilla::Forward<KeyInput>(k), mozilla::Forward<ValueInput>(v)); @@ -232,7 +232,7 @@ class HashMap // Overwrite existing value with v. Return false on oom. template<typename KeyInput, typename ValueInput> - MOZ_MUST_USE bool put(KeyInput&& k, ValueInput&& v) { + [[nodiscard]] bool put(KeyInput&& k, ValueInput&& v) { AddPtr p = lookupForAdd(k); if (p) { p->value() = mozilla::Forward<ValueInput>(v); @@ -243,7 +243,7 @@ class HashMap // Like put, but assert that the given key is not already present. template<typename KeyInput, typename ValueInput> - MOZ_MUST_USE bool putNew(KeyInput&& k, ValueInput&& v) { + [[nodiscard]] bool putNew(KeyInput&& k, ValueInput&& v) { return impl.putNew(k, mozilla::Forward<KeyInput>(k), mozilla::Forward<ValueInput>(v)); } @@ -341,7 +341,7 @@ class HashSet // HashSet construction is fallible (due to OOM); thus the user must call // init after constructing a HashSet and check the return value. explicit HashSet(AllocPolicy a = AllocPolicy()) : impl(a) {} - MOZ_MUST_USE bool init(uint32_t len = 16) { return impl.init(len); } + [[nodiscard]] bool init(uint32_t len = 16) { return impl.init(len); } bool initialized() const { return impl.initialized(); } // Return whether the given lookup value is present in the map. E.g.: @@ -399,12 +399,12 @@ class HashSet AddPtr lookupForAdd(const Lookup& l) const { return impl.lookupForAdd(l); } template <typename U> - MOZ_MUST_USE bool add(AddPtr& p, U&& u) { + [[nodiscard]] bool add(AddPtr& p, U&& u) { return impl.add(p, mozilla::Forward<U>(u)); } template <typename U> - MOZ_MUST_USE bool relookupOrAdd(AddPtr& p, const Lookup& l, U&& u) { + [[nodiscard]] bool relookupOrAdd(AddPtr& p, const Lookup& l, U&& u) { return impl.relookupOrAdd(p, l, mozilla::Forward<U>(u)); } @@ -471,19 +471,19 @@ class HashSet // Add |u| if it is not present already. Return false on oom. template <typename U> - MOZ_MUST_USE bool put(U&& u) { + [[nodiscard]] bool put(U&& u) { AddPtr p = lookupForAdd(u); return p ? true : add(p, mozilla::Forward<U>(u)); } // Like put, but assert that the given key is not already present. template <typename U> - MOZ_MUST_USE bool putNew(U&& u) { + [[nodiscard]] bool putNew(U&& u) { return impl.putNew(u, mozilla::Forward<U>(u)); } template <typename U> - MOZ_MUST_USE bool putNew(const Lookup& l, U&& u) { + [[nodiscard]] bool putNew(const Lookup& l, U&& u) { return impl.putNew(l, mozilla::Forward<U>(u)); } @@ -1277,7 +1277,7 @@ class HashTable : private AllocPolicy #endif {} - MOZ_MUST_USE bool init(uint32_t length) + [[nodiscard]] bool init(uint32_t length) { MOZ_ASSERT(!initialized()); @@ -1775,7 +1775,7 @@ class HashTable : private AllocPolicy } template <typename... Args> - MOZ_MUST_USE bool add(AddPtr& p, Args&&... args) + [[nodiscard]] bool add(AddPtr& p, Args&&... args) { mozilla::ReentrancyGuard g(*this); MOZ_ASSERT(table); @@ -1828,7 +1828,7 @@ class HashTable : private AllocPolicy // Note: |l| may be alias arguments in |args|, so this function must take // care not to use |l| after moving |args|. template <typename... Args> - MOZ_MUST_USE bool putNew(const Lookup& l, Args&&... args) + [[nodiscard]] bool putNew(const Lookup& l, Args&&... args) { if (!this->checkSimulatedOOM()) return false; @@ -1846,7 +1846,7 @@ class HashTable : private AllocPolicy // Note: |l| may be a reference to a piece of |u|, so this function // must take care not to use |l| after moving |u|. template <typename... Args> - MOZ_MUST_USE bool relookupOrAdd(AddPtr& p, const Lookup& l, Args&&... args) + [[nodiscard]] bool relookupOrAdd(AddPtr& p, const Lookup& l, Args&&... args) { // Check for error from ensureHash() here. if (p.isValid()) diff --git a/js/public/RootingAPI.h b/js/public/RootingAPI.h index e03bc56fb7..15fa304147 100644 --- a/js/public/RootingAPI.h +++ b/js/public/RootingAPI.h @@ -1274,7 +1274,7 @@ class MutableWrappedPtrOperations<UniquePtr<T, D>, Container> UniquePtr<T, D>& uniquePtr() { return static_cast<Container*>(this)->get(); } public: - MOZ_MUST_USE typename UniquePtr<T, D>::Pointer release() { return uniquePtr().release(); } + [[nodiscard]] typename UniquePtr<T, D>::Pointer release() { return uniquePtr().release(); } void reset(T* ptr = T()) { uniquePtr().reset(ptr); } }; diff --git a/js/public/UbiNode.h b/js/public/UbiNode.h index 3df3a4840b..fb01ea1484 100644 --- a/js/public/UbiNode.h +++ b/js/public/UbiNode.h @@ -285,7 +285,7 @@ class BaseStackFrame { // simplifies the principals check into the boolean isSystem() state. This // is fine because we only expose JS::ubi::Stack to devtools and chrome // code, and not to the web platform. - virtual MOZ_MUST_USE bool constructSavedFrameStack(JSContext* cx, + [[nodiscard]] virtual bool constructSavedFrameStack(JSContext* cx, MutableHandleObject outSavedFrameStack) const = 0; @@ -416,7 +416,7 @@ class StackFrame { StackFrame parent() const { return base()->parent(); } bool isSystem() const { return base()->isSystem(); } bool isSelfHosted(JSContext* cx) const { return base()->isSelfHosted(cx); } - MOZ_MUST_USE bool constructSavedFrameStack(JSContext* cx, + [[nodiscard]] bool constructSavedFrameStack(JSContext* cx, MutableHandleObject outSavedFrameStack) const { return base()->constructSavedFrameStack(cx, outSavedFrameStack); } @@ -449,7 +449,7 @@ class ConcreteStackFrame<void> : public BaseStackFrame { uint64_t identifier() const override { return 0; } void trace(JSTracer* trc) override { } - MOZ_MUST_USE bool constructSavedFrameStack(JSContext* cx, MutableHandleObject out) + [[nodiscard]] bool constructSavedFrameStack(JSContext* cx, MutableHandleObject out) const override { out.set(nullptr); @@ -465,7 +465,7 @@ class ConcreteStackFrame<void> : public BaseStackFrame { bool isSelfHosted(JSContext* cx) const override { MOZ_CRASH("null JS::ubi::StackFrame"); } }; -MOZ_MUST_USE JS_PUBLIC_API(bool) +[[nodiscard]] JS_PUBLIC_API(bool) ConstructSavedFrameStackSlow(JSContext* cx, JS::ubi::StackFrame& frame, MutableHandleObject outSavedFrameStack); @@ -628,7 +628,7 @@ class JS_PUBLIC_API(Base) { // Otherwise, place nullptr in the out parameter. Caller maintains ownership // of the out parameter. True is returned on success, false is returned on // OOM. - virtual MOZ_MUST_USE bool jsObjectConstructorName(JSContext* cx, UniqueTwoByteChars& outName) + [[nodiscard]] virtual bool jsObjectConstructorName(JSContext* cx, UniqueTwoByteChars& outName) const { outName.reset(nullptr); @@ -778,7 +778,7 @@ class Node { JS::Zone* zone() const { return base()->zone(); } JSCompartment* compartment() const { return base()->compartment(); } const char* jsObjectClassName() const { return base()->jsObjectClassName(); } - MOZ_MUST_USE bool jsObjectConstructorName(JSContext* cx, UniqueTwoByteChars& outName) const { + [[nodiscard]] bool jsObjectConstructorName(JSContext* cx, UniqueTwoByteChars& outName) const { return base()->jsObjectConstructorName(cx, outName); } @@ -981,12 +981,12 @@ class MOZ_STACK_CLASS JS_PUBLIC_API(RootList) { RootList(JSContext* cx, Maybe<AutoCheckCannotGC>& noGC, bool wantNames = false); // Find all GC roots. - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); // Find only GC roots in the provided set of |JSCompartment|s. - MOZ_MUST_USE bool init(CompartmentSet& debuggees); + [[nodiscard]] bool init(CompartmentSet& debuggees); // Find only GC roots in the given Debugger object's set of debuggee // compartments. - MOZ_MUST_USE bool init(HandleObject debuggees); + [[nodiscard]] bool init(HandleObject debuggees); // Returns true if the RootList has been initialized successfully, false // otherwise. @@ -995,7 +995,7 @@ class MOZ_STACK_CLASS JS_PUBLIC_API(RootList) { // Explicitly add the given Node as a root in this RootList. If wantNames is // true, you must pass an edgeName. The RootList does not take ownership of // edgeName. - MOZ_MUST_USE bool addRoot(Node node, const char16_t* edgeName = nullptr); + [[nodiscard]] bool addRoot(Node node, const char16_t* edgeName = nullptr); }; @@ -1100,7 +1100,7 @@ class JS_PUBLIC_API(Concrete<JSObject>) : public TracerConcreteWithCompartment<J } const char* jsObjectClassName() const override; - MOZ_MUST_USE bool jsObjectConstructorName(JSContext* cx, UniqueTwoByteChars& outName) + [[nodiscard]] bool jsObjectConstructorName(JSContext* cx, UniqueTwoByteChars& outName) const override; Size size(mozilla::MallocSizeOf mallocSizeOf) const override; diff --git a/js/public/UbiNodeCensus.h b/js/public/UbiNodeCensus.h index 6fa739dac1..17db00dc0c 100644 --- a/js/public/UbiNodeCensus.h +++ b/js/public/UbiNodeCensus.h @@ -104,14 +104,14 @@ struct CountType { // Implement the 'count' method for counts returned by this CountType // instance's 'newCount' method. - virtual MOZ_MUST_USE bool count(CountBase& count, - mozilla::MallocSizeOf mallocSizeOf, - const Node& node) = 0; + [[nodiscard]] virtual bool count(CountBase& count, + mozilla::MallocSizeOf mallocSizeOf, + const Node& node) = 0; // Implement the 'report' method for counts returned by this CountType // instance's 'newCount' method. - virtual MOZ_MUST_USE bool report(JSContext* cx, CountBase& count, - MutableHandleValue report) = 0; + [[nodiscard]] virtual bool report(JSContext* cx, CountBase& count, + MutableHandleValue report) = 0; }; using CountTypePtr = js::UniquePtr<CountType>; @@ -135,7 +135,7 @@ class CountBase { { } // Categorize and count |node| as appropriate for this count's type. - MOZ_MUST_USE bool count(mozilla::MallocSizeOf mallocSizeOf, const Node& node) { + [[nodiscard]] bool count(mozilla::MallocSizeOf mallocSizeOf, const Node& node) { total_++; auto id = node.identifier(); @@ -158,7 +158,7 @@ class CountBase { // Construct a JavaScript object reporting the counts recorded in this // count, and store it in |report|. Return true on success, or false on // failure. - MOZ_MUST_USE bool report(JSContext* cx, MutableHandleValue report) { + [[nodiscard]] bool report(JSContext* cx, MutableHandleValue report) { return type.report(cx, *this, report); } @@ -202,7 +202,7 @@ struct Census { explicit Census(JSContext* cx) : cx(cx), atomsZone(nullptr) { } - MOZ_MUST_USE JS_PUBLIC_API(bool) init(); + [[nodiscard]] JS_PUBLIC_API(bool) init(); }; // A BreadthFirst handler type that conducts a census, using a CountBase to @@ -219,14 +219,14 @@ class CensusHandler { mallocSizeOf(mallocSizeOf) { } - MOZ_MUST_USE bool report(JSContext* cx, MutableHandleValue report) { + [[nodiscard]] bool report(JSContext* cx, MutableHandleValue report) { return rootCount->report(cx, report); } // This class needs to retain no per-node data. class NodeData { }; - MOZ_MUST_USE JS_PUBLIC_API(bool) operator() (BreadthFirst<CensusHandler>& traversal, + [[nodiscard]] JS_PUBLIC_API(bool) operator() (BreadthFirst<CensusHandler>& traversal, Node origin, const Edge& edge, NodeData* referentData, bool first); }; @@ -235,7 +235,7 @@ using CensusTraversal = BreadthFirst<CensusHandler>; // Examine the census options supplied by the API consumer, and (among other // things) use that to build a CountType tree. -MOZ_MUST_USE JS_PUBLIC_API(bool) ParseCensusOptions(JSContext* cx, +[[nodiscard]] JS_PUBLIC_API(bool) ParseCensusOptions(JSContext* cx, Census& census, HandleObject options, CountTypePtr& outResult); diff --git a/js/public/UbiNodeDominatorTree.h b/js/public/UbiNodeDominatorTree.h index 5f7e061e54..8a53db0da5 100644 --- a/js/public/UbiNodeDominatorTree.h +++ b/js/public/UbiNodeDominatorTree.h @@ -322,9 +322,9 @@ class DominatorTree // Do the post order traversal of the heap graph and populate our // predecessor sets. - static MOZ_MUST_USE bool doTraversal(JSContext* cx, AutoCheckCannotGC& noGC, const Node& root, - JS::ubi::Vector<Node>& postOrder, - PredecessorSets& predecessorSets) { + [[nodiscard]] static bool doTraversal(JSContext* cx, AutoCheckCannotGC& noGC, const Node& root, + JS::ubi::Vector<Node>& postOrder, + PredecessorSets& predecessorSets) { uint32_t nodeCount = 0; auto onNode = [&](const Node& node) { nodeCount++; @@ -356,8 +356,8 @@ class DominatorTree // Populates the given `map` with an entry for each node to its index in // `postOrder`. - static MOZ_MUST_USE bool mapNodesToTheirIndices(JS::ubi::Vector<Node>& postOrder, - NodeToIndexMap& map) { + [[nodiscard]] static bool mapNodesToTheirIndices(JS::ubi::Vector<Node>& postOrder, + NodeToIndexMap& map) { MOZ_ASSERT(!map.initialized()); MOZ_ASSERT(postOrder.length() < UINT32_MAX); uint32_t length = postOrder.length(); @@ -370,7 +370,7 @@ class DominatorTree // Convert the Node -> NodeSet predecessorSets to a index -> Vector<index> // form. - static MOZ_MUST_USE bool convertPredecessorSetsToVectors( + [[nodiscard]] static bool convertPredecessorSetsToVectors( const Node& root, JS::ubi::Vector<Node>& postOrder, PredecessorSets& predecessorSets, @@ -409,7 +409,7 @@ class DominatorTree // Initialize `doms` such that the immediate dominator of the `root` is the // `root` itself and all others are `UNDEFINED`. - static MOZ_MUST_USE bool initializeDominators(JS::ubi::Vector<uint32_t>& doms, + [[nodiscard]] static bool initializeDominators(JS::ubi::Vector<uint32_t>& doms, uint32_t length) { MOZ_ASSERT(doms.length() == 0); if (!doms.growByUninitialized(length)) @@ -426,7 +426,7 @@ class DominatorTree MOZ_ASSERT_IF(retainedSizes.isSome(), postOrder.length() == retainedSizes->length()); } - MOZ_MUST_USE bool computeRetainedSizes(mozilla::MallocSizeOf mallocSizeOf) { + [[nodiscard]] bool computeRetainedSizes(mozilla::MallocSizeOf mallocSizeOf) { MOZ_ASSERT(retainedSizes.isNothing()); auto length = postOrder.length(); @@ -651,7 +651,7 @@ class DominatorTree * `outSize`, or 0 if `node` is not a member of the dominator tree. Returns * false on OOM failure, leaving `outSize` unchanged. */ - MOZ_MUST_USE bool getRetainedSize(const Node& node, mozilla::MallocSizeOf mallocSizeOf, + [[nodiscard]] bool getRetainedSize(const Node& node, mozilla::MallocSizeOf mallocSizeOf, Node::Size& outSize) { assertSanity(); auto ptr = nodeToPostOrderIndex.lookup(node); diff --git a/js/public/UbiNodePostOrder.h b/js/public/UbiNodePostOrder.h index 15dcfb9ec3..666d5b1254 100644 --- a/js/public/UbiNodePostOrder.h +++ b/js/public/UbiNodePostOrder.h @@ -90,7 +90,7 @@ struct PostOrder { #endif private: - MOZ_MUST_USE bool fillEdgesFromRange(EdgeVector& edges, js::UniquePtr<EdgeRange>& range) { + [[nodiscard]] bool fillEdgesFromRange(EdgeVector& edges, js::UniquePtr<EdgeRange>& range) { MOZ_ASSERT(range); for ( ; !range->empty(); range->popFront()) { if (!edges.append(mozilla::Move(range->front()))) @@ -99,7 +99,7 @@ struct PostOrder { return true; } - MOZ_MUST_USE bool pushForTraversing(const Node& node) { + [[nodiscard]] bool pushForTraversing(const Node& node) { EdgeVector edges; auto range = node.edges(cx, /* wantNames */ false); return range && @@ -124,11 +124,11 @@ struct PostOrder { { } // Initialize this traversal object. Return false on OOM. - MOZ_MUST_USE bool init() { return seen.init(); } + [[nodiscard]] bool init() { return seen.init(); } // Add `node` as a starting point for the traversal. You may add // as many starting points as you like. Returns false on OOM. - MOZ_MUST_USE bool addStart(const Node& node) { + [[nodiscard]] bool addStart(const Node& node) { if (!seen.put(node)) return false; return pushForTraversing(node); @@ -144,7 +144,7 @@ struct PostOrder { // Return false on OOM or error return from `onNode::operator()` or // `onEdge::operator()`. template<typename NodeVisitor, typename EdgeVisitor> - MOZ_MUST_USE bool traverse(NodeVisitor onNode, EdgeVisitor onEdge) { + [[nodiscard]] bool traverse(NodeVisitor onNode, EdgeVisitor onEdge) { #ifdef DEBUG MOZ_ASSERT(!traversed, "Can only traverse() once!"); traversed = true; diff --git a/js/public/UbiNodeShortestPaths.h b/js/public/UbiNodeShortestPaths.h index 18ed45a197..58c4568ff8 100644 --- a/js/public/UbiNodeShortestPaths.h +++ b/js/public/UbiNodeShortestPaths.h @@ -32,7 +32,7 @@ struct JS_PUBLIC_API(BackEdge) BackEdge() : predecessor_(), name_(nullptr) { } - MOZ_MUST_USE bool init(const Node& predecessor, Edge& edge) { + [[nodiscard]] bool init(const Node& predecessor, Edge& edge) { MOZ_ASSERT(!predecessor_); MOZ_ASSERT(!name_); @@ -289,7 +289,7 @@ struct JS_PUBLIC_API(ShortestPaths) * the given target, in which case `func` will not be invoked. */ template <class Func> - MOZ_MUST_USE bool forEachPath(const Node& target, Func func) { + [[nodiscard]] bool forEachPath(const Node& target, Func func) { MOZ_ASSERT(initialized()); MOZ_ASSERT(targets_.has(target)); diff --git a/js/public/Utility.h b/js/public/Utility.h index dbe69e18c0..e641c6097b 100644 --- a/js/public/Utility.h +++ b/js/public/Utility.h @@ -352,7 +352,7 @@ namespace js { * instances of type |T|. Return false if the calculation overflowed. */ template <typename T> -MOZ_MUST_USE inline bool +[[nodiscard]] inline bool CalculateAllocSize(size_t numElems, size_t* bytesOut) { *bytesOut = numElems * sizeof(T); @@ -365,7 +365,7 @@ CalculateAllocSize(size_t numElems, size_t* bytesOut) * false if the calculation overflowed. */ template <typename T, typename Extra> -MOZ_MUST_USE inline bool +[[nodiscard]] inline bool CalculateAllocSizeWithExtra(size_t numExtra, size_t* bytesOut) { *bytesOut = sizeof(T) + numExtra * sizeof(Extra); diff --git a/js/src/builtin/AtomicsObject.h b/js/src/builtin/AtomicsObject.h index 18f00dad16..6e519cfa4a 100644 --- a/js/src/builtin/AtomicsObject.h +++ b/js/src/builtin/AtomicsObject.h @@ -21,21 +21,21 @@ class AtomicsObject : public JSObject public: static const Class class_; static JSObject* initClass(JSContext* cx, Handle<GlobalObject*> global); - static MOZ_MUST_USE bool toString(JSContext* cx, unsigned int argc, Value* vp); + [[nodiscard]] static bool toString(JSContext* cx, unsigned int argc, Value* vp); }; -MOZ_MUST_USE bool atomics_compareExchange(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool atomics_exchange(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool atomics_load(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool atomics_store(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool atomics_add(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool atomics_sub(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool atomics_and(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool atomics_or(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool atomics_xor(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool atomics_isLockFree(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool atomics_wait(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool atomics_notify(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_compareExchange(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_exchange(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_load(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_store(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_add(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_sub(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_and(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_or(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_xor(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_isLockFree(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_wait(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool atomics_notify(JSContext* cx, unsigned argc, Value* vp); /* asm.js callouts */ namespace wasm { class Instance; } @@ -52,14 +52,14 @@ class FutexRuntime friend class AutoLockFutexAPI; public: - static MOZ_MUST_USE bool initialize(); + [[nodiscard]] static bool initialize(); static void destroy(); static void lock(); static void unlock(); FutexRuntime(); - MOZ_MUST_USE bool initInstance(); + [[nodiscard]] bool initInstance(); void destroyInstance(); // Parameters to notify(). @@ -83,8 +83,8 @@ public: // wait. // // wait() will not wake up spuriously. - MOZ_MUST_USE bool wait(JSContext* cx, js::UniqueLock<js::Mutex>& locked, - mozilla::Maybe<mozilla::TimeDuration>& timeout, WaitResult* result); + [[nodiscard]] bool wait(JSContext* cx, js::UniqueLock<js::Mutex>& locked, + mozilla::Maybe<mozilla::TimeDuration>& timeout, WaitResult* result); // Notify the thread represented by this Runtime. // diff --git a/js/src/builtin/Eval.h b/js/src/builtin/Eval.h index 4a1bd8642e..4b834928e2 100644 --- a/js/src/builtin/Eval.h +++ b/js/src/builtin/Eval.h @@ -16,17 +16,17 @@ namespace js { // JSOP_EVAL which in turn calls DirectEval. Thus, even though IndirectEval is // the callee function object for *all* calls to eval, it is by construction // only ever called in the case indirect eval. -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool IndirectEval(JSContext* cx, unsigned argc, Value* vp); // Performs a direct eval of |v| (a string containing code, or another value // that will be vacuously returned), which must correspond to the currently- // executing stack frame, which must be a script frame. -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool DirectEval(JSContext* cx, HandleValue v, MutableHandleValue vp); // Performs a direct eval called from Ion code. -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool DirectEvalStringFromIon(JSContext* cx, HandleObject scopeObj, HandleScript callerScript, HandleValue newTargetValue, HandleString str, diff --git a/js/src/builtin/MapObject.cpp b/js/src/builtin/MapObject.cpp index fe748a6bde..76f85cad63 100644 --- a/js/src/builtin/MapObject.cpp +++ b/js/src/builtin/MapObject.cpp @@ -476,7 +476,7 @@ class js::OrderedHashTableRef : public gc::BufferableRef }; template <typename ObjectT> -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool WriteBarrierPostImpl(JSRuntime* rt, ObjectT* obj, const Value& keyValue) { if (MOZ_LIKELY(!keyValue.isObject())) @@ -501,13 +501,13 @@ WriteBarrierPostImpl(JSRuntime* rt, ObjectT* obj, const Value& keyValue) return true; } -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool WriteBarrierPost(JSRuntime* rt, MapObject* map, const Value& key) { return WriteBarrierPostImpl(rt, map, key); } -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool WriteBarrierPost(JSRuntime* rt, SetObject* set, const Value& key) { return WriteBarrierPostImpl(rt, set, key); diff --git a/js/src/builtin/MapObject.h b/js/src/builtin/MapObject.h index a9f685ea00..c62bdd633a 100644 --- a/js/src/builtin/MapObject.h +++ b/js/src/builtin/MapObject.h @@ -41,7 +41,7 @@ class HashableValue HashableValue() : value(UndefinedValue()) {} - MOZ_MUST_USE bool setValue(JSContext* cx, HandleValue v); + [[nodiscard]] bool setValue(JSContext* cx, HandleValue v); HashNumber hash(const mozilla::HashCodeScrambler& hcs) const; bool operator==(const HashableValue& other) const; HashableValue mark(JSTracer* trc) const; @@ -66,7 +66,7 @@ class MutableWrappedPtrOperations<HashableValue, Wrapper> : public WrappedPtrOperations<HashableValue, Wrapper> { public: - MOZ_MUST_USE bool setValue(JSContext* cx, HandleValue v) { + [[nodiscard]] bool setValue(JSContext* cx, HandleValue v) { return static_cast<Wrapper*>(this)->get().setValue(cx, v); } }; @@ -107,26 +107,26 @@ class MapObject : public NativeObject { enum { NurseryKeysSlot, SlotCount }; - static MOZ_MUST_USE bool getKeysAndValuesInterleaved(JSContext* cx, HandleObject obj, + [[nodiscard]] static bool getKeysAndValuesInterleaved(JSContext* cx, HandleObject obj, JS::MutableHandle<GCVector<JS::Value>> entries); - static MOZ_MUST_USE bool entries(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool has(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool entries(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool has(JSContext* cx, unsigned argc, Value* vp); static MapObject* create(JSContext* cx, HandleObject proto = nullptr); // Publicly exposed Map calls for JSAPI access (webidl maplike/setlike // interfaces, etc.) static uint32_t size(JSContext *cx, HandleObject obj); - static MOZ_MUST_USE bool get(JSContext *cx, HandleObject obj, HandleValue key, + [[nodiscard]] static bool get(JSContext *cx, HandleObject obj, HandleValue key, MutableHandleValue rval); - static MOZ_MUST_USE bool has(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); - static MOZ_MUST_USE bool delete_(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); + [[nodiscard]] static bool has(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); + [[nodiscard]] static bool delete_(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); // Set call for public JSAPI exposure. Does not actually return map object // as stated in spec, expects caller to return a value. for instance, with // webidl maplike/setlike, should return interface object. - static MOZ_MUST_USE bool set(JSContext *cx, HandleObject obj, HandleValue key, HandleValue val); - static MOZ_MUST_USE bool clear(JSContext *cx, HandleObject obj); - static MOZ_MUST_USE bool iterator(JSContext *cx, IteratorKind kind, HandleObject obj, + [[nodiscard]] static bool set(JSContext *cx, HandleObject obj, HandleValue key, HandleValue val); + [[nodiscard]] static bool clear(JSContext *cx, HandleObject obj); + [[nodiscard]] static bool iterator(JSContext *cx, IteratorKind kind, HandleObject obj, MutableHandleValue iter); using UnbarrieredTable = OrderedHashMap<Value, Value, UnbarrieredHashPolicy, RuntimeAllocPolicy>; @@ -143,29 +143,29 @@ class MapObject : public NativeObject { static ValueMap& extract(const CallArgs& args); static void mark(JSTracer* trc, JSObject* obj); static void finalize(FreeOp* fop, JSObject* obj); - static MOZ_MUST_USE bool construct(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool construct(JSContext* cx, unsigned argc, Value* vp); static bool is(HandleValue v); static bool is(HandleObject o); - static MOZ_MUST_USE bool iterator_impl(JSContext* cx, const CallArgs& args, IteratorKind kind); - - static MOZ_MUST_USE bool size_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool size(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool get_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool get(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool has_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool set_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool set(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool delete_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool delete_(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool keys_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool keys(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool values_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool values(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool entries_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool clear_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool clear(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool iterator_impl(JSContext* cx, const CallArgs& args, IteratorKind kind); + + [[nodiscard]] static bool size_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool size(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool get_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool get(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool has_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool set_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool set(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool delete_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool delete_(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool keys_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool keys(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool values_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool values(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool entries_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool clear_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool clear(JSContext* cx, unsigned argc, Value* vp); }; class MapIteratorObject : public NativeObject @@ -187,7 +187,7 @@ class MapIteratorObject : public NativeObject MapObject::IteratorKind kind); static void finalize(FreeOp* fop, JSObject* obj); - static MOZ_MUST_USE bool next(Handle<MapIteratorObject*> mapIterator, + [[nodiscard]] static bool next(Handle<MapIteratorObject*> mapIterator, HandleArrayObject resultPairObj, JSContext* cx); static JSObject* createResultPair(JSContext* cx); @@ -213,21 +213,21 @@ class SetObject : public NativeObject { enum { NurseryKeysSlot, SlotCount }; - static MOZ_MUST_USE bool keys(JSContext *cx, HandleObject obj, + [[nodiscard]] static bool keys(JSContext *cx, HandleObject obj, JS::MutableHandle<GCVector<JS::Value>> keys); - static MOZ_MUST_USE bool values(JSContext *cx, unsigned argc, Value *vp); - static MOZ_MUST_USE bool add(JSContext *cx, HandleObject obj, HandleValue key); - static MOZ_MUST_USE bool has(JSContext *cx, unsigned argc, Value *vp); + [[nodiscard]] static bool values(JSContext *cx, unsigned argc, Value *vp); + [[nodiscard]] static bool add(JSContext *cx, HandleObject obj, HandleValue key); + [[nodiscard]] static bool has(JSContext *cx, unsigned argc, Value *vp); // Publicly exposed Set calls for JSAPI access (webidl maplike/setlike // interfaces, etc.) static SetObject* create(JSContext *cx, HandleObject proto = nullptr); static uint32_t size(JSContext *cx, HandleObject obj); - static MOZ_MUST_USE bool has(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); - static MOZ_MUST_USE bool clear(JSContext *cx, HandleObject obj); - static MOZ_MUST_USE bool iterator(JSContext *cx, IteratorKind kind, HandleObject obj, + [[nodiscard]] static bool has(JSContext *cx, HandleObject obj, HandleValue key, bool* rval); + [[nodiscard]] static bool clear(JSContext *cx, HandleObject obj); + [[nodiscard]] static bool iterator(JSContext *cx, IteratorKind kind, HandleObject obj, MutableHandleValue iter); - static MOZ_MUST_USE bool delete_(JSContext *cx, HandleObject obj, HandleValue key, bool *rval); + [[nodiscard]] static bool delete_(JSContext *cx, HandleObject obj, HandleValue key, bool *rval); using UnbarrieredTable = OrderedHashSet<Value, UnbarrieredHashPolicy, RuntimeAllocPolicy>; friend class OrderedHashTableRef<SetObject>; @@ -251,20 +251,20 @@ class SetObject : public NativeObject { static bool isBuiltinAdd(HandleValue add, JSContext* cx); - static MOZ_MUST_USE bool iterator_impl(JSContext* cx, const CallArgs& args, IteratorKind kind); - - static MOZ_MUST_USE bool size_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool size(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool has_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool add_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool add(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool delete_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool delete_(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool values_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool entries_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool entries(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool clear_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool clear(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool iterator_impl(JSContext* cx, const CallArgs& args, IteratorKind kind); + + [[nodiscard]] static bool size_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool size(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool has_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool add_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool add(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool delete_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool delete_(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool values_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool entries_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool entries(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool clear_impl(JSContext* cx, const CallArgs& args); + [[nodiscard]] static bool clear(JSContext* cx, unsigned argc, Value* vp); }; class SetIteratorObject : public NativeObject @@ -286,7 +286,7 @@ class SetIteratorObject : public NativeObject SetObject::IteratorKind kind); static void finalize(FreeOp* fop, JSObject* obj); - static MOZ_MUST_USE bool next(Handle<SetIteratorObject*> setIterator, + [[nodiscard]] static bool next(Handle<SetIteratorObject*> setIterator, HandleArrayObject resultObj, JSContext* cx); static JSObject* createResult(JSContext* cx); @@ -299,7 +299,7 @@ using SetInitGetPrototypeOp = NativeObject* (*)(JSContext*, Handle<GlobalObject* using SetInitIsBuiltinOp = bool (*)(HandleValue, JSContext*); template <SetInitGetPrototypeOp getPrototypeOp, SetInitIsBuiltinOp isBuiltinOp> -static MOZ_MUST_USE bool +[[nodiscard]] static bool IsOptimizableInitForSet(JSContext* cx, HandleObject setObject, HandleValue iterable, bool* optimized) { MOZ_ASSERT(!*optimized); diff --git a/js/src/builtin/Object.h b/js/src/builtin/Object.h index cd1fb51020..69bbc1b6ff 100644 --- a/js/src/builtin/Object.h +++ b/js/src/builtin/Object.h @@ -18,10 +18,10 @@ class Value; namespace js { // Object constructor native. Exposed only so the JIT can know its address. -MOZ_MUST_USE bool +[[nodiscard]] bool obj_construct(JSContext* cx, unsigned argc, JS::Value* vp); -MOZ_MUST_USE bool +[[nodiscard]] bool obj_propertyIsEnumerable(JSContext* cx, unsigned argc, Value* vp); PlainObject* @@ -32,32 +32,32 @@ PlainObject* ObjectCreateWithTemplate(JSContext* cx, HandlePlainObject templateObj); // Object methods exposed so they can be installed in the self-hosting global. -MOZ_MUST_USE bool +[[nodiscard]] bool obj_create(JSContext* cx, unsigned argc, JS::Value* vp); -MOZ_MUST_USE bool +[[nodiscard]] bool obj_defineProperty(JSContext* cx, unsigned argc, JS::Value* vp); -MOZ_MUST_USE bool +[[nodiscard]] bool obj_getOwnPropertyNames(JSContext* cx, unsigned argc, JS::Value* vp); -MOZ_MUST_USE bool +[[nodiscard]] bool obj_getOwnPropertyDescriptor(JSContext* cx, unsigned argc, JS::Value* vp); -MOZ_MUST_USE bool +[[nodiscard]] bool obj_getPrototypeOf(JSContext* cx, unsigned argc, JS::Value* vp); -MOZ_MUST_USE bool +[[nodiscard]] bool obj_hasOwnProperty(JSContext* cx, unsigned argc, JS::Value* vp); -MOZ_MUST_USE bool +[[nodiscard]] bool obj_isExtensible(JSContext* cx, unsigned argc, JS::Value* vp); -MOZ_MUST_USE bool +[[nodiscard]] bool obj_toString(JSContext* cx, unsigned argc, JS::Value* vp); // Exposed so SelfHosting.cpp can use it in the OwnPropertyKeys intrinsic -MOZ_MUST_USE bool +[[nodiscard]] bool GetOwnPropertyKeys(JSContext* cx, const JS::CallArgs& args, unsigned flags); /* @@ -65,7 +65,7 @@ GetOwnPropertyKeys(JSContext* cx, const JS::CallArgs& args, unsigned flags); * exposing a jsid to script for Object.getOwnProperty{Names,Symbols} * or scriptable proxy traps. */ -MOZ_MUST_USE bool +[[nodiscard]] bool IdToStringOrSymbol(JSContext* cx, JS::HandleId id, JS::MutableHandleValue result); #if JS_HAS_TOSOURCE @@ -74,7 +74,7 @@ JSString* ObjectToSource(JSContext* cx, JS::HandleObject obj); #endif // JS_HAS_TOSOURCE -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool WatchHandler(JSContext* cx, JSObject* obj, jsid id, const JS::Value& old, JS::Value* nvp, void* closure); diff --git a/js/src/builtin/Profilers.h b/js/src/builtin/Profilers.h index 6ef552a356..da71fd1a86 100644 --- a/js/src/builtin/Profilers.h +++ b/js/src/builtin/Profilers.h @@ -29,21 +29,21 @@ typedef int pid_t; * * Returns true if no profilers fail to start. */ -extern MOZ_MUST_USE JS_PUBLIC_API(bool) +[[nodiscard]] extern JS_PUBLIC_API(bool) JS_StartProfiling(const char* profileName, pid_t pid); /** * Stop any profilers that were previously started with JS_StartProfiling. * Returns true if no profilers fail to stop. */ -extern MOZ_MUST_USE JS_PUBLIC_API(bool) +[[nodiscard]] extern JS_PUBLIC_API(bool) JS_StopProfiling(const char* profileName); /** * Write the current profile data to the given file, if applicable to whatever * profiler is being used. */ -extern MOZ_MUST_USE JS_PUBLIC_API(bool) +[[nodiscard]] extern JS_PUBLIC_API(bool) JS_DumpProfile(const char* outfile, const char* profileName); /** @@ -51,13 +51,13 @@ JS_DumpProfile(const char* outfile, const char* profileName); * whether any profilers failed to pause. (Profilers that do not support * pause/resume do not count.) */ -extern MOZ_MUST_USE JS_PUBLIC_API(bool) +[[nodiscard]] extern JS_PUBLIC_API(bool) JS_PauseProfilers(const char* profileName); /** * Resume suspended profilers */ -extern MOZ_MUST_USE JS_PUBLIC_API(bool) +[[nodiscard]] extern JS_PUBLIC_API(bool) JS_ResumeProfilers(const char* profileName); /** @@ -70,23 +70,23 @@ JS_UnsafeGetLastProfilingError(); #ifdef MOZ_CALLGRIND -extern MOZ_MUST_USE JS_FRIEND_API(bool) +[[nodiscard]] extern JS_FRIEND_API(bool) js_StopCallgrind(); -extern MOZ_MUST_USE JS_FRIEND_API(bool) +[[nodiscard]] extern JS_FRIEND_API(bool) js_StartCallgrind(); -extern MOZ_MUST_USE JS_FRIEND_API(bool) +[[nodiscard]] extern JS_FRIEND_API(bool) js_DumpCallgrind(const char* outfile); #endif /* MOZ_CALLGRIND */ #ifdef __linux__ -extern MOZ_MUST_USE JS_FRIEND_API(bool) +[[nodiscard]] extern JS_FRIEND_API(bool) js_StartPerf(); -extern MOZ_MUST_USE JS_FRIEND_API(bool) +[[nodiscard]] extern JS_FRIEND_API(bool) js_StopPerf(); #endif /* __linux__ */ diff --git a/js/src/builtin/Promise.cpp b/js/src/builtin/Promise.cpp index 7d4c232f2e..8755025ed0 100644 --- a/js/src/builtin/Promise.cpp +++ b/js/src/builtin/Promise.cpp @@ -311,7 +311,7 @@ class MutableWrappedPtrOperations<PromiseCombinatorElements, Wrapper> elements().setElementNeedsWrapping = needsWrapping; } - MOZ_MUST_USE bool pushUndefined(JSContext* cx) { + [[nodiscard]] bool pushUndefined(JSContext* cx) { // Helper for the AutoCompartment we need to work with |array|. We mostly do this // for performance; we could go ahead and do the define via a cross- // compartment proxy instead... @@ -335,7 +335,7 @@ class MutableWrappedPtrOperations<PromiseCombinatorElements, Wrapper> // Promise.all/allSettled/any function, which isn't necessarily the same // compartment as unwrappedArray as explained in NewPromiseCombinatorElements. // So before storing |val| we may need to enter unwrappedArray's compartment. - MOZ_MUST_USE bool setElement(JSContext* cx, uint32_t index, HandleValue val) { + [[nodiscard]] bool setElement(JSContext* cx, uint32_t index, HandleValue val) { // The index is guaranteed to be initialized to `undefined`. MOZ_ASSERT(unwrappedArray()->getDenseElement(index).isUndefined()); @@ -560,7 +560,7 @@ MaybeGetAndClearException(JSContext* cx, MutableHandleValue rval) return GetAndClearException(cx, rval); } -static MOZ_MUST_USE bool RunResolutionFunction(JSContext *cx, HandleObject resolutionFun, +[[nodiscard]] static bool RunResolutionFunction(JSContext *cx, HandleObject resolutionFun, HandleValue result, ResolutionMode mode, HandleObject promiseObj); @@ -778,7 +778,7 @@ static bool ResolvePromiseFunction(JSContext* cx, unsigned argc, Value* vp); static bool RejectPromiseFunction(JSContext* cx, unsigned argc, Value* vp); // ES2016, 25.4.1.3. -static MOZ_MUST_USE bool +[[nodiscard]] static bool CreateResolvingFunctions(JSContext* cx, HandleObject promise, MutableHandleObject resolveFn, MutableHandleObject rejectFn) @@ -823,11 +823,11 @@ IsSettledMaybeWrappedPromise(JSObject* promise) } // ES2016, 25.4.1.7. -static MOZ_MUST_USE bool +[[nodiscard]] static bool RejectMaybeWrappedPromise(JSContext *cx, HandleObject promiseObj, HandleValue reason); // ES2016, 25.4.1.7. -static MOZ_MUST_USE bool +[[nodiscard]] static bool RejectPromiseInternal(JSContext* cx, Handle<PromiseObject*> promise, HandleValue reason); // ES2016, 25.4.1.3.1. @@ -874,15 +874,15 @@ RejectPromiseFunction(JSContext* cx, unsigned argc, Value* vp) return true; } -static MOZ_MUST_USE bool FulfillMaybeWrappedPromise(JSContext *cx, HandleObject promiseObj, +[[nodiscard]] static bool FulfillMaybeWrappedPromise(JSContext *cx, HandleObject promiseObj, HandleValue value_); -static MOZ_MUST_USE bool EnqueuePromiseResolveThenableJob(JSContext* cx, +[[nodiscard]] static bool EnqueuePromiseResolveThenableJob(JSContext* cx, HandleValue promiseToResolve, HandleValue thenable, HandleValue thenVal); -static MOZ_MUST_USE bool EnqueuePromiseResolveThenableBuiltinJob(JSContext* cx, +[[nodiscard]] static bool EnqueuePromiseResolveThenableBuiltinJob(JSContext* cx, HandleObject promiseToResolve, HandleObject thenable); @@ -891,7 +891,7 @@ static bool Promise_then_impl(JSContext* cx, HandleValue promiseVal, HandleValue HandleValue onRejected, MutableHandleValue rval, bool rvalUsed); // ES2016, 25.4.1.3.2, steps 6-13. -static MOZ_MUST_USE bool +[[nodiscard]] static bool ResolvePromiseInternal(JSContext* cx, HandleObject promise, HandleValue resolutionVal) { assertSameCompartment(cx, promise, resolutionVal); @@ -1024,7 +1024,7 @@ static bool PromiseReactionJob(JSContext* cx, unsigned argc, Value* vp); * targetState - The PromiseState this reaction job targets. This decides * whether the onFulfilled or onRejected handler is called. */ -MOZ_MUST_USE static bool +[[nodiscard]] static bool EnqueuePromiseReactionJob(JSContext* cx, HandleObject reactionObj, HandleValue handlerArg_, JS::PromiseState targetState) { @@ -1130,11 +1130,11 @@ EnqueuePromiseReactionJob(JSContext* cx, HandleObject reactionObj, return cx->runtime()->enqueuePromiseJob(cx, job, promise, global); } -static MOZ_MUST_USE bool TriggerPromiseReactions(JSContext* cx, HandleValue reactionsVal, +[[nodiscard]] static bool TriggerPromiseReactions(JSContext* cx, HandleValue reactionsVal, JS::PromiseState state, HandleValue valueOrReason); // ES2016, Commoned-out implementation of 25.4.1.4. and 25.4.1.7. -static MOZ_MUST_USE bool +[[nodiscard]] static bool ResolvePromise(JSContext* cx, Handle<PromiseObject*> promise, HandleValue valueOrReason, JS::PromiseState state) { @@ -1177,14 +1177,14 @@ ResolvePromise(JSContext* cx, Handle<PromiseObject*> promise, HandleValue valueO } // ES2016, 25.4.1.7. -static MOZ_MUST_USE bool +[[nodiscard]] static bool RejectPromiseInternal(JSContext* cx, Handle<PromiseObject*> promise, HandleValue reason) { return ResolvePromise(cx, promise, reason, JS::PromiseState::Rejected); } // ES2016, 25.4.1.4. -static MOZ_MUST_USE bool +[[nodiscard]] static bool FulfillMaybeWrappedPromise(JSContext *cx, HandleObject promiseObj, HandleValue value_) { Rooted<PromiseObject*> promise(cx); @@ -1210,7 +1210,7 @@ FulfillMaybeWrappedPromise(JSContext *cx, HandleObject promiseObj, HandleValue v static bool GetCapabilitiesExecutor(JSContext* cx, unsigned argc, Value* vp); static bool PromiseConstructor(JSContext* cx, unsigned argc, Value* vp); -static MOZ_MUST_USE PromiseObject* CreatePromiseObjectInternal(JSContext* cx, +[[nodiscard]] static PromiseObject* CreatePromiseObjectInternal(JSContext* cx, HandleObject proto = nullptr, bool protoIsWrapped = false, bool informDebugger = true); @@ -1220,7 +1220,7 @@ enum GetCapabilitiesExecutorSlots { GetCapabilitiesExecutorSlots_Reject }; -static MOZ_MUST_USE PromiseObject* +[[nodiscard]] static PromiseObject* CreatePromiseObjectWithoutResolutionFunctions(JSContext* cx) { Rooted<PromiseObject*> promise(cx, CreatePromiseObjectInternal(cx)); @@ -1231,7 +1231,7 @@ CreatePromiseObjectWithoutResolutionFunctions(JSContext* cx) return promise; } -static MOZ_MUST_USE PromiseObject* +[[nodiscard]] static PromiseObject* CreatePromiseWithDefaultResolutionFunctions(JSContext* cx, MutableHandleObject resolve, MutableHandleObject reject) { @@ -1258,7 +1258,7 @@ CreatePromiseWithDefaultResolutionFunctions(JSContext* cx, MutableHandleObject r } // ES2016, 25.4.1.5. -static MOZ_MUST_USE bool +[[nodiscard]] static bool NewPromiseCapability(JSContext* cx, HandleObject C, MutableHandle<PromiseCapability> capability, bool canOmitResolutionFunctions) { @@ -1369,7 +1369,7 @@ GetCapabilitiesExecutor(JSContext* cx, unsigned argc, Value* vp) } // ES2016, 25.4.1.7. -static MOZ_MUST_USE bool +[[nodiscard]] static bool RejectMaybeWrappedPromise(JSContext *cx, HandleObject promiseObj, HandleValue reason_) { Rooted<PromiseObject*> promise(cx); @@ -1410,7 +1410,7 @@ RejectMaybeWrappedPromise(JSContext *cx, HandleObject promiseObj, HandleValue re } // ES2016, 25.4.1.8. -static MOZ_MUST_USE bool +[[nodiscard]] static bool TriggerPromiseReactions(JSContext* cx, HandleValue reactionsVal, JS::PromiseState state, HandleValue valueOrReason) { @@ -1440,7 +1440,7 @@ TriggerPromiseReactions(JSContext* cx, HandleValue reactionsVal, JS::PromiseStat // Implements PromiseReactionJob optimized for the case when the reaction // handler is one of the default resolving functions as created by the // CreateResolvingFunctions abstract operation. -static MOZ_MUST_USE bool +[[nodiscard]] static bool DefaultResolvingPromiseReactionJob(JSContext* cx, Handle<PromiseReactionRecord*> reaction, MutableHandleValue rval) { @@ -1485,7 +1485,7 @@ DefaultResolvingPromiseReactionJob(JSContext* cx, Handle<PromiseReactionRecord*> return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool AsyncFunctionPromiseReactionJob(JSContext* cx, Handle<PromiseReactionRecord*> reaction, MutableHandleValue rval) { @@ -1513,7 +1513,7 @@ AsyncFunctionPromiseReactionJob(JSContext* cx, Handle<PromiseReactionRecord*> re return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool AsyncGeneratorPromiseReactionJob(JSContext* cx, Handle<PromiseReactionRecord*> reaction, MutableHandleValue rval) { @@ -1723,7 +1723,7 @@ PromiseResolveThenableJob(JSContext* cx, unsigned argc, Value* vp) return Call(cx, rejectVal, UndefinedHandleValue, rval, &rval); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool OriginalPromiseThenWithoutSettleHandlers(JSContext* cx, Handle<PromiseObject*> promise, Handle<PromiseObject*> promiseToResolve); @@ -1785,7 +1785,7 @@ PromiseResolveBuiltinThenableJob(JSContext* cx, unsigned argc, Value* vp) * thenable_ - The thenable to resolve the Promise with. * thenVal - The `then` function to invoke with the `thenable` as the receiver. */ -static MOZ_MUST_USE bool +[[nodiscard]] static bool EnqueuePromiseResolveThenableJob(JSContext* cx, HandleValue promiseToResolve_, HandleValue thenable_, HandleValue thenVal) { @@ -1847,7 +1847,7 @@ EnqueuePromiseResolveThenableJob(JSContext* cx, HandleValue promiseToResolve_, * promiseToResolve - The promise to resolve, obviously. * thenable - The thenable to resolve the Promise with. */ -static MOZ_MUST_USE bool +[[nodiscard]] static bool EnqueuePromiseResolveThenableBuiltinJob(JSContext* cx, HandleObject promiseToResolve, HandleObject thenable) { @@ -1869,11 +1869,11 @@ EnqueuePromiseResolveThenableBuiltinJob(JSContext* cx, HandleObject promiseToRes return cx->runtime()->enqueuePromiseJob(cx, job, promiseToResolve, incumbentGlobal); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool AddDummyPromiseReactionForDebugger(JSContext* cx, Handle<PromiseObject*> promise, HandleObject dependentPromise); -static MOZ_MUST_USE bool +[[nodiscard]] static bool AddPromiseReaction(JSContext* cx, Handle<PromiseObject*> promise, Handle<PromiseReactionRecord*> reaction); @@ -1947,7 +1947,7 @@ ClearResolutionFunctionSlots(JSFunction* resolutionFun) } // ES2016, 25.4.3.1. steps 3-7. -static MOZ_MUST_USE PromiseObject* +[[nodiscard]] static PromiseObject* CreatePromiseObjectInternal(JSContext* cx, HandleObject proto /* = nullptr */, bool protoIsWrapped /* = false */, bool informDebugger /* = true */) { @@ -2175,19 +2175,19 @@ class MOZ_STACK_CLASS PromiseForOfIterator : public JS::ForOfIterator { } }; -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseAll(JSContext *cx, PromiseForOfIterator& iterator, HandleObject C, Handle<PromiseCapability> resultCapability, HandleValue promiseResolve, bool* done); -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseAllSettled(JSContext *cx, PromiseForOfIterator& iterator, HandleObject C, Handle<PromiseCapability> resultCapability, HandleValue promiseResolve, bool* done); -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseAny(JSContext *cx, PromiseForOfIterator& iterator, HandleObject C, Handle<PromiseCapability> resultCapability, HandleValue promiseResolve, bool* done); -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseRace(JSContext* cx, PromiseForOfIterator& iterator, HandleObject C, Handle<PromiseCapability> resultCapability, HandleValue promiseResolve, bool* done); @@ -2204,7 +2204,7 @@ enum class CombinatorKind { All, AllSettled, Any, Race }; // https://tc39.es/proposal-promise-any/ // // Promise.any ( iterable ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool CommonPromiseCombinator(JSContext* cx, CallArgs& args, CombinatorKind mode) { HandleValue iterable = args.get(0); @@ -2340,11 +2340,11 @@ static bool Promise_static_all(JSContext* cx, unsigned argc, Value* vp) { return CommonPromiseCombinator(cx, args, CombinatorKind::All); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseThen(JSContext* cx, Handle<PromiseObject*> promise, HandleValue onFulfilled_, HandleValue onRejected_, Handle<PromiseCapability> resultCapability); -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseThenWithoutSettleHandlers(JSContext* cx, Handle<PromiseObject*> promise, Handle<PromiseObject*> promiseToResolve, Handle<PromiseCapability> resultCapability); @@ -2356,7 +2356,7 @@ static JSFunction* NewPromiseCombinatorElementFunction( static bool PromiseAllResolveElementFunction(JSContext* cx, unsigned argc, Value* vp); // Unforgeable version of ES2016, 25.4.4.1. -MOZ_MUST_USE JSObject* +[[nodiscard]] JSObject* js::GetWaitForAllPromise(JSContext* cx, const JS::AutoObjectVector& promises) { #ifdef DEBUG @@ -2476,7 +2476,7 @@ js::GetWaitForAllPromise(JSContext* cx, const JS::AutoObjectVector& promises) return resultCapability.promise(); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool RunResolutionFunction(JSContext *cx, HandleObject resolutionFun, HandleValue result, ResolutionMode mode, HandleObject promiseObj) { @@ -2528,7 +2528,7 @@ RunResolutionFunction(JSContext *cx, HandleObject resolutionFun, HandleValue res return RejectPromiseInternal(cx, promise, result); } -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* CommonStaticResolveRejectImpl(JSContext* cx, HandleValue thisVal, HandleValue argVal, ResolutionMode mode); @@ -2544,7 +2544,7 @@ IsPromiseSpecies(JSContext* cx, JSFunction* species); // https://tc39.es/proposal-promise-any/ // Runtime Semantics: PerformPromiseAny, steps 6-8. template <typename T> -static MOZ_MUST_USE bool +[[nodiscard]] static bool CommonPerformPromiseCombinator(JSContext *cx, PromiseForOfIterator& iterator, HandleObject C, HandleObject resultPromise, HandleValue promiseResolve, bool* done, bool resolveReturnsUndefined, T getResolveAndReject) @@ -2810,7 +2810,7 @@ CommonPerformPromiseCombinator(JSContext *cx, PromiseForOfIterator& iterator, Ha // Create the elements for the Promise combinators Promise.all and // Promise.allSettled. -static MOZ_MUST_USE bool +[[nodiscard]] static bool NewPromiseCombinatorElements(JSContext* cx, Handle<PromiseCapability> resultCapability, MutableHandle<PromiseCombinatorElements> elements) { @@ -2862,7 +2862,7 @@ NewPromiseCombinatorElements(JSContext* cx, Handle<PromiseCapability> resultCapa } // Retrieve the combinator elements from the data holder. -static MOZ_MUST_USE bool +[[nodiscard]] static bool GetPromiseCombinatorElements(JSContext* cx, Handle<PromiseCombinatorDataHolder*> data, MutableHandle<PromiseCombinatorElements> elements) { @@ -2947,7 +2947,7 @@ PromiseCombinatorElementFunctionAlreadyCalled(const CallArgs& args, // ES2020 draft rev a09fc232c137800dbf51b6204f37fdede4ba1646 // 25.6.4.1.1 PerformPromiseAll (iteratorRecord, constructor, resultCapability) -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseAll(JSContext *cx, PromiseForOfIterator& iterator, HandleObject C, Handle<PromiseCapability> resultCapability, HandleValue promiseResolve, bool* done) { @@ -3083,7 +3083,7 @@ Promise_static_race(JSContext* cx, unsigned argc, Value* vp) // ES2020 draft rev a09fc232c137800dbf51b6204f37fdede4ba1646 // 25.6.4.3.1 PerformPromiseRace (iteratorRecord, constructor, resultCapability) -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseRace(JSContext *cx, PromiseForOfIterator& iterator, HandleObject C, Handle<PromiseCapability> resultCapability, HandleValue promiseResolve, bool* done) { @@ -3138,7 +3138,7 @@ static bool Promise_static_allSettled(JSContext* cx, unsigned argc, Value* vp) { // 25.6.4.2 Promise.allSettled ( iterable ) // // PerformPromiseAllSettled ( iteratorRecord, constructor, resultCapability ) -static MOZ_MUST_USE bool PerformPromiseAllSettled( +[[nodiscard]] static bool PerformPromiseAllSettled( JSContext* cx, PromiseForOfIterator& iterator, HandleObject C, Handle<PromiseCapability> resultCapability, HandleValue promiseResolve, bool* done) { *done = false; @@ -3349,7 +3349,7 @@ static void ThrowAggregateError(JSContext* cx, // https://tc39.es/proposal-promise-any/ // // PerformPromiseAny ( iteratorRecord, constructor, resultCapability ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseAny(JSContext* cx, PromiseForOfIterator& iterator, HandleObject C, Handle<PromiseCapability> resultCapability, HandleValue promiseResolve, bool* done) { @@ -3553,7 +3553,7 @@ ThrowAggregateError(JSContext* cx, Handle<PromiseCombinatorElements> errors, Han // 25.6.4.4 Promise.reject ( r ) // 25.6.4.5 Promise.resolve ( x ) // 25.6.4.5.1 PromiseResolve ( C, x ) -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* CommonStaticResolveRejectImpl(JSContext* cx, HandleValue thisVal, HandleValue argVal, ResolutionMode mode) { @@ -3610,7 +3610,7 @@ CommonStaticResolveRejectImpl(JSContext* cx, HandleValue thisVal, HandleValue ar return capability.promise(); } -MOZ_MUST_USE JSObject* +[[nodiscard]] JSObject* js::PromiseResolve(JSContext* cx, HandleObject constructor, HandleValue value) { RootedValue C(cx, ObjectValue(*constructor)); @@ -3789,7 +3789,7 @@ PromiseThenNewPromiseCapability(JSContext* cx, HandleObject promiseObj, } // ES2016, 25.4.5.3., steps 3-5. -MOZ_MUST_USE bool +[[nodiscard]] bool js::OriginalPromiseThen(JSContext* cx, Handle<PromiseObject*> promise, HandleValue onFulfilled, HandleValue onRejected, MutableHandleObject dependent, CreateDependentPromise createDependent) @@ -3813,7 +3813,7 @@ js::OriginalPromiseThen(JSContext* cx, Handle<PromiseObject*> promise, return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool OriginalPromiseThenWithoutSettleHandlers(JSContext* cx, Handle<PromiseObject*> promise, Handle<PromiseObject*> promiseToResolve) { @@ -3870,7 +3870,7 @@ OriginalPromiseThenBuiltin(JSContext* cx, HandleValue promiseVal, HandleValue on return true; } -MOZ_MUST_USE bool +[[nodiscard]] bool js::RejectPromiseWithPendingError(JSContext* cx, Handle<PromiseObject*> promise) { // Not much we can do about uncatchable exceptions, just bail. @@ -3880,7 +3880,7 @@ js::RejectPromiseWithPendingError(JSContext* cx, Handle<PromiseObject*> promise) return PromiseObject::reject(cx, promise, exn); } -static MOZ_MUST_USE bool PerformPromiseThenWithReaction(JSContext* cx, +[[nodiscard]] static bool PerformPromiseThenWithReaction(JSContext* cx, Handle<PromiseObject*> promise, Handle<PromiseReactionRecord*> reaction); @@ -3888,7 +3888,7 @@ static MOZ_MUST_USE bool PerformPromiseThenWithReaction(JSContext* cx, // js/src/builtin/AsyncFunction.cpp, to call Promise internal functions. // ES 2018 draft 14.6.11 and 14.7.14 step 1. -MOZ_MUST_USE PromiseObject* +[[nodiscard]] PromiseObject* js::CreatePromiseObjectForAsync(JSContext* cx, HandleValue generatorVal) { // Step 1. @@ -3909,7 +3909,7 @@ js::IsPromiseForAsync(JSObject* promise) } // ES 2018 draft 25.5.5.2 steps 3.f, 3.g. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncFunctionThrown(JSContext* cx, Handle<PromiseObject*> resultPromise) { // Step 3.f. @@ -3925,7 +3925,7 @@ js::AsyncFunctionThrown(JSContext* cx, Handle<PromiseObject*> resultPromise) } // ES 2018 draft 25.5.5.2 steps 3.d-e, 3.g. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncFunctionReturned(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleValue value) { // Steps 3.d-e. @@ -3939,7 +3939,7 @@ js::AsyncFunctionReturned(JSContext* cx, Handle<PromiseObject*> resultPromise, H // Helper function that performs the equivalent steps as // Async Iteration proposal 4.1 Await steps 2-3, 6-9 or similar. template <typename T> -static MOZ_MUST_USE bool +[[nodiscard]] static bool InternalAwait(JSContext* cx, HandleValue value, HandleObject resultPromise, HandleValue onFulfilled, HandleValue onRejected, T extraStep) { @@ -3972,7 +3972,7 @@ InternalAwait(JSContext* cx, HandleValue value, HandleObject resultPromise, } // ES 2018 draft 25.5.5.3 steps 2-10. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncFunctionAwait(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleValue value) { // Steps 4-5. @@ -3987,7 +3987,7 @@ js::AsyncFunctionAwait(JSContext* cx, Handle<PromiseObject*> resultPromise, Hand } // Async Iteration proposal 4.1 Await steps 2-9. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncGeneratorAwait(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue value) { @@ -4146,13 +4146,13 @@ enum class ResumeNextKind { Enqueue, Reject, Resolve }; -static MOZ_MUST_USE bool +[[nodiscard]] static bool AsyncGeneratorResumeNext(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, ResumeNextKind kind, HandleValue valueOrException = UndefinedHandleValue, bool done = false); // Async Iteration proposal 11.4.3.3. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncGeneratorResolve(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue value, bool done) { @@ -4160,7 +4160,7 @@ js::AsyncGeneratorResolve(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenO } // Async Iteration proposal 11.4.3.4. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncGeneratorReject(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue exception) { @@ -4168,7 +4168,7 @@ js::AsyncGeneratorReject(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenOb } // Async Iteration proposal 11.4.3.5. -static MOZ_MUST_USE bool +[[nodiscard]] static bool AsyncGeneratorResumeNext(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, ResumeNextKind kind, HandleValue valueOrException_ /* = UndefinedHandleValue */, @@ -4349,7 +4349,7 @@ AsyncGeneratorResumeNext(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenOb } // Async Iteration proposal 11.4.3.6. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncGeneratorEnqueue(JSContext* cx, HandleValue asyncGenVal, CompletionKind completionKind, HandleValue completionValue, MutableHandleValue result) @@ -4540,7 +4540,7 @@ Promise_then(JSContext* cx, unsigned argc, Value* vp) } // ES2016, 25.4.5.3.1. -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseThen(JSContext* cx, Handle<PromiseObject*> promise, HandleValue onFulfilled_, HandleValue onRejected_, Handle<PromiseCapability> resultCapability) { @@ -4567,7 +4567,7 @@ PerformPromiseThen(JSContext* cx, Handle<PromiseObject*> promise, HandleValue on return PerformPromiseThenWithReaction(cx, promise, reaction); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseThenWithoutSettleHandlers(JSContext* cx, Handle<PromiseObject*> promise, Handle<PromiseObject*> promiseToResolve, Handle<PromiseCapability> resultCapability) @@ -4593,7 +4593,7 @@ PerformPromiseThenWithoutSettleHandlers(JSContext* cx, Handle<PromiseObject*> pr return PerformPromiseThenWithReaction(cx, promise, reaction); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool PerformPromiseThenWithReaction(JSContext* cx, Handle<PromiseObject*> promise, Handle<PromiseReactionRecord*> reaction) { @@ -4637,7 +4637,7 @@ PerformPromiseThenWithReaction(JSContext* cx, Handle<PromiseObject*> promise, return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool AddPromiseReaction(JSContext* cx, Handle<PromiseObject*> promise, Handle<PromiseReactionRecord*> reaction) { @@ -4705,7 +4705,7 @@ AddPromiseReaction(JSContext* cx, Handle<PromiseObject*> promise, return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool AddDummyPromiseReactionForDebugger(JSContext* cx, Handle<PromiseObject*> promise, HandleObject dependentPromise) { diff --git a/js/src/builtin/Promise.h b/js/src/builtin/Promise.h index 5e5c850d60..f7c638acc7 100644 --- a/js/src/builtin/Promise.h +++ b/js/src/builtin/Promise.h @@ -73,10 +73,10 @@ class PromiseObject : public NativeObject return getFixedSlot(PromiseSlot_ReactionsOrResult); } - static MOZ_MUST_USE bool resolve(JSContext* cx, Handle<PromiseObject*> promise, - HandleValue resolutionValue); - static MOZ_MUST_USE bool reject(JSContext* cx, Handle<PromiseObject*> promise, - HandleValue rejectionValue); + [[nodiscard]] static bool resolve(JSContext* cx, Handle<PromiseObject*> promise, + HandleValue resolutionValue); + [[nodiscard]] static bool reject(JSContext* cx, Handle<PromiseObject*> promise, + HandleValue rejectionValue); static void onSettled(JSContext* cx, Handle<PromiseObject*> promise); @@ -89,7 +89,7 @@ class PromiseObject : public NativeObject MOZ_ASSERT(state() != JS::PromiseState::Pending); return resolutionTime() - allocationTime(); } - MOZ_MUST_USE bool dependentPromises(JSContext* cx, MutableHandle<GCVector<Value>> values); + [[nodiscard]] bool dependentPromises(JSContext* cx, MutableHandle<GCVector<Value>> values); uint64_t getID(); bool isUnhandled() { MOZ_ASSERT(state() == JS::PromiseState::Rejected); @@ -113,7 +113,7 @@ class PromiseObject : public NativeObject * Asserts that all objects in the `promises` vector are, maybe wrapped, * instances of `Promise` or a subclass of `Promise`. */ -MOZ_MUST_USE JSObject* +[[nodiscard]] JSObject* GetWaitForAllPromise(JSContext* cx, const JS::AutoObjectVector& promises); enum class CreateDependentPromise { @@ -132,7 +132,7 @@ enum class CreateDependentPromise { * `promise` field that can contain null. That field is only ever used by * devtools, which have to treat these reactions specially. */ -MOZ_MUST_USE bool +[[nodiscard]] bool OriginalPromiseThen(JSContext* cx, Handle<PromiseObject*> promise, HandleValue onFulfilled, HandleValue onRejected, MutableHandleObject dependent, CreateDependentPromise createDependent); @@ -143,41 +143,41 @@ OriginalPromiseThen(JSContext* cx, Handle<PromiseObject*> promise, * The abstract operation PromiseResolve, given a constructor and a value, * returns a new promise resolved with that value. */ -MOZ_MUST_USE JSObject* +[[nodiscard]] JSObject* PromiseResolve(JSContext* cx, HandleObject constructor, HandleValue value); -MOZ_MUST_USE bool +[[nodiscard]] bool RejectPromiseWithPendingError(JSContext* cx, Handle<PromiseObject*> promise); -MOZ_MUST_USE PromiseObject* +[[nodiscard]] PromiseObject* CreatePromiseObjectForAsync(JSContext* cx, HandleValue generatorVal); -MOZ_MUST_USE bool +[[nodiscard]] bool IsPromiseForAsync(JSObject* promise); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncFunctionReturned(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleValue value); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncFunctionThrown(JSContext* cx, Handle<PromiseObject*> resultPromise); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncFunctionAwait(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleValue value); class AsyncGeneratorObject; -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncGeneratorAwait(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue value); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncGeneratorResolve(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue value, bool done); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncGeneratorReject(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue exception); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncGeneratorEnqueue(JSContext* cx, HandleValue asyncGenVal, CompletionKind completionKind, HandleValue completionValue, MutableHandleValue result); diff --git a/js/src/builtin/Reflect.h b/js/src/builtin/Reflect.h index abe088c2da..21857d4fcc 100644 --- a/js/src/builtin/Reflect.h +++ b/js/src/builtin/Reflect.h @@ -17,10 +17,10 @@ InitReflect(JSContext* cx, js::HandleObject obj); namespace js { -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool Reflect_getPrototypeOf(JSContext* cx, unsigned argc, Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool Reflect_isExtensible(JSContext* cx, unsigned argc, Value* vp); } diff --git a/js/src/builtin/ReflectParse.cpp b/js/src/builtin/ReflectParse.cpp index a8dd93aab2..7eb7c46b2d 100644 --- a/js/src/builtin/ReflectParse.cpp +++ b/js/src/builtin/ReflectParse.cpp @@ -256,7 +256,7 @@ class NodeBuilder userv(c) {} - MOZ_MUST_USE bool init(HandleObject userobj = nullptr) { + [[nodiscard]] bool init(HandleObject userobj = nullptr) { if (src) { if (!atomValue(src, &srcval)) return false; @@ -307,7 +307,7 @@ class NodeBuilder } private: - MOZ_MUST_USE bool callbackHelper(HandleValue fun, const InvokeArgs& args, size_t i, + [[nodiscard]] bool callbackHelper(HandleValue fun, const InvokeArgs& args, size_t i, TokenPos* pos, MutableHandleValue dst) { // The end of the implementation of callback(). All arguments except @@ -324,7 +324,7 @@ class NodeBuilder // that convert to HandleValue, so this isn't as template-y as it seems, // just variadic. template <typename... Arguments> - MOZ_MUST_USE bool callbackHelper(HandleValue fun, const InvokeArgs& args, size_t i, + [[nodiscard]] bool callbackHelper(HandleValue fun, const InvokeArgs& args, size_t i, HandleValue head, Arguments&&... tail) { // Recursive loop to store the arguments into args. This eventually @@ -338,7 +338,7 @@ class NodeBuilder // bool callback(HandleValue fun, HandleValue... args, TokenPos* pos, // MutableHandleValue dst); template <typename... Arguments> - MOZ_MUST_USE bool callback(HandleValue fun, Arguments&&... args) { + [[nodiscard]] bool callback(HandleValue fun, Arguments&&... args) { InvokeArgs iargs(cx); if (!iargs.init(cx, sizeof...(args) - 2 + size_t(saveLoc))) return false; @@ -355,7 +355,7 @@ class NodeBuilder return v.isMagic(JS_SERIALIZE_NO_NODE) ? JS::UndefinedHandleValue : v; } - MOZ_MUST_USE bool atomValue(const char* s, MutableHandleValue dst) { + [[nodiscard]] bool atomValue(const char* s, MutableHandleValue dst) { /* * Bug 575416: instead of Atomize, lookup constant atoms in tbl file */ @@ -367,7 +367,7 @@ class NodeBuilder return true; } - MOZ_MUST_USE bool newObject(MutableHandleObject dst) { + [[nodiscard]] bool newObject(MutableHandleObject dst) { RootedPlainObject nobj(cx, NewBuiltinClassInstance<PlainObject>(cx)); if (!nobj) return false; @@ -376,11 +376,11 @@ class NodeBuilder return true; } - MOZ_MUST_USE bool newArray(NodeVector& elts, MutableHandleValue dst); + [[nodiscard]] bool newArray(NodeVector& elts, MutableHandleValue dst); - MOZ_MUST_USE bool createNode(ASTType type, TokenPos* pos, MutableHandleObject dst); + [[nodiscard]] bool createNode(ASTType type, TokenPos* pos, MutableHandleObject dst); - MOZ_MUST_USE bool newNodeHelper(HandleObject obj, MutableHandleValue dst) { + [[nodiscard]] bool newNodeHelper(HandleObject obj, MutableHandleValue dst) { // The end of the implementation of newNode(). MOZ_ASSERT(obj); dst.setObject(*obj); @@ -388,7 +388,7 @@ class NodeBuilder } template <typename... Arguments> - MOZ_MUST_USE bool newNodeHelper(HandleObject obj, const char *name, HandleValue value, + [[nodiscard]] bool newNodeHelper(HandleObject obj, const char *name, HandleValue value, Arguments&&... rest) { // Recursive loop to define properties. Note that the newNodeHelper() @@ -407,13 +407,13 @@ class NodeBuilder // {const char *name0, HandleValue value0,}... // MutableHandleValue dst); template <typename... Arguments> - MOZ_MUST_USE bool newNode(ASTType type, TokenPos* pos, Arguments&&... args) { + [[nodiscard]] bool newNode(ASTType type, TokenPos* pos, Arguments&&... args) { RootedObject node(cx); return createNode(type, pos, &node) && newNodeHelper(node, Forward<Arguments>(args)...); } - MOZ_MUST_USE bool listNode(ASTType type, const char* propName, NodeVector& elts, TokenPos* pos, + [[nodiscard]] bool listNode(ASTType type, const char* propName, NodeVector& elts, TokenPos* pos, MutableHandleValue dst) { RootedValue array(cx); if (!newArray(elts, &array)) @@ -426,7 +426,7 @@ class NodeBuilder return newNode(type, pos, propName, array, dst); } - MOZ_MUST_USE bool defineProperty(HandleObject obj, const char* name, HandleValue val) { + [[nodiscard]] bool defineProperty(HandleObject obj, const char* name, HandleValue val) { MOZ_ASSERT_IF(val.isMagic(), val.whyMagic() == JS_SERIALIZE_NO_NODE); /* @@ -441,9 +441,9 @@ class NodeBuilder return DefineProperty(cx, obj, atom->asPropertyName(), optVal); } - MOZ_MUST_USE bool newNodeLoc(TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool newNodeLoc(TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool setNodeLoc(HandleObject node, TokenPos* pos); + [[nodiscard]] bool setNodeLoc(HandleObject node, TokenPos* pos); public: /* @@ -459,27 +459,27 @@ class NodeBuilder * misc nodes */ - MOZ_MUST_USE bool program(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool program(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool literal(HandleValue val, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool literal(HandleValue val, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool identifier(HandleValue name, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool identifier(HandleValue name, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool function(ASTType type, TokenPos* pos, + [[nodiscard]] bool function(ASTType type, TokenPos* pos, HandleValue id, NodeVector& args, NodeVector& defaults, HandleValue body, HandleValue rest, GeneratorStyle generatorStyle, bool isAsync, bool isExpression, MutableHandleValue dst); - MOZ_MUST_USE bool variableDeclarator(HandleValue id, HandleValue init, TokenPos* pos, + [[nodiscard]] bool variableDeclarator(HandleValue id, HandleValue init, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool switchCase(HandleValue expr, NodeVector& elts, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool switchCase(HandleValue expr, NodeVector& elts, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool catchClause(HandleValue var, HandleValue guard, HandleValue body, TokenPos* pos, + [[nodiscard]] bool catchClause(HandleValue var, HandleValue guard, HandleValue body, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool prototypeMutation(HandleValue val, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool propertyInitializer(HandleValue key, HandleValue val, PropKind kind, + [[nodiscard]] bool prototypeMutation(HandleValue val, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool propertyInitializer(HandleValue key, HandleValue val, PropKind kind, bool isShorthand, bool isMethod, TokenPos* pos, MutableHandleValue dst); @@ -488,165 +488,165 @@ class NodeBuilder * statements */ - MOZ_MUST_USE bool blockStatement(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool blockStatement(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool expressionStatement(HandleValue expr, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool expressionStatement(HandleValue expr, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool emptyStatement(TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool emptyStatement(TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool ifStatement(HandleValue test, HandleValue cons, HandleValue alt, TokenPos* pos, + [[nodiscard]] bool ifStatement(HandleValue test, HandleValue cons, HandleValue alt, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool breakStatement(HandleValue label, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool breakStatement(HandleValue label, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool continueStatement(HandleValue label, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool continueStatement(HandleValue label, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool labeledStatement(HandleValue label, HandleValue stmt, TokenPos* pos, + [[nodiscard]] bool labeledStatement(HandleValue label, HandleValue stmt, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool throwStatement(HandleValue arg, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool throwStatement(HandleValue arg, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool returnStatement(HandleValue arg, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool returnStatement(HandleValue arg, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool forStatement(HandleValue init, HandleValue test, HandleValue update, HandleValue stmt, + [[nodiscard]] bool forStatement(HandleValue init, HandleValue test, HandleValue update, HandleValue stmt, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool forInStatement(HandleValue var, HandleValue expr, HandleValue stmt, + [[nodiscard]] bool forInStatement(HandleValue var, HandleValue expr, HandleValue stmt, bool isForEach, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool forOfStatement(HandleValue var, HandleValue expr, HandleValue stmt, TokenPos* pos, + [[nodiscard]] bool forOfStatement(HandleValue var, HandleValue expr, HandleValue stmt, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool withStatement(HandleValue expr, HandleValue stmt, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool withStatement(HandleValue expr, HandleValue stmt, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool whileStatement(HandleValue test, HandleValue stmt, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool whileStatement(HandleValue test, HandleValue stmt, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool doWhileStatement(HandleValue stmt, HandleValue test, TokenPos* pos, + [[nodiscard]] bool doWhileStatement(HandleValue stmt, HandleValue test, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool switchStatement(HandleValue disc, NodeVector& elts, bool lexical, TokenPos* pos, + [[nodiscard]] bool switchStatement(HandleValue disc, NodeVector& elts, bool lexical, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool tryStatement(HandleValue body, NodeVector& guarded, HandleValue unguarded, + [[nodiscard]] bool tryStatement(HandleValue body, NodeVector& guarded, HandleValue unguarded, HandleValue finally, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool debuggerStatement(TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool debuggerStatement(TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool importDeclaration(NodeVector& elts, HandleValue moduleSpec, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool importDeclaration(NodeVector& elts, HandleValue moduleSpec, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool importSpecifier(HandleValue importName, HandleValue bindingName, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool importSpecifier(HandleValue importName, HandleValue bindingName, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool exportDeclaration(HandleValue decl, NodeVector& elts, HandleValue moduleSpec, + [[nodiscard]] bool exportDeclaration(HandleValue decl, NodeVector& elts, HandleValue moduleSpec, HandleValue isDefault, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool exportSpecifier(HandleValue bindingName, HandleValue exportName, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool exportSpecifier(HandleValue bindingName, HandleValue exportName, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool exportBatchSpecifier(TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool exportBatchSpecifier(TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool classDefinition(bool expr, HandleValue name, HandleValue heritage, + [[nodiscard]] bool classDefinition(bool expr, HandleValue name, HandleValue heritage, HandleValue block, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool classMembers(NodeVector& members, MutableHandleValue dst); - MOZ_MUST_USE bool classMethod(HandleValue name, HandleValue body, PropKind kind, bool isStatic, + [[nodiscard]] bool classMembers(NodeVector& members, MutableHandleValue dst); + [[nodiscard]] bool classMethod(HandleValue name, HandleValue body, PropKind kind, bool isStatic, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool classField(HandleValue name, HandleValue initializer, + [[nodiscard]] bool classField(HandleValue name, HandleValue initializer, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool staticClassBlock(HandleValue body, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool staticClassBlock(HandleValue body, TokenPos* pos, MutableHandleValue dst); /* * expressions */ - MOZ_MUST_USE bool binaryExpression(BinaryOperator op, HandleValue left, HandleValue right, + [[nodiscard]] bool binaryExpression(BinaryOperator op, HandleValue left, HandleValue right, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool unaryExpression(UnaryOperator op, HandleValue expr, TokenPos* pos, + [[nodiscard]] bool unaryExpression(UnaryOperator op, HandleValue expr, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool assignmentExpression(AssignmentOperator op, HandleValue lhs, HandleValue rhs, + [[nodiscard]] bool assignmentExpression(AssignmentOperator op, HandleValue lhs, HandleValue rhs, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool updateExpression(HandleValue expr, bool incr, bool prefix, TokenPos* pos, + [[nodiscard]] bool updateExpression(HandleValue expr, bool incr, bool prefix, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool logicalExpression(ParseNodeKind kind, HandleValue left, HandleValue right, TokenPos* pos, + [[nodiscard]] bool logicalExpression(ParseNodeKind kind, HandleValue left, HandleValue right, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool conditionalExpression(HandleValue test, HandleValue cons, HandleValue alt, + [[nodiscard]] bool conditionalExpression(HandleValue test, HandleValue cons, HandleValue alt, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool sequenceExpression(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool sequenceExpression(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool newExpression(HandleValue callee, NodeVector& args, TokenPos* pos, + [[nodiscard]] bool newExpression(HandleValue callee, NodeVector& args, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool callExpression(HandleValue callee, NodeVector& args, TokenPos* pos, + [[nodiscard]] bool callExpression(HandleValue callee, NodeVector& args, TokenPos* pos, MutableHandleValue dst, bool isOptional = false); - MOZ_MUST_USE bool memberExpression(bool computed, HandleValue expr, HandleValue member, + [[nodiscard]] bool memberExpression(bool computed, HandleValue expr, HandleValue member, TokenPos* pos, MutableHandleValue dst, bool isOptional = false); - MOZ_MUST_USE bool arrayExpression(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool arrayExpression(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool templateLiteral(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool templateLiteral(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool taggedTemplate(HandleValue callee, NodeVector& args, TokenPos* pos, + [[nodiscard]] bool taggedTemplate(HandleValue callee, NodeVector& args, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool callSiteObj(NodeVector& raw, NodeVector& cooked, TokenPos* pos, + [[nodiscard]] bool callSiteObj(NodeVector& raw, NodeVector& cooked, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool spreadExpression(HandleValue expr, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool spreadExpression(HandleValue expr, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool optionalExpression(HandleValue expr, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool optionalExpression(HandleValue expr, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool deleteOptionalExpression(HandleValue expr, TokenPos* pos, + [[nodiscard]] bool deleteOptionalExpression(HandleValue expr, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool computedName(HandleValue name, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool computedName(HandleValue name, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool objectExpression(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool objectExpression(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool thisExpression(TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool thisExpression(TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool yieldExpression(HandleValue arg, YieldKind kind, TokenPos* pos, + [[nodiscard]] bool yieldExpression(HandleValue arg, YieldKind kind, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool comprehensionBlock(HandleValue patt, HandleValue src, bool isForEach, + [[nodiscard]] bool comprehensionBlock(HandleValue patt, HandleValue src, bool isForEach, bool isForOf, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool comprehensionIf(HandleValue test, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool comprehensionIf(HandleValue test, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool comprehensionExpression(HandleValue body, NodeVector& blocks, + [[nodiscard]] bool comprehensionExpression(HandleValue body, NodeVector& blocks, HandleValue filter, bool isLegacy, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool generatorExpression(HandleValue body, NodeVector& blocks, HandleValue filter, + [[nodiscard]] bool generatorExpression(HandleValue body, NodeVector& blocks, HandleValue filter, bool isLegacy, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool metaProperty(HandleValue meta, HandleValue property, TokenPos* pos, + [[nodiscard]] bool metaProperty(HandleValue meta, HandleValue property, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool callImportExpression(HandleValue ident, HandleValue arg, TokenPos* pos, + [[nodiscard]] bool callImportExpression(HandleValue ident, HandleValue arg, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool super(TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool super(TokenPos* pos, MutableHandleValue dst); /* * declarations */ - MOZ_MUST_USE bool variableDeclaration(NodeVector& elts, VarDeclKind kind, TokenPos* pos, + [[nodiscard]] bool variableDeclaration(NodeVector& elts, VarDeclKind kind, TokenPos* pos, MutableHandleValue dst); /* * patterns */ - MOZ_MUST_USE bool arrayPattern(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool arrayPattern(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool objectPattern(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); + [[nodiscard]] bool objectPattern(NodeVector& elts, TokenPos* pos, MutableHandleValue dst); - MOZ_MUST_USE bool propertyPattern(HandleValue key, HandleValue patt, bool isShorthand, + [[nodiscard]] bool propertyPattern(HandleValue key, HandleValue patt, bool isShorthand, TokenPos* pos, MutableHandleValue dst); }; diff --git a/js/src/builtin/RegExp.h b/js/src/builtin/RegExp.h index c0a7d59f77..eefd19570a 100644 --- a/js/src/builtin/RegExp.h +++ b/js/src/builtin/RegExp.h @@ -25,42 +25,42 @@ InitRegExpClass(JSContext* cx, HandleObject obj); * |input| may be nullptr if there is no JSString corresponding to * |chars| and |length|. */ -MOZ_MUST_USE bool +[[nodiscard]] bool ExecuteRegExpLegacy(JSContext* cx, RegExpStatics* res, Handle<RegExpObject*> reobj, HandleLinearString input, size_t* lastIndex, bool test, MutableHandleValue rval); /* Translation from MatchPairs to a JS array in regexp_exec()'s output format. */ -MOZ_MUST_USE bool +[[nodiscard]] bool CreateRegExpMatchResult(JSContext* cx, RegExpShared& re, HandleString input, const MatchPairs& matches, MutableHandleValue rval); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpMatcher(JSContext* cx, unsigned argc, Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpMatcherRaw(JSContext* cx, HandleObject regexp, HandleString input, int32_t lastIndex, MatchPairs* maybeMatches, MutableHandleValue output); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpSearcher(JSContext* cx, unsigned argc, Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpSearcherRaw(JSContext* cx, HandleObject regexp, HandleString input, int32_t lastIndex, MatchPairs* maybeMatches, int32_t* result); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpTester(JSContext* cx, unsigned argc, Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpTesterRaw(JSContext* cx, HandleObject regexp, HandleString input, int32_t lastIndex, int32_t* endIndex); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool intrinsic_GetElemBaseForLambda(JSContext* cx, unsigned argc, Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool intrinsic_GetStringDataProperty(JSContext* cx, unsigned argc, Value* vp); /* @@ -73,67 +73,67 @@ intrinsic_GetStringDataProperty(JSContext* cx, unsigned argc, Value* vp); * Must be called without |new|. * Dedicated function for RegExp.prototype[@@split] optimized path. */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool regexp_construct_raw_flags(JSContext* cx, unsigned argc, Value* vp); /* * Clone given RegExp object, inheriting pattern and flags, ignoring other * properties. */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool regexp_clone(JSContext* cx, unsigned argc, Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool IsRegExp(JSContext* cx, HandleValue value, bool* result); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpCreate(JSContext* cx, HandleValue pattern, HandleValue flags, MutableHandleValue rval); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpPrototypeOptimizable(JSContext* cx, unsigned argc, Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpPrototypeOptimizableRaw(JSContext* cx, JSObject* proto); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpInstanceOptimizable(JSContext* cx, unsigned argc, Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpInstanceOptimizableRaw(JSContext* cx, JSObject* obj, JSObject* proto); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool RegExpGetSubstitution(JSContext* cx, HandleArrayObject matchResult, HandleLinearString string, size_t position, HandleLinearString replacement, size_t firstDollarIndex, HandleValue namedCaptures, MutableHandleValue rval); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool GetFirstDollarIndex(JSContext* cx, unsigned argc, Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool GetFirstDollarIndexRaw(JSContext* cx, HandleString str, int32_t* index); extern int32_t GetFirstDollarIndexRawFlat(JSLinearString* text); // RegExp ClassSpec members used in RegExpObject.cpp. -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool regexp_construct(JSContext* cx, unsigned argc, Value* vp); extern const JSPropertySpec regexp_static_props[]; extern const JSPropertySpec regexp_properties[]; extern const JSFunctionSpec regexp_methods[]; // Used in RegExpObject::isOriginalFlagGetter. -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool regexp_global(JSContext* cx, unsigned argc, JS::Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool regexp_ignoreCase(JSContext* cx, unsigned argc, JS::Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool regexp_multiline(JSContext* cx, unsigned argc, JS::Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool regexp_sticky(JSContext* cx, unsigned argc, JS::Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool regexp_unicode(JSContext* cx, unsigned argc, JS::Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool regexp_dotAll(JSContext* cx, unsigned argc, JS::Value* vp); } /* namespace js */ diff --git a/js/src/builtin/Stream.cpp b/js/src/builtin/Stream.cpp index 26457709d8..b4785ef171 100644 --- a/js/src/builtin/Stream.cpp +++ b/js/src/builtin/Stream.cpp @@ -179,14 +179,14 @@ js::ReadableStreamReaderIsClosed(const JSObject* reader) return !ReaderHasStream(&reader->as<NativeObject>()); } -inline static MOZ_MUST_USE ReadableStream* +[[nodiscard]] inline static ReadableStream* StreamFromController(const NativeObject* controller) { MOZ_ASSERT(IsReadableStreamController(controller)); return &controller->getFixedSlot(ControllerSlot_Stream).toObject().as<ReadableStream>(); } -inline static MOZ_MUST_USE NativeObject* +[[nodiscard]] inline static NativeObject* ControllerFromStream(const ReadableStream* stream) { Value controllerVal = stream->getFixedSlot(StreamSlot_Controller); @@ -211,14 +211,14 @@ ReadableStream::mode() const : JS::ReadableStreamMode::Byte; } -inline static MOZ_MUST_USE ReadableStream* +[[nodiscard]] inline static ReadableStream* StreamFromReader(const NativeObject* reader) { MOZ_ASSERT(ReaderHasStream(reader)); return &reader->getFixedSlot(ReaderSlot_Stream).toObject().as<ReadableStream>(); } -inline static MOZ_MUST_USE NativeObject* +[[nodiscard]] inline static NativeObject* ReaderFromStream(const NativeObject* stream) { Value readerVal = stream->getFixedSlot(StreamSlot_Reader); @@ -232,7 +232,7 @@ HasReader(const ReadableStream* stream) return !stream->getFixedSlot(StreamSlot_Reader).isUndefined(); } -inline static MOZ_MUST_USE JSFunction* +[[nodiscard]] inline static JSFunction* NewHandler(JSContext *cx, Native handler, HandleObject target) { RootedAtom funName(cx, cx->names().empty); @@ -246,23 +246,23 @@ NewHandler(JSContext *cx, Native handler, HandleObject target) } template<class T> -inline static MOZ_MUST_USE T* +[[nodiscard]] inline static T* TargetFromHandler(JSObject& handler) { return &handler.as<JSFunction>().getExtendedSlot(0).toObject().as<T>(); } -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool ResetQueue(JSContext* cx, HandleNativeObject container); -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool InvokeOrNoop(JSContext* cx, HandleValue O, HandlePropertyName P, HandleValue arg, MutableHandleValue rval); -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* PromiseInvokeOrNoop(JSContext* cx, HandleValue O, HandlePropertyName P, HandleValue arg); -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* PromiseRejectedWithPendingError(JSContext* cx) { // Not much we can do about uncatchable exceptions, just bail. RootedValue exn(cx); @@ -284,7 +284,7 @@ ReportArgTypeError(JSContext* cx, const char* funName, const char* expectedType, funName, expectedType, bytes.get()); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReturnPromiseRejectedWithPendingError(JSContext* cx, const CallArgs& args) { JSObject* promise = PromiseRejectedWithPendingError(cx); @@ -295,7 +295,7 @@ ReturnPromiseRejectedWithPendingError(JSContext* cx, const CallArgs& args) return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool RejectNonGenericMethod(JSContext* cx, const CallArgs& args, const char* className, const char* methodName) { @@ -305,7 +305,7 @@ RejectNonGenericMethod(JSContext* cx, const CallArgs& args, return ReturnPromiseRejectedWithPendingError(cx, args); } -inline static MOZ_MUST_USE NativeObject* +[[nodiscard]] inline static NativeObject* SetNewList(JSContext* cx, HandleNativeObject container, uint32_t slot) { NativeObject* list = NewObjectWithNullTaggedProto<PlainObject>(cx); @@ -315,7 +315,7 @@ SetNewList(JSContext* cx, HandleNativeObject container, uint32_t slot) return list; } -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool AppendToList(JSContext* cx, HandleNativeObject list, HandleValue value) { uint32_t length = list->getDenseInitializedLength(); @@ -330,7 +330,7 @@ AppendToList(JSContext* cx, HandleNativeObject list, HandleValue value) } template<class T> -inline static MOZ_MUST_USE T* +[[nodiscard]] inline static T* PeekList(NativeObject* list) { MOZ_ASSERT(list->getDenseInitializedLength() > 0); @@ -338,7 +338,7 @@ PeekList(NativeObject* list) } template<class T> -inline static MOZ_MUST_USE T* +[[nodiscard]] inline static T* ShiftFromList(JSContext* cx, HandleNativeObject list) { uint32_t length = list->getDenseInitializedLength(); @@ -645,7 +645,7 @@ ReadableStream::createStream(JSContext* cx, HandleObject proto /* = nullptr */) return stream; } -static MOZ_MUST_USE ReadableStreamDefaultController* +[[nodiscard]] static ReadableStreamDefaultController* CreateReadableStreamDefaultController(JSContext* cx, Handle<ReadableStream*> stream, HandleValue underlyingSource, HandleValue size, HandleValue highWaterMarkVal); @@ -677,7 +677,7 @@ ReadableStream::createDefaultStream(JSContext* cx, HandleValue underlyingSource, return stream; } -static MOZ_MUST_USE ReadableByteStreamController* +[[nodiscard]] static ReadableByteStreamController* CreateReadableByteStreamController(JSContext* cx, Handle<ReadableStream*> stream, HandleValue underlyingByteSource, HandleValue highWaterMarkVal); @@ -706,7 +706,7 @@ ReadableStream::createByteStream(JSContext* cx, HandleValue underlyingSource, return stream; } -static MOZ_MUST_USE ReadableByteStreamController* +[[nodiscard]] static ReadableByteStreamController* CreateReadableByteStreamController(JSContext* cx, Handle<ReadableStream*> stream, void* underlyingSource); @@ -807,7 +807,7 @@ ReadableStream::constructor(JSContext* cx, unsigned argc, Value* vp) } // Streams spec, 3.2.4.1. get locked -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStream_locked_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableStream*> stream(cx, &args.thisv().toObject().as<ReadableStream>()); @@ -826,7 +826,7 @@ ReadableStream_locked(JSContext* cx, unsigned argc, Value* vp) } // Streams spec, 3.2.4.2. cancel ( reason ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStream_cancel(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); @@ -856,14 +856,14 @@ ReadableStream_cancel(JSContext* cx, unsigned argc, Value* vp) return true; } -static MOZ_MUST_USE ReadableStreamDefaultReader* +[[nodiscard]] static ReadableStreamDefaultReader* CreateReadableStreamDefaultReader(JSContext* cx, Handle<ReadableStream*> stream); -static MOZ_MUST_USE ReadableStreamBYOBReader* +[[nodiscard]] static ReadableStreamBYOBReader* CreateReadableStreamBYOBReader(JSContext* cx, Handle<ReadableStream*> stream); // Streams spec, 3.2.4.3. getReader() -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStream_getReader_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableStream*> stream(cx, &args.thisv().toObject().as<ReadableStream>()); @@ -916,7 +916,7 @@ ReadableStream_getReader(JSContext* cx, unsigned argc, Value* vp) } // Streams spec, 3.2.4.4. pipeThrough({ writable, readable }, options) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStream_pipeThrough(JSContext* cx, unsigned argc, Value* vp) { JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, @@ -930,7 +930,7 @@ ReadableStream_pipeThrough(JSContext* cx, unsigned argc, Value* vp) // Streams spec, 3.2.4.5. pipeTo(dest, { preventClose, preventAbort, preventCancel } = {}) // TODO: Unimplemented since spec is not complete yet. -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStream_pipeTo(JSContext* cx, unsigned argc, Value* vp) { JS_ReportErrorNumberASCII(cx, GetErrorMessage, nullptr, @@ -938,12 +938,12 @@ ReadableStream_pipeTo(JSContext* cx, unsigned argc, Value* vp) return false; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamTee(JSContext* cx, Handle<ReadableStream*> stream, bool cloneForBranch2, MutableHandle<ReadableStream*> branch1, MutableHandle<ReadableStream*> branch2); // Streams spec, 3.2.4.6. tee() -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStream_tee_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableStream*> stream(cx, &args.thisv().toObject().as<ReadableStream>()); @@ -1022,10 +1022,10 @@ ReadableStream::locked() const return HasReader(this); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultControllerClose(JSContext* cx, Handle<ReadableStreamDefaultController*> controller); -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultControllerEnqueue(JSContext* cx, Handle<ReadableStreamDefaultController*> controller, HandleValue chunk); @@ -1111,7 +1111,7 @@ TeeReaderReadHandler(JSContext* cx, unsigned argc, Value* vp) return true; } -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableStreamTee_Pull(JSContext* cx, Handle<TeeState*> teeState, Handle<ReadableStream*> branchStream) { @@ -1135,7 +1135,7 @@ ReadableStreamTee_Pull(JSContext* cx, Handle<TeeState*> teeState, return JS::CallOriginalPromiseThen(cx, readPromise, onFulfilled, nullptr); } -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableStreamTee_Cancel(JSContext* cx, Handle<TeeState*> teeState, Handle<ReadableStreamDefaultController*> branch, HandleValue reason) { @@ -1188,7 +1188,7 @@ ReadableStreamTee_Cancel(JSContext* cx, Handle<TeeState*> teeState, return teeState->promise(); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamControllerError(JSContext* cx, HandleNativeObject controller, HandleValue e); // Streams spec, 3.3.6. step 21: @@ -1220,7 +1220,7 @@ TeeReaderClosedHandler(JSContext* cx, unsigned argc, Value* vp) } // Streams spec, 3.3.6. ReadableStreamTee ( stream, cloneForBranch2 ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamTee(JSContext* cx, Handle<ReadableStream*> stream, bool cloneForBranch2, MutableHandle<ReadableStream*> branch1Stream, MutableHandle<ReadableStream*> branch2Stream) @@ -1308,7 +1308,7 @@ ReadableStreamTee(JSContext* cx, Handle<ReadableStream*> stream, bool cloneForBr } // Streams spec, 3.4.1. ReadableStreamAddReadIntoRequest ( stream ) -static MOZ_MUST_USE PromiseObject* +[[nodiscard]] static PromiseObject* ReadableStreamAddReadIntoRequest(JSContext* cx, Handle<ReadableStream*> stream) { // Step 1: MOZ_ASSERT: ! IsReadableStreamBYOBReader(stream.[[reader]]) is true. @@ -1337,7 +1337,7 @@ ReadableStreamAddReadIntoRequest(JSContext* cx, Handle<ReadableStream*> stream) } // Streams spec, 3.4.2. ReadableStreamAddReadRequest ( stream ) -static MOZ_MUST_USE PromiseObject* +[[nodiscard]] static PromiseObject* ReadableStreamAddReadRequest(JSContext* cx, Handle<ReadableStream*> stream) { MOZ_ASSERT(stream->is<ReadableStream>()); @@ -1367,7 +1367,7 @@ ReadableStreamAddReadRequest(JSContext* cx, Handle<ReadableStream*> stream) return promise; } -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableStreamControllerCancelSteps(JSContext* cx, HandleNativeObject controller, HandleValue reason); @@ -1380,11 +1380,11 @@ ReturnUndefined(JSContext* cx, unsigned argc, Value* vp) return true; } -MOZ_MUST_USE bool +[[nodiscard]] bool ReadableStreamCloseInternal(JSContext* cx, Handle<ReadableStream*> stream); // Streams spec, 3.4.3. ReadableStreamCancel ( stream, reason ) -/* static */ MOZ_MUST_USE JSObject* +/* static */ [[nodiscard]] JSObject* ReadableStream::cancel(JSContext* cx, Handle<ReadableStream*> stream, HandleValue reason) { // Step 1: Set stream.[[disturbed]] to true. @@ -1425,7 +1425,7 @@ ReadableStream::cancel(JSContext* cx, Handle<ReadableStream*> stream, HandleValu } // Streams spec, 3.4.4. ReadableStreamClose ( stream ) -MOZ_MUST_USE bool +[[nodiscard]] bool ReadableStreamCloseInternal(JSContext* cx, Handle<ReadableStream*> stream) { // Step 1: Assert: stream.[[state]] is "readable". @@ -1489,7 +1489,7 @@ ReadableStreamCloseInternal(JSContext* cx, Handle<ReadableStream*> stream) } // Streams spec, 3.4.5. ReadableStreamError ( stream, e ) -MOZ_MUST_USE bool +[[nodiscard]] bool ReadableStreamErrorInternal(JSContext* cx, Handle<ReadableStream*> stream, HandleValue e) { // Step 1: Assert: ! IsReadableStream(stream) is true (implicit). @@ -1552,7 +1552,7 @@ ReadableStreamErrorInternal(JSContext* cx, Handle<ReadableStream*> stream, Handl // Streams spec, 3.4.6. ReadableStreamFulfillReadIntoRequest( stream, chunk, done ) // Streams spec, 3.4.7. ReadableStreamFulfillReadRequest ( stream, chunk, done ) // These two spec functions are identical in our implementation. -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamFulfillReadOrReadIntoRequest(JSContext* cx, Handle<ReadableStream*> stream, HandleValue chunk, bool done) { @@ -1596,7 +1596,7 @@ ReadableStreamGetNumReadRequests(ReadableStream* stream) } // Stream spec 3.4.10. ReadableStreamHasBYOBReader ( stream ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamHasBYOBReader(ReadableStream* stream) { // Step 1: Let reader be stream.[[reader]]. @@ -1608,7 +1608,7 @@ ReadableStreamHasBYOBReader(ReadableStream* stream) } // Streap spec 3.4.11. ReadableStreamHasDefaultReader ( stream ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamHasDefaultReader(ReadableStream* stream) { // Step 1: Let reader be stream.[[reader]]. @@ -1619,14 +1619,14 @@ ReadableStreamHasDefaultReader(ReadableStream* stream) return reader.isObject() && reader.toObject().is<ReadableStreamDefaultReader>(); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamReaderGenericInitialize(JSContext* cx, HandleNativeObject reader, Handle<ReadableStream*> stream); // Stream spec, 3.5.3. new ReadableStreamDefaultReader ( stream ) // Steps 2-4. -static MOZ_MUST_USE ReadableStreamDefaultReader* +[[nodiscard]] static ReadableStreamDefaultReader* CreateReadableStreamDefaultReader(JSContext* cx, Handle<ReadableStream*> stream) { Rooted<ReadableStreamDefaultReader*> reader(cx); @@ -1680,7 +1680,7 @@ ReadableStreamDefaultReader::constructor(JSContext* cx, unsigned argc, Value* vp } // Streams spec, 3.5.4.1 get closed -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultReader_closed(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); @@ -1696,11 +1696,11 @@ ReadableStreamDefaultReader_closed(JSContext* cx, unsigned argc, Value* vp) return true; } -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableStreamReaderGenericCancel(JSContext* cx, HandleNativeObject reader, HandleValue reason); // Streams spec, 3.5.4.2. cancel ( reason ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultReader_cancel(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); @@ -1728,7 +1728,7 @@ ReadableStreamDefaultReader_cancel(JSContext* cx, unsigned argc, Value* vp) } // Streams spec, 3.5.4.3 read ( ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultReader_read(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); @@ -1756,11 +1756,11 @@ ReadableStreamDefaultReader_read(JSContext* cx, unsigned argc, Value* vp) return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamReaderGenericRelease(JSContext* cx, HandleNativeObject reader); // Streams spec, 3.5.4.4. releaseLock ( ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultReader_releaseLock_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableStreamDefaultReader*> reader(cx); @@ -1817,7 +1817,7 @@ CLASS_SPEC(ReadableStreamDefaultReader, 1, ReaderSlotCount, ClassSpec::DontDefin // Streams spec, 3.6.3 new ReadableStreamBYOBReader ( stream ) // Steps 2-5. -static MOZ_MUST_USE ReadableStreamBYOBReader* +[[nodiscard]] static ReadableStreamBYOBReader* CreateReadableStreamBYOBReader(JSContext* cx, Handle<ReadableStream*> stream) { // Step 2: If ! IsReadableByteStreamController(stream.[[readableStreamController]]) @@ -1877,7 +1877,7 @@ ReadableStreamBYOBReader::constructor(JSContext* cx, unsigned argc, Value* vp) } // Streams spec, 3.6.4.1 get closed -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamBYOBReader_closed(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); @@ -1894,7 +1894,7 @@ ReadableStreamBYOBReader_closed(JSContext* cx, unsigned argc, Value* vp) } // Streams spec, 3.6.4.2. cancel ( reason ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamBYOBReader_cancel(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); @@ -1922,7 +1922,7 @@ ReadableStreamBYOBReader_cancel(JSContext* cx, unsigned argc, Value* vp) } // Streams spec, 3.6.4.3 read ( ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamBYOBReader_read(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); @@ -1972,11 +1972,11 @@ ReadableStreamBYOBReader_read(JSContext* cx, unsigned argc, Value* vp) return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamReaderGenericRelease(JSContext* cx, HandleNativeObject reader); // Streams spec, 3.6.4.4. releaseLock ( ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamBYOBReader_releaseLock_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableStreamBYOBReader*> reader(cx); @@ -2028,7 +2028,7 @@ static const JSFunctionSpec ReadableStreamBYOBReader_methods[] = { CLASS_SPEC(ReadableStreamBYOBReader, 1, 3, ClassSpec::DontDefineConstructor, 0, JS_NULL_CLASS_OPS); -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool ReadableStreamControllerCallPullIfNeeded(JSContext* cx, HandleNativeObject controller); // Streams spec, 3.7.1. IsReadableStreamDefaultReader ( x ) @@ -2038,7 +2038,7 @@ ReadableStreamControllerCallPullIfNeeded(JSContext* cx, HandleNativeObject contr // Implemented via intrinsic_isInstanceOfBuiltin<ReadableStreamBYOBReader>() // Streams spec, 3.7.3. ReadableStreamReaderGenericCancel ( reader, reason ) -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableStreamReaderGenericCancel(JSContext* cx, HandleNativeObject reader, HandleValue reason) { // Step 1: Let stream be reader.[[ownerReadableStream]]. @@ -2051,7 +2051,7 @@ ReadableStreamReaderGenericCancel(JSContext* cx, HandleNativeObject reader, Hand } // Streams spec, 3.7.4. ReadableStreamReaderGenericInitialize ( reader, stream ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamReaderGenericInitialize(JSContext* cx, HandleNativeObject reader, Handle<ReadableStream*> stream) { @@ -2091,7 +2091,7 @@ ReadableStreamReaderGenericInitialize(JSContext* cx, HandleNativeObject reader, } // Streams spec, 3.7.5. ReadableStreamReaderGenericRelease ( reader ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamReaderGenericRelease(JSContext* cx, HandleNativeObject reader) { // Step 1: Assert: reader.[[ownerReadableStream]] is not undefined. @@ -2133,13 +2133,13 @@ ReadableStreamReaderGenericRelease(JSContext* cx, HandleNativeObject reader) return true; } -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableByteStreamControllerPullInto(JSContext* cx, Handle<ReadableByteStreamController*> controller, Handle<ArrayBufferViewObject*> view); // Streams spec, 3.7.6. ReadableStreamBYOBReaderRead ( reader, view ) -/* static */ MOZ_MUST_USE JSObject* +/* static */ [[nodiscard]] JSObject* ReadableStreamBYOBReader::read(JSContext* cx, Handle<ReadableStreamBYOBReader*> reader, Handle<ArrayBufferViewObject*> view) { @@ -2165,11 +2165,11 @@ ReadableStreamBYOBReader::read(JSContext* cx, Handle<ReadableStreamBYOBReader*> return ReadableByteStreamControllerPullInto(cx, controller, view); } -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableStreamControllerPullSteps(JSContext* cx, HandleNativeObject controller); // Streams spec, 3.7.7. ReadableStreamDefaultReaderRead ( reader ) -MOZ_MUST_USE JSObject* +[[nodiscard]] JSObject* ReadableStreamDefaultReader::read(JSContext* cx, Handle<ReadableStreamDefaultReader*> reader) { // Step 1: Let stream be reader.[[ownerReadableStream]]. @@ -2230,12 +2230,12 @@ ControllerStartHandler(JSContext* cx, unsigned argc, Value* vp) return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultControllerErrorIfNeeded(JSContext* cx, Handle<ReadableStreamDefaultController*> controller, HandleValue e); -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamControllerError(JSContext* cx, HandleNativeObject controller, HandleValue e); // Streams spec, 3.8.3, step 11.b. @@ -2264,12 +2264,12 @@ ControllerStartFailedHandler(JSContext* cx, unsigned argc, Value* vp) return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ValidateAndNormalizeHighWaterMark(JSContext* cx, HandleValue highWaterMarkVal, double* highWaterMark); -static MOZ_MUST_USE bool +[[nodiscard]] static bool ValidateAndNormalizeQueuingStrategy(JSContext* cx, HandleValue size, HandleValue highWaterMarkVal, @@ -2278,7 +2278,7 @@ ValidateAndNormalizeQueuingStrategy(JSContext* cx, // Streams spec, 3.8.3 new ReadableStreamDefaultController ( stream, underlyingSource, // size, highWaterMark ) // Steps 3 - 11. -static MOZ_MUST_USE ReadableStreamDefaultController* +[[nodiscard]] static ReadableStreamDefaultController* CreateReadableStreamDefaultController(JSContext* cx, Handle<ReadableStream*> stream, HandleValue underlyingSource, HandleValue size, HandleValue highWaterMarkVal) @@ -2380,13 +2380,13 @@ ReadableStreamDefaultController::constructor(JSContext* cx, unsigned argc, Value return true; } -static MOZ_MUST_USE double +[[nodiscard]] static double ReadableStreamControllerGetDesiredSizeUnchecked(NativeObject* controller); // Streams spec, 3.8.4.1. get desiredSize // and // Streams spec, 3.10.4.2. get desiredSize -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamController_desiredSize_impl(JSContext* cx, const CallArgs& args) { RootedNativeObject controller(cx); @@ -2424,12 +2424,12 @@ ReadableStreamDefaultController_desiredSize(JSContext* cx, unsigned argc, Value* ReadableStreamController_desiredSize_impl>(cx, args); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultControllerClose(JSContext* cx, Handle<ReadableStreamDefaultController*> controller); // Unified implementation of steps 2-3 of 3.8.4.2 and 3.10.4.3. -static MOZ_MUST_USE bool +[[nodiscard]] static bool VerifyControllerStateForClosing(JSContext* cx, HandleNativeObject controller) { // Step 2: If this.[[closeRequested]] is true, throw a TypeError exception. @@ -2452,7 +2452,7 @@ VerifyControllerStateForClosing(JSContext* cx, HandleNativeObject controller) } // Streams spec, 3.8.4.2 close() -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultController_close_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableStreamDefaultController*> controller(cx); @@ -2480,13 +2480,13 @@ ReadableStreamDefaultController_close(JSContext* cx, unsigned argc, Value* vp) ReadableStreamDefaultController_close_impl>(cx, args); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultControllerEnqueue(JSContext* cx, Handle<ReadableStreamDefaultController*> controller, HandleValue chunk); // Streams spec, 3.8.4.3. enqueue ( chunk ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultController_enqueue_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableStreamDefaultController*> controller(cx); @@ -2527,7 +2527,7 @@ ReadableStreamDefaultController_enqueue(JSContext* cx, unsigned argc, Value* vp) } // Streams spec, 3.8.4.4. error ( e ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultController_error_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableStreamDefaultController*> controller(cx); @@ -2581,7 +2581,7 @@ CLASS_SPEC(ReadableStreamDefaultController, 4, 7, ClassSpec::DontDefineConstruct * and * Streams spec, 3.10.5.1. [[CancelSteps]] ( reason ) */ -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableStreamControllerCancelSteps(JSContext* cx, HandleNativeObject controller, HandleValue reason) { @@ -2631,7 +2631,7 @@ ReadableStreamControllerCancelSteps(JSContext* cx, HandleNativeObject controller return PromiseInvokeOrNoop(cx, underlyingSource, cx->names().cancel, reason); } -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool DequeueValue(JSContext* cx, HandleNativeObject container, MutableHandleValue chunk); // Streams spec, 3.8.5.2. ReadableStreamDefaultController [[PullSteps]]() @@ -2737,13 +2737,13 @@ ControllerPullFailedHandler(JSContext* cx, unsigned argc, Value* vp) static bool ReadableStreamControllerShouldCallPull(NativeObject* controller); -static MOZ_MUST_USE double +[[nodiscard]] static double ReadableStreamControllerGetDesiredSizeUnchecked(NativeObject* controller); // Streams spec, 3.9.2 ReadableStreamDefaultControllerCallPullIfNeeded ( controller ) // and // Streams spec, 3.12.3. ReadableByteStreamControllerCallPullIfNeeded ( controller ) -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool ReadableStreamControllerCallPullIfNeeded(JSContext* cx, HandleNativeObject controller) { // Step 1: Let shouldPull be @@ -2847,7 +2847,7 @@ ReadableStreamControllerShouldCallPull(NativeObject* controller) } // Streams spec, 3.9.4. ReadableStreamDefaultControllerClose ( controller ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultControllerClose(JSContext* cx, Handle<ReadableStreamDefaultController*> controller) { @@ -2872,12 +2872,12 @@ ReadableStreamDefaultControllerClose(JSContext* cx, return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool EnqueueValueWithSize(JSContext* cx, HandleNativeObject container, HandleValue value, HandleValue sizeVal); // Streams spec, 3.9.5. ReadableStreamDefaultControllerEnqueue ( controller, chunk ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultControllerEnqueue(JSContext* cx, Handle<ReadableStreamDefaultController*> controller, HandleValue chunk) @@ -2943,13 +2943,13 @@ ReadableStreamDefaultControllerEnqueue(JSContext* cx, return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerClearPendingPullIntos(JSContext* cx, HandleNativeObject controller); // Streams spec, 3.9.6. ReadableStreamDefaultControllerError ( controller, e ) // and // Streams spec, 3.12.10. ReadableByteStreamControllerError ( controller, e ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamControllerError(JSContext* cx, HandleNativeObject controller, HandleValue e) { MOZ_ASSERT(IsReadableStreamController(controller)); @@ -2978,7 +2978,7 @@ ReadableStreamControllerError(JSContext* cx, HandleNativeObject controller, Hand } // Streams spec, 3.9.7. ReadableStreamDefaultControllerErrorIfNeeded ( controller, e ) nothrow -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamDefaultControllerErrorIfNeeded(JSContext* cx, Handle<ReadableStreamDefaultController*> controller, HandleValue e) @@ -2994,7 +2994,7 @@ ReadableStreamDefaultControllerErrorIfNeeded(JSContext* cx, // Streams spec, 3.9.8. ReadableStreamDefaultControllerGetDesiredSize ( controller ) // and // Streams spec 3.12.13. ReadableByteStreamControllerGetDesiredSize ( controller ) -static MOZ_MUST_USE double +[[nodiscard]] static double ReadableStreamControllerGetDesiredSizeUnchecked(NativeObject* controller) { // Steps 1-4 done at callsites, so only assert that they have been done. @@ -3012,7 +3012,7 @@ ReadableStreamControllerGetDesiredSizeUnchecked(NativeObject* controller) // Streams spec, 3.10.3 new ReadableByteStreamController ( stream, underlyingSource, // highWaterMark ) // Steps 3 - 16. -static MOZ_MUST_USE ReadableByteStreamController* +[[nodiscard]] static ReadableByteStreamController* CreateReadableByteStreamController(JSContext* cx, Handle<ReadableStream*> stream, HandleValue underlyingByteSource, HandleValue highWaterMarkVal) @@ -3150,7 +3150,7 @@ ReadableByteStreamController::constructor(JSContext* cx, unsigned argc, Value* v // Version of the ReadableByteStreamConstructor that's specialized for // handling external, embedding-provided, underlying sources. -static MOZ_MUST_USE ReadableByteStreamController* +[[nodiscard]] static ReadableByteStreamController* CreateReadableByteStreamController(JSContext* cx, Handle<ReadableStream*> stream, void* underlyingSource) { @@ -3213,12 +3213,12 @@ CreateReadableByteStreamController(JSContext* cx, Handle<ReadableStream*> stream return controller; } -static MOZ_MUST_USE ReadableStreamBYOBRequest* +[[nodiscard]] static ReadableStreamBYOBRequest* CreateReadableStreamBYOBRequest(JSContext* cx, Handle<ReadableByteStreamController*> controller, HandleObject view); // Streams spec, 3.10.4.1. get byobRequest -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamController_byobRequest_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableByteStreamController*> controller(cx); @@ -3285,11 +3285,11 @@ ReadableByteStreamController_desiredSize(JSContext* cx, unsigned argc, Value* vp ReadableStreamController_desiredSize_impl>(cx, args); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerClose(JSContext* cx, Handle<ReadableByteStreamController*> controller); // Streams spec, 3.10.4.3. close() -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamController_close_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableByteStreamController*> controller(cx); @@ -3316,13 +3316,13 @@ ReadableByteStreamController_close(JSContext* cx, unsigned argc, Value* vp) ReadableByteStreamController_close_impl>(cx, args); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerEnqueue(JSContext* cx, Handle<ReadableByteStreamController*> controller, HandleObject chunk); // Streams spec, 3.10.4.4. enqueue ( chunk ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamController_enqueue_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableByteStreamController*> controller(cx); @@ -3373,7 +3373,7 @@ ReadableByteStreamController_enqueue(JSContext* cx, unsigned argc, Value* vp) } // Streams spec, 3.10.4.5. error ( e ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamController_error_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableByteStreamController*> controller(cx); @@ -3457,7 +3457,7 @@ CLASS_SPEC(ReadableByteStreamController, 3, 9, ClassSpec::DontDefineConstructor, // Streams spec, 3.10.5.1. [[PullSteps]] () // Unified with 3.8.5.1 above. -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerHandleQueueDrain(JSContext* cx, HandleNativeObject controller); // Streams spec, 3.10.5.2. [[PullSteps]] () @@ -3601,7 +3601,7 @@ ReadableByteStreamControllerPullSteps(JSContext* cx, HandleNativeObject controll * and * Streams spec, 3.10.5.2. [[PullSteps]] () */ -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableStreamControllerPullSteps(JSContext* cx, HandleNativeObject controller) { MOZ_ASSERT(IsReadableStreamController(controller)); @@ -3613,7 +3613,7 @@ ReadableStreamControllerPullSteps(JSContext* cx, HandleNativeObject controller) } -static MOZ_MUST_USE ReadableStreamBYOBRequest* +[[nodiscard]] static ReadableStreamBYOBRequest* CreateReadableStreamBYOBRequest(JSContext* cx, Handle<ReadableByteStreamController*> controller, HandleObject view) { @@ -3673,7 +3673,7 @@ ReadableStreamBYOBRequest::constructor(JSContext* cx, unsigned argc, Value* vp) } // Streams spec, 3.11.4.1 get view -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamBYOBRequest_view_impl(JSContext* cx, const CallArgs& args) { // Step 2: Return this.[[view]]. @@ -3692,13 +3692,13 @@ ReadableStreamBYOBRequest_view(JSContext* cx, unsigned argc, Value* vp) ReadableStreamBYOBRequest_view_impl>(cx, args); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerRespond(JSContext* cx, Handle<ReadableByteStreamController*> controller, HandleValue bytesWrittenVal); // Streams spec, 3.11.4.2. respond ( bytesWritten ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamBYOBRequest_respond_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableStreamBYOBRequest*> request(cx); @@ -3737,13 +3737,13 @@ ReadableStreamBYOBRequest_respond(JSContext* cx, unsigned argc, Value* vp) ReadableStreamBYOBRequest_respond_impl>(cx, args); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerRespondWithNewView(JSContext* cx, Handle<ReadableByteStreamController*> controller, HandleObject view); // Streams spec, 3.11.4.3. respondWithNewView ( view ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableStreamBYOBRequest_respondWithNewView_impl(JSContext* cx, const CallArgs& args) { Rooted<ReadableStreamBYOBRequest*> request(cx); @@ -3820,7 +3820,7 @@ static void ReadableByteStreamControllerInvalidateBYOBRequest(NativeObject* controller); // Streams spec, 3.12.4. ReadableByteStreamControllerClearPendingPullIntos ( controller ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerClearPendingPullIntos(JSContext* cx, HandleNativeObject controller) { MOZ_ASSERT(controller->is<ReadableByteStreamController>()); @@ -3833,7 +3833,7 @@ ReadableByteStreamControllerClearPendingPullIntos(JSContext* cx, HandleNativeObj } // Streams spec, 3.12.5. ReadableByteStreamControllerClose ( controller ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerClose(JSContext* cx, Handle<ReadableByteStreamController*> controller) { // Step 1: Let stream be controller.[[controlledReadableStream]]. @@ -3886,12 +3886,12 @@ ReadableByteStreamControllerClose(JSContext* cx, Handle<ReadableByteStreamContro return ReadableStreamCloseInternal(cx, stream); } -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableByteStreamControllerConvertPullIntoDescriptor(JSContext* cx, Handle<PullIntoDescriptor*> pullIntoDescriptor); // Streams spec, 3.12.6. ReadableByteStreamControllerCommitPullIntoDescriptor ( stream, pullIntoDescriptor ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerCommitPullIntoDescriptor(JSContext* cx, Handle<ReadableStream*> stream, Handle<PullIntoDescriptor*> pullIntoDescriptor) { @@ -3938,7 +3938,7 @@ ReadableByteStreamControllerCommitPullIntoDescriptor(JSContext* cx, Handle<Reada } // Streams spec, 3.12.7. ReadableByteStreamControllerConvertPullIntoDescriptor ( pullIntoDescriptor ) -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableByteStreamControllerConvertPullIntoDescriptor(JSContext* cx, Handle<PullIntoDescriptor*> pullIntoDescriptor) { @@ -3972,21 +3972,21 @@ ReadableByteStreamControllerConvertPullIntoDescriptor(JSContext* cx, return JS_New(cx, ctor, args); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerEnqueueChunkToQueue(JSContext* cx, Handle<ReadableByteStreamController*> controller, HandleObject buffer, uint32_t byteOffset, uint32_t byteLength); -static MOZ_MUST_USE ArrayBufferObject* +[[nodiscard]] static ArrayBufferObject* TransferArrayBuffer(JSContext* cx, HandleObject buffer); -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(JSContext* cx, Handle<ReadableByteStreamController*> controller); // Streams spec, 3.12.8. ReadableByteStreamControllerEnqueue ( controller, chunk ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerEnqueue(JSContext* cx, Handle<ReadableByteStreamController*> controller, HandleObject chunk) @@ -4110,7 +4110,7 @@ ReadableByteStreamControllerEnqueue(JSContext* cx, // Streams spec, 3.12.9. // ReadableByteStreamControllerEnqueueChunkToQueue ( controller, buffer, // byteOffset, byteLength ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerEnqueueChunkToQueue(JSContext* cx, Handle<ReadableByteStreamController*> controller, HandleObject buffer, uint32_t byteOffset, @@ -4167,7 +4167,7 @@ ReadableByteStreamControllerFillHeadPullIntoDescriptor(ReadableByteStreamControl } // Streams spec, 3.12.12. ReadableByteStreamControllerFillPullIntoDescriptorFromQueue ( controller, pullIntoDescriptor ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(JSContext* cx, Handle<ReadableByteStreamController*> controller, Handle<PullIntoDescriptor*> pullIntoDescriptor, @@ -4336,7 +4336,7 @@ ReadableByteStreamControllerFillPullIntoDescriptorFromQueue(JSContext* cx, // Unified with 3.9.8 above. // Streams spec, 3.12.14. ReadableByteStreamControllerHandleQueueDrain ( controller ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerHandleQueueDrain(JSContext* cx, HandleNativeObject controller) { MOZ_ASSERT(controller->is<ReadableByteStreamController>()); @@ -4382,11 +4382,11 @@ ReadableByteStreamControllerInvalidateBYOBRequest(NativeObject* controller) controller->setFixedSlot(ByteControllerSlot_BYOBRequest, UndefinedValue()); } -static MOZ_MUST_USE PullIntoDescriptor* +[[nodiscard]] static PullIntoDescriptor* ReadableByteStreamControllerShiftPendingPullInto(JSContext* cx, HandleNativeObject controller); // Streams spec 3.12.16. ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue ( controller ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(JSContext* cx, Handle<ReadableByteStreamController*> controller) { @@ -4438,7 +4438,7 @@ ReadableByteStreamControllerProcessPullIntoDescriptorsUsingQueue(JSContext* cx, } // Streams spec, 3.12.17. ReadableByteStreamControllerPullInto ( controller, view ) -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* ReadableByteStreamControllerPullInto(JSContext* cx, Handle<ReadableByteStreamController*> controller, Handle<ArrayBufferViewObject*> view) @@ -4614,13 +4614,13 @@ ReadableByteStreamControllerPullInto(JSContext* cx, return promise; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerRespondInternal(JSContext* cx, Handle<ReadableByteStreamController*> controller, double bytesWritten); // Streams spec 3.12.18. ReadableByteStreamControllerRespond( controller, bytesWritten ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerRespond(JSContext* cx, Handle<ReadableByteStreamController*> controller, HandleValue bytesWrittenVal) @@ -4651,7 +4651,7 @@ ReadableByteStreamControllerRespond(JSContext* cx, } // Streams spec 3.12.19. ReadableByteStreamControllerRespondInClosedState( controller, firstDescriptor ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerRespondInClosedState(JSContext* cx, Handle<ReadableByteStreamController*> controller, Handle<PullIntoDescriptor*> firstDescriptor) @@ -4695,7 +4695,7 @@ ReadableByteStreamControllerRespondInClosedState(JSContext* cx, // Streams spec 3.12.20. // ReadableByteStreamControllerRespondInReadableState( controller, bytesWritten, pullIntoDescriptor ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerRespondInReadableState(JSContext* cx, Handle<ReadableByteStreamController*> controller, uint32_t bytesWritten, @@ -4782,7 +4782,7 @@ ReadableByteStreamControllerRespondInReadableState(JSContext* cx, } // Streams spec, 3.12.21. ReadableByteStreamControllerRespondInternal ( controller, bytesWritten ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerRespondInternal(JSContext* cx, Handle<ReadableByteStreamController*> controller, double bytesWritten) @@ -4822,7 +4822,7 @@ ReadableByteStreamControllerRespondInternal(JSContext* cx, } // Streams spec, 3.12.22. ReadableByteStreamControllerRespondWithNewView ( controller, view ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadableByteStreamControllerRespondWithNewView(JSContext* cx, Handle<ReadableByteStreamController*> controller, HandleObject view) @@ -4868,7 +4868,7 @@ ReadableByteStreamControllerRespondWithNewView(JSContext* cx, } // Streams spec, 3.12.23. ReadableByteStreamControllerShiftPendingPullInto ( controller ) -static MOZ_MUST_USE PullIntoDescriptor* +[[nodiscard]] static PullIntoDescriptor* ReadableByteStreamControllerShiftPendingPullInto(JSContext* cx, HandleNativeObject controller) { MOZ_ASSERT(controller->is<ReadableByteStreamController>()); @@ -4989,7 +4989,7 @@ CLASS_SPEC(CountQueuingStrategy, 1, 0, 0, 0, JS_NULL_CLASS_OPS); #undef CLASS_SPEC // Streams spec, 6.3.1. DequeueValue ( container ) nothrow -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool DequeueValue(JSContext* cx, HandleNativeObject container, MutableHandleValue chunk) { // Step 1: Assert: container has [[queue]] and [[queueTotalSize]] internal @@ -5025,7 +5025,7 @@ DequeueValue(JSContext* cx, HandleNativeObject container, MutableHandleValue chu } // Streams spec, 6.3.2. EnqueueValueWithSize ( container, value, size ) throws -static MOZ_MUST_USE bool +[[nodiscard]] static bool EnqueueValueWithSize(JSContext* cx, HandleNativeObject container, HandleValue value, HandleValue sizeVal) { @@ -5068,7 +5068,7 @@ EnqueueValueWithSize(JSContext* cx, HandleNativeObject container, HandleValue va // Streams spec, 6.3.3. PeekQueueValue ( container ) nothrow // Used by WritableStream. -// static MOZ_MUST_USE Value +// [[nodiscard]] static Value // PeekQueueValue(NativeObject* container) // { // // Step 1: Assert: container has [[queue]] and [[queueTotalSize]] internal @@ -5090,7 +5090,7 @@ EnqueueValueWithSize(JSContext* cx, HandleNativeObject container, HandleValue va /** * Streams spec, 6.3.4. ResetQueue ( container ) nothrow */ -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool ResetQueue(JSContext* cx, HandleNativeObject container) { // Step 1: Assert: container has [[queue]] and [[queueTotalSize]] internal @@ -5111,7 +5111,7 @@ ResetQueue(JSContext* cx, HandleNativeObject container) /** * Streams spec, 6.4.1. InvokeOrNoop ( O, P, args ) */ -inline static MOZ_MUST_USE bool +[[nodiscard]] inline static bool InvokeOrNoop(JSContext* cx, HandleValue O, HandlePropertyName P, HandleValue arg, MutableHandleValue rval) { @@ -5134,7 +5134,7 @@ InvokeOrNoop(JSContext* cx, HandleValue O, HandlePropertyName P, HandleValue arg * Streams spec, 6.4.3. PromiseInvokeOrNoop ( O, P, args ) * Specialized to one arg, because that's what all stream related callers use. */ -static MOZ_MUST_USE JSObject* +[[nodiscard]] static JSObject* PromiseInvokeOrNoop(JSContext* cx, HandleValue O, HandlePropertyName P, HandleValue arg) { // Step 1: Assert: O is not undefined. @@ -5157,7 +5157,7 @@ PromiseInvokeOrNoop(JSContext* cx, HandleValue O, HandlePropertyName P, HandleVa /** * Streams spec, 6.4.4 TransferArrayBuffer ( O ) */ -static MOZ_MUST_USE ArrayBufferObject* +[[nodiscard]] static ArrayBufferObject* TransferArrayBuffer(JSContext* cx, HandleObject buffer) { // Step 1 (implicit). @@ -5185,7 +5185,7 @@ TransferArrayBuffer(JSContext* cx, HandleObject buffer) } // Streams spec, 6.4.5. ValidateAndNormalizeHighWaterMark ( highWaterMark ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ValidateAndNormalizeHighWaterMark(JSContext* cx, HandleValue highWaterMarkVal, double* highWaterMark) { // Step 1: Set highWaterMark to ? ToNumber(highWaterMark). @@ -5204,7 +5204,7 @@ ValidateAndNormalizeHighWaterMark(JSContext* cx, HandleValue highWaterMarkVal, d } // Streams spec, 6.4.6. ValidateAndNormalizeQueuingStrategy ( size, highWaterMark ) -static MOZ_MUST_USE bool +[[nodiscard]] static bool ValidateAndNormalizeQueuingStrategy(JSContext* cx, HandleValue size, HandleValue highWaterMarkVal, double* highWaterMark) { @@ -5224,7 +5224,7 @@ ValidateAndNormalizeQueuingStrategy(JSContext* cx, HandleValue size, return true; } -MOZ_MUST_USE bool +[[nodiscard]] bool js::ReadableStreamReaderCancel(JSContext* cx, HandleObject readerObj, HandleValue reason) { MOZ_ASSERT(IsReadableStreamReader(readerObj)); @@ -5233,7 +5233,7 @@ js::ReadableStreamReaderCancel(JSContext* cx, HandleObject readerObj, HandleValu return ReadableStreamReaderGenericCancel(cx, reader, reason); } -MOZ_MUST_USE bool +[[nodiscard]] bool js::ReadableStreamReaderReleaseLock(JSContext* cx, HandleObject readerObj) { MOZ_ASSERT(IsReadableStreamReader(readerObj)); @@ -5242,7 +5242,7 @@ js::ReadableStreamReaderReleaseLock(JSContext* cx, HandleObject readerObj) return ReadableStreamReaderGenericRelease(cx, reader); } -MOZ_MUST_USE bool +[[nodiscard]] bool ReadableStream::enqueue(JSContext* cx, Handle<ReadableStream*> stream, HandleValue chunk) { Rooted<ReadableStreamDefaultController*> controller(cx); @@ -5254,7 +5254,7 @@ ReadableStream::enqueue(JSContext* cx, Handle<ReadableStream*> stream, HandleVal return ReadableStreamDefaultControllerEnqueue(cx, controller, chunk); } -MOZ_MUST_USE bool +[[nodiscard]] bool ReadableStream::enqueueBuffer(JSContext* cx, Handle<ReadableStream*> stream, Handle<ArrayBufferObject*> chunk) { @@ -5334,7 +5334,7 @@ ReadableStream::embeddingFlags() const // // The remaining steps of those two functions perform checks and asserts that // don't apply to streams with external underlying sources. -MOZ_MUST_USE bool +[[nodiscard]] bool ReadableStream::updateDataAvailableFromSource(JSContext* cx, Handle<ReadableStream*> stream, uint32_t availableData) { @@ -5429,7 +5429,7 @@ ReadableStream::updateDataAvailableFromSource(JSContext* cx, Handle<ReadableStre return true; } -MOZ_MUST_USE bool +[[nodiscard]] bool ReadableStream::close(JSContext* cx, Handle<ReadableStream*> stream) { RootedNativeObject controllerObj(cx, ControllerFromStream(stream)); @@ -5447,7 +5447,7 @@ ReadableStream::close(JSContext* cx, Handle<ReadableStream*> stream) return ReadableByteStreamControllerClose(cx, controller); } -MOZ_MUST_USE bool +[[nodiscard]] bool ReadableStream::error(JSContext* cx, Handle<ReadableStream*> stream, HandleValue reason) { // Step 3: If stream.[[state]] is not "readable", throw a TypeError exception. @@ -5462,7 +5462,7 @@ ReadableStream::error(JSContext* cx, Handle<ReadableStream*> stream, HandleValue return ReadableStreamControllerError(cx, controller, reason); } -MOZ_MUST_USE bool +[[nodiscard]] bool ReadableStream::tee(JSContext* cx, Handle<ReadableStream*> stream, bool cloneForBranch2, MutableHandle<ReadableStream*> branch1Stream, MutableHandle<ReadableStream*> branch2Stream) @@ -5470,7 +5470,7 @@ ReadableStream::tee(JSContext* cx, Handle<ReadableStream*> stream, bool cloneFor return ReadableStreamTee(cx, stream, false, branch1Stream, branch2Stream); } -MOZ_MUST_USE NativeObject* +[[nodiscard]] NativeObject* ReadableStream::getReader(JSContext* cx, Handle<ReadableStream*> stream, JS::ReadableStreamReaderMode mode) { diff --git a/js/src/builtin/Stream.h b/js/src/builtin/Stream.h index 0726e78361..1bd62a8772 100644 --- a/js/src/builtin/Stream.h +++ b/js/src/builtin/Stream.h @@ -37,31 +37,31 @@ class ReadableStream : public NativeObject JS::ReadableStreamMode mode() const; - static MOZ_MUST_USE bool close(JSContext* cx, Handle<ReadableStream*> stream); - static MOZ_MUST_USE JSObject* cancel(JSContext* cx, Handle<ReadableStream*> stream, - HandleValue reason); - static MOZ_MUST_USE bool error(JSContext* cx, Handle<ReadableStream*> stream, - HandleValue error); - - static MOZ_MUST_USE NativeObject* getReader(JSContext* cx, Handle<ReadableStream*> stream, - JS::ReadableStreamReaderMode mode); - - static MOZ_MUST_USE bool tee(JSContext* cx, - Handle<ReadableStream*> stream, bool cloneForBranch2, - MutableHandle<ReadableStream*> branch1Stream, - MutableHandle<ReadableStream*> branch2Stream); - - static MOZ_MUST_USE bool enqueue(JSContext* cx, Handle<ReadableStream*> stream, - HandleValue chunk); - static MOZ_MUST_USE bool enqueueBuffer(JSContext* cx, Handle<ReadableStream*> stream, - Handle<ArrayBufferObject*> chunk); - static MOZ_MUST_USE bool getExternalSource(JSContext* cx, Handle<ReadableStream*> stream, - void** source); + [[nodiscard]] static bool close(JSContext* cx, Handle<ReadableStream*> stream); + [[nodiscard]] static JSObject* cancel(JSContext* cx, Handle<ReadableStream*> stream, + HandleValue reason); + [[nodiscard]] static bool error(JSContext* cx, Handle<ReadableStream*> stream, + HandleValue error); + + [[nodiscard]] static NativeObject* getReader(JSContext* cx, Handle<ReadableStream*> stream, + JS::ReadableStreamReaderMode mode); + + [[nodiscard]] static bool tee(JSContext* cx, + Handle<ReadableStream*> stream, bool cloneForBranch2, + MutableHandle<ReadableStream*> branch1Stream, + MutableHandle<ReadableStream*> branch2Stream); + + [[nodiscard]] static bool enqueue(JSContext* cx, Handle<ReadableStream*> stream, + HandleValue chunk); + [[nodiscard]] static bool enqueueBuffer(JSContext* cx, Handle<ReadableStream*> stream, + Handle<ArrayBufferObject*> chunk); + [[nodiscard]] static bool getExternalSource(JSContext* cx, Handle<ReadableStream*> stream, + void** source); void releaseExternalSource(); uint8_t embeddingFlags() const; - static MOZ_MUST_USE bool updateDataAvailableFromSource(JSContext* cx, - Handle<ReadableStream*> stream, - uint32_t availableData); + [[nodiscard]] static bool updateDataAvailableFromSource(JSContext* cx, + Handle<ReadableStream*> stream, + uint32_t availableData); enum State { Readable = 1 << 0, @@ -71,7 +71,7 @@ class ReadableStream : public NativeObject }; private: - static MOZ_MUST_USE ReadableStream* createStream(JSContext* cx, HandleObject proto = nullptr); + [[nodiscard]] static ReadableStream* createStream(JSContext* cx, HandleObject proto = nullptr); public: static bool constructor(JSContext* cx, unsigned argc, Value* vp); @@ -84,7 +84,7 @@ class ReadableStream : public NativeObject class ReadableStreamDefaultReader : public NativeObject { public: - static MOZ_MUST_USE JSObject* read(JSContext* cx, Handle<ReadableStreamDefaultReader*> reader); + [[nodiscard]] static JSObject* read(JSContext* cx, Handle<ReadableStreamDefaultReader*> reader); static bool constructor(JSContext* cx, unsigned argc, Value* vp); static const ClassSpec classSpec_; @@ -96,8 +96,8 @@ class ReadableStreamDefaultReader : public NativeObject class ReadableStreamBYOBReader : public NativeObject { public: - static MOZ_MUST_USE JSObject* read(JSContext* cx, Handle<ReadableStreamBYOBReader*> reader, - Handle<ArrayBufferViewObject*> view); + [[nodiscard]] static JSObject* read(JSContext* cx, Handle<ReadableStreamBYOBReader*> reader, + Handle<ArrayBufferViewObject*> view); static bool constructor(JSContext* cx, unsigned argc, Value* vp); static const ClassSpec classSpec_; @@ -108,10 +108,10 @@ class ReadableStreamBYOBReader : public NativeObject bool ReadableStreamReaderIsClosed(const JSObject* reader); -MOZ_MUST_USE bool ReadableStreamReaderCancel(JSContext* cx, HandleObject reader, +[[nodiscard]] bool ReadableStreamReaderCancel(JSContext* cx, HandleObject reader, HandleValue reason); -MOZ_MUST_USE bool ReadableStreamReaderReleaseLock(JSContext* cx, HandleObject reader); +[[nodiscard]] bool ReadableStreamReaderReleaseLock(JSContext* cx, HandleObject reader); class ReadableStreamDefaultController : public NativeObject { diff --git a/js/src/builtin/SymbolObject.h b/js/src/builtin/SymbolObject.h index 54d187fb59..96d8010bdd 100644 --- a/js/src/builtin/SymbolObject.h +++ b/js/src/builtin/SymbolObject.h @@ -38,22 +38,22 @@ class SymbolObject : public NativeObject setFixedSlot(PRIMITIVE_VALUE_SLOT, SymbolValue(symbol)); } - static MOZ_MUST_USE bool construct(JSContext* cx, unsigned argc, Value* vp); + static [[nodiscard]] bool construct(JSContext* cx, unsigned argc, Value* vp); // Static methods. - static MOZ_MUST_USE bool for_(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool keyFor(JSContext* cx, unsigned argc, Value* vp); + static [[nodiscard]] bool for_(JSContext* cx, unsigned argc, Value* vp); + static [[nodiscard]] bool keyFor(JSContext* cx, unsigned argc, Value* vp); // Methods defined on Symbol.prototype. - static MOZ_MUST_USE bool toString_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool toString(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool valueOf_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool valueOf(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool toPrimitive(JSContext* cx, unsigned argc, Value* vp); + static [[nodiscard]] bool toString_impl(JSContext* cx, const CallArgs& args); + static [[nodiscard]] bool toString(JSContext* cx, unsigned argc, Value* vp); + static [[nodiscard]] bool valueOf_impl(JSContext* cx, const CallArgs& args); + static [[nodiscard]] bool valueOf(JSContext* cx, unsigned argc, Value* vp); + static [[nodiscard]] bool toPrimitive(JSContext* cx, unsigned argc, Value* vp); // Properties defined on Symbol.prototype. - static MOZ_MUST_USE bool descriptionGetter_impl(JSContext* cx, const CallArgs& args); - static MOZ_MUST_USE bool descriptionGetter(JSContext* cx, unsigned argc, Value *vp); + static [[nodiscard]] bool descriptionGetter_impl(JSContext* cx, const CallArgs& args); + static [[nodiscard]] bool descriptionGetter(JSContext* cx, unsigned argc, Value *vp); static const JSPropertySpec properties[]; static const JSFunctionSpec methods[]; diff --git a/js/src/builtin/TestingFunctions.h b/js/src/builtin/TestingFunctions.h index 79a697482e..459257054a 100644 --- a/js/src/builtin/TestingFunctions.h +++ b/js/src/builtin/TestingFunctions.h @@ -10,13 +10,13 @@ namespace js { -MOZ_MUST_USE bool +[[nodiscard]] bool DefineTestingFunctions(JSContext* cx, HandleObject obj, bool fuzzingSafe, bool disableOOMFunctions); -MOZ_MUST_USE bool +[[nodiscard]] bool testingFunc_assertFloat32(JSContext* cx, unsigned argc, Value* vp); -MOZ_MUST_USE bool +[[nodiscard]] bool testingFunc_assertRecoveredOnBailout(JSContext* cx, unsigned argc, Value* vp); } /* namespace js */ diff --git a/js/src/builtin/TypedObject.h b/js/src/builtin/TypedObject.h index cceff0c638..f41a74514a 100644 --- a/js/src/builtin/TypedObject.h +++ b/js/src/builtin/TypedObject.h @@ -176,7 +176,7 @@ class TypeDescr : public NativeObject } // Whether id is an 'own' property of objects with this descriptor. - MOZ_MUST_USE bool hasProperty(const JSAtomState& names, jsid id); + [[nodiscard]] bool hasProperty(const JSAtomState& names, jsid id); // Type descriptors may contain a list of their references for use during // scanning. Marking code is optimized to use this list to mark inline @@ -188,7 +188,7 @@ class TypeDescr : public NativeObject // The list is three consecutive arrays of int32_t offsets, with each array // terminated by -1. The arrays store offsets of string, object, and value // references in the descriptor, in that order. - MOZ_MUST_USE bool hasTraceList() const { + [[nodiscard]] bool hasTraceList() const { return !getFixedSlot(JS_DESCR_SLOT_TRACE_LIST).isUndefined(); } const int32_t* traceList() const { @@ -257,7 +257,7 @@ class ScalarTypeDescr : public SimpleTypeDescr return Type(getReservedSlot(JS_DESCR_SLOT_TYPE).toInt32()); } - static MOZ_MUST_USE bool call(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool call(JSContext* cx, unsigned argc, Value* vp); }; // Enumerates the cases of ScalarTypeDescr::Type which have @@ -310,7 +310,7 @@ class ReferenceTypeDescr : public SimpleTypeDescr return typeName(type()); } - static MOZ_MUST_USE bool call(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool call(JSContext* cx, unsigned argc, Value* vp); }; #define JS_FOR_EACH_REFERENCE_TYPE_REPR(macro_) \ @@ -333,7 +333,7 @@ class ComplexTypeDescr : public TypeDescr bool IsTypedObjectClass(const Class* clasp); // Defined below bool IsTypedObjectArray(JSObject& obj); -MOZ_MUST_USE bool CreateUserSizeAndAlignmentProperties(JSContext* cx, HandleTypeDescr obj); +[[nodiscard]] bool CreateUserSizeAndAlignmentProperties(JSContext* cx, HandleTypeDescr obj); class ArrayTypeDescr; @@ -371,7 +371,7 @@ class ArrayMetaTypeDescr : public NativeObject // This is the function that gets called when the user // does `new ArrayType(elem)`. It produces an array type object. - static MOZ_MUST_USE bool construct(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool construct(JSContext* cx, unsigned argc, Value* vp); }; /* @@ -422,7 +422,7 @@ class StructMetaTypeDescr : public NativeObject // This is the function that gets called when the user // does `new StructType(...)`. It produces a struct type object. - static MOZ_MUST_USE bool construct(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool construct(JSContext* cx, unsigned argc, Value* vp); }; class StructTypeDescr : public ComplexTypeDescr @@ -435,7 +435,7 @@ class StructTypeDescr : public ComplexTypeDescr // Set `*out` to the index of the field named `id` and returns true, // or return false if no such field exists. - MOZ_MUST_USE bool fieldIndex(jsid id, size_t* out) const; + [[nodiscard]] bool fieldIndex(jsid id, size_t* out) const; // Return the name of the field at index `index`. JSAtom& fieldName(size_t index) const; @@ -475,45 +475,45 @@ class TypedObject : public ShapedObject { static const bool IsTypedObjectClass = true; - static MOZ_MUST_USE bool obj_getArrayElement(JSContext* cx, - Handle<TypedObject*> typedObj, - Handle<TypeDescr*> typeDescr, - uint32_t index, - MutableHandleValue vp); + [[nodiscard]] static bool obj_getArrayElement(JSContext* cx, + Handle<TypedObject*> typedObj, + Handle<TypeDescr*> typeDescr, + uint32_t index, + MutableHandleValue vp); protected: static const ObjectOps objectOps_; - static MOZ_MUST_USE bool obj_lookupProperty(JSContext* cx, HandleObject obj, - HandleId id, MutableHandleObject objp, - MutableHandle<PropertyResult> propp); + [[nodiscard]] static bool obj_lookupProperty(JSContext* cx, HandleObject obj, + HandleId id, MutableHandleObject objp, + MutableHandle<PropertyResult> propp); - static MOZ_MUST_USE bool obj_defineProperty(JSContext* cx, HandleObject obj, HandleId id, - Handle<PropertyDescriptor> desc, - ObjectOpResult& result); + [[nodiscard]] static bool obj_defineProperty(JSContext* cx, HandleObject obj, HandleId id, + Handle<PropertyDescriptor> desc, + ObjectOpResult& result); - static MOZ_MUST_USE bool obj_hasProperty(JSContext* cx, HandleObject obj, HandleId id, - bool* foundp); + [[nodiscard]] static bool obj_hasProperty(JSContext* cx, HandleObject obj, HandleId id, + bool* foundp); - static MOZ_MUST_USE bool obj_getProperty(JSContext* cx, HandleObject obj, HandleValue receiver, - HandleId id, MutableHandleValue vp); + [[nodiscard]] static bool obj_getProperty(JSContext* cx, HandleObject obj, HandleValue receiver, + HandleId id, MutableHandleValue vp); - static MOZ_MUST_USE bool obj_getElement(JSContext* cx, HandleObject obj, HandleValue receiver, - uint32_t index, MutableHandleValue vp); + [[nodiscard]] static bool obj_getElement(JSContext* cx, HandleObject obj, HandleValue receiver, + uint32_t index, MutableHandleValue vp); - static MOZ_MUST_USE bool obj_setProperty(JSContext* cx, HandleObject obj, HandleId id, - HandleValue v, HandleValue receiver, - ObjectOpResult& result); + [[nodiscard]] static bool obj_setProperty(JSContext* cx, HandleObject obj, HandleId id, + HandleValue v, HandleValue receiver, + ObjectOpResult& result); - static MOZ_MUST_USE bool obj_getOwnPropertyDescriptor(JSContext* cx, HandleObject obj, - HandleId id, - MutableHandle<PropertyDescriptor> desc); + [[nodiscard]] static bool obj_getOwnPropertyDescriptor(JSContext* cx, HandleObject obj, + HandleId id, + MutableHandle<PropertyDescriptor> desc); - static MOZ_MUST_USE bool obj_deleteProperty(JSContext* cx, HandleObject obj, HandleId id, - ObjectOpResult& result); + [[nodiscard]] static bool obj_deleteProperty(JSContext* cx, HandleObject obj, HandleId id, + ObjectOpResult& result); - static MOZ_MUST_USE bool obj_enumerate(JSContext* cx, HandleObject obj, - AutoIdVector& properties, bool enumerableOnly); + [[nodiscard]] static bool obj_enumerate(JSContext* cx, HandleObject obj, + AutoIdVector& properties, bool enumerableOnly); uint8_t* typedMem() const; @@ -548,7 +548,7 @@ class TypedObject : public ShapedObject return typedMem(nogc) + offset; } - inline MOZ_MUST_USE bool opaque() const; + [[nodiscard]] inline bool opaque() const; // Creates a new typed object whose memory is freshly allocated and // initialized with zeroes (or, in the case of references, an appropriate @@ -558,11 +558,11 @@ class TypedObject : public ShapedObject // User-accessible constructor (`new TypeDescriptor(...)`). Note that the // callee here is the type descriptor. - static MOZ_MUST_USE bool construct(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool construct(JSContext* cx, unsigned argc, Value* vp); /* Accessors for self hosted code. */ - static MOZ_MUST_USE bool GetBuffer(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool GetByteOffset(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool GetBuffer(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool GetByteOffset(JSContext* cx, unsigned argc, Value* vp); Shape** addressOfShapeFromGC() { return shape_.unsafeUnbarrieredForTracing(); } }; @@ -733,14 +733,14 @@ class InlineOpaqueTypedObject : public InlineTypedObject * * Constructs a new, unattached instance of `Handle`. */ -MOZ_MUST_USE bool NewOpaqueTypedObject(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool NewOpaqueTypedObject(JSContext* cx, unsigned argc, Value* vp); /* * Usage: NewDerivedTypedObject(typeObj, owner, offset) * * Constructs a new, unattached instance of `Handle`. */ -MOZ_MUST_USE bool NewDerivedTypedObject(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool NewDerivedTypedObject(JSContext* cx, unsigned argc, Value* vp); /* * Usage: AttachTypedObject(typedObj, newDatum, newOffset) @@ -748,7 +748,7 @@ MOZ_MUST_USE bool NewDerivedTypedObject(JSContext* cx, unsigned argc, Value* vp) * Moves `typedObj` to point at the memory referenced by `newDatum` with * the offset `newOffset`. */ -MOZ_MUST_USE bool AttachTypedObject(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool AttachTypedObject(JSContext* cx, unsigned argc, Value* vp); /* * Usage: SetTypedObjectOffset(typedObj, offset) @@ -756,41 +756,41 @@ MOZ_MUST_USE bool AttachTypedObject(JSContext* cx, unsigned argc, Value* vp); * Changes the offset for `typedObj` within its buffer to `offset`. * `typedObj` must already be attached. */ -MOZ_MUST_USE bool SetTypedObjectOffset(JSContext*, unsigned argc, Value* vp); +[[nodiscard]] bool SetTypedObjectOffset(JSContext*, unsigned argc, Value* vp); /* * Usage: ObjectIsTypeDescr(obj) * * True if `obj` is a type object. */ -MOZ_MUST_USE bool ObjectIsTypeDescr(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool ObjectIsTypeDescr(JSContext* cx, unsigned argc, Value* vp); /* * Usage: ObjectIsTypedObject(obj) * * True if `obj` is a transparent or opaque typed object. */ -MOZ_MUST_USE bool ObjectIsTypedObject(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool ObjectIsTypedObject(JSContext* cx, unsigned argc, Value* vp); /* * Usage: ObjectIsOpaqueTypedObject(obj) * * True if `obj` is an opaque typed object. */ -MOZ_MUST_USE bool ObjectIsOpaqueTypedObject(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool ObjectIsOpaqueTypedObject(JSContext* cx, unsigned argc, Value* vp); /* * Usage: ObjectIsTransparentTypedObject(obj) * * True if `obj` is a transparent typed object. */ -MOZ_MUST_USE bool ObjectIsTransparentTypedObject(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool ObjectIsTransparentTypedObject(JSContext* cx, unsigned argc, Value* vp); /* Predicates on type descriptor objects. In all cases, 'obj' must be a type descriptor. */ -MOZ_MUST_USE bool TypeDescrIsSimpleType(JSContext*, unsigned argc, Value* vp); +[[nodiscard]] bool TypeDescrIsSimpleType(JSContext*, unsigned argc, Value* vp); -MOZ_MUST_USE bool TypeDescrIsArrayType(JSContext*, unsigned argc, Value* vp); +[[nodiscard]] bool TypeDescrIsArrayType(JSContext*, unsigned argc, Value* vp); /* * Usage: TypedObjectIsAttached(obj) @@ -798,21 +798,21 @@ MOZ_MUST_USE bool TypeDescrIsArrayType(JSContext*, unsigned argc, Value* vp); * Given a TypedObject `obj`, returns true if `obj` is * "attached" (i.e., its data pointer is nullptr). */ -MOZ_MUST_USE bool TypedObjectIsAttached(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool TypedObjectIsAttached(JSContext* cx, unsigned argc, Value* vp); /* * Usage: TypedObjectTypeDescr(obj) * * Given a TypedObject `obj`, returns the object's type descriptor. */ -MOZ_MUST_USE bool TypedObjectTypeDescr(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool TypedObjectTypeDescr(JSContext* cx, unsigned argc, Value* vp); /* * Usage: ClampToUint8(v) * * Same as the C function ClampDoubleToUint8. `v` must be a number. */ -MOZ_MUST_USE bool ClampToUint8(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool ClampToUint8(JSContext* cx, unsigned argc, Value* vp); /* * Usage: GetTypedObjectModule() @@ -823,7 +823,7 @@ MOZ_MUST_USE bool ClampToUint8(JSContext* cx, unsigned argc, Value* vp); * to access them; eventually this should be linked into the module * system. */ -MOZ_MUST_USE bool GetTypedObjectModule(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool GetTypedObjectModule(JSContext* cx, unsigned argc, Value* vp); /* * Usage: Store_int8(targetDatum, targetOffset, value) @@ -844,7 +844,7 @@ MOZ_MUST_USE bool GetTypedObjectModule(JSContext* cx, unsigned argc, Value* vp); #define JS_STORE_SCALAR_CLASS_DEFN(_constant, T, _name) \ class StoreScalar##T { \ public: \ - static MOZ_MUST_USE bool Func(JSContext* cx, unsigned argc, Value* vp); \ + [[nodiscard]] static bool Func(JSContext* cx, unsigned argc, Value* vp); \ static const JSJitInfo JitInfo; \ }; @@ -864,11 +864,11 @@ class StoreScalar##T { \ #define JS_STORE_REFERENCE_CLASS_DEFN(_constant, T, _name) \ class StoreReference##_name { \ private: \ - static MOZ_MUST_USE bool store(JSContext* cx, T* heap, const Value& v, \ - TypedObject* obj, jsid id); \ + [[nodiscard]] static bool store(JSContext* cx, T* heap, const Value& v, \ + TypedObject* obj, jsid id); \ \ public: \ - static MOZ_MUST_USE bool Func(JSContext* cx, unsigned argc, Value* vp); \ + [[nodiscard]] static bool Func(JSContext* cx, unsigned argc, Value* vp); \ static const JSJitInfo JitInfo; \ }; @@ -883,7 +883,7 @@ class StoreReference##_name { \ #define JS_LOAD_SCALAR_CLASS_DEFN(_constant, T, _name) \ class LoadScalar##T { \ public: \ - static MOZ_MUST_USE bool Func(JSContext* cx, unsigned argc, Value* vp); \ + [[nodiscard]] static bool Func(JSContext* cx, unsigned argc, Value* vp); \ static const JSJitInfo JitInfo; \ }; @@ -901,7 +901,7 @@ class LoadReference##_name { \ static void load(T* heap, MutableHandleValue v); \ \ public: \ - static MOZ_MUST_USE bool Func(JSContext* cx, unsigned argc, Value* vp); \ + [[nodiscard]] static bool Func(JSContext* cx, unsigned argc, Value* vp); \ static const JSJitInfo JitInfo; \ }; diff --git a/js/src/builtin/WeakSetObject.h b/js/src/builtin/WeakSetObject.h index af45a99595..3eb1b42fbe 100644 --- a/js/src/builtin/WeakSetObject.h +++ b/js/src/builtin/WeakSetObject.h @@ -23,7 +23,7 @@ class WeakSetObject : public NativeObject static const JSFunctionSpec methods[]; static WeakSetObject* create(JSContext* cx, HandleObject proto = nullptr); - static MOZ_MUST_USE bool construct(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool construct(JSContext* cx, unsigned argc, Value* vp); static bool isBuiltinAdd(HandleValue add, JSContext* cx); }; diff --git a/js/src/builtin/intl/Collator.h b/js/src/builtin/intl/Collator.h index 757740bd3d..330ec65a80 100644 --- a/js/src/builtin/intl/Collator.h +++ b/js/src/builtin/intl/Collator.h @@ -49,7 +49,7 @@ CreateCollatorPrototype(JSContext* cx, JS::Handle<JSObject*> Intl, *
* Usage: collator = intl_Collator(locales, options)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_Collator(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -60,7 +60,7 @@ intl_Collator(JSContext* cx, unsigned argc, Value* vp); *
* Usage: collations = intl_availableCollations(locale)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_availableCollations(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -73,7 +73,7 @@ intl_availableCollations(JSContext* cx, unsigned argc, Value* vp); *
* Usage: result = intl_CompareStrings(collator, x, y)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_CompareStrings(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -82,7 +82,7 @@ intl_CompareStrings(JSContext* cx, unsigned argc, Value* vp); *
* Usage: result = intl_isUpperCaseFirst(locale)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_isUpperCaseFirst(JSContext* cx, unsigned argc, Value* vp);
diff --git a/js/src/builtin/intl/DateTimeFormat.h b/js/src/builtin/intl/DateTimeFormat.h index 5a223e8716..e652baa6ed 100644 --- a/js/src/builtin/intl/DateTimeFormat.h +++ b/js/src/builtin/intl/DateTimeFormat.h @@ -51,7 +51,7 @@ CreateDateTimeFormatPrototype(JSContext* cx, JS::Handle<JSObject*> Intl, *
* Usage: dateTimeFormat = intl_DateTimeFormat(locales, options)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_DateTimeFormat(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -62,7 +62,7 @@ intl_DateTimeFormat(JSContext* cx, unsigned argc, Value* vp); *
* Usage: calendars = intl_availableCalendars(locale)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_availableCalendars(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -72,7 +72,7 @@ intl_availableCalendars(JSContext* cx, unsigned argc, Value* vp); *
* Usage: calendar = intl_defaultCalendar(locale)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_defaultCalendar(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -85,7 +85,7 @@ intl_defaultCalendar(JSContext* cx, unsigned argc, Value* vp); *
* Usage: ianaTimeZone = intl_IsValidTimeZoneName(timeZone)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_IsValidTimeZoneName(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -94,7 +94,7 @@ intl_IsValidTimeZoneName(JSContext* cx, unsigned argc, Value* vp); *
* Usage: ianaTimeZone = intl_canonicalizeTimeZone(timeZone)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_canonicalizeTimeZone(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -102,7 +102,7 @@ intl_canonicalizeTimeZone(JSContext* cx, unsigned argc, Value* vp); *
* Usage: icuDefaultTimeZone = intl_defaultTimeZone()
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_defaultTimeZone(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -110,7 +110,7 @@ intl_defaultTimeZone(JSContext* cx, unsigned argc, Value* vp); *
* Usage: defaultTimeZoneOffset = intl_defaultTimeZoneOffset()
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_defaultTimeZoneOffset(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -121,7 +121,7 @@ intl_defaultTimeZoneOffset(JSContext* cx, unsigned argc, Value* vp); *
* Usage: pattern = intl_patternForSkeleton(locale, skeleton, hourCycle)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_patternForSkeleton(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -155,7 +155,7 @@ intl_patternForSkeleton(JSContext* cx, unsigned argc, Value* vp); * Usage: pattern = intl_patternForStyle(locale, dateStyle, timeStyle, timeZone,
* hour12, hourCycle)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_patternForStyle(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -167,7 +167,7 @@ intl_patternForStyle(JSContext* cx, unsigned argc, Value* vp); *
* Usage: formatted = intl_FormatDateTime(dateTimeFormat, x, formatToParts)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_FormatDateTime(JSContext* cx, unsigned argc, Value* vp);
diff --git a/js/src/builtin/intl/IntlObject.h b/js/src/builtin/intl/IntlObject.h index eb5b4c69f8..e8ef32cdcc 100644 --- a/js/src/builtin/intl/IntlObject.h +++ b/js/src/builtin/intl/IntlObject.h @@ -50,7 +50,7 @@ InitIntlClass(JSContext* cx, JS::Handle<JSObject*> obj); * * NOTE: "calendar" and "locale" properties are *not* added to the object. */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool intl_GetCalendarInfo(JSContext* cx, unsigned argc, JS::Value* vp); /** @@ -92,7 +92,7 @@ intl_GetCalendarInfo(JSContext* cx, unsigned argc, JS::Value* vp); * 'AM' * ] */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool intl_ComputeDisplayNames(JSContext* cx, unsigned argc, JS::Value* vp); /** @@ -111,7 +111,7 @@ intl_ComputeDisplayNames(JSContext* cx, unsigned argc, JS::Value* vp); * * Usage: result = intl_BestAvailableLocale("Collator", locale, defaultOrNull) */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool intl_BestAvailableLocale(JSContext* cx, unsigned argc, JS::Value* vp); /** @@ -121,7 +121,7 @@ intl_BestAvailableLocale(JSContext* cx, unsigned argc, JS::Value* vp); * * Usage: result = intl_supportedLocaleOrFallback(locale) */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool intl_supportedLocaleOrFallback(JSContext* cx, unsigned argc, JS::Value* vp); } // namespace js diff --git a/js/src/builtin/intl/LanguageTag.h b/js/src/builtin/intl/LanguageTag.h index 3c2ecb1553..1cab3681a1 100644 --- a/js/src/builtin/intl/LanguageTag.h +++ b/js/src/builtin/intl/LanguageTag.h @@ -220,9 +220,9 @@ class MOZ_STACK_CLASS LanguageTag final { void performComplexLanguageMappings(); void performComplexRegionMappings(); - MOZ_MUST_USE bool performVariantMappings(JSContext* cx); + [[nodiscard]] bool performVariantMappings(JSContext* cx); - MOZ_MUST_USE bool updateGrandfatheredMappings(JSContext* cx); + [[nodiscard]] bool updateGrandfatheredMappings(JSContext* cx); static const char* replaceTransformExtensionType( mozilla::Span<const char> key, mozilla::Span<const char> type); @@ -716,21 +716,21 @@ MOZ_MAKE_ENUM_CLASS_BITWISE_OPERATORS(LanguageTagParser::TokenKind) * Parse a string as a standalone |language| tag. If |str| is a standalone * language tag, store it in |result| and return true. Otherwise return false. */ -MOZ_MUST_USE bool ParseStandaloneLanguageTag(JS::Handle<JSLinearString*> str, +[[nodiscard]] bool ParseStandaloneLanguageTag(JS::Handle<JSLinearString*> str, LanguageSubtag& result); /** * Parse a string as a standalone |script| tag. If |str| is a standalone script * tag, store it in |result| and return true. Otherwise return false. */ -MOZ_MUST_USE bool ParseStandaloneScriptTag(JS::Handle<JSLinearString*> str, +[[nodiscard]] bool ParseStandaloneScriptTag(JS::Handle<JSLinearString*> str, ScriptSubtag& result); /** * Parse a string as a standalone |region| tag. If |str| is a standalone region * tag, store it in |result| and return true. Otherwise return false. */ -MOZ_MUST_USE bool ParseStandaloneRegionTag(JS::Handle<JSLinearString*> str, +[[nodiscard]] bool ParseStandaloneRegionTag(JS::Handle<JSLinearString*> str, RegionSubtag& result); /** @@ -759,7 +759,7 @@ class UnicodeExtensionKeyword final { void trace(JSTracer* trc); }; -extern MOZ_MUST_USE bool ApplyUnicodeExtensionToTag( +[[nodiscard]] extern bool ApplyUnicodeExtensionToTag( JSContext* cx, LanguageTag& tag, JS::HandleVector<UnicodeExtensionKeyword> keywords); diff --git a/js/src/builtin/intl/Locale.h b/js/src/builtin/intl/Locale.h index 881906616b..b57af31296 100644 --- a/js/src/builtin/intl/Locale.h +++ b/js/src/builtin/intl/Locale.h @@ -48,14 +48,14 @@ extern JSObject* CreateLocalePrototype(JSContext* cx, JS::Handle<JSObject*> Intl, JS::Handle<GlobalObject*> global); -extern MOZ_MUST_USE bool intl_ValidateAndCanonicalizeLanguageTag(JSContext* cx, - unsigned argc, - Value* vp); +[[nodiscard]] extern bool intl_ValidateAndCanonicalizeLanguageTag(JSContext* cx, + unsigned argc, + Value* vp); -extern MOZ_MUST_USE bool intl_TryValidateAndCanonicalizeLanguageTag( +[[nodiscard]] extern bool intl_TryValidateAndCanonicalizeLanguageTag( JSContext* cx, unsigned argc, Value* vp); -extern MOZ_MUST_USE bool intl_ValidateAndCanonicalizeUnicodeExtensionType( +[[nodiscard]] extern bool intl_ValidateAndCanonicalizeUnicodeExtensionType( JSContext* cx, unsigned argc, Value* vp); } // namespace js diff --git a/js/src/builtin/intl/NumberFormat.h b/js/src/builtin/intl/NumberFormat.h index bc2f659527..b7045c8e98 100644 --- a/js/src/builtin/intl/NumberFormat.h +++ b/js/src/builtin/intl/NumberFormat.h @@ -47,7 +47,7 @@ CreateNumberFormatPrototype(JSContext* cx, HandleObject Intl, Handle<GlobalObjec *
* Usage: numberFormat = intl_NumberFormat(locales, options)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_NumberFormat(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -57,7 +57,7 @@ intl_NumberFormat(JSContext* cx, unsigned argc, Value* vp); *
* Usage: defaultNumberingSystem = intl_numberingSystem(locale)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_numberingSystem(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -68,9 +68,9 @@ intl_numberingSystem(JSContext* cx, unsigned argc, Value* vp); *
* Usage: formatted = intl_FormatNumber(numberFormat, x, formatToParts)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_FormatNumber(JSContext* cx, unsigned argc, Value* vp);
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
FormatNumeric(JSContext* cx, UNumberFormat* nf, HandleValue x, MutableHandleValue result);
} // namespace js
diff --git a/js/src/builtin/intl/PluralRules.h b/js/src/builtin/intl/PluralRules.h index 6f8e09ac80..04427de06c 100644 --- a/js/src/builtin/intl/PluralRules.h +++ b/js/src/builtin/intl/PluralRules.h @@ -46,7 +46,7 @@ CreatePluralRulesPrototype(JSContext* cx, JS::Handle<JSObject*> Intl, *
* Usage: pluralRules = intl_PluralRules(locales, options)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_PluralRules(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -58,7 +58,7 @@ intl_PluralRules(JSContext* cx, unsigned argc, Value* vp); *
* Usage: rule = intl_SelectPluralRule(pluralRules, x)
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_SelectPluralRule(JSContext* cx, unsigned argc, Value* vp);
/**
@@ -71,7 +71,7 @@ intl_SelectPluralRule(JSContext* cx, unsigned argc, Value* vp); *
* intl_getPluralCategories('pl', 'cardinal'); // ['one', 'few', 'many', 'other']
*/
-extern MOZ_MUST_USE bool
+[[nodiscard]] extern bool
intl_GetPluralCategories(JSContext* cx, unsigned argc, Value* vp);
} // namespace js
diff --git a/js/src/builtin/intl/RelativeTimeFormat.h b/js/src/builtin/intl/RelativeTimeFormat.h index 85b6d645b4..f6b62eae96 100644 --- a/js/src/builtin/intl/RelativeTimeFormat.h +++ b/js/src/builtin/intl/RelativeTimeFormat.h @@ -48,8 +48,7 @@ CreateRelativeTimeFormatPrototype(JSContext* cx, JS::Handle<JSObject*> Intl, *
* Usage: formatted = intl_FormatRelativeTime(relativeTimeFormat, t, unit)
*/
-extern MOZ_MUST_USE bool
-intl_FormatRelativeTime(JSContext* cx, unsigned argc, Value* vp);
+[[nodiscard]] extern bool intl_FormatRelativeTime(JSContext* cx, unsigned argc, Value* vp);
} // namespace js
diff --git a/js/src/builtin/intl/SharedIntlData.h b/js/src/builtin/intl/SharedIntlData.h index edf90308df..bd5332dc9a 100644 --- a/js/src/builtin/intl/SharedIntlData.h +++ b/js/src/builtin/intl/SharedIntlData.h @@ -233,9 +233,9 @@ class SharedIntlData * Sets |supported| to true if |locale| is supported by the requested Intl
* service constructor. Otherwise sets |supported| to false.
*/
- MOZ_MUST_USE bool isSupportedLocale(JSContext* cx, SupportedLocaleKind kind,
- JS::Handle<JSString*> locale,
- bool* supported);
+ [[nodiscard]] bool isSupportedLocale(JSContext* cx, SupportedLocaleKind kind,
+ JS::Handle<JSString*> locale,
+ bool* supported);
private:
/**
diff --git a/js/src/ctypes/CTypes.h b/js/src/ctypes/CTypes.h index ae372d92be..7eb4c1020a 100644 --- a/js/src/ctypes/CTypes.h +++ b/js/src/ctypes/CTypes.h @@ -178,7 +178,7 @@ GetDeflatedUTF8StringLength(JSContext* maybecx, const CharT* chars, size_t charsLength); template <typename CharT> -MOZ_MUST_USE bool +[[nodiscard]] bool DeflateStringToUTF8Buffer(JSContext* maybecx, const CharT* src, size_t srclen, char* dst, size_t* dstlenp); @@ -456,7 +456,7 @@ namespace CType { TypeCode GetTypeCode(JSObject* typeObj); bool TypesEqual(JSObject* t1, JSObject* t2); size_t GetSize(JSObject* obj); - MOZ_MUST_USE bool GetSafeSize(JSObject* obj, size_t* result); + [[nodiscard]] bool GetSafeSize(JSObject* obj, size_t* result); bool IsSizeDefined(JSObject* obj); size_t GetAlignment(JSObject* obj); ffi_type* GetFFIType(JSContext* cx, JSObject* obj); @@ -480,12 +480,12 @@ namespace ArrayType { JSObject* GetBaseType(JSObject* obj); size_t GetLength(JSObject* obj); - MOZ_MUST_USE bool GetSafeLength(JSObject* obj, size_t* result); + [[nodiscard]] bool GetSafeLength(JSObject* obj, size_t* result); UniquePtrFFIType BuildFFIType(JSContext* cx, JSObject* obj); } // namespace ArrayType namespace StructType { - MOZ_MUST_USE bool DefineInternal(JSContext* cx, JSObject* typeObj, JSObject* fieldsObj); + [[nodiscard]] bool DefineInternal(JSContext* cx, JSObject* typeObj, JSObject* fieldsObj); const FieldInfoHash* GetFieldInfo(JSObject* obj); const FieldInfo* LookupField(JSContext* cx, JSObject* obj, JSFlatString* name); @@ -521,9 +521,9 @@ namespace CData { bool IsCDataProto(JSObject* obj); // Attached by JSAPI as the function 'ctypes.cast' - MOZ_MUST_USE bool Cast(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] bool Cast(JSContext* cx, unsigned argc, Value* vp); // Attached by JSAPI as the function 'ctypes.getRuntime' - MOZ_MUST_USE bool GetRuntime(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] bool GetRuntime(JSContext* cx, unsigned argc, Value* vp); } // namespace CData namespace Int64 { diff --git a/js/src/ctypes/Library.h b/js/src/ctypes/Library.h index 83e2daba05..56f2df19a9 100644 --- a/js/src/ctypes/Library.h +++ b/js/src/ctypes/Library.h @@ -23,14 +23,14 @@ enum LibrarySlot { namespace Library { - MOZ_MUST_USE bool Name(JSContext* cx, unsigned argc, JS::Value* vp); + [[nodiscard]] bool Name(JSContext* cx, unsigned argc, JS::Value* vp); JSObject* Create(JSContext* cx, JS::HandleValue path, const JSCTypesCallbacks* callbacks); bool IsLibrary(JSObject* obj); PRLibrary* GetLibrary(JSObject* obj); - MOZ_MUST_USE bool Open(JSContext* cx, unsigned argc, JS::Value* vp); + [[nodiscard]] bool Open(JSContext* cx, unsigned argc, JS::Value* vp); } // namespace Library } // namespace ctypes diff --git a/js/src/ds/Fifo.h b/js/src/ds/Fifo.h index 4946c8452c..61426aa7b0 100644 --- a/js/src/ds/Fifo.h +++ b/js/src/ds/Fifo.h @@ -94,7 +94,7 @@ class Fifo // Push an element to the back of the queue. This method can take either a // |const T&| or a |T&&|. template <typename U> - MOZ_MUST_USE bool pushBack(U&& u) { + [[nodiscard]] bool pushBack(U&& u) { if (!rear_.append(mozilla::Forward<U>(u))) return false; if (!fixup()) { @@ -106,7 +106,7 @@ class Fifo // Construct a T in-place at the back of the queue. template <typename... Args> - MOZ_MUST_USE bool emplaceBack(Args&&... args) { + [[nodiscard]] bool emplaceBack(Args&&... args) { if (!rear_.emplaceBack(mozilla::Forward<Args>(args)...)) return false; if (!fixup()) { @@ -127,7 +127,7 @@ class Fifo } // Remove the front element from the queue. - MOZ_MUST_USE bool popFront() { + [[nodiscard]] bool popFront() { MOZ_ASSERT(!empty()); T t(mozilla::Move(front())); front_.popBack(); diff --git a/js/src/ds/InlineTable.h b/js/src/ds/InlineTable.h index 17d27ec282..5793e78533 100644 --- a/js/src/ds/InlineTable.h +++ b/js/src/ds/InlineTable.h @@ -67,7 +67,7 @@ class InlineTable return inlNext_ > InlineEntries; } - MOZ_MUST_USE bool switchToTable() { + [[nodiscard]] bool switchToTable() { MOZ_ASSERT(inlNext_ == InlineEntries); if (table_.initialized()) { @@ -91,7 +91,7 @@ class InlineTable } MOZ_NEVER_INLINE - MOZ_MUST_USE bool switchAndAdd(const InlineEntry& entry) { + [[nodiscard]] bool switchAndAdd(const InlineEntry& entry) { if (!switchToTable()) return false; @@ -285,7 +285,7 @@ class InlineTable template <typename KeyInput, typename... Args> MOZ_ALWAYS_INLINE - MOZ_MUST_USE bool add(AddPtr& p, KeyInput&& key, Args&&... args) { + [[nodiscard]] bool add(AddPtr& p, KeyInput&& key, Args&&... args) { MOZ_ASSERT(!p); MOZ_ASSERT(keyNonZero(key)); @@ -439,7 +439,7 @@ class InlineMap this->value = mozilla::Forward<ValueInput>(value); } - MOZ_MUST_USE bool moveTo(Map& map) { + [[nodiscard]] bool moveTo(Map& map) { return map.putNew(mozilla::Move(key), mozilla::Move(value)); } }; @@ -531,12 +531,12 @@ class InlineMap template <typename KeyInput, typename ValueInput> MOZ_ALWAYS_INLINE - MOZ_MUST_USE bool add(AddPtr& p, KeyInput&& key, ValueInput&& value) { + [[nodiscard]] bool add(AddPtr& p, KeyInput&& key, ValueInput&& value) { return impl_.add(p, mozilla::Forward<KeyInput>(key), mozilla::Forward<ValueInput>(value)); } template <typename KeyInput, typename ValueInput> - MOZ_MUST_USE bool put(KeyInput&& key, ValueInput&& value) { + [[nodiscard]] bool put(KeyInput&& key, ValueInput&& value) { AddPtr p = lookupForAdd(key); if (p) { p->value() = mozilla::Forward<ValueInput>(value); @@ -577,7 +577,7 @@ class InlineSet this->key = mozilla::Forward<TInput>(key); } - MOZ_MUST_USE bool moveTo(Set& set) { + [[nodiscard]] bool moveTo(Set& set) { return set.putNew(mozilla::Move(key)); } }; @@ -662,12 +662,12 @@ class InlineSet template <typename TInput> MOZ_ALWAYS_INLINE - MOZ_MUST_USE bool add(AddPtr& p, TInput&& key) { + [[nodiscard]] bool add(AddPtr& p, TInput&& key) { return impl_.add(p, mozilla::Forward<TInput>(key)); } template <typename TInput> - MOZ_MUST_USE bool put(TInput&& key) { + [[nodiscard]] bool put(TInput&& key) { AddPtr p = lookupForAdd(key); return p ? true : add(p, mozilla::Forward<TInput>(key)); } diff --git a/js/src/ds/LifoAlloc.h b/js/src/ds/LifoAlloc.h index 7c617a02fc..1c64dd44d9 100644 --- a/js/src/ds/LifoAlloc.h +++ b/js/src/ds/LifoAlloc.h @@ -313,7 +313,7 @@ class LifoAlloc // allocation requests, not necessarily contiguous. Note that this does // not guarantee a successful single allocation of N bytes. MOZ_ALWAYS_INLINE - MOZ_MUST_USE bool ensureUnusedApproximate(size_t n) { + [[nodiscard]] bool ensureUnusedApproximate(size_t n) { AutoFallibleScope fallibleAllocator(this); size_t total = 0; for (BumpChunk* chunk = latest; chunk; chunk = chunk->next()) { @@ -640,7 +640,7 @@ class LifoAllocPolicy } void reportAllocOverflow() const { } - MOZ_MUST_USE bool checkSimulatedOOM() const { + [[nodiscard]] bool checkSimulatedOOM() const { return fb == Infallible || !js::oom::ShouldFailWithOOM(); } }; diff --git a/js/src/ds/OrderedHashTable.h b/js/src/ds/OrderedHashTable.h index c12d43caa7..1432b308fb 100644 --- a/js/src/ds/OrderedHashTable.h +++ b/js/src/ds/OrderedHashTable.h @@ -86,7 +86,7 @@ class OrderedHashTable OrderedHashTable(AllocPolicy& ap, mozilla::HashCodeScrambler hcs) : hashTable(nullptr), data(nullptr), dataLength(0), ranges(nullptr), alloc(ap), hcs(hcs) {} - MOZ_MUST_USE bool init() { + [[nodiscard]] bool init() { MOZ_ASSERT(!hashTable, "init must be called at most once"); uint32_t buckets = initialBuckets(); @@ -153,7 +153,7 @@ class OrderedHashTable * means the element was not added to the table. */ template <typename ElementInput> - MOZ_MUST_USE bool put(ElementInput&& element) { + [[nodiscard]] bool put(ElementInput&& element) { HashNumber h = prepareHash(Ops::getKey(element)); if (Data* e = lookup(Ops::getKey(element), h)) { e->element = Forward<ElementInput>(element); @@ -224,7 +224,7 @@ class OrderedHashTable * particular, those Ranges are still live and will see any entries added * after a successful clear(). */ - MOZ_MUST_USE bool clear() { + [[nodiscard]] bool clear() { if (dataLength != 0) { Data** oldHashTable = hashTable; Data* oldData = data; @@ -633,7 +633,7 @@ class OrderedHashTable * empty elements in data[0:dataLength]. On allocation failure, this * leaves everything as it was and returns false. */ - MOZ_MUST_USE bool rehash(uint32_t newHashShift) { + [[nodiscard]] bool rehash(uint32_t newHashShift) { // If the size of the table is not changing, rehash in place to avoid // allocating memory. if (newHashShift == hashShift) { @@ -746,17 +746,17 @@ class OrderedHashMap typedef typename Impl::Range Range; OrderedHashMap(AllocPolicy ap, mozilla::HashCodeScrambler hcs) : impl(ap, hcs) {} - MOZ_MUST_USE bool init() { return impl.init(); } + [[nodiscard]] bool init() { return impl.init(); } uint32_t count() const { return impl.count(); } bool has(const Key& key) const { return impl.has(key); } Range all() { return impl.all(); } const Entry* get(const Key& key) const { return impl.get(key); } Entry* get(const Key& key) { return impl.get(key); } bool remove(const Key& key, bool* foundp) { return impl.remove(key, foundp); } - MOZ_MUST_USE bool clear() { return impl.clear(); } + [[nodiscard]] bool clear() { return impl.clear(); } template <typename V> - MOZ_MUST_USE bool put(const Key& key, V&& value) { + [[nodiscard]] bool put(const Key& key, V&& value) { return impl.put(Entry(key, Forward<V>(value))); } @@ -804,13 +804,13 @@ class OrderedHashSet typedef typename Impl::Range Range; explicit OrderedHashSet(AllocPolicy ap, mozilla::HashCodeScrambler hcs) : impl(ap, hcs) {} - MOZ_MUST_USE bool init() { return impl.init(); } + [[nodiscard]] bool init() { return impl.init(); } uint32_t count() const { return impl.count(); } bool has(const T& value) const { return impl.has(value); } Range all() { return impl.all(); } - MOZ_MUST_USE bool put(const T& value) { return impl.put(value); } + [[nodiscard]] bool put(const T& value) { return impl.put(value); } bool remove(const T& value, bool* foundp) { return impl.remove(value, foundp); } - MOZ_MUST_USE bool clear() { return impl.clear(); } + [[nodiscard]] bool clear() { return impl.clear(); } HashNumber hash(const T& value) const { return impl.prepareHash(value); } diff --git a/js/src/ds/PageProtectingVector.h b/js/src/ds/PageProtectingVector.h index ddb6ee6eae..a21854d88c 100644 --- a/js/src/ds/PageProtectingVector.h +++ b/js/src/ds/PageProtectingVector.h @@ -223,7 +223,7 @@ class PageProtectingVector final unprotectedBytes = 0; } - MOZ_MUST_USE bool reserve(size_t size) { + [[nodiscard]] bool reserve(size_t size) { AutoUnprotect guard; if (size > vector.capacity()) guard.emplace(this); @@ -237,7 +237,7 @@ class PageProtectingVector final } template<typename U> - MOZ_MUST_USE bool append(const U* values, size_t size) { + [[nodiscard]] bool append(const U* values, size_t size) { bool ret; { AutoUnprotect guard; diff --git a/js/src/ds/PriorityQueue.h b/js/src/ds/PriorityQueue.h index ce8d1af7e6..a7430620cf 100644 --- a/js/src/ds/PriorityQueue.h +++ b/js/src/ds/PriorityQueue.h @@ -34,7 +34,7 @@ class PriorityQueue : heap(ap) {} - MOZ_MUST_USE bool reserve(size_t capacity) { + [[nodiscard]] bool reserve(size_t capacity) { return heap.reserve(capacity); } @@ -56,7 +56,7 @@ class PriorityQueue return highest; } - MOZ_MUST_USE bool insert(const T& v) { + [[nodiscard]] bool insert(const T& v) { if (!heap.append(v)) return false; siftUp(heap.length() - 1); diff --git a/js/src/ds/Sort.h b/js/src/ds/Sort.h index 0f98dc5f75..2dcab1c4e0 100644 --- a/js/src/ds/Sort.h +++ b/js/src/ds/Sort.h @@ -77,7 +77,7 @@ MergeArrayRuns(T* dst, const T* src, size_t run1, size_t run2, Comparator c) * arbitrary. */ template<typename T, typename Comparator> -MOZ_MUST_USE bool +[[nodiscard]] bool MergeSort(T* array, size_t nelems, T* scratch, Comparator c) { const size_t INS_SORT_LIMIT = 3; diff --git a/js/src/ds/SplayTree.h b/js/src/ds/SplayTree.h index af2c48075a..7aa87637d1 100644 --- a/js/src/ds/SplayTree.h +++ b/js/src/ds/SplayTree.h @@ -89,7 +89,7 @@ class SplayTree return false; } - MOZ_MUST_USE bool insert(const T& v) + [[nodiscard]] bool insert(const T& v) { Node* element = allocateNode(v); if (!element) diff --git a/js/src/frontend/BytecodeCompiler.h b/js/src/frontend/BytecodeCompiler.h index 471e9e36d9..407ac2d119 100644 --- a/js/src/frontend/BytecodeCompiler.h +++ b/js/src/frontend/BytecodeCompiler.h @@ -49,7 +49,7 @@ CompileModule(ExclusiveContext* cx, const ReadOnlyCompileOptions& options, SourceBufferHolder& srcBuf, LifoAlloc& alloc, ScriptSourceObject** sourceObjectOut = nullptr); -MOZ_MUST_USE bool +[[nodiscard]] bool CompileLazyFunction(JSContext* cx, Handle<LazyScript*> lazy, const char16_t* chars, size_t length); // @@ -64,32 +64,32 @@ CompileLazyFunction(JSContext* cx, Handle<LazyScript*> lazy, const char16_t* cha // Function("/*", "*/x) {") // Function("x){ if (3", "return x;}") // -MOZ_MUST_USE bool +[[nodiscard]] bool CompileStandaloneFunction(JSContext* cx, MutableHandleFunction fun, const ReadOnlyCompileOptions& options, JS::SourceBufferHolder& srcBuf, mozilla::Maybe<uint32_t> parameterListEnd, HandleScope enclosingScope = nullptr); -MOZ_MUST_USE bool +[[nodiscard]] bool CompileStandaloneGenerator(JSContext* cx, MutableHandleFunction fun, const ReadOnlyCompileOptions& options, JS::SourceBufferHolder& srcBuf, mozilla::Maybe<uint32_t> parameterListEnd); -MOZ_MUST_USE bool +[[nodiscard]] bool CompileStandaloneAsyncFunction(JSContext* cx, MutableHandleFunction fun, const ReadOnlyCompileOptions& options, JS::SourceBufferHolder& srcBuf, mozilla::Maybe<uint32_t> parameterListEnd); -MOZ_MUST_USE bool +[[nodiscard]] bool CompileStandaloneAsyncGenerator(JSContext* cx, MutableHandleFunction fun, const ReadOnlyCompileOptions& options, JS::SourceBufferHolder& srcBuf, mozilla::Maybe<uint32_t> parameterListEnd); -MOZ_MUST_USE bool +[[nodiscard]] bool CompileAsyncFunctionBody(JSContext* cx, MutableHandleFunction fun, const ReadOnlyCompileOptions& options, Handle<PropertyNameVector> formals, JS::SourceBufferHolder& srcBuf); diff --git a/js/src/frontend/BytecodeControlStructures.h b/js/src/frontend/BytecodeControlStructures.h index 0863f9ef5d..fe7032b0cd 100644 --- a/js/src/frontend/BytecodeControlStructures.h +++ b/js/src/frontend/BytecodeControlStructures.h @@ -64,7 +64,7 @@ class BreakableControl : public NestableControl BreakableControl(BytecodeEmitter* bce, StatementKind kind); - MOZ_MUST_USE bool patchBreaks(BytecodeEmitter* bce); + [[nodiscard]] bool patchBreaks(BytecodeEmitter* bce); }; template <> inline bool @@ -131,7 +131,7 @@ class LoopControl : public BreakableControl return canIonOsr_; } - MOZ_MUST_USE bool patchBreaksAndContinues(BytecodeEmitter* bce); + [[nodiscard]] bool patchBreaksAndContinues(BytecodeEmitter* bce); }; template <> inline bool diff --git a/js/src/frontend/BytecodeEmitter.cpp b/js/src/frontend/BytecodeEmitter.cpp index 7680411f07..89b768344a 100644 --- a/js/src/frontend/BytecodeEmitter.cpp +++ b/js/src/frontend/BytecodeEmitter.cpp @@ -144,13 +144,13 @@ class MOZ_RAII OptionalEmitter Other }; - MOZ_MUST_USE bool emitJumpShortCircuit(); - MOZ_MUST_USE bool emitJumpShortCircuitForCall(); + [[nodiscard]] bool emitJumpShortCircuit(); + [[nodiscard]] bool emitJumpShortCircuitForCall(); // JSOp is the op code to be emitted, Kind is if we are dealing with a // reference (in which case we need two elements on the stack) or other value // (which needs one element on the stack) - MOZ_MUST_USE bool emitOptionalJumpTarget(JSOp op, Kind kind = Kind::Other); + [[nodiscard]] bool emitOptionalJumpTarget(JSOp op, Kind kind = Kind::Other); }; BytecodeEmitter::BytecodeEmitter(BytecodeEmitter* parent, @@ -708,7 +708,7 @@ class NonLocalExitControl NonLocalExitControl(const NonLocalExitControl&) = delete; - MOZ_MUST_USE bool leaveScope(EmitterScope* scope); + [[nodiscard]] bool leaveScope(EmitterScope* scope); public: NonLocalExitControl(BytecodeEmitter* bce, Kind kind) @@ -725,9 +725,9 @@ class NonLocalExitControl bce_->stackDepth = savedDepth_; } - MOZ_MUST_USE bool prepareForNonLocalJump(NestableControl* target); + [[nodiscard]] bool prepareForNonLocalJump(NestableControl* target); - MOZ_MUST_USE bool prepareForNonLocalJumpToOutermost() { + [[nodiscard]] bool prepareForNonLocalJumpToOutermost() { return prepareForNonLocalJump(nullptr); } }; diff --git a/js/src/frontend/BytecodeEmitter.h b/js/src/frontend/BytecodeEmitter.h index 9ca4856cf5..0ce4f6c1a3 100644 --- a/js/src/frontend/BytecodeEmitter.h +++ b/js/src/frontend/BytecodeEmitter.h @@ -40,7 +40,7 @@ class CGConstList { explicit CGConstList(ExclusiveContext* cx) : vector(cx, ValueVector(cx)) { } - MOZ_MUST_USE bool append(const Value& v) { + [[nodiscard]] bool append(const Value& v) { return vector.append(v); } size_t length() const { return vector.length(); } @@ -75,7 +75,7 @@ struct CGTryNoteList { Vector<JSTryNote> list; explicit CGTryNoteList(ExclusiveContext* cx) : list(cx) {} - MOZ_MUST_USE bool append(JSTryNoteKind kind, uint32_t stackDepth, size_t start, size_t end); + [[nodiscard]] bool append(JSTryNoteKind kind, uint32_t stackDepth, size_t start, size_t end); size_t length() const { return list.length(); } void finish(TryNoteArray* array); }; @@ -97,7 +97,7 @@ struct CGScopeNoteList { Vector<CGScopeNote> list; explicit CGScopeNoteList(ExclusiveContext* cx) : list(cx) {} - MOZ_MUST_USE bool append(uint32_t scopeIndex, uint32_t offset, bool inPrologue, + [[nodiscard]] bool append(uint32_t scopeIndex, uint32_t offset, bool inPrologue, uint32_t parent); void recordEnd(uint32_t index, uint32_t offset, bool inPrologue); size_t length() const { return list.length(); } @@ -110,7 +110,7 @@ struct CGYieldAndAwaitOffsetList { uint32_t numAwaits; explicit CGYieldAndAwaitOffsetList(ExclusiveContext* cx) : list(cx), numYields(0), numAwaits(0) {} - MOZ_MUST_USE bool append(uint32_t offset) { return list.append(offset); } + [[nodiscard]] bool append(uint32_t offset) { return list.append(offset); } size_t length() const { return list.length(); } void finish(YieldAndAwaitOffsetArray& array, uint32_t prologueLength); }; @@ -264,7 +264,7 @@ struct MOZ_STACK_CLASS BytecodeEmitter TokenPos bodyPosition, EmitterMode emitterMode = Normal, FieldInitializers fieldInitializers = FieldInitializers::Invalid()); - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); template <typename T> T* findInnermostNestableControl() const; @@ -300,7 +300,7 @@ struct MOZ_STACK_CLASS BytecodeEmitter Scope* innermostScope() const; MOZ_ALWAYS_INLINE - MOZ_MUST_USE bool makeAtomIndex(JSAtom* atom, uint32_t* indexp) { + [[nodiscard]] bool makeAtomIndex(JSAtom* atom, uint32_t* indexp) { MOZ_ASSERT(atomIndices); AtomIndexMap::AddPtr p = atomIndices->lookupForAdd(atom); if (p) { @@ -317,16 +317,16 @@ struct MOZ_STACK_CLASS BytecodeEmitter } bool isInLoop(); - MOZ_MUST_USE bool checkSingletonContext(); + [[nodiscard]] bool checkSingletonContext(); // Check whether our function is in a run-once context (a toplevel // run-one script or a run-once lambda). - MOZ_MUST_USE bool checkRunOnceContext(); + [[nodiscard]] bool checkRunOnceContext(); bool needsImplicitThis(); - MOZ_MUST_USE bool maybeSetDisplayURL(); - MOZ_MUST_USE bool maybeSetSourceMap(); + [[nodiscard]] bool maybeSetDisplayURL(); + [[nodiscard]] bool maybeSetSourceMap(); void tellDebuggerAboutCompiledScript(ExclusiveContext* cx); inline TokenStream& tokenStream(); @@ -383,29 +383,29 @@ struct MOZ_STACK_CLASS BytecodeEmitter // statement, we define useless code as code with no side effects, because // the main effect, the value left on the stack after the code executes, // will be discarded by a pop bytecode. - MOZ_MUST_USE bool checkSideEffects(ParseNode* pn, bool* answer); + [[nodiscard]] bool checkSideEffects(ParseNode* pn, bool* answer); #ifdef DEBUG - MOZ_MUST_USE bool checkStrictOrSloppy(JSOp op); + [[nodiscard]] bool checkStrictOrSloppy(JSOp op); #endif // Append a new source note of the given type (and therefore size) to the // notes dynamic array, updating noteCount. Return the new note's index // within the array pointed at by current->notes as outparam. - MOZ_MUST_USE bool newSrcNote(SrcNoteType type, unsigned* indexp = nullptr); - MOZ_MUST_USE bool newSrcNote2(SrcNoteType type, ptrdiff_t offset, unsigned* indexp = nullptr); - MOZ_MUST_USE bool newSrcNote3(SrcNoteType type, ptrdiff_t offset1, ptrdiff_t offset2, + [[nodiscard]] bool newSrcNote(SrcNoteType type, unsigned* indexp = nullptr); + [[nodiscard]] bool newSrcNote2(SrcNoteType type, ptrdiff_t offset, unsigned* indexp = nullptr); + [[nodiscard]] bool newSrcNote3(SrcNoteType type, ptrdiff_t offset1, ptrdiff_t offset2, unsigned* indexp = nullptr); void copySrcNotes(jssrcnote* destination, uint32_t nsrcnotes); - MOZ_MUST_USE bool setSrcNoteOffset(unsigned index, unsigned which, ptrdiff_t offset); + [[nodiscard]] bool setSrcNoteOffset(unsigned index, unsigned which, ptrdiff_t offset); // NB: this function can add at most one extra extended delta note. - MOZ_MUST_USE bool addToSrcNoteDelta(jssrcnote* sn, ptrdiff_t delta); + [[nodiscard]] bool addToSrcNoteDelta(jssrcnote* sn, ptrdiff_t delta); // Finish taking source notes in cx's notePool. If successful, the final // source note count is stored in the out outparam. - MOZ_MUST_USE bool finishTakingSrcNotes(uint32_t* out); + [[nodiscard]] bool finishTakingSrcNotes(uint32_t* out); // Control whether emitTree emits a line number note. enum EmitLineNumberNote { @@ -414,242 +414,242 @@ struct MOZ_STACK_CLASS BytecodeEmitter }; // Emit code for the tree rooted at pn. - MOZ_MUST_USE bool emitTree(ParseNode* pn, ValueUsage valueUsage = ValueUsage::WantValue, + [[nodiscard]] bool emitTree(ParseNode* pn, ValueUsage valueUsage = ValueUsage::WantValue, EmitLineNumberNote emitLineNote = EMIT_LINENOTE); // Emit code for the optional tree rooted at pn. - MOZ_MUST_USE bool emitOptionalTree(ParseNode* pn, + [[nodiscard]] bool emitOptionalTree(ParseNode* pn, OptionalEmitter& oe, ValueUsage valueUsage = ValueUsage::WantValue); // Emit code for the tree rooted at pn with its own TDZ cache. - MOZ_MUST_USE bool emitTreeInBranch(ParseNode* pn, + [[nodiscard]] bool emitTreeInBranch(ParseNode* pn, ValueUsage valueUsage = ValueUsage::WantValue); // Emit global, eval, or module code for tree rooted at body. Always // encompasses the entire source. - MOZ_MUST_USE bool emitScript(ParseNode* body); + [[nodiscard]] bool emitScript(ParseNode* body); // Emit function code for the tree rooted at body. - MOZ_MUST_USE bool emitFunctionScript(FunctionNode* funNode); + [[nodiscard]] bool emitFunctionScript(FunctionNode* funNode); void updateDepth(ptrdiff_t target); - MOZ_MUST_USE bool updateLineNumberNotes(uint32_t offset); - MOZ_MUST_USE bool updateSourceCoordNotes(uint32_t offset); + [[nodiscard]] bool updateLineNumberNotes(uint32_t offset); + [[nodiscard]] bool updateSourceCoordNotes(uint32_t offset); JSOp strictifySetNameOp(JSOp op); - MOZ_MUST_USE bool emitCheck(JSOp op, ptrdiff_t delta, ptrdiff_t* offset); + [[nodiscard]] bool emitCheck(JSOp op, ptrdiff_t delta, ptrdiff_t* offset); // Emit one bytecode. - MOZ_MUST_USE bool emit1(JSOp op); + [[nodiscard]] bool emit1(JSOp op); // Emit two bytecodes, an opcode (op) with a byte of immediate operand // (op1). - MOZ_MUST_USE bool emit2(JSOp op, uint8_t op1); + [[nodiscard]] bool emit2(JSOp op, uint8_t op1); // Emit three bytecodes, an opcode with two bytes of immediate operands. - MOZ_MUST_USE bool emit3(JSOp op, jsbytecode op1, jsbytecode op2); + [[nodiscard]] bool emit3(JSOp op, jsbytecode op1, jsbytecode op2); // Helper to emit JSOP_DUPAT. The argument is the value's depth on the // JS stack, as measured from the top. - MOZ_MUST_USE bool emitDupAt(unsigned slotFromTop); + [[nodiscard]] bool emitDupAt(unsigned slotFromTop); // Helper to emit JSOP_POP or JSOP_POPN. - MOZ_MUST_USE bool emitPopN(unsigned n); + [[nodiscard]] bool emitPopN(unsigned n); // Helper to emit JSOP_SWAP or JSOP_UNPICK. - MOZ_MUST_USE bool emitUnpickN(unsigned n); + [[nodiscard]] bool emitUnpickN(unsigned n); // Helper to emit JSOP_CHECKISOBJ. - MOZ_MUST_USE bool emitCheckIsObj(CheckIsObjectKind kind); + [[nodiscard]] bool emitCheckIsObj(CheckIsObjectKind kind); // Helper to emit JSOP_CHECKISCALLABLE. - MOZ_MUST_USE bool emitCheckIsCallable(CheckIsCallableKind kind); + [[nodiscard]] bool emitCheckIsCallable(CheckIsCallableKind kind); // Emit a bytecode followed by an uint16 immediate operand stored in // big-endian order. - MOZ_MUST_USE bool emitUint16Operand(JSOp op, uint32_t operand); + [[nodiscard]] bool emitUint16Operand(JSOp op, uint32_t operand); // Emit a bytecode followed by an uint32 immediate operand. - MOZ_MUST_USE bool emitUint32Operand(JSOp op, uint32_t operand); + [[nodiscard]] bool emitUint32Operand(JSOp op, uint32_t operand); // Emit (1 + extra) bytecodes, for N bytes of op and its immediate operand. - MOZ_MUST_USE bool emitN(JSOp op, size_t extra, ptrdiff_t* offset = nullptr); + [[nodiscard]] bool emitN(JSOp op, size_t extra, ptrdiff_t* offset = nullptr); - MOZ_MUST_USE bool emitNumberOp(double dval); + [[nodiscard]] bool emitNumberOp(double dval); - MOZ_MUST_USE bool emitBigIntOp(BigInt* bigint); + [[nodiscard]] bool emitBigIntOp(BigInt* bigint); - MOZ_MUST_USE bool emitThisLiteral(ThisLiteral* pn); - MOZ_MUST_USE bool emitGetFunctionThis(ParseNode* pn); - MOZ_MUST_USE bool emitGetFunctionThis(const mozilla::Maybe<uint32_t>& offset); - MOZ_MUST_USE bool emitGetThisForSuperBase(UnaryNode* superBase); - MOZ_MUST_USE bool emitSetThis(BinaryNode* setThisNode); - MOZ_MUST_USE bool emitCheckDerivedClassConstructorReturn(); + [[nodiscard]] bool emitThisLiteral(ThisLiteral* pn); + [[nodiscard]] bool emitGetFunctionThis(ParseNode* pn); + [[nodiscard]] bool emitGetFunctionThis(const mozilla::Maybe<uint32_t>& offset); + [[nodiscard]] bool emitGetThisForSuperBase(UnaryNode* superBase); + [[nodiscard]] bool emitSetThis(BinaryNode* setThisNode); + [[nodiscard]] bool emitCheckDerivedClassConstructorReturn(); // Handle jump opcodes and jump targets. - MOZ_MUST_USE bool emitJumpTarget(JumpTarget* target); - MOZ_MUST_USE bool emitJumpNoFallthrough(JSOp op, JumpList* jump); - MOZ_MUST_USE bool emitJump(JSOp op, JumpList* jump); - MOZ_MUST_USE bool emitBackwardJump(JSOp op, JumpTarget target, JumpList* jump, + [[nodiscard]] bool emitJumpTarget(JumpTarget* target); + [[nodiscard]] bool emitJumpNoFallthrough(JSOp op, JumpList* jump); + [[nodiscard]] bool emitJump(JSOp op, JumpList* jump); + [[nodiscard]] bool emitBackwardJump(JSOp op, JumpTarget target, JumpList* jump, JumpTarget* fallthrough); void patchJumpsToTarget(JumpList jump, JumpTarget target); - MOZ_MUST_USE bool emitJumpTargetAndPatch(JumpList jump); + [[nodiscard]] bool emitJumpTargetAndPatch(JumpList jump); - MOZ_MUST_USE bool emitCall(JSOp op, uint16_t argc, + [[nodiscard]] bool emitCall(JSOp op, uint16_t argc, const mozilla::Maybe<uint32_t>& sourceCoordOffset); - MOZ_MUST_USE bool emitCall(JSOp op, uint16_t argc, ParseNode* pn = nullptr); - MOZ_MUST_USE bool emitCallIncDec(UnaryNode* incDec); + [[nodiscard]] bool emitCall(JSOp op, uint16_t argc, ParseNode* pn = nullptr); + [[nodiscard]] bool emitCallIncDec(UnaryNode* incDec); - MOZ_MUST_USE bool emitLoopHead(ParseNode* nextpn, JumpTarget* top); - MOZ_MUST_USE bool emitLoopEntry(ParseNode* nextpn, JumpList entryJump); + [[nodiscard]] bool emitLoopHead(ParseNode* nextpn, JumpTarget* top); + [[nodiscard]] bool emitLoopEntry(ParseNode* nextpn, JumpList entryJump); - MOZ_MUST_USE bool emitGoto(NestableControl* target, JumpList* jumplist, + [[nodiscard]] bool emitGoto(NestableControl* target, JumpList* jumplist, SrcNoteType noteType = SRC_NULL); - MOZ_MUST_USE bool emitIndex32(JSOp op, uint32_t index); - MOZ_MUST_USE bool emitIndexOp(JSOp op, uint32_t index); + [[nodiscard]] bool emitIndex32(JSOp op, uint32_t index); + [[nodiscard]] bool emitIndexOp(JSOp op, uint32_t index); - MOZ_MUST_USE bool emitAtomOp(JSAtom* atom, JSOp op); - MOZ_MUST_USE bool emitAtomOp(uint32_t atomIndex, JSOp op); + [[nodiscard]] bool emitAtomOp(JSAtom* atom, JSOp op); + [[nodiscard]] bool emitAtomOp(uint32_t atomIndex, JSOp op); - MOZ_MUST_USE bool emitArrayLiteral(ListNode* array); - MOZ_MUST_USE bool emitArray(ParseNode* arrayHead, uint32_t count, JSOp op); - MOZ_MUST_USE bool emitArrayComp(ListNode* pn); + [[nodiscard]] bool emitArrayLiteral(ListNode* array); + [[nodiscard]] bool emitArray(ParseNode* arrayHead, uint32_t count, JSOp op); + [[nodiscard]] bool emitArrayComp(ListNode* pn); - MOZ_MUST_USE bool emitInternedScopeOp(uint32_t index, JSOp op); - MOZ_MUST_USE bool emitInternedObjectOp(uint32_t index, JSOp op); - MOZ_MUST_USE bool emitObjectOp(ObjectBox* objbox, JSOp op); - MOZ_MUST_USE bool emitObjectPairOp(ObjectBox* objbox1, ObjectBox* objbox2, JSOp op); - MOZ_MUST_USE bool emitRegExp(uint32_t index); + [[nodiscard]] bool emitInternedScopeOp(uint32_t index, JSOp op); + [[nodiscard]] bool emitInternedObjectOp(uint32_t index, JSOp op); + [[nodiscard]] bool emitObjectOp(ObjectBox* objbox, JSOp op); + [[nodiscard]] bool emitObjectPairOp(ObjectBox* objbox1, ObjectBox* objbox2, JSOp op); + [[nodiscard]] bool emitRegExp(uint32_t index); - MOZ_NEVER_INLINE MOZ_MUST_USE bool emitFunction(FunctionNode* funNode, + [[nodiscard]] MOZ_NEVER_INLINE bool emitFunction(FunctionNode* funNode, bool needsProto = false, ListNode* classContentsIfConstructor = nullptr); - MOZ_NEVER_INLINE MOZ_MUST_USE bool emitObject(ListNode* objNode); + [[nodiscard]] MOZ_NEVER_INLINE bool emitObject(ListNode* objNode); - MOZ_MUST_USE bool replaceNewInitWithNewObject(JSObject* obj, ptrdiff_t offset); + [[nodiscard]] bool replaceNewInitWithNewObject(JSObject* obj, ptrdiff_t offset); - MOZ_MUST_USE bool emitHoistedFunctionsInList(ListNode* stmtList); + [[nodiscard]] bool emitHoistedFunctionsInList(ListNode* stmtList); - MOZ_MUST_USE bool emitPropertyList(ListNode* obj, PropertyEmitter& pe, + [[nodiscard]] bool emitPropertyList(ListNode* obj, PropertyEmitter& pe, PropListType type); enum class FieldPlacement { Instance, Static }; FieldInitializers setupFieldInitializers(ListNode* classMembers, FieldPlacement placement); - MOZ_MUST_USE bool emitCreateFieldKeys(ListNode* obj, FieldPlacement placement); - MOZ_MUST_USE bool emitCreateFieldInitializers(ClassEmitter& ce, ListNode* obj, FieldPlacement placement); + [[nodiscard]] bool emitCreateFieldKeys(ListNode* obj, FieldPlacement placement); + [[nodiscard]] bool emitCreateFieldInitializers(ClassEmitter& ce, ListNode* obj, FieldPlacement placement); const FieldInitializers& findFieldInitializersForCall(); - MOZ_MUST_USE bool emitInitializeInstanceFields(); - MOZ_MUST_USE bool emitInitializeStaticFields(ListNode* classMembers); + [[nodiscard]] bool emitInitializeInstanceFields(); + [[nodiscard]] bool emitInitializeStaticFields(ListNode* classMembers); // To catch accidental misuse, emitUint16Operand/emit3 assert that they are // not used to unconditionally emit JSOP_GETLOCAL. Variable access should // instead be emitted using EmitVarOp. In special cases, when the caller // definitely knows that a given local slot is unaliased, this function may be // used as a non-asserting version of emitUint16Operand. - MOZ_MUST_USE bool emitLocalOp(JSOp op, uint32_t slot); + [[nodiscard]] bool emitLocalOp(JSOp op, uint32_t slot); - MOZ_MUST_USE bool emitArgOp(JSOp op, uint16_t slot); - MOZ_MUST_USE bool emitEnvCoordOp(JSOp op, EnvironmentCoordinate ec); + [[nodiscard]] bool emitArgOp(JSOp op, uint16_t slot); + [[nodiscard]] bool emitEnvCoordOp(JSOp op, EnvironmentCoordinate ec); - MOZ_MUST_USE bool emitGetNameAtLocation(JSAtom* name, const NameLocation& loc); - MOZ_MUST_USE bool emitGetName(JSAtom* name) { + [[nodiscard]] bool emitGetNameAtLocation(JSAtom* name, const NameLocation& loc); + [[nodiscard]] bool emitGetName(JSAtom* name) { return emitGetNameAtLocation(name, lookupName(name)); } - MOZ_MUST_USE bool emitGetName(ParseNode* pn); + [[nodiscard]] bool emitGetName(ParseNode* pn); - MOZ_MUST_USE bool emitTDZCheckIfNeeded(JSAtom* name, const NameLocation& loc); + [[nodiscard]] bool emitTDZCheckIfNeeded(JSAtom* name, const NameLocation& loc); - MOZ_MUST_USE bool emitNameIncDec(UnaryNode* incDec); + [[nodiscard]] bool emitNameIncDec(UnaryNode* incDec); - MOZ_MUST_USE bool emitDeclarationList(ListNode* declList); - MOZ_MUST_USE bool emitSingleDeclaration(ParseNode* declList, ParseNode* decl, + [[nodiscard]] bool emitDeclarationList(ListNode* declList); + [[nodiscard]] bool emitSingleDeclaration(ParseNode* declList, ParseNode* decl, ParseNode* initializer); - MOZ_MUST_USE bool emitNewInit(JSProtoKey key); - MOZ_MUST_USE bool emitSingletonInitialiser(ParseNode* pn); + [[nodiscard]] bool emitNewInit(JSProtoKey key); + [[nodiscard]] bool emitSingletonInitialiser(ParseNode* pn); - MOZ_MUST_USE bool emitPrepareIteratorResult(); - MOZ_MUST_USE bool emitFinishIteratorResult(bool done); - MOZ_MUST_USE bool iteratorResultShape(unsigned* shape); - MOZ_MUST_USE bool emitToIteratorResult(bool done); + [[nodiscard]] bool emitPrepareIteratorResult(); + [[nodiscard]] bool emitFinishIteratorResult(bool done); + [[nodiscard]] bool iteratorResultShape(unsigned* shape); + [[nodiscard]] bool emitToIteratorResult(bool done); - MOZ_MUST_USE bool emitGetDotGeneratorInInnermostScope() { + [[nodiscard]] bool emitGetDotGeneratorInInnermostScope() { return emitGetDotGeneratorInScope(*innermostEmitterScope()); } - MOZ_MUST_USE bool emitGetDotGeneratorInScope(EmitterScope& currentScope); + [[nodiscard]] bool emitGetDotGeneratorInScope(EmitterScope& currentScope); - MOZ_MUST_USE bool emitInitialYield(UnaryNode* yieldNode); - MOZ_MUST_USE bool emitYield(UnaryNode* yieldNode); - MOZ_MUST_USE bool emitYieldOp(JSOp op); - MOZ_MUST_USE bool emitYieldStar(ParseNode* iter); - MOZ_MUST_USE bool emitAwaitInInnermostScope() { + [[nodiscard]] bool emitInitialYield(UnaryNode* yieldNode); + [[nodiscard]] bool emitYield(UnaryNode* yieldNode); + [[nodiscard]] bool emitYieldOp(JSOp op); + [[nodiscard]] bool emitYieldStar(ParseNode* iter); + [[nodiscard]] bool emitAwaitInInnermostScope() { return emitAwaitInScope(*innermostEmitterScope()); } - MOZ_MUST_USE bool emitAwaitInInnermostScope(UnaryNode* awaitNode); - MOZ_MUST_USE bool emitAwaitInScope(EmitterScope& currentScope); - MOZ_MUST_USE bool emitPropLHS(PropertyAccess* prop); - MOZ_MUST_USE bool emitPropIncDec(UnaryNode* incDec); + [[nodiscard]] bool emitAwaitInInnermostScope(UnaryNode* awaitNode); + [[nodiscard]] bool emitAwaitInScope(EmitterScope& currentScope); + [[nodiscard]] bool emitPropLHS(PropertyAccess* prop); + [[nodiscard]] bool emitPropIncDec(UnaryNode* incDec); - MOZ_MUST_USE bool emitAsyncWrapperLambda(unsigned index, bool isArrow); - MOZ_MUST_USE bool emitAsyncWrapper(unsigned index, bool needsHomeObject, bool isArrow, + [[nodiscard]] bool emitAsyncWrapperLambda(unsigned index, bool isArrow); + [[nodiscard]] bool emitAsyncWrapper(unsigned index, bool needsHomeObject, bool isArrow, bool isStarGenerator); - MOZ_MUST_USE bool emitComputedPropertyName(UnaryNode* computedPropName); + [[nodiscard]] bool emitComputedPropertyName(UnaryNode* computedPropName); // Emit bytecode to put operands for a JSOP_GETELEM/CALLELEM/SETELEM/DELELEM // opcode onto the stack in the right order. In the case of SETELEM, the // value to be assigned must already be pushed. enum class EmitElemOption { Get, Set, Call, IncDec, CompoundAssign, Ref }; - MOZ_MUST_USE bool emitElemOperands(PropertyByValue* elem, EmitElemOption opts); + [[nodiscard]] bool emitElemOperands(PropertyByValue* elem, EmitElemOption opts); - MOZ_MUST_USE bool emitElemObjAndKey(PropertyByValue* elem, bool isSuper, ElemOpEmitter& eoe); - MOZ_MUST_USE bool emitElemOpBase(JSOp op); - MOZ_MUST_USE bool emitElemIncDec(UnaryNode* incDec); + [[nodiscard]] bool emitElemObjAndKey(PropertyByValue* elem, bool isSuper, ElemOpEmitter& eoe); + [[nodiscard]] bool emitElemOpBase(JSOp op); + [[nodiscard]] bool emitElemIncDec(UnaryNode* incDec); - MOZ_MUST_USE bool emitCatch(TernaryNode* catchNode); - MOZ_MUST_USE bool emitIf(TernaryNode* ifNode); - MOZ_MUST_USE bool emitWith(BinaryNode* withNode); + [[nodiscard]] bool emitCatch(TernaryNode* catchNode); + [[nodiscard]] bool emitIf(TernaryNode* ifNode); + [[nodiscard]] bool emitWith(BinaryNode* withNode); - MOZ_NEVER_INLINE MOZ_MUST_USE bool emitLabeledStatement(const LabeledStatement* pn); - MOZ_NEVER_INLINE MOZ_MUST_USE bool emitLexicalScope(LexicalScopeNode* lexicalScope); - MOZ_MUST_USE bool emitLexicalScopeBody(ParseNode* body, + [[nodiscard]] MOZ_NEVER_INLINE bool emitLabeledStatement(const LabeledStatement* pn); + [[nodiscard]] MOZ_NEVER_INLINE bool emitLexicalScope(LexicalScopeNode* lexicalScope); + [[nodiscard]] bool emitLexicalScopeBody(ParseNode* body, EmitLineNumberNote emitLineNote = EMIT_LINENOTE); - MOZ_NEVER_INLINE MOZ_MUST_USE bool emitSwitch(SwitchStatement* switchStmt); - MOZ_NEVER_INLINE MOZ_MUST_USE bool emitTry(TryNode* tryNode); + [[nodiscard]] MOZ_NEVER_INLINE bool emitSwitch(SwitchStatement* switchStmt); + [[nodiscard]] MOZ_NEVER_INLINE bool emitTry(TryNode* tryNode); // emitDestructuringLHSRef emits the lhs expression's reference. // If the lhs expression is object property |OBJ.prop|, it emits |OBJ|. // If it's object element |OBJ[ELEM]|, it emits |OBJ| and |ELEM|. // If there's nothing to evaluate for the reference, it emits nothing. // |emitted| parameter receives the number of values pushed onto the stack. - MOZ_MUST_USE bool emitDestructuringLHSRef(ParseNode* target, size_t* emitted); + [[nodiscard]] bool emitDestructuringLHSRef(ParseNode* target, size_t* emitted); // emitSetOrInitializeDestructuring assumes the lhs expression's reference // and the to-be-destructured value has been pushed on the stack. It emits // code to destructure a single lhs expression (either a name or a compound // []/{} expression). - MOZ_MUST_USE bool emitSetOrInitializeDestructuring(ParseNode* target, DestructuringFlavor flav); + [[nodiscard]] bool emitSetOrInitializeDestructuring(ParseNode* target, DestructuringFlavor flav); // emitDestructuringObjRestExclusionSet emits the property exclusion set // for the rest-property in an object pattern. - MOZ_MUST_USE bool emitDestructuringObjRestExclusionSet(ListNode* pattern); + [[nodiscard]] bool emitDestructuringObjRestExclusionSet(ListNode* pattern); // emitDestructuringOps assumes the to-be-destructured value has been // pushed on the stack and emits code to destructure each part of a [] or // {} lhs expression. - MOZ_MUST_USE bool emitDestructuringOps(ListNode* pattern, DestructuringFlavor flav); - MOZ_MUST_USE bool emitDestructuringOpsArray(ListNode* pattern, DestructuringFlavor flav); - MOZ_MUST_USE bool emitDestructuringOpsObject(ListNode* pattern, DestructuringFlavor flav); + [[nodiscard]] bool emitDestructuringOps(ListNode* pattern, DestructuringFlavor flav); + [[nodiscard]] bool emitDestructuringOpsArray(ListNode* pattern, DestructuringFlavor flav); + [[nodiscard]] bool emitDestructuringOpsObject(ListNode* pattern, DestructuringFlavor flav); typedef bool (*DestructuringDeclEmitter)(BytecodeEmitter* bce, ParseNode* pn); // Throw a TypeError if the value atop the stack isn't convertible to an // object, with no overall effect on the stack. - MOZ_MUST_USE bool emitRequireObjectCoercible(); + [[nodiscard]] bool emitRequireObjectCoercible(); enum class CopyOption { Filtered, Unfiltered @@ -658,27 +658,27 @@ struct MOZ_STACK_CLASS BytecodeEmitter // Calls either the |CopyDataProperties| or the // |CopyDataPropertiesUnfiltered| intrinsic function, consumes three (or // two in the latter case) elements from the stack. - MOZ_MUST_USE bool emitCopyDataProperties(CopyOption option); + [[nodiscard]] bool emitCopyDataProperties(CopyOption option); // emitIterator expects the iterable to already be on the stack. // It will replace that stack value with the corresponding iterator - MOZ_MUST_USE bool emitIterator(); + [[nodiscard]] bool emitIterator(); - MOZ_MUST_USE bool emitAsyncIterator(); + [[nodiscard]] bool emitAsyncIterator(); // XXX currently used only by OptionalEmitter, research still required // to identify when this was introduced in m-c. - MOZ_MUST_USE bool emitPushNotUndefinedOrNull(); + [[nodiscard]] bool emitPushNotUndefinedOrNull(); // Pops iterator from the top of the stack. Pushes the result of |.next()| // onto the stack. - MOZ_MUST_USE bool emitIteratorNext(ParseNode* pn, IteratorKind kind = IteratorKind::Sync, + [[nodiscard]] bool emitIteratorNext(ParseNode* pn, IteratorKind kind = IteratorKind::Sync, bool allowSelfHosted = false); - MOZ_MUST_USE bool emitIteratorCloseInScope(EmitterScope& currentScope, + [[nodiscard]] bool emitIteratorCloseInScope(EmitterScope& currentScope, IteratorKind iterKind = IteratorKind::Sync, CompletionKind completionKind = CompletionKind::Normal, bool allowSelfHosted = false); - MOZ_MUST_USE bool emitIteratorCloseInInnermostScope(IteratorKind iterKind = IteratorKind::Sync, + [[nodiscard]] bool emitIteratorCloseInInnermostScope(IteratorKind iterKind = IteratorKind::Sync, CompletionKind completionKind = CompletionKind::Normal, bool allowSelfHosted = false) { return emitIteratorCloseInScope(*innermostEmitterScope(), iterKind, completionKind, @@ -686,7 +686,7 @@ struct MOZ_STACK_CLASS BytecodeEmitter } template <typename InnerEmitter> - MOZ_MUST_USE bool wrapWithDestructuringIteratorCloseTryNote(int32_t iterDepth, + [[nodiscard]] bool wrapWithDestructuringIteratorCloseTryNote(int32_t iterDepth, InnerEmitter emitter); // Check if the value on top of the stack is "undefined". If so, replace @@ -694,114 +694,114 @@ struct MOZ_STACK_CLASS BytecodeEmitter // |pattern| is a lhs node of the default expression. If it's an // identifier and |defaultExpr| is an anonymous function, |SetFunctionName| // is called at compile time. - MOZ_MUST_USE bool emitDefault(ParseNode* defaultExpr, ParseNode* pattern); + [[nodiscard]] bool emitDefault(ParseNode* defaultExpr, ParseNode* pattern); - MOZ_MUST_USE bool setOrEmitSetFunName(ParseNode* maybeFun, HandleAtom name); - MOZ_MUST_USE bool setFunName(JSFunction* fun, JSAtom* name); - MOZ_MUST_USE bool emitSetClassConstructorName(JSAtom* name); - MOZ_MUST_USE bool emitSetFunctionNameFromStack(uint8_t offset); + [[nodiscard]] bool setOrEmitSetFunName(ParseNode* maybeFun, HandleAtom name); + [[nodiscard]] bool setFunName(JSFunction* fun, JSAtom* name); + [[nodiscard]] bool emitSetClassConstructorName(JSAtom* name); + [[nodiscard]] bool emitSetFunctionNameFromStack(uint8_t offset); - MOZ_MUST_USE bool emitInitializer(ParseNode* initializer, ParseNode* pattern); + [[nodiscard]] bool emitInitializer(ParseNode* initializer, ParseNode* pattern); - MOZ_MUST_USE bool emitCallSiteObject(CallSiteNode* callSiteObj); - MOZ_MUST_USE bool emitTemplateString(ListNode* templateString); - MOZ_MUST_USE bool emitAssignmentOrInit(ParseNodeKind kind, JSOp compoundOp, + [[nodiscard]] bool emitCallSiteObject(CallSiteNode* callSiteObj); + [[nodiscard]] bool emitTemplateString(ListNode* templateString); + [[nodiscard]] bool emitAssignmentOrInit(ParseNodeKind kind, JSOp compoundOp, ParseNode* lhs, ParseNode* rhs); - MOZ_MUST_USE bool emitShortCircuitAssignment(ParseNodeKind kind, JSOp op, + [[nodiscard]] bool emitShortCircuitAssignment(ParseNodeKind kind, JSOp op, ParseNode* lhs, ParseNode* rhs); - MOZ_MUST_USE bool emitReturn(UnaryNode* returnNode); - MOZ_MUST_USE bool emitStatement(UnaryNode* exprStmt); - MOZ_MUST_USE bool emitStatementList(ListNode* stmtList); + [[nodiscard]] bool emitReturn(UnaryNode* returnNode); + [[nodiscard]] bool emitStatement(UnaryNode* exprStmt); + [[nodiscard]] bool emitStatementList(ListNode* stmtList); - MOZ_MUST_USE bool emitDeleteName(UnaryNode* deleteNode); - MOZ_MUST_USE bool emitDeleteProperty(UnaryNode* deleteNode); - MOZ_MUST_USE bool emitDeleteElement(UnaryNode* deleteNode); - MOZ_MUST_USE bool emitDeleteExpression(UnaryNode* deleteNode); + [[nodiscard]] bool emitDeleteName(UnaryNode* deleteNode); + [[nodiscard]] bool emitDeleteProperty(UnaryNode* deleteNode); + [[nodiscard]] bool emitDeleteElement(UnaryNode* deleteNode); + [[nodiscard]] bool emitDeleteExpression(UnaryNode* deleteNode); // Optional methods which emit Optional Jump Target - MOZ_MUST_USE bool emitOptionalChain(UnaryNode* optionalChain, + [[nodiscard]] bool emitOptionalChain(UnaryNode* optionalChain, ValueUsage valueUsage); - MOZ_MUST_USE bool emitCalleeAndThisForOptionalChain(UnaryNode* optionalChain, + [[nodiscard]] bool emitCalleeAndThisForOptionalChain(UnaryNode* optionalChain, ParseNode* callNode, CallOrNewEmitter& cone); - MOZ_MUST_USE bool emitDeleteOptionalChain(UnaryNode* deleteNode); + [[nodiscard]] bool emitDeleteOptionalChain(UnaryNode* deleteNode); // Optional methods which emit a shortCircuit jump. They need to be called by // a method which emits an Optional Jump Target, see below. - MOZ_MUST_USE bool emitOptionalDotExpression(PropertyAccessBase* prop, + [[nodiscard]] bool emitOptionalDotExpression(PropertyAccessBase* prop, PropOpEmitter& poe, bool isSuper, OptionalEmitter& oe); - MOZ_MUST_USE bool emitOptionalElemExpression(PropertyByValueBase* elem, + [[nodiscard]] bool emitOptionalElemExpression(PropertyByValueBase* elem, ElemOpEmitter& eoe, bool isSuper, OptionalEmitter& oe); - MOZ_MUST_USE bool emitOptionalCall(BinaryNode* callNode, + [[nodiscard]] bool emitOptionalCall(BinaryNode* callNode, OptionalEmitter& oe, ValueUsage valueUsage); - MOZ_MUST_USE bool emitDeletePropertyInOptChain(PropertyAccessBase* propExpr, + [[nodiscard]] bool emitDeletePropertyInOptChain(PropertyAccessBase* propExpr, OptionalEmitter& oe); - MOZ_MUST_USE bool emitDeleteElementInOptChain(PropertyByValueBase* elemExpr, + [[nodiscard]] bool emitDeleteElementInOptChain(PropertyByValueBase* elemExpr, OptionalEmitter& oe); // |op| must be JSOP_TYPEOF or JSOP_TYPEOFEXPR. - MOZ_MUST_USE bool emitTypeof(UnaryNode* typeofNode, JSOp op); + [[nodiscard]] bool emitTypeof(UnaryNode* typeofNode, JSOp op); - MOZ_MUST_USE bool emitUnary(UnaryNode* unaryNode); - MOZ_MUST_USE bool emitRightAssociative(ListNode* node); - MOZ_MUST_USE bool emitLeftAssociative(ListNode* node); - MOZ_MUST_USE bool emitLogical(ListNode* node); - MOZ_MUST_USE bool emitSequenceExpr(ListNode* node, + [[nodiscard]] bool emitUnary(UnaryNode* unaryNode); + [[nodiscard]] bool emitRightAssociative(ListNode* node); + [[nodiscard]] bool emitLeftAssociative(ListNode* node); + [[nodiscard]] bool emitLogical(ListNode* node); + [[nodiscard]] bool emitSequenceExpr(ListNode* node, ValueUsage valueUsage = ValueUsage::WantValue); - MOZ_NEVER_INLINE MOZ_MUST_USE bool emitIncOrDec(UnaryNode* incDec); + [[nodiscard]] MOZ_NEVER_INLINE bool emitIncOrDec(UnaryNode* incDec); - MOZ_MUST_USE bool emitConditionalExpression(ConditionalExpression& conditional, + [[nodiscard]] bool emitConditionalExpression(ConditionalExpression& conditional, ValueUsage valueUsage = ValueUsage::WantValue); - MOZ_MUST_USE bool isRestParameter(ParseNode* pn); - MOZ_MUST_USE bool emitOptimizeSpread(ParseNode* arg0, JumpList* jmp, bool* emitted); + [[nodiscard]] bool isRestParameter(ParseNode* pn); + [[nodiscard]] bool emitOptimizeSpread(ParseNode* arg0, JumpList* jmp, bool* emitted); - MOZ_MUST_USE ParseNode* getCoordNode(ParseNode* callNode, ParseNode* calleeNode, + [[nodiscard]] ParseNode* getCoordNode(ParseNode* callNode, ParseNode* calleeNode, ListNode* argsList); - MOZ_MUST_USE bool emitArguments(ListNode* argsList, bool isCall, bool isSpread, + [[nodiscard]] bool emitArguments(ListNode* argsList, bool isCall, bool isSpread, CallOrNewEmitter& cone); - MOZ_MUST_USE bool emitCallOrNew(BinaryNode* pn, + [[nodiscard]] bool emitCallOrNew(BinaryNode* pn, ValueUsage valueUsage = ValueUsage::WantValue); - MOZ_MUST_USE bool emitCalleeAndThis(ParseNode* callNode, + [[nodiscard]] bool emitCalleeAndThis(ParseNode* callNode, ParseNode* calleeNode, CallOrNewEmitter& cone); - MOZ_MUST_USE bool emitOptionalCalleeAndThis(ParseNode* callNode, + [[nodiscard]] bool emitOptionalCalleeAndThis(ParseNode* callNode, ParseNode* calleeNode, CallOrNewEmitter& cone, OptionalEmitter& oe); - MOZ_MUST_USE bool emitSelfHostedCallFunction(BinaryNode* callNode); - MOZ_MUST_USE bool emitSelfHostedResumeGenerator(BinaryNode* callNode); - MOZ_MUST_USE bool emitSelfHostedForceInterpreter(ParseNode* pn); - MOZ_MUST_USE bool emitSelfHostedAllowContentIter(BinaryNode* callNode); + [[nodiscard]] bool emitSelfHostedCallFunction(BinaryNode* callNode); + [[nodiscard]] bool emitSelfHostedResumeGenerator(BinaryNode* callNode); + [[nodiscard]] bool emitSelfHostedForceInterpreter(ParseNode* pn); + [[nodiscard]] bool emitSelfHostedAllowContentIter(BinaryNode* callNode); - MOZ_MUST_USE bool emitComprehensionFor(ForNode* forNode); - MOZ_MUST_USE bool emitComprehensionForIn(ForNode* forNode); - MOZ_MUST_USE bool emitComprehensionForInOrOfVariables(ParseNode* pn, bool* lexicalScope); - MOZ_MUST_USE bool emitComprehensionForOf(ForNode* forNode); + [[nodiscard]] bool emitComprehensionFor(ForNode* forNode); + [[nodiscard]] bool emitComprehensionForIn(ForNode* forNode); + [[nodiscard]] bool emitComprehensionForInOrOfVariables(ParseNode* pn, bool* lexicalScope); + [[nodiscard]] bool emitComprehensionForOf(ForNode* forNode); - MOZ_MUST_USE bool emitDo(BinaryNode* doNode); - MOZ_MUST_USE bool emitWhile(BinaryNode* whileNode); + [[nodiscard]] bool emitDo(BinaryNode* doNode); + [[nodiscard]] bool emitWhile(BinaryNode* whileNode); - MOZ_MUST_USE bool emitFor(ForNode* forNode, const EmitterScope* headLexicalEmitterScope = nullptr); - MOZ_MUST_USE bool emitCStyleFor(ForNode* forNode, const EmitterScope* headLexicalEmitterScope); - MOZ_MUST_USE bool emitForIn(ForNode* forNode, const EmitterScope* headLexicalEmitterScope); - MOZ_MUST_USE bool emitForOf(ForNode* forNode, const EmitterScope* headLexicalEmitterScope); + [[nodiscard]] bool emitFor(ForNode* forNode, const EmitterScope* headLexicalEmitterScope = nullptr); + [[nodiscard]] bool emitCStyleFor(ForNode* forNode, const EmitterScope* headLexicalEmitterScope); + [[nodiscard]] bool emitForIn(ForNode* forNode, const EmitterScope* headLexicalEmitterScope); + [[nodiscard]] bool emitForOf(ForNode* forNode, const EmitterScope* headLexicalEmitterScope); - MOZ_MUST_USE bool emitInitializeForInOrOfTarget(TernaryNode* forHead); + [[nodiscard]] bool emitInitializeForInOrOfTarget(TernaryNode* forHead); - MOZ_MUST_USE bool emitBreak(PropertyName* label); - MOZ_MUST_USE bool emitContinue(PropertyName* label); + [[nodiscard]] bool emitBreak(PropertyName* label); + [[nodiscard]] bool emitContinue(PropertyName* label); - MOZ_MUST_USE bool emitFunctionFormalParameters(ListNode* paramsBody); - MOZ_MUST_USE bool emitInitializeFunctionSpecialNames(); - MOZ_MUST_USE bool emitLexicalInitialization(NameNode* pn); - MOZ_MUST_USE bool emitLexicalInitialization(JSAtom* name); + [[nodiscard]] bool emitFunctionFormalParameters(ListNode* paramsBody); + [[nodiscard]] bool emitInitializeFunctionSpecialNames(); + [[nodiscard]] bool emitLexicalInitialization(NameNode* pn); + [[nodiscard]] bool emitLexicalInitialization(JSAtom* name); // Emit bytecode for the spread operator. // @@ -811,9 +811,9 @@ struct MOZ_STACK_CLASS BytecodeEmitter // |.next()| and put the results into the I-th element of array with // incrementing I, then push the result I (it will be original I + // iteration count). The stack after iteration will look like |ARRAY INDEX|. - MOZ_MUST_USE bool emitSpread(bool allowSelfHosted = false); + [[nodiscard]] bool emitSpread(bool allowSelfHosted = false); - MOZ_MUST_USE bool emitClass(ClassNode* classNode); + [[nodiscard]] bool emitClass(ClassNode* classNode); }; class MOZ_RAII AutoCheckUnstableEmitterScope { diff --git a/js/src/frontend/CallOrNewEmitter.cpp b/js/src/frontend/CallOrNewEmitter.cpp index 430c422811..51d624e38a 100644 --- a/js/src/frontend/CallOrNewEmitter.cpp +++ b/js/src/frontend/CallOrNewEmitter.cpp @@ -59,7 +59,7 @@ CallOrNewEmitter::emitNameCallee(JSAtom* name) return true; } -MOZ_MUST_USE PropOpEmitter& +[[nodiscard]] PropOpEmitter& CallOrNewEmitter::prepareForPropCallee(bool isSuperProp) { MOZ_ASSERT(state_ == State::Start); @@ -76,7 +76,7 @@ CallOrNewEmitter::prepareForPropCallee(bool isSuperProp) return *poe_; } -MOZ_MUST_USE ElemOpEmitter& +[[nodiscard]] ElemOpEmitter& CallOrNewEmitter::prepareForElemCallee(bool isSuperElem) { MOZ_ASSERT(state_ == State::Start); diff --git a/js/src/frontend/CallOrNewEmitter.h b/js/src/frontend/CallOrNewEmitter.h index f1f9ce5e5a..021c5706eb 100644 --- a/js/src/frontend/CallOrNewEmitter.h +++ b/js/src/frontend/CallOrNewEmitter.h @@ -265,60 +265,60 @@ class MOZ_STACK_CLASS CallOrNewEmitter ValueUsage valueUsage); private: - MOZ_MUST_USE bool isCall() const { + [[nodiscard]] bool isCall() const { return op_ == JSOP_CALL || op_ == JSOP_CALL_IGNORES_RV || op_ == JSOP_SPREADCALL || isEval() || isFunApply() || isFunCall(); } - MOZ_MUST_USE bool isNew() const { + [[nodiscard]] bool isNew() const { return op_ == JSOP_NEW || op_ == JSOP_SPREADNEW; } - MOZ_MUST_USE bool isSuperCall() const { + [[nodiscard]] bool isSuperCall() const { return op_ == JSOP_SUPERCALL || op_ == JSOP_SPREADSUPERCALL; } - MOZ_MUST_USE bool isEval() const { + [[nodiscard]] bool isEval() const { return op_ == JSOP_EVAL || op_ == JSOP_STRICTEVAL || op_ == JSOP_SPREADEVAL || op_ == JSOP_STRICTSPREADEVAL; } - MOZ_MUST_USE bool isFunApply() const { + [[nodiscard]] bool isFunApply() const { return op_ == JSOP_FUNAPPLY; } - MOZ_MUST_USE bool isFunCall() const { + [[nodiscard]] bool isFunCall() const { return op_ == JSOP_FUNCALL; } - MOZ_MUST_USE bool isSpread() const { + [[nodiscard]] bool isSpread() const { return JOF_OPTYPE(op_) == JOF_BYTE; } - MOZ_MUST_USE bool isSingleSpreadRest() const { + [[nodiscard]] bool isSingleSpreadRest() const { return argumentsKind_ == ArgumentsKind::SingleSpreadRest; } public: - MOZ_MUST_USE bool emitNameCallee(JSAtom* name); - MOZ_MUST_USE PropOpEmitter& prepareForPropCallee(bool isSuperProp); - MOZ_MUST_USE ElemOpEmitter& prepareForElemCallee(bool isSuperElem); - MOZ_MUST_USE bool prepareForFunctionCallee(); - MOZ_MUST_USE bool emitSuperCallee(); - MOZ_MUST_USE bool prepareForOtherCallee(); + [[nodiscard]] bool emitNameCallee(JSAtom* name); + [[nodiscard]] PropOpEmitter& prepareForPropCallee(bool isSuperProp); + [[nodiscard]] ElemOpEmitter& prepareForElemCallee(bool isSuperElem); + [[nodiscard]] bool prepareForFunctionCallee(); + [[nodiscard]] bool emitSuperCallee(); + [[nodiscard]] bool prepareForOtherCallee(); - MOZ_MUST_USE bool emitThis(); + [[nodiscard]] bool emitThis(); // Used by BytecodeEmitter::emitPipeline to reuse CallOrNewEmitter instance // across multiple chained calls. void reset(); - MOZ_MUST_USE bool prepareForNonSpreadArguments(); + [[nodiscard]] bool prepareForNonSpreadArguments(); // See the usage in the comment at the top of the class. - MOZ_MUST_USE bool wantSpreadOperand(); - MOZ_MUST_USE bool emitSpreadArgumentsTest(); + [[nodiscard]] bool wantSpreadOperand(); + [[nodiscard]] bool emitSpreadArgumentsTest(); // Parameters are the offset in the source code for each character below: // @@ -328,7 +328,7 @@ class MOZ_STACK_CLASS CallOrNewEmitter // beginPos // // Can be Nothing() if not available. - MOZ_MUST_USE bool emitEnd(uint32_t argc, const mozilla::Maybe<uint32_t>& beginPos); + [[nodiscard]] bool emitEnd(uint32_t argc, const mozilla::Maybe<uint32_t>& beginPos); }; } /* namespace frontend */ diff --git a/js/src/frontend/DefaultEmitter.h b/js/src/frontend/DefaultEmitter.h index 45b8e01a11..65314821c2 100644 --- a/js/src/frontend/DefaultEmitter.h +++ b/js/src/frontend/DefaultEmitter.h @@ -6,7 +6,7 @@ #ifndef frontend_DefaultEmitter_h
#define frontend_DefaultEmitter_h
-#include "mozilla/Attributes.h" // MOZ_STACK_CLASS, MOZ_MUST_USE
+#include "mozilla/Attributes.h" // MOZ_STACK_CLASS
#include "mozilla/Maybe.h" // Maybe
#include "frontend/IfEmitter.h" // IfEmitter
@@ -54,8 +54,8 @@ class MOZ_STACK_CLASS DefaultEmitter { public:
explicit DefaultEmitter(BytecodeEmitter* bce);
- MOZ_MUST_USE bool prepareForDefault();
- MOZ_MUST_USE bool emitEnd();
+ [[nodiscard]] bool prepareForDefault();
+ [[nodiscard]] bool emitEnd();
};
} /* namespace frontend */
diff --git a/js/src/frontend/ElemOpEmitter.h b/js/src/frontend/ElemOpEmitter.h index c7feac4a94..d1f6a93477 100644 --- a/js/src/frontend/ElemOpEmitter.h +++ b/js/src/frontend/ElemOpEmitter.h @@ -218,63 +218,63 @@ class MOZ_STACK_CLASS ElemOpEmitter ElemOpEmitter(BytecodeEmitter* bce, Kind kind, ObjKind objKind); private: - MOZ_MUST_USE bool isCall() const { + [[nodiscard]] bool isCall() const { return kind_ == Kind::Call; } - MOZ_MUST_USE bool isSimpleAssignment() const { + [[nodiscard]] bool isSimpleAssignment() const { return kind_ == Kind::SimpleAssignment; } - MOZ_MUST_USE bool isPropInit() const { + [[nodiscard]] bool isPropInit() const { return kind_ == Kind::PropInit; } - MOZ_MUST_USE bool isDelete() const { + [[nodiscard]] bool isDelete() const { return kind_ == Kind::Delete; } - MOZ_MUST_USE bool isCompoundAssignment() const { + [[nodiscard]] bool isCompoundAssignment() const { return kind_ == Kind::CompoundAssignment; } - MOZ_MUST_USE bool isIncDec() const { + [[nodiscard]] bool isIncDec() const { return isPostIncDec() || isPreIncDec(); } - MOZ_MUST_USE bool isPostIncDec() const { + [[nodiscard]] bool isPostIncDec() const { return kind_ == Kind::PostIncrement || kind_ == Kind::PostDecrement; } - MOZ_MUST_USE bool isPreIncDec() const { + [[nodiscard]] bool isPreIncDec() const { return kind_ == Kind::PreIncrement || kind_ == Kind::PreDecrement; } - MOZ_MUST_USE bool isInc() const { + [[nodiscard]] bool isInc() const { return kind_ == Kind::PostIncrement || kind_ == Kind::PreIncrement; } - MOZ_MUST_USE bool isSuper() const { + [[nodiscard]] bool isSuper() const { return objKind_ == ObjKind::Super; } public: - MOZ_MUST_USE bool prepareForObj(); - MOZ_MUST_USE bool prepareForKey(); + [[nodiscard]] bool prepareForObj(); + [[nodiscard]] bool prepareForKey(); - MOZ_MUST_USE bool emitGet(); + [[nodiscard]] bool emitGet(); - MOZ_MUST_USE bool prepareForRhs(); - MOZ_MUST_USE bool skipObjAndKeyAndRhs(); + [[nodiscard]] bool prepareForRhs(); + [[nodiscard]] bool skipObjAndKeyAndRhs(); - MOZ_MUST_USE bool emitDelete(); + [[nodiscard]] bool emitDelete(); - MOZ_MUST_USE bool emitAssignment(); + [[nodiscard]] bool emitAssignment(); - MOZ_MUST_USE bool emitIncDec(); + [[nodiscard]] bool emitIncDec(); }; } /* namespace frontend */ diff --git a/js/src/frontend/EmitterScope.h b/js/src/frontend/EmitterScope.h index c7dfd1d559..9498cc1b38 100644 --- a/js/src/frontend/EmitterScope.h +++ b/js/src/frontend/EmitterScope.h @@ -56,16 +56,16 @@ class EmitterScope : public Nestable<EmitterScope> // block scope note list. Otherwise ScopeNote::NoScopeNote. uint32_t noteIndex_; - MOZ_MUST_USE bool ensureCache(BytecodeEmitter* bce); + [[nodiscard]] bool ensureCache(BytecodeEmitter* bce); template <typename BindingIter> - MOZ_MUST_USE bool checkSlotLimits(BytecodeEmitter* bce, const BindingIter& bi); + [[nodiscard]] bool checkSlotLimits(BytecodeEmitter* bce, const BindingIter& bi); - MOZ_MUST_USE bool checkEnvironmentChainLength(BytecodeEmitter* bce); + [[nodiscard]] bool checkEnvironmentChainLength(BytecodeEmitter* bce); void updateFrameFixedSlots(BytecodeEmitter* bce, const BindingIter& bi); - MOZ_MUST_USE bool putNameInCache(BytecodeEmitter* bce, JSAtom* name, NameLocation loc); + [[nodiscard]] bool putNameInCache(BytecodeEmitter* bce, JSAtom* name, NameLocation loc); mozilla::Maybe<NameLocation> lookupInCache(BytecodeEmitter* bce, JSAtom* name); @@ -79,12 +79,12 @@ class EmitterScope : public Nestable<EmitterScope> NameLocation searchAndCache(BytecodeEmitter* bce, JSAtom* name); template <typename ScopeCreator> - MOZ_MUST_USE bool internScope(BytecodeEmitter* bce, ScopeCreator createScope); + [[nodiscard]] bool internScope(BytecodeEmitter* bce, ScopeCreator createScope); template <typename ScopeCreator> - MOZ_MUST_USE bool internBodyScope(BytecodeEmitter* bce, ScopeCreator createScope); - MOZ_MUST_USE bool appendScopeNote(BytecodeEmitter* bce); + [[nodiscard]] bool internBodyScope(BytecodeEmitter* bce, ScopeCreator createScope); + [[nodiscard]] bool appendScopeNote(BytecodeEmitter* bce); - MOZ_MUST_USE bool deadZoneFrameSlotRange(BytecodeEmitter* bce, uint32_t slotStart, + [[nodiscard]] bool deadZoneFrameSlotRange(BytecodeEmitter* bce, uint32_t slotStart, uint32_t slotEnd) const; public: @@ -92,21 +92,21 @@ class EmitterScope : public Nestable<EmitterScope> void dump(BytecodeEmitter* bce); - MOZ_MUST_USE bool enterLexical(BytecodeEmitter* bce, ScopeKind kind, + [[nodiscard]] bool enterLexical(BytecodeEmitter* bce, ScopeKind kind, Handle<LexicalScope::Data*> bindings); - MOZ_MUST_USE bool enterNamedLambda(BytecodeEmitter* bce, FunctionBox* funbox); - MOZ_MUST_USE bool enterComprehensionFor(BytecodeEmitter* bce, + [[nodiscard]] bool enterNamedLambda(BytecodeEmitter* bce, FunctionBox* funbox); + [[nodiscard]] bool enterComprehensionFor(BytecodeEmitter* bce, Handle<LexicalScope::Data*> bindings); - MOZ_MUST_USE bool enterFunction(BytecodeEmitter* bce, FunctionBox* funbox); - MOZ_MUST_USE bool enterFunctionExtraBodyVar(BytecodeEmitter* bce, FunctionBox* funbox); - MOZ_MUST_USE bool enterParameterExpressionVar(BytecodeEmitter* bce); - MOZ_MUST_USE bool enterGlobal(BytecodeEmitter* bce, GlobalSharedContext* globalsc); - MOZ_MUST_USE bool enterEval(BytecodeEmitter* bce, EvalSharedContext* evalsc); - MOZ_MUST_USE bool enterModule(BytecodeEmitter* module, ModuleSharedContext* modulesc); - MOZ_MUST_USE bool enterWith(BytecodeEmitter* bce); - MOZ_MUST_USE bool deadZoneFrameSlots(BytecodeEmitter* bce) const; - - MOZ_MUST_USE bool leave(BytecodeEmitter* bce, bool nonLocal = false); + [[nodiscard]] bool enterFunction(BytecodeEmitter* bce, FunctionBox* funbox); + [[nodiscard]] bool enterFunctionExtraBodyVar(BytecodeEmitter* bce, FunctionBox* funbox); + [[nodiscard]] bool enterParameterExpressionVar(BytecodeEmitter* bce); + [[nodiscard]] bool enterGlobal(BytecodeEmitter* bce, GlobalSharedContext* globalsc); + [[nodiscard]] bool enterEval(BytecodeEmitter* bce, EvalSharedContext* evalsc); + [[nodiscard]] bool enterModule(BytecodeEmitter* module, ModuleSharedContext* modulesc); + [[nodiscard]] bool enterWith(BytecodeEmitter* bce); + [[nodiscard]] bool deadZoneFrameSlots(BytecodeEmitter* bce) const; + + [[nodiscard]] bool leave(BytecodeEmitter* bce, bool nonLocal = false); uint32_t index() const { MOZ_ASSERT(scopeIndex_ != ScopeNote::NoScopeIndex, "Did you forget to intern a Scope?"); diff --git a/js/src/frontend/FoldConstants.h b/js/src/frontend/FoldConstants.h index 1c8455183e..bb64efa9fe 100644 --- a/js/src/frontend/FoldConstants.h +++ b/js/src/frontend/FoldConstants.h @@ -24,10 +24,10 @@ namespace frontend { // return false; // if (!FoldConstants(cx, &pn, parser)) // return false; -MOZ_MUST_USE bool +[[nodiscard]] bool FoldConstants(ExclusiveContext* cx, ParseNode** pnp, Parser<FullParseHandler>* parser); -inline MOZ_MUST_USE bool +[[nodiscard]] inline bool FoldConstants(ExclusiveContext* cx, SyntaxParseHandler::Node* pnp, Parser<SyntaxParseHandler>* parser) { diff --git a/js/src/frontend/ForOfLoopControl.h b/js/src/frontend/ForOfLoopControl.h index 9cf3ea3ff3..1f5b0949e3 100644 --- a/js/src/frontend/ForOfLoopControl.h +++ b/js/src/frontend/ForOfLoopControl.h @@ -72,16 +72,16 @@ class ForOfLoopControl : public LoopControl ForOfLoopControl(BytecodeEmitter* bce, int32_t iterDepth, bool allowSelfHosted, IteratorKind iterKind); - MOZ_MUST_USE bool emitBeginCodeNeedingIteratorClose(BytecodeEmitter* bce); - MOZ_MUST_USE bool emitEndCodeNeedingIteratorClose(BytecodeEmitter* bce); + [[nodiscard]] bool emitBeginCodeNeedingIteratorClose(BytecodeEmitter* bce); + [[nodiscard]] bool emitEndCodeNeedingIteratorClose(BytecodeEmitter* bce); - MOZ_MUST_USE bool emitIteratorCloseInInnermostScope(BytecodeEmitter* bce, + [[nodiscard]] bool emitIteratorCloseInInnermostScope(BytecodeEmitter* bce, CompletionKind completionKind = CompletionKind::Normal); - MOZ_MUST_USE bool emitIteratorCloseInScope(BytecodeEmitter* bce, + [[nodiscard]] bool emitIteratorCloseInScope(BytecodeEmitter* bce, EmitterScope& currentScope, CompletionKind completionKind = CompletionKind::Normal); - MOZ_MUST_USE bool emitPrepareForNonLocalJumpFromScope(BytecodeEmitter* bce, + [[nodiscard]] bool emitPrepareForNonLocalJumpFromScope(BytecodeEmitter* bce, EmitterScope& currentScope, bool isTarget); }; diff --git a/js/src/frontend/FullParseHandler.h b/js/src/frontend/FullParseHandler.h index d2c8bbc2df..4919012ad9 100644 --- a/js/src/frontend/FullParseHandler.h +++ b/js/src/frontend/FullParseHandler.h @@ -319,7 +319,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return literal; } - MOZ_MUST_USE bool addElision(ListNodeType literal, const TokenPos& pos) { + [[nodiscard]] bool addElision(ListNodeType literal, const TokenPos& pos) { NullaryNode* elision = new_<NullaryNode>(PNK_ELISION, pos); if (!elision) return false; @@ -329,7 +329,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return true; } - MOZ_MUST_USE bool addSpreadElement(ListNodeType literal, uint32_t begin, Node inner) { + [[nodiscard]] bool addSpreadElement(ListNodeType literal, uint32_t begin, Node inner) { ParseNode* spread = newSpread(begin, inner); if (!spread) return false; @@ -400,7 +400,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return new_<UnaryNode>(PNK_SUPERBASE, JSOP_NOP, pos, thisName); } - MOZ_MUST_USE bool addPrototypeMutation(ListNodeType literal, uint32_t begin, Node expr) { + [[nodiscard]] bool addPrototypeMutation(ListNodeType literal, uint32_t begin, Node expr) { // Object literals with mutated [[Prototype]] are non-constant so that // singleton objects will have Object.prototype as their [[Prototype]]. literal->setHasNonConstInitializer(); @@ -412,7 +412,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return true; } - MOZ_MUST_USE bool addPropertyDefinition(ListNodeType literal, Node key, Node val) { + [[nodiscard]] bool addPropertyDefinition(ListNodeType literal, Node key, Node val) { MOZ_ASSERT(literal->isKind(PNK_OBJECT)); MOZ_ASSERT(key->isKind(PNK_NUMBER) || key->isKind(PNK_OBJECT_PROPERTY_NAME) || @@ -430,7 +430,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return true; } - MOZ_MUST_USE bool addShorthand(ListNodeType literal, NameNodeType name, NameNodeType expr) { + [[nodiscard]] bool addShorthand(ListNodeType literal, NameNodeType name, NameNodeType expr) { MOZ_ASSERT(literal->isKind(PNK_OBJECT)); MOZ_ASSERT(name->isKind(PNK_OBJECT_PROPERTY_NAME)); MOZ_ASSERT(expr->isKind(PNK_NAME)); @@ -444,7 +444,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return true; } - MOZ_MUST_USE bool addSpreadProperty(ListNodeType literal, uint32_t begin, Node inner) { + [[nodiscard]] bool addSpreadProperty(ListNodeType literal, uint32_t begin, Node inner) { MOZ_ASSERT(literal->isKind(PNK_OBJECT)); literal->setHasNonConstInitializer(); @@ -455,8 +455,8 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return true; } - MOZ_MUST_USE bool addObjectMethodDefinition(ListNodeType literal, Node key, FunctionNodeType funNode, - JSOp op) + [[nodiscard]] bool addObjectMethodDefinition(ListNodeType literal, Node key, FunctionNodeType funNode, + JSOp op) { MOZ_ASSERT(key->isKind(PNK_NUMBER) || key->isKind(PNK_OBJECT_PROPERTY_NAME) || @@ -471,27 +471,27 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return true; } - MOZ_MUST_USE ClassMethod* newClassMethodDefinition(Node key, FunctionNodeType funNode, - JSOp op, bool isStatic) + [[nodiscard]] ClassMethod* newClassMethodDefinition(Node key, FunctionNodeType funNode, + JSOp op, bool isStatic) { MOZ_ASSERT(isUsableAsObjectPropertyName(key)); return new_<ClassMethod>(key, funNode, op, isStatic); } - MOZ_MUST_USE ClassField* newClassFieldDefinition(Node name, FunctionNodeType initializer, bool isStatic) + [[nodiscard]] ClassField* newClassFieldDefinition(Node name, FunctionNodeType initializer, bool isStatic) { MOZ_ASSERT(isUsableAsObjectPropertyName(name)); return new_<ClassField>(name, initializer, isStatic); } - MOZ_MUST_USE StaticClassBlock* newStaticClassBlock(FunctionNodeType block) + [[nodiscard]] StaticClassBlock* newStaticClassBlock(FunctionNodeType block) { return new_<StaticClassBlock>(block); } - MOZ_MUST_USE bool addClassMemberDefinition(ListNodeType memberList, Node member) + [[nodiscard]] bool addClassMemberDefinition(ListNodeType memberList, Node member) { MOZ_ASSERT(memberList->isKind(PNK_CLASSMEMBERLIST)); // Constructors can be surrounded by LexicalScopes. @@ -536,7 +536,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return new_<ListNode>(PNK_STATEMENTLIST, pos); } - MOZ_MUST_USE bool isFunctionStmt(Node stmt) { + [[nodiscard]] bool isFunctionStmt(Node stmt) { while (stmt->isKind(PNK_LABEL)) stmt = stmt->as<LabeledStatement>().statement(); return stmt->is<FunctionNode>(); @@ -563,7 +563,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) list->setHasTopLevelFunctionDeclarations(); } - MOZ_MUST_USE bool prependInitialYield(ListNodeType stmtList, Node genName) { + [[nodiscard]] bool prependInitialYield(ListNodeType stmtList, Node genName) { MOZ_ASSERT(stmtList->isKind(PNK_STATEMENTLIST)); TokenPos yieldPos(stmtList->pn_pos.begin, stmtList->pn_pos.begin + 1); @@ -752,10 +752,10 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return new_<OptionalPropertyByValue>(lhs, index, lhs->pn_pos.begin, end); } - inline MOZ_MUST_USE bool addCatchBlock(ListNodeType catchList, LexicalScopeNodeType lexicalScope, - Node catchBinding, Node catchGuard, Node catchBody); + [[nodiscard]] inline bool addCatchBlock(ListNodeType catchList, LexicalScopeNodeType lexicalScope, + Node catchBinding, Node catchGuard, Node catchBody); - inline MOZ_MUST_USE bool setLastFunctionFormalParameterDefault(FunctionNodeType funNode, + [[nodiscard]] inline bool setLastFunctionFormalParameterDefault(FunctionNodeType funNode, Node defaultValue); inline void setLastFunctionFormalParameterDestructuring(Node funcpn, Node pn); @@ -858,7 +858,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) node->isKind(PNK_COMPUTED_NAME); } - inline MOZ_MUST_USE bool finishInitializerAssignment(NameNodeType nameNode, Node init); + [[nodiscard]] inline bool finishInitializerAssignment(NameNodeType nameNode, Node init); void setBeginPosition(Node pn, Node oth) { setBeginPosition(pn, oth->pn_pos.begin); @@ -941,12 +941,12 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) literal->setHasNonConstInitializer(); } template <typename NodeType> - MOZ_MUST_USE NodeType parenthesize(NodeType node) { + [[nodiscard]] NodeType parenthesize(NodeType node) { node->setInParens(true); return node; } template <typename NodeType> - MOZ_MUST_USE NodeType setLikelyIIFE(NodeType node) { + [[nodiscard]] NodeType setLikelyIIFE(NodeType node) { return parenthesize(node); } void setInDirectivePrologue(UnaryNodeType exprStmt) { diff --git a/js/src/frontend/FunctionEmitter.h b/js/src/frontend/FunctionEmitter.h index 4596aca219..f297f8e6c6 100644 --- a/js/src/frontend/FunctionEmitter.h +++ b/js/src/frontend/FunctionEmitter.h @@ -6,7 +6,7 @@ #ifndef frontend_FunctionEmitter_h
#define frontend_FunctionEmitter_h
-#include "mozilla/Attributes.h" // MOZ_STACK_CLASS, MOZ_MUST_USE
+#include "mozilla/Attributes.h" // MOZ_STACK_CLASS
#include <stdint.h> // uint16_t, uint32_t
@@ -118,30 +118,30 @@ class MOZ_STACK_CLASS FunctionEmitter { FunctionEmitter(BytecodeEmitter* bce, FunctionBox* funbox,
FunctionSyntaxKind syntaxKind, bool isHoisted);
- MOZ_MUST_USE bool prepareForNonLazy();
- MOZ_MUST_USE bool emitNonLazyEnd();
+ [[nodiscard]] bool prepareForNonLazy();
+ [[nodiscard]] bool emitNonLazyEnd();
- MOZ_MUST_USE bool emitLazy();
+ [[nodiscard]] bool emitLazy();
- MOZ_MUST_USE bool emitAgain();
+ [[nodiscard]] bool emitAgain();
- MOZ_MUST_USE bool emitAsmJSModule();
+ [[nodiscard]] bool emitAsmJSModule();
private:
// Common code for non-lazy and lazy functions.
- MOZ_MUST_USE bool interpretedCommon();
+ [[nodiscard]] bool interpretedCommon();
// Emit the function declaration, expression, method etc.
// This leaves function object on the stack for expression etc,
// and doesn't for declaration.
- MOZ_MUST_USE bool emitFunction();
+ [[nodiscard]] bool emitFunction();
// Helper methods used by emitFunction for each case.
// `index` is the object index of the function.
- MOZ_MUST_USE bool emitNonHoisted(unsigned index);
- MOZ_MUST_USE bool emitHoisted(unsigned index);
- MOZ_MUST_USE bool emitTopLevelFunction(unsigned index);
- MOZ_MUST_USE bool emitNewTargetForArrow();
+ [[nodiscard]] bool emitNonHoisted(unsigned index);
+ [[nodiscard]] bool emitHoisted(unsigned index);
+ [[nodiscard]] bool emitTopLevelFunction(unsigned index);
+ [[nodiscard]] bool emitNewTargetForArrow();
};
// Class for emitting function script.
@@ -243,19 +243,19 @@ class MOZ_STACK_CLASS FunctionScriptEmitter { paramStart_(paramStart),
bodyEnd_(bodyEnd) {}
- MOZ_MUST_USE bool prepareForParameters();
- MOZ_MUST_USE bool prepareForBody();
- MOZ_MUST_USE bool emitEndBody();
+ [[nodiscard]] bool prepareForParameters();
+ [[nodiscard]] bool prepareForBody();
+ [[nodiscard]] bool emitEndBody();
// Initialize JSScript for this function.
// WARNING: There shouldn't be any fallible operation for the function
// compilation after `initScript` call.
// See the comment inside JSScript::fullyInitFromEmitter for
// more details.
- MOZ_MUST_USE bool initScript();
+ [[nodiscard]] bool initScript();
private:
- MOZ_MUST_USE bool emitExtraBodyVarScope();
+ [[nodiscard]] bool emitExtraBodyVarScope();
};
// Class for emitting function parameters.
@@ -411,36 +411,36 @@ class MOZ_STACK_CLASS FunctionParamsEmitter { // paramName is used only when there's at least one expression in the
// paramerters (funbox_->hasParameterExprs == true).
- MOZ_MUST_USE bool emitSimple(JS::Handle<JSAtom*> paramName);
+ [[nodiscard]] bool emitSimple(JS::Handle<JSAtom*> paramName);
- MOZ_MUST_USE bool prepareForDefault();
- MOZ_MUST_USE bool emitDefaultEnd(JS::Handle<JSAtom*> paramName);
+ [[nodiscard]] bool prepareForDefault();
+ [[nodiscard]] bool emitDefaultEnd(JS::Handle<JSAtom*> paramName);
- MOZ_MUST_USE bool prepareForDestructuring();
- MOZ_MUST_USE bool emitDestructuringEnd();
+ [[nodiscard]] bool prepareForDestructuring();
+ [[nodiscard]] bool emitDestructuringEnd();
- MOZ_MUST_USE bool prepareForDestructuringDefaultInitializer();
- MOZ_MUST_USE bool prepareForDestructuringDefault();
- MOZ_MUST_USE bool emitDestructuringDefaultEnd();
+ [[nodiscard]] bool prepareForDestructuringDefaultInitializer();
+ [[nodiscard]] bool prepareForDestructuringDefault();
+ [[nodiscard]] bool emitDestructuringDefaultEnd();
- MOZ_MUST_USE bool emitRest(JS::Handle<JSAtom*> paramName);
+ [[nodiscard]] bool emitRest(JS::Handle<JSAtom*> paramName);
- MOZ_MUST_USE bool prepareForDestructuringRest();
- MOZ_MUST_USE bool emitDestructuringRestEnd();
+ [[nodiscard]] bool prepareForDestructuringRest();
+ [[nodiscard]] bool emitDestructuringRestEnd();
- MOZ_MUST_USE DestructuringFlavor getDestructuringFlavor();
+ [[nodiscard]] DestructuringFlavor getDestructuringFlavor();
private:
// Enter/leave var scope for `eval` if necessary.
- MOZ_MUST_USE bool enterParameterExpressionVarScope();
- MOZ_MUST_USE bool leaveParameterExpressionVarScope();
+ [[nodiscard]] bool enterParameterExpressionVarScope();
+ [[nodiscard]] bool leaveParameterExpressionVarScope();
- MOZ_MUST_USE bool prepareForInitializer();
- MOZ_MUST_USE bool emitInitializerEnd();
+ [[nodiscard]] bool prepareForInitializer();
+ [[nodiscard]] bool emitInitializerEnd();
- MOZ_MUST_USE bool emitRestArray();
+ [[nodiscard]] bool emitRestArray();
- MOZ_MUST_USE bool emitAssignment(JS::Handle<JSAtom*> paramName);
+ [[nodiscard]] bool emitAssignment(JS::Handle<JSAtom*> paramName);
};
} /* namespace frontend */
diff --git a/js/src/frontend/IfEmitter.h b/js/src/frontend/IfEmitter.h index b4032f3988..fc78f8bf3b 100644 --- a/js/src/frontend/IfEmitter.h +++ b/js/src/frontend/IfEmitter.h @@ -171,14 +171,14 @@ class MOZ_STACK_CLASS IfEmitter public: explicit IfEmitter(BytecodeEmitter* bce); - MOZ_MUST_USE bool emitThen(); - MOZ_MUST_USE bool emitCond(); - MOZ_MUST_USE bool emitThenElse(); + [[nodiscard]] bool emitThen(); + [[nodiscard]] bool emitCond(); + [[nodiscard]] bool emitThenElse(); - MOZ_MUST_USE bool emitElse(); - MOZ_MUST_USE bool emitElseIf(); + [[nodiscard]] bool emitElse(); + [[nodiscard]] bool emitElseIf(); - MOZ_MUST_USE bool emitEnd(); + [[nodiscard]] bool emitEnd(); #ifdef DEBUG // Returns the number of values pushed onto the value stack inside @@ -197,9 +197,9 @@ class MOZ_STACK_CLASS IfEmitter #endif private: - MOZ_MUST_USE bool emitIfInternal(SrcNoteType type); + [[nodiscard]] bool emitIfInternal(SrcNoteType type); void calculateOrCheckPushed(); - MOZ_MUST_USE bool emitElseInternal(); + [[nodiscard]] bool emitElseInternal(); }; // Class for emitting bytecode for blocks like if-then-else which doesn't touch diff --git a/js/src/frontend/LexicalScopeEmitter.h b/js/src/frontend/LexicalScopeEmitter.h index be92b75654..60331a8f91 100644 --- a/js/src/frontend/LexicalScopeEmitter.h +++ b/js/src/frontend/LexicalScopeEmitter.h @@ -7,7 +7,7 @@ #define frontend_LexicalScopeEmitter_h
#include "mozilla/Assertions.h" // MOZ_ASSERT
-#include "mozilla/Attributes.h" // MOZ_STACK_CLASS, MOZ_MUST_USE
+#include "mozilla/Attributes.h" // MOZ_STACK_CLASS
#include "mozilla/Maybe.h" // Maybe
#include "frontend/EmitterScope.h" // EmitterScope
@@ -85,11 +85,11 @@ class MOZ_STACK_CLASS LexicalScopeEmitter return *emitterScope_;
}
- MOZ_MUST_USE bool emitScope(ScopeKind kind,
+ [[nodiscard]] bool emitScope(ScopeKind kind,
JS::Handle<LexicalScope::Data*> bindings);
- MOZ_MUST_USE bool emitEmptyScope();
+ [[nodiscard]] bool emitEmptyScope();
- MOZ_MUST_USE bool emitEnd();
+ [[nodiscard]] bool emitEnd();
};
} /* namespace frontend */
diff --git a/js/src/frontend/NameFunctions.h b/js/src/frontend/NameFunctions.h index a880cc1604..95e6cd4865 100644 --- a/js/src/frontend/NameFunctions.h +++ b/js/src/frontend/NameFunctions.h @@ -18,7 +18,7 @@ namespace frontend { class ParseNode; -MOZ_MUST_USE bool +[[nodiscard]] bool NameFunctions(ExclusiveContext* cx, ParseNode* pn); } /* namespace frontend */ diff --git a/js/src/frontend/NameOpEmitter.h b/js/src/frontend/NameOpEmitter.h index 57fe5fe544..f620876a37 100644 --- a/js/src/frontend/NameOpEmitter.h +++ b/js/src/frontend/NameOpEmitter.h @@ -136,54 +136,54 @@ class MOZ_STACK_CLASS NameOpEmitter NameOpEmitter(BytecodeEmitter* bce, JSAtom* name, const NameLocation& loc, Kind kind); private: - MOZ_MUST_USE bool isCall() const { + [[nodiscard]] bool isCall() const { return kind_ == Kind::Call; } - MOZ_MUST_USE bool isSimpleAssignment() const { + [[nodiscard]] bool isSimpleAssignment() const { return kind_ == Kind::SimpleAssignment; } - MOZ_MUST_USE bool isCompoundAssignment() const { + [[nodiscard]] bool isCompoundAssignment() const { return kind_ == Kind::CompoundAssignment; } - MOZ_MUST_USE bool isIncDec() const { + [[nodiscard]] bool isIncDec() const { return isPostIncDec() || isPreIncDec(); } - MOZ_MUST_USE bool isPostIncDec() const { + [[nodiscard]] bool isPostIncDec() const { return kind_ == Kind::PostIncrement || kind_ == Kind::PostDecrement; } - MOZ_MUST_USE bool isPreIncDec() const { + [[nodiscard]] bool isPreIncDec() const { return kind_ == Kind::PreIncrement || kind_ == Kind::PreDecrement; } - MOZ_MUST_USE bool isInc() const { + [[nodiscard]] bool isInc() const { return kind_ == Kind::PostIncrement || kind_ == Kind::PreIncrement; } - MOZ_MUST_USE bool isInitialize() const { + [[nodiscard]] bool isInitialize() const { return kind_ == Kind::Initialize; } public: - MOZ_MUST_USE bool emittedBindOp() const { + [[nodiscard]] bool emittedBindOp() const { return emittedBindOp_; } - MOZ_MUST_USE const NameLocation& loc() const { + [[nodiscard]] const NameLocation& loc() const { return loc_; } - MOZ_MUST_USE bool emitGet(); - MOZ_MUST_USE bool prepareForRhs(); - MOZ_MUST_USE bool emitAssignment(); - MOZ_MUST_USE bool emitIncDec(); + [[nodiscard]] bool emitGet(); + [[nodiscard]] bool prepareForRhs(); + [[nodiscard]] bool emitAssignment(); + [[nodiscard]] bool emitIncDec(); }; } /* namespace frontend */ diff --git a/js/src/frontend/ObjectEmitter.h b/js/src/frontend/ObjectEmitter.h index e17043affa..8549602982 100644 --- a/js/src/frontend/ObjectEmitter.h +++ b/js/src/frontend/ObjectEmitter.h @@ -6,7 +6,7 @@ #ifndef frontend_ObjectEmitter_h
#define frontend_ObjectEmitter_h
-#include "mozilla/Attributes.h" // MOZ_MUST_USE, MOZ_STACK_CLASS, MOZ_ALWAYS_INLINE, MOZ_RAII
+#include "mozilla/Attributes.h" // MOZ_STACK_CLASS, MOZ_ALWAYS_INLINE, MOZ_RAII
#include "mozilla/Maybe.h" // Maybe
#include <stddef.h> // size_t, ptrdiff_t
@@ -211,42 +211,42 @@ class MOZ_STACK_CLASS PropertyEmitter // ^
// |
// keyPos
- MOZ_MUST_USE bool prepareForProtoValue(
+ [[nodiscard]] bool prepareForProtoValue(
const mozilla::Maybe<uint32_t>& keyPos);
- MOZ_MUST_USE bool emitMutateProto();
+ [[nodiscard]] bool emitMutateProto();
// { ...obj }
// ^
// |
// spreadPos
- MOZ_MUST_USE bool prepareForSpreadOperand(
+ [[nodiscard]] bool prepareForSpreadOperand(
const mozilla::Maybe<uint32_t>& spreadPos);
- MOZ_MUST_USE bool emitSpread();
+ [[nodiscard]] bool emitSpread();
// { key: value }
// ^
// |
// keyPos
- MOZ_MUST_USE bool prepareForPropValue(const mozilla::Maybe<uint32_t>& keyPos,
+ [[nodiscard]] bool prepareForPropValue(const mozilla::Maybe<uint32_t>& keyPos,
Kind kind = Kind::Prototype);
// { 1: value }
// ^
// |
// keyPos
- MOZ_MUST_USE bool prepareForIndexPropKey(
+ [[nodiscard]] bool prepareForIndexPropKey(
const mozilla::Maybe<uint32_t>& keyPos, Kind kind = Kind::Prototype);
- MOZ_MUST_USE bool prepareForIndexPropValue();
+ [[nodiscard]] bool prepareForIndexPropValue();
// { [ key ]: value }
// ^
// |
// keyPos
- MOZ_MUST_USE bool prepareForComputedPropKey(
+ [[nodiscard]] bool prepareForComputedPropKey(
const mozilla::Maybe<uint32_t>& keyPos, Kind kind = Kind::Prototype);
- MOZ_MUST_USE bool prepareForComputedPropValue();
+ [[nodiscard]] bool prepareForComputedPropValue();
- MOZ_MUST_USE bool emitInitHomeObject(
+ [[nodiscard]] bool emitInitHomeObject(
FunctionAsyncKind kind = FunctionAsyncKind::SyncFunction);
// @param key
@@ -256,24 +256,24 @@ class MOZ_STACK_CLASS PropertyEmitter // an anonymous class
// @param anonFunction
// The anonymous function object for property value
- MOZ_MUST_USE bool emitInitProp(
+ [[nodiscard]] bool emitInitProp(
JS::Handle<JSAtom*> key, bool isPropertyAnonFunctionOrClass = false,
JS::Handle<JSFunction*> anonFunction = nullptr);
- MOZ_MUST_USE bool emitInitGetter(JS::Handle<JSAtom*> key);
- MOZ_MUST_USE bool emitInitSetter(JS::Handle<JSAtom*> key);
+ [[nodiscard]] bool emitInitGetter(JS::Handle<JSAtom*> key);
+ [[nodiscard]] bool emitInitSetter(JS::Handle<JSAtom*> key);
- MOZ_MUST_USE bool emitInitIndexProp(
+ [[nodiscard]] bool emitInitIndexProp(
bool isPropertyAnonFunctionOrClass = false);
- MOZ_MUST_USE bool emitInitIndexGetter();
- MOZ_MUST_USE bool emitInitIndexSetter();
+ [[nodiscard]] bool emitInitIndexGetter();
+ [[nodiscard]] bool emitInitIndexSetter();
- MOZ_MUST_USE bool emitInitComputedProp(
+ [[nodiscard]] bool emitInitComputedProp(
bool isPropertyAnonFunctionOrClass = false);
- MOZ_MUST_USE bool emitInitComputedGetter();
- MOZ_MUST_USE bool emitInitComputedSetter();
+ [[nodiscard]] bool emitInitComputedGetter();
+ [[nodiscard]] bool emitInitComputedSetter();
private:
- MOZ_MUST_USE MOZ_ALWAYS_INLINE bool prepareForProp(
+ [[nodiscard]] MOZ_ALWAYS_INLINE bool prepareForProp(
const mozilla::Maybe<uint32_t>& keyPos, bool isStatic, bool isComputed);
// @param op
@@ -287,14 +287,14 @@ class MOZ_STACK_CLASS PropertyEmitter // anonymous class
// @param anonFunction
// Anonymous function object for the property
- MOZ_MUST_USE bool emitInit(JSOp op, JS::Handle<JSAtom*> key,
+ [[nodiscard]] bool emitInit(JSOp op, JS::Handle<JSAtom*> key,
bool isPropertyAnonFunctionOrClass,
JS::Handle<JSFunction*> anonFunction);
- MOZ_MUST_USE bool emitInitIndexOrComputed(JSOp op,
+ [[nodiscard]] bool emitInitIndexOrComputed(JSOp op,
FunctionPrefixKind prefixKind,
bool isPropertyAnonFunctionOrClass);
- MOZ_MUST_USE bool emitPopClassConstructor();
+ [[nodiscard]] bool emitPopClassConstructor();
};
// Class for emitting bytecode for object literal.
@@ -439,8 +439,8 @@ class MOZ_STACK_CLASS ObjectEmitter : public PropertyEmitter public:
explicit ObjectEmitter(BytecodeEmitter* bce);
- MOZ_MUST_USE bool emitObject(size_t propertyCount);
- MOZ_MUST_USE bool emitEnd();
+ [[nodiscard]] bool emitObject(size_t propertyCount);
+ [[nodiscard]] bool emitEnd();
};
// Save and restore the strictness.
@@ -813,16 +813,16 @@ class MOZ_STACK_CLASS ClassEmitter : public PropertyEmitter public:
explicit ClassEmitter(BytecodeEmitter* bce);
- MOZ_MUST_USE bool emitScope(JS::Handle<LexicalScope::Data*> scopeBindings);
+ [[nodiscard]] bool emitScope(JS::Handle<LexicalScope::Data*> scopeBindings);
// @param name
// Name of the class (nullptr if this is anonymous class)
- MOZ_MUST_USE bool emitClass(JS::Handle<JSAtom*> name);
- MOZ_MUST_USE bool emitDerivedClass(JS::Handle<JSAtom*> name);
+ [[nodiscard]] bool emitClass(JS::Handle<JSAtom*> name);
+ [[nodiscard]] bool emitDerivedClass(JS::Handle<JSAtom*> name);
// @param needsHomeObject
// True if the constructor contains `super.foo`
- MOZ_MUST_USE bool emitInitConstructor(bool needsHomeObject);
+ [[nodiscard]] bool emitInitConstructor(bool needsHomeObject);
// Parameters are the offset in the source code for each character below:
//
@@ -833,23 +833,23 @@ class MOZ_STACK_CLASS ClassEmitter : public PropertyEmitter // |
// classStart
//
- MOZ_MUST_USE bool emitInitDefaultConstructor(
+ [[nodiscard]] bool emitInitDefaultConstructor(
const mozilla::Maybe<uint32_t>& classStart,
const mozilla::Maybe<uint32_t>& classEnd);
- MOZ_MUST_USE bool prepareForFieldInitializers(size_t numFields, bool isStatic);
- MOZ_MUST_USE bool prepareForFieldInitializer();
- MOZ_MUST_USE bool emitFieldInitializerHomeObject(bool isStatic);
- MOZ_MUST_USE bool emitStoreFieldInitializer();
- MOZ_MUST_USE bool emitFieldInitializersEnd();
+ [[nodiscard]] bool prepareForFieldInitializers(size_t numFields, bool isStatic);
+ [[nodiscard]] bool prepareForFieldInitializer();
+ [[nodiscard]] bool emitFieldInitializerHomeObject(bool isStatic);
+ [[nodiscard]] bool emitStoreFieldInitializer();
+ [[nodiscard]] bool emitFieldInitializersEnd();
- MOZ_MUST_USE bool emitBinding();
+ [[nodiscard]] bool emitBinding();
- MOZ_MUST_USE bool emitEnd(Kind kind);
+ [[nodiscard]] bool emitEnd(Kind kind);
private:
void setName(JS::Handle<JSAtom*> name);
- MOZ_MUST_USE bool initProtoAndCtor();
+ [[nodiscard]] bool initProtoAndCtor();
};
} /* namespace frontend */
diff --git a/js/src/frontend/ParseNode.h b/js/src/frontend/ParseNode.h index 439a6d8937..02731847e7 100644 --- a/js/src/frontend/ParseNode.h +++ b/js/src/frontend/ParseNode.h @@ -878,7 +878,7 @@ class ParseNode ForCopyOnWriteArray }; - MOZ_MUST_USE bool getConstantValue(ExclusiveContext* cx, AllowConstantObjects allowObjects, + [[nodiscard]] bool getConstantValue(ExclusiveContext* cx, AllowConstantObjects allowObjects, MutableHandleValue vp, Value* compare = nullptr, size_t ncompare = 0, NewObjectKind newKind = TenuredObject); inline bool isConstant(); @@ -1258,17 +1258,17 @@ class ListNode : public ParseNode return count() == 0; } - MOZ_MUST_USE bool hasTopLevelFunctionDeclarations() const { + [[nodiscard]] bool hasTopLevelFunctionDeclarations() const { MOZ_ASSERT(isKind(PNK_STATEMENTLIST)); return pn_u.list.xflags & hasTopLevelFunctionDeclarationsBit; } - MOZ_MUST_USE bool hasArrayHoleOrSpread() const { + [[nodiscard]] bool hasArrayHoleOrSpread() const { MOZ_ASSERT(isKind(PNK_ARRAY)); return pn_u.list.xflags & hasArrayHoleOrSpreadBit; } - MOZ_MUST_USE bool hasNonConstInitializer() const { + [[nodiscard]] bool hasNonConstInitializer() const { MOZ_ASSERT(isKind(PNK_ARRAY) || isKind(PNK_OBJECT) || isKind(PNK_CLASSMEMBERLIST)); @@ -1463,7 +1463,7 @@ class ListNode : public ParseNode typedef std::function<bool(ParseNode*)> predicate_fun; #ifdef DEBUG - MOZ_MUST_USE bool contains(ParseNode* target) const { + [[nodiscard]] bool contains(ParseNode* target) const { MOZ_ASSERT(target); for (ParseNode* node : contents()) { if (target == node) { @@ -2146,7 +2146,7 @@ class CallSiteNode : public ListNode return match; } - MOZ_MUST_USE bool getRawArrayValue(ExclusiveContext* cx, MutableHandleValue vp) { + [[nodiscard]] bool getRawArrayValue(ExclusiveContext* cx, MutableHandleValue vp) { return head()->getConstantValue(cx, AllowObjects, vp); } diff --git a/js/src/frontend/Parser.cpp b/js/src/frontend/Parser.cpp index 4e3181e06b..96b83f7c48 100644 --- a/js/src/frontend/Parser.cpp +++ b/js/src/frontend/Parser.cpp @@ -1721,7 +1721,7 @@ NewEmptyBindingData(ExclusiveContext* cx, LifoAlloc& alloc, uint32_t numBindings * Copy-construct |BindingName|s from |bindings| into |cursor|, then return * the location one past the newly-constructed |BindingName|s. */ -static MOZ_MUST_USE BindingName* +[[nodiscard]] static BindingName* FreshlyInitializeBindings(BindingName* cursor, const Vector<BindingName>& bindings) { for (const BindingName& binding : bindings) diff --git a/js/src/frontend/Parser.h b/js/src/frontend/Parser.h index 4a8e038d6e..f6a304f447 100644 --- a/js/src/frontend/Parser.h +++ b/js/src/frontend/Parser.h @@ -140,7 +140,7 @@ class ParseContext : public Nestable<ParseContext> return id_; } - MOZ_MUST_USE bool init(ParseContext* pc) { + [[nodiscard]] bool init(ParseContext* pc) { if (id_ == UINT32_MAX) { pc->tokenStream_.reportError(JSMSG_NEED_DIET, js_script_str); return false; @@ -157,7 +157,7 @@ class ParseContext : public Nestable<ParseContext> return declared_->lookupForAdd(name); } - MOZ_MUST_USE bool addDeclaredName(ParseContext* pc, AddDeclaredNamePtr& p, JSAtom* name, + [[nodiscard]] bool addDeclaredName(ParseContext* pc, AddDeclaredNamePtr& p, JSAtom* name, DeclarationKind kind, uint32_t pos) { return maybeReportOOM(pc, declared_->add(p, name, DeclaredNameInfo(kind, pos))); @@ -379,7 +379,7 @@ class ParseContext : public Nestable<ParseContext> ~ParseContext(); - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); SharedContext* sc() { return sc_; @@ -446,7 +446,7 @@ class ParseContext : public Nestable<ParseContext> return *closedOverBindingsForLazy_; } - MOZ_MUST_USE bool addInnerFunctionBoxForAnnexB(FunctionBox* funbox); + [[nodiscard]] bool addInnerFunctionBoxForAnnexB(FunctionBox* funbox); void removeInnerFunctionBoxesForAnnexB(JSAtom* name); void finishInnerFunctionBoxesForAnnexB(); @@ -703,7 +703,7 @@ class UsedNameTracker scopeCounter_(0) { } - MOZ_MUST_USE bool init() { + [[nodiscard]] bool init() { return map_.init(); } @@ -722,10 +722,10 @@ class UsedNameTracker return map_.lookup(name); } - MOZ_MUST_USE bool noteUse(ExclusiveContext* cx, JSAtom* name, + [[nodiscard]] bool noteUse(ExclusiveContext* cx, JSAtom* name, uint32_t scriptId, uint32_t scopeId); - MOZ_MUST_USE bool markAsAlwaysClosedOver(ExclusiveContext* cx, JSAtom* name, + [[nodiscard]] bool markAsAlwaysClosedOver(ExclusiveContext* cx, JSAtom* name, uint32_t scriptId, uint32_t scopeId) { // This marks a variable as always closed over: // UsedNameInfo::noteBoundInScope only checks if scriptId and scopeId are @@ -883,32 +883,32 @@ class ParserBase : public StrictModeGetter * strict mode code, or warn if not, using the given error number and * arguments. */ - MOZ_MUST_USE bool strictModeError(unsigned errorNumber, ...); + [[nodiscard]] bool strictModeError(unsigned errorNumber, ...); /* * Handle a strict mode error at the given offset. Report an error if in * strict mode code, or warn if not, using the given error number and * arguments. */ - MOZ_MUST_USE bool strictModeErrorAt(uint32_t offset, unsigned errorNumber, ...); + [[nodiscard]] bool strictModeErrorAt(uint32_t offset, unsigned errorNumber, ...); /* Report the given warning at the current offset. */ - MOZ_MUST_USE bool warning(unsigned errorNumber, ...); + [[nodiscard]] bool warning(unsigned errorNumber, ...); /* Report the given warning at the given offset. */ - MOZ_MUST_USE bool warningAt(uint32_t offset, unsigned errorNumber, ...); + [[nodiscard]] bool warningAt(uint32_t offset, unsigned errorNumber, ...); /* * If extra warnings are enabled, report the given warning at the current * offset. */ - MOZ_MUST_USE bool extraWarning(unsigned errorNumber, ...); + [[nodiscard]] bool extraWarning(unsigned errorNumber, ...); /* * If extra warnings are enabled, report the given warning at the given * offset. */ - MOZ_MUST_USE bool extraWarningAt(uint32_t offset, unsigned errorNumber, ...); + [[nodiscard]] bool extraWarningAt(uint32_t offset, unsigned errorNumber, ...); bool isValidStrictBinding(PropertyName* name); @@ -1020,11 +1020,11 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_TYPE) // If there is a pending error, report it and return false, otherwise // return true. - MOZ_MUST_USE bool checkForError(ErrorKind kind); + [[nodiscard]] bool checkForError(ErrorKind kind); // If there is a pending warning, report it and return either false or // true depending on the werror option, otherwise return true. - MOZ_MUST_USE bool checkForWarning(ErrorKind kind); + [[nodiscard]] bool checkForWarning(ErrorKind kind); // Transfer an existing error to another instance. void transferErrorTo(ErrorKind kind, PossibleError* other); @@ -1053,12 +1053,12 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_TYPE) // If there is a pending destructuring error or warning, report it and // return false, otherwise return true. Clears any pending expression // error. - MOZ_MUST_USE bool checkForDestructuringErrorOrWarning(); + [[nodiscard]] bool checkForDestructuringErrorOrWarning(); // If there is a pending expression error, report it and return false, // otherwise return true. Clears any pending destructuring error or // warning. - MOZ_MUST_USE bool checkForExpressionError(); + [[nodiscard]] bool checkForExpressionError(); // Pass pending errors between possible error instances. This is useful // for extending the lifetime of a pending error beyond the scope of @@ -1127,7 +1127,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_TYPE) * the signature of `errorReport` is [...](TokenKind actual). */ template<typename ConditionT, typename ErrorReportT> - MOZ_MUST_USE bool mustMatchTokenInternal(ConditionT condition, Modifier modifier, + [[nodiscard]] bool mustMatchTokenInternal(ConditionT condition, Modifier modifier, ErrorReportT errorReport); public: @@ -1141,7 +1141,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_TYPE) * If error number is passed instead of `errorReport`, it reports an * error with the passed errorNumber. */ - MOZ_MUST_USE bool mustMatchToken(TokenKind expected, Modifier modifier, JSErrNum errorNumber) { + [[nodiscard]] bool mustMatchToken(TokenKind expected, Modifier modifier, JSErrNum errorNumber) { return mustMatchTokenInternal([expected](TokenKind actual) { return actual == expected; }, @@ -1151,12 +1151,12 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_TYPE) }); } - MOZ_MUST_USE bool mustMatchToken(TokenKind excpected, JSErrNum errorNumber) { + [[nodiscard]] bool mustMatchToken(TokenKind excpected, JSErrNum errorNumber) { return mustMatchToken(excpected, TokenStream::None, errorNumber); } template<typename ConditionT> - MOZ_MUST_USE bool mustMatchToken(ConditionT condition, JSErrNum errorNumber) { + [[nodiscard]] bool mustMatchToken(ConditionT condition, JSErrNum errorNumber) { return mustMatchTokenInternal(condition, TokenStream::None, [this, errorNumber](TokenKind) { this->error(errorNumber); @@ -1164,7 +1164,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_TYPE) } template<typename ErrorReportT> - MOZ_MUST_USE bool mustMatchToken(TokenKind expected, Modifier modifier, + [[nodiscard]] bool mustMatchToken(TokenKind expected, Modifier modifier, ErrorReportT errorReport) { return mustMatchTokenInternal([expected](TokenKind actual) { return actual == expected; @@ -1173,7 +1173,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_TYPE) } template<typename ErrorReportT> - MOZ_MUST_USE bool mustMatchToken(TokenKind expected, ErrorReportT errorReport) { + [[nodiscard]] bool mustMatchToken(TokenKind expected, ErrorReportT errorReport) { return mustMatchToken(expected, TokenStream::None, errorReport); } @@ -1519,13 +1519,13 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_TYPE) // The number of static class fields with computed property names. size_t staticFieldKeys = 0; }; - MOZ_MUST_USE bool classMember(YieldHandling yieldHandling, + [[nodiscard]] bool classMember(YieldHandling yieldHandling, const ParseContext::ClassStatement& classStmt, HandlePropertyName className, uint32_t classStartOffset, bool hasHeritage, ClassFields& classFields, ListNodeType& classMembers, bool* done); - MOZ_MUST_USE bool finishClassConstructor( + [[nodiscard]] bool finishClassConstructor( const ParseContext::ClassStatement& classStmt, HandlePropertyName className, bool hasHeritage, uint32_t classStartOffset, uint32_t classEndOffset, diff --git a/js/src/frontend/PropOpEmitter.h b/js/src/frontend/PropOpEmitter.h index 6c56a59f25..eb925c4f56 100644 --- a/js/src/frontend/PropOpEmitter.h +++ b/js/src/frontend/PropOpEmitter.h @@ -206,66 +206,66 @@ class MOZ_STACK_CLASS PropOpEmitter PropOpEmitter(BytecodeEmitter* bce, Kind kind, ObjKind objKind); private: - MOZ_MUST_USE bool isCall() const { + [[nodiscard]] bool isCall() const { return kind_ == Kind::Call; } - MOZ_MUST_USE bool isSuper() const { + [[nodiscard]] bool isSuper() const { return objKind_ == ObjKind::Super; } - MOZ_MUST_USE bool isSimpleAssignment() const { + [[nodiscard]] bool isSimpleAssignment() const { return kind_ == Kind::SimpleAssignment; } - MOZ_MUST_USE bool isPropInit() const { + [[nodiscard]] bool isPropInit() const { return kind_ == Kind::PropInit; } - MOZ_MUST_USE bool isDelete() const { + [[nodiscard]] bool isDelete() const { return kind_ == Kind::Delete; } - MOZ_MUST_USE bool isCompoundAssignment() const { + [[nodiscard]] bool isCompoundAssignment() const { return kind_ == Kind::CompoundAssignment; } - MOZ_MUST_USE bool isIncDec() const { + [[nodiscard]] bool isIncDec() const { return isPostIncDec() || isPreIncDec(); } - MOZ_MUST_USE bool isPostIncDec() const { + [[nodiscard]] bool isPostIncDec() const { return kind_ == Kind::PostIncrement || kind_ == Kind::PostDecrement; } - MOZ_MUST_USE bool isPreIncDec() const { + [[nodiscard]] bool isPreIncDec() const { return kind_ == Kind::PreIncrement || kind_ == Kind::PreDecrement; } - MOZ_MUST_USE bool isInc() const { + [[nodiscard]] bool isInc() const { return kind_ == Kind::PostIncrement || kind_ == Kind::PreIncrement; } - MOZ_MUST_USE bool + [[nodiscard]] bool prepareAtomIndex(JSAtom* prop); public: - MOZ_MUST_USE bool prepareForObj(); + [[nodiscard]] bool prepareForObj(); - MOZ_MUST_USE bool emitGet(JSAtom* prop); + [[nodiscard]] bool emitGet(JSAtom* prop); - MOZ_MUST_USE bool prepareForRhs(); - MOZ_MUST_USE bool skipObjAndRhs(); + [[nodiscard]] bool prepareForRhs(); + [[nodiscard]] bool skipObjAndRhs(); - MOZ_MUST_USE bool emitDelete(JSAtom* prop); + [[nodiscard]] bool emitDelete(JSAtom* prop); // `prop` can be nullptr for CompoundAssignment. - MOZ_MUST_USE bool emitAssignment(JSAtom* prop); + [[nodiscard]] bool emitAssignment(JSAtom* prop); - MOZ_MUST_USE bool emitIncDec(JSAtom* prop); + [[nodiscard]] bool emitIncDec(JSAtom* prop); }; } /* namespace frontend */ diff --git a/js/src/frontend/SwitchEmitter.h b/js/src/frontend/SwitchEmitter.h index 31dab1eb31..e4b916ffc1 100644 --- a/js/src/frontend/SwitchEmitter.h +++ b/js/src/frontend/SwitchEmitter.h @@ -256,16 +256,16 @@ class MOZ_STACK_CLASS SwitchEmitter void setInvalid() { valid_ = false; } - MOZ_MUST_USE bool isValid() const { + [[nodiscard]] bool isValid() const { return valid_; } - MOZ_MUST_USE bool isInvalid() const { + [[nodiscard]] bool isInvalid() const { return !valid_; } // Add the given number to the table. The number is the value of // `expr` for `case expr:` syntax. - MOZ_MUST_USE bool addNumber(int32_t caseValue); + [[nodiscard]] bool addNumber(int32_t caseValue); // Finish generating the table. // `caseCount` should be the number of cases in the switch statement, @@ -438,29 +438,29 @@ class MOZ_STACK_CLASS SwitchEmitter // switchPos // // Can be Nothing() if not available. - MOZ_MUST_USE bool emitDiscriminant(const mozilla::Maybe<uint32_t>& switchPos); + [[nodiscard]] bool emitDiscriminant(const mozilla::Maybe<uint32_t>& switchPos); // `caseCount` should be the number of cases in the switch statement, // excluding the default case. - MOZ_MUST_USE bool validateCaseCount(uint32_t caseCount); + [[nodiscard]] bool validateCaseCount(uint32_t caseCount); // `bindings` is a lexical scope for the entire switch, in case there's // let/const effectively directly under case or default blocks. - MOZ_MUST_USE bool emitLexical(Handle<LexicalScope::Data*> bindings); + [[nodiscard]] bool emitLexical(Handle<LexicalScope::Data*> bindings); - MOZ_MUST_USE bool emitCond(); - MOZ_MUST_USE bool emitTable(const TableGenerator& tableGen); + [[nodiscard]] bool emitCond(); + [[nodiscard]] bool emitTable(const TableGenerator& tableGen); - MOZ_MUST_USE bool emitCaseJump(); + [[nodiscard]] bool emitCaseJump(); - MOZ_MUST_USE bool emitCaseBody(); - MOZ_MUST_USE bool emitCaseBody(int32_t caseValue, const TableGenerator& tableGen); - MOZ_MUST_USE bool emitDefaultBody(); - MOZ_MUST_USE bool emitEnd(); + [[nodiscard]] bool emitCaseBody(); + [[nodiscard]] bool emitCaseBody(int32_t caseValue, const TableGenerator& tableGen); + [[nodiscard]] bool emitDefaultBody(); + [[nodiscard]] bool emitEnd(); private: - MOZ_MUST_USE bool emitCaseOrDefaultJump(uint32_t caseIndex, bool isDefault); - MOZ_MUST_USE bool emitImplicitDefault(); + [[nodiscard]] bool emitCaseOrDefaultJump(uint32_t caseIndex, bool isDefault); + [[nodiscard]] bool emitImplicitDefault(); }; } /* namespace frontend */ diff --git a/js/src/frontend/SyntaxParseHandler.h b/js/src/frontend/SyntaxParseHandler.h index 80ca13ce45..f0c4c5b360 100644 --- a/js/src/frontend/SyntaxParseHandler.h +++ b/js/src/frontend/SyntaxParseHandler.h @@ -306,8 +306,8 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) // Expressions ListNodeType newArrayLiteral(uint32_t begin) { return NodeUnparenthesizedArray; } - MOZ_MUST_USE bool addElision(ListNodeType literal, const TokenPos& pos) { return true; } - MOZ_MUST_USE bool addSpreadElement(ListNodeType literal, uint32_t begin, Node inner) { return true; } + [[nodiscard]] bool addElision(ListNodeType literal, const TokenPos& pos) { return true; } + [[nodiscard]] bool addSpreadElement(ListNodeType literal, uint32_t begin, Node inner) { return true; } void addArrayElement(ListNodeType literal, Node element) { } BinaryNodeType newCall(Node callee, Node args) { return NodeFunctionCall; } @@ -332,15 +332,15 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) NullaryNodeType newPosHolder(const TokenPos& pos) { return NodeGeneric; } UnaryNodeType newSuperBase(Node thisName, const TokenPos& pos) { return NodeSuperBase; } - MOZ_MUST_USE bool addPrototypeMutation(ListNodeType literal, uint32_t begin, Node expr) { return true; } - MOZ_MUST_USE bool addPropertyDefinition(ListNodeType literal, Node name, Node expr) { return true; } - MOZ_MUST_USE bool addShorthand(ListNodeType literal, NameNodeType name, NameNodeType expr) { return true; } - MOZ_MUST_USE bool addSpreadProperty(ListNodeType literal, uint32_t begin, Node inner) { return true; } - MOZ_MUST_USE bool addObjectMethodDefinition(ListNodeType literal, Node name, FunctionNodeType funNode, JSOp op) { return true; } - MOZ_MUST_USE Node newClassMethodDefinition(Node key, FunctionNodeType funNode, JSOp op, bool isStatic) { return NodeGeneric; } - MOZ_MUST_USE Node newClassFieldDefinition(Node name, FunctionNodeType initializer, bool isStatic) { return NodeGeneric; } - MOZ_MUST_USE Node newStaticClassBlock(FunctionNodeType block) { return NodeGeneric; } - MOZ_MUST_USE bool addClassMemberDefinition(ListNodeType memberList, Node member) { return true; } + [[nodiscard]] bool addPrototypeMutation(ListNodeType literal, uint32_t begin, Node expr) { return true; } + [[nodiscard]] bool addPropertyDefinition(ListNodeType literal, Node name, Node expr) { return true; } + [[nodiscard]] bool addShorthand(ListNodeType literal, NameNodeType name, NameNodeType expr) { return true; } + [[nodiscard]] bool addSpreadProperty(ListNodeType literal, uint32_t begin, Node inner) { return true; } + [[nodiscard]] bool addObjectMethodDefinition(ListNodeType literal, Node name, FunctionNodeType funNode, JSOp op) { return true; } + [[nodiscard]] Node newClassMethodDefinition(Node key, FunctionNodeType funNode, JSOp op, bool isStatic) { return NodeGeneric; } + [[nodiscard]] Node newClassFieldDefinition(Node name, FunctionNodeType initializer, bool isStatic) { return NodeGeneric; } + [[nodiscard]] Node newStaticClassBlock(FunctionNodeType block) { return NodeGeneric; } + [[nodiscard]] bool addClassMemberDefinition(ListNodeType memberList, Node member) { return true; } UnaryNodeType newYieldExpression(uint32_t begin, Node value) { return NodeGeneric; } UnaryNodeType newYieldStarExpression(uint32_t begin, Node value) { return NodeGeneric; } UnaryNodeType newAwaitExpression(uint32_t begin, Node value) { return NodeGeneric; } @@ -351,7 +351,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) ListNodeType newStatementList(const TokenPos& pos) { return NodeGeneric; } void addStatementToList(ListNodeType list, Node stmt) {} void addCaseStatementToList(ListNodeType list, CaseClauseType caseClause) {} - MOZ_MUST_USE bool prependInitialYield(ListNodeType stmtList, Node genName) { return true; } + [[nodiscard]] bool prependInitialYield(ListNodeType stmtList, Node genName) { return true; } UnaryNodeType newEmptyStatement(const TokenPos& pos) { return NodeEmptyStatement; } UnaryNodeType newExportDeclaration(Node kid, const TokenPos& pos) { @@ -419,10 +419,10 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) Node newOptionalPropertyByValue(Node pn, Node kid, uint32_t end) { return NodeOptionalElement; } - MOZ_MUST_USE bool addCatchBlock(ListNodeType catchList, LexicalScopeNodeType lexicalScope, + [[nodiscard]] bool addCatchBlock(ListNodeType catchList, LexicalScopeNodeType lexicalScope, Node catchBinding, Node catchGuard, Node catchBody) { return true; } - MOZ_MUST_USE bool setLastFunctionFormalParameterDefault(FunctionNodeType funNode, Node pn) { return true; } + [[nodiscard]] bool setLastFunctionFormalParameterDefault(FunctionNodeType funNode, Node pn) { return true; } void checkAndSetIsDirectRHSAnonFunction(Node pn) {} @@ -458,7 +458,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return NodeGeneric; } - MOZ_MUST_USE bool finishInitializerAssignment(NameNodeType nameNode, Node init) { return true; } + [[nodiscard]] bool finishInitializerAssignment(NameNodeType nameNode, Node init) { return true; } void setBeginPosition(Node pn, Node oth) {} void setBeginPosition(Node pn, uint32_t begin) {} @@ -577,7 +577,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) void setOp(Node pn, JSOp op) {} void setListHasNonConstInitializer(ListNodeType literal) {} - MOZ_MUST_USE Node parenthesize(Node node) { + [[nodiscard]] Node parenthesize(Node node) { // A number of nodes have different behavior upon parenthesization, but // only in some circumstances. Convert these nodes to special // parenthesized forms. @@ -608,7 +608,7 @@ FOR_EACH_PARSENODE_SUBCLASS(DECLARE_AS) return node; } template <typename NodeType> - MOZ_MUST_USE NodeType setLikelyIIFE(NodeType node) { + [[nodiscard]] NodeType setLikelyIIFE(NodeType node) { return node; // Remain in syntax-parse mode. } void setInDirectivePrologue(UnaryNodeType exprStmt) {} diff --git a/js/src/frontend/TDZCheckCache.h b/js/src/frontend/TDZCheckCache.h index 0de53ae1e5..ffc4812da8 100644 --- a/js/src/frontend/TDZCheckCache.h +++ b/js/src/frontend/TDZCheckCache.h @@ -39,13 +39,13 @@ class TDZCheckCache : public Nestable<TDZCheckCache> { PooledMapPtr<CheckTDZMap> cache_; - MOZ_MUST_USE bool ensureCache(BytecodeEmitter* bce); + [[nodiscard]] bool ensureCache(BytecodeEmitter* bce); public: explicit TDZCheckCache(BytecodeEmitter* bce); mozilla::Maybe<MaybeCheckTDZ> needsTDZCheck(BytecodeEmitter* bce, JSAtom* name); - MOZ_MUST_USE bool noteTDZCheck(BytecodeEmitter* bce, JSAtom* name, MaybeCheckTDZ check); + [[nodiscard]] bool noteTDZCheck(BytecodeEmitter* bce, JSAtom* name, MaybeCheckTDZ check); }; } /* namespace frontend */ diff --git a/js/src/frontend/TokenKind.h b/js/src/frontend/TokenKind.h index 3e1ff68bbd..c1deb0b67b 100644 --- a/js/src/frontend/TokenKind.h +++ b/js/src/frontend/TokenKind.h @@ -283,7 +283,7 @@ TokenKindIsAssignment(TokenKind tt) return TOK_ASSIGNMENT_START <= tt && tt <= TOK_ASSIGNMENT_LAST; } -inline MOZ_MUST_USE bool +[[nodiscard]] inline bool TokenKindIsKeyword(TokenKind tt) { return (TOK_KEYWORD_FIRST <= tt && tt <= TOK_KEYWORD_LAST) || @@ -291,31 +291,31 @@ TokenKindIsKeyword(TokenKind tt) (TOK_KEYWORD_UNOP_FIRST <= tt && tt <= TOK_KEYWORD_UNOP_LAST); } -inline MOZ_MUST_USE bool +[[nodiscard]] inline bool TokenKindIsContextualKeyword(TokenKind tt) { return TOK_CONTEXTUAL_KEYWORD_FIRST <= tt && tt <= TOK_CONTEXTUAL_KEYWORD_LAST; } -inline MOZ_MUST_USE bool +[[nodiscard]] inline bool TokenKindIsFutureReservedWord(TokenKind tt) { return TOK_FUTURE_RESERVED_KEYWORD_FIRST <= tt && tt <= TOK_FUTURE_RESERVED_KEYWORD_LAST; } -inline MOZ_MUST_USE bool +[[nodiscard]] inline bool TokenKindIsStrictReservedWord(TokenKind tt) { return TOK_STRICT_RESERVED_KEYWORD_FIRST <= tt && tt <= TOK_STRICT_RESERVED_KEYWORD_LAST; } -inline MOZ_MUST_USE bool +[[nodiscard]] inline bool TokenKindIsReservedWordLiteral(TokenKind tt) { return TOK_RESERVED_WORD_LITERAL_FIRST <= tt && tt <= TOK_RESERVED_WORD_LITERAL_LAST; } -inline MOZ_MUST_USE bool +[[nodiscard]] inline bool TokenKindIsReservedWord(TokenKind tt) { return TokenKindIsKeyword(tt) || @@ -323,7 +323,7 @@ TokenKindIsReservedWord(TokenKind tt) TokenKindIsReservedWordLiteral(tt); } -inline MOZ_MUST_USE bool +[[nodiscard]] inline bool TokenKindIsPossibleIdentifier(TokenKind tt) { return tt == TOK_NAME || @@ -332,7 +332,7 @@ TokenKindIsPossibleIdentifier(TokenKind tt) TokenKindIsStrictReservedWord(tt); } -inline MOZ_MUST_USE bool +[[nodiscard]] inline bool TokenKindIsPossibleIdentifierName(TokenKind tt) { return TokenKindIsPossibleIdentifier(tt) || diff --git a/js/src/frontend/TokenStream.h b/js/src/frontend/TokenStream.h index e7a3f7b808..3a8053cc05 100644 --- a/js/src/frontend/TokenStream.h +++ b/js/src/frontend/TokenStream.h @@ -328,7 +328,7 @@ class MOZ_STACK_CLASS TokenStream ~TokenStream(); - MOZ_MUST_USE bool checkOptions(); + [[nodiscard]] bool checkOptions(); // Accessors. const Token& currentToken() const { return tokens[cursor]; } @@ -411,7 +411,7 @@ class MOZ_STACK_CLASS TokenStream void errorAt(uint32_t offset, unsigned errorNumber, ...); // Warn at the current offset. - MOZ_MUST_USE bool warning(unsigned errorNumber, ...); + [[nodiscard]] bool warning(unsigned errorNumber, ...); static const uint32_t NoOffset = UINT32_MAX; @@ -490,7 +490,7 @@ class MOZ_STACK_CLASS TokenStream } static JSAtom* atomize(ExclusiveContext* cx, CharBuffer& cb); - MOZ_MUST_USE bool putIdentInTokenbuf(const char16_t* identStart); + [[nodiscard]] bool putIdentInTokenbuf(const char16_t* identStart); struct Flags { @@ -586,7 +586,7 @@ class MOZ_STACK_CLASS TokenStream // Advance to the next token. If the token stream encountered an error, // return false. Otherwise return true and store the token kind in |*ttp|. - MOZ_MUST_USE bool getToken(TokenKind* ttp, Modifier modifier = None) { + [[nodiscard]] bool getToken(TokenKind* ttp, Modifier modifier = None) { // Check for a pushed-back token resulting from mismatching lookahead. if (lookahead != 0) { MOZ_ASSERT(!flags.hadError); @@ -609,7 +609,7 @@ class MOZ_STACK_CLASS TokenStream cursor = (cursor - 1) & ntokensMask; } - MOZ_MUST_USE bool peekToken(TokenKind* ttp, Modifier modifier = None) { + [[nodiscard]] bool peekToken(TokenKind* ttp, Modifier modifier = None) { if (lookahead > 0) { MOZ_ASSERT(!flags.hadError); verifyConsistentModifier(modifier, nextToken()); @@ -622,7 +622,7 @@ class MOZ_STACK_CLASS TokenStream return true; } - MOZ_MUST_USE bool peekTokenPos(TokenPos* posp, Modifier modifier = None) { + [[nodiscard]] bool peekTokenPos(TokenPos* posp, Modifier modifier = None) { if (lookahead == 0) { TokenKind tt; if (!getTokenInternal(&tt, modifier)) @@ -637,7 +637,7 @@ class MOZ_STACK_CLASS TokenStream return true; } - MOZ_MUST_USE bool peekOffset(uint32_t* offset, Modifier modifier = None) { + [[nodiscard]] bool peekOffset(uint32_t* offset, Modifier modifier = None) { TokenPos pos; if (!peekTokenPos(&pos, modifier)) return false; @@ -651,7 +651,7 @@ class MOZ_STACK_CLASS TokenStream // TOK_EOL is actually created, just a TOK_EOL TokenKind is returned, and // currentToken() shouldn't be consulted. (This is the only place TOK_EOL // is produced.) - MOZ_ALWAYS_INLINE MOZ_MUST_USE bool + [[nodiscard]] MOZ_ALWAYS_INLINE bool peekTokenSameLine(TokenKind* ttp, Modifier modifier = None) { const Token& curr = currentToken(); @@ -692,7 +692,7 @@ class MOZ_STACK_CLASS TokenStream } // Get the next token from the stream if its kind is |tt|. - MOZ_MUST_USE bool matchToken(bool* matchedp, TokenKind tt, Modifier modifier = None) { + [[nodiscard]] bool matchToken(bool* matchedp, TokenKind tt, Modifier modifier = None) { TokenKind token; if (!getToken(&token, modifier)) return false; @@ -712,7 +712,7 @@ class MOZ_STACK_CLASS TokenStream MOZ_ALWAYS_TRUE(matched); } - MOZ_MUST_USE bool nextTokenEndsExpr(bool* endsExpr) { + [[nodiscard]] bool nextTokenEndsExpr(bool* endsExpr) { TokenKind tt; if (!peekToken(&tt)) return false; @@ -743,10 +743,10 @@ class MOZ_STACK_CLASS TokenStream Token lookaheadTokens[maxLookahead]; }; - MOZ_MUST_USE bool advance(size_t position); + [[nodiscard]] bool advance(size_t position); void tell(Position*); void seek(const Position& pos); - MOZ_MUST_USE bool seek(const Position& pos, const TokenStream& other); + [[nodiscard]] bool seek(const Position& pos, const TokenStream& other); #ifdef DEBUG inline bool debugHasNoLookahead() const { return lookahead == 0; @@ -830,8 +830,8 @@ class MOZ_STACK_CLASS TokenStream public: SourceCoords(ExclusiveContext* cx, uint32_t ln); - MOZ_MUST_USE bool add(uint32_t lineNum, uint32_t lineStartOffset); - MOZ_MUST_USE bool fill(const SourceCoords& other); + [[nodiscard]] bool add(uint32_t lineNum, uint32_t lineStartOffset); + [[nodiscard]] bool fill(const SourceCoords& other); bool isOnThisLine(uint32_t offset, uint32_t lineNum, bool* onThisLine) const { uint32_t lineIndex = lineNumToIndex(lineNum); @@ -970,9 +970,9 @@ class MOZ_STACK_CLASS TokenStream const char16_t* ptr; // next char to get }; - MOZ_MUST_USE bool getTokenInternal(TokenKind* ttp, Modifier modifier); + [[nodiscard]] bool getTokenInternal(TokenKind* ttp, Modifier modifier); - MOZ_MUST_USE bool getStringOrTemplateToken(int untilChar, Token** tp); + [[nodiscard]] bool getStringOrTemplateToken(int untilChar, Token** tp); int32_t getChar(); int32_t getCharIgnoreEOL(); @@ -986,13 +986,13 @@ class MOZ_STACK_CLASS TokenStream bool matchTrailForLeadSurrogate(char16_t lead, char16_t* trail, uint32_t* codePoint); bool peekChars(int n, char16_t* cp); - MOZ_MUST_USE bool getDirectives(bool isMultiline, bool shouldWarnDeprecated); - MOZ_MUST_USE bool getDirective(bool isMultiline, bool shouldWarnDeprecated, + [[nodiscard]] bool getDirectives(bool isMultiline, bool shouldWarnDeprecated); + [[nodiscard]] bool getDirective(bool isMultiline, bool shouldWarnDeprecated, const char* directive, uint8_t directiveLength, const char* errorMsgPragma, UniquePtr<char16_t[], JS::FreePolicy>* destination); - MOZ_MUST_USE bool getDisplayURL(bool isMultiline, bool shouldWarnDeprecated); - MOZ_MUST_USE bool getSourceMappingURL(bool isMultiline, bool shouldWarnDeprecated); + [[nodiscard]] bool getDisplayURL(bool isMultiline, bool shouldWarnDeprecated); + [[nodiscard]] bool getSourceMappingURL(bool isMultiline, bool shouldWarnDeprecated); // |expect| cannot be an EOL char. bool matchChar(int32_t expect) { @@ -1006,7 +1006,7 @@ class MOZ_STACK_CLASS TokenStream MOZ_ASSERT(c == expect); } - MOZ_MUST_USE bool peekChar(int32_t* c) { + [[nodiscard]] bool peekChar(int32_t* c) { *c = getChar(); ungetChar(*c); return true; diff --git a/js/src/frontend/TryEmitter.h b/js/src/frontend/TryEmitter.h index c852e3556d..58f9af5e57 100644 --- a/js/src/frontend/TryEmitter.h +++ b/js/src/frontend/TryEmitter.h @@ -95,19 +95,19 @@ class MOZ_STACK_CLASS TryEmitter TryEmitter(BytecodeEmitter* bce, Kind kind, ShouldUseRetVal retValKind = UseRetVal, ShouldUseControl controlKind = UseControl); - MOZ_MUST_USE bool emitJumpOverCatchAndFinally(); + [[nodiscard]] bool emitJumpOverCatchAndFinally(); - MOZ_MUST_USE bool emitTry(); - MOZ_MUST_USE bool emitCatch(); + [[nodiscard]] bool emitTry(); + [[nodiscard]] bool emitCatch(); - MOZ_MUST_USE bool emitFinally(const mozilla::Maybe<uint32_t>& finallyPos = mozilla::Nothing()); + [[nodiscard]] bool emitFinally(const mozilla::Maybe<uint32_t>& finallyPos = mozilla::Nothing()); - MOZ_MUST_USE bool emitEnd(); + [[nodiscard]] bool emitEnd(); private: - MOZ_MUST_USE bool emitTryEnd(); - MOZ_MUST_USE bool emitCatchEnd(bool hasNext); - MOZ_MUST_USE bool emitFinallyEnd(); + [[nodiscard]] bool emitTryEnd(); + [[nodiscard]] bool emitCatchEnd(bool hasNext); + [[nodiscard]] bool emitFinallyEnd(); }; } /* namespace frontend */ diff --git a/js/src/gc/GCRuntime.h b/js/src/gc/GCRuntime.h index cf2f7b036a..a7080bac94 100644 --- a/js/src/gc/GCRuntime.h +++ b/js/src/gc/GCRuntime.h @@ -217,7 +217,7 @@ class GCSchedulingTunables unsigned minEmptyChunkCount(const AutoLockGC&) const { return minEmptyChunkCount_; } unsigned maxEmptyChunkCount() const { return maxEmptyChunkCount_; } - MOZ_MUST_USE bool setParameter(JSGCParamKey key, uint32_t value, const AutoLockGC& lock); + [[nodiscard]] bool setParameter(JSGCParamKey key, uint32_t value, const AutoLockGC& lock); }; /* @@ -599,18 +599,18 @@ class GCRuntime { public: explicit GCRuntime(JSRuntime* rt); - MOZ_MUST_USE bool init(uint32_t maxbytes, uint32_t maxNurseryBytes); + [[nodiscard]] bool init(uint32_t maxbytes, uint32_t maxNurseryBytes); void finishRoots(); void finish(); - MOZ_MUST_USE bool addRoot(Value* vp, const char* name); + [[nodiscard]] bool addRoot(Value* vp, const char* name); void removeRoot(Value* vp); void setMarkStackLimit(size_t limit, AutoLockGC& lock); - MOZ_MUST_USE bool setParameter(JSGCParamKey key, uint32_t value, AutoLockGC& lock); + [[nodiscard]] bool setParameter(JSGCParamKey key, uint32_t value, AutoLockGC& lock); uint32_t getParameter(JSGCParamKey key, const AutoLockGC& lock); - MOZ_MUST_USE bool triggerGC(JS::gcreason::Reason reason); + [[nodiscard]] bool triggerGC(JS::gcreason::Reason reason); void maybeAllocTriggerZoneGC(Zone* zone, const AutoLockGC& lock); // The return value indicates if we were able to do the GC. bool triggerZoneGC(Zone* zone, JS::gcreason::Reason reason); @@ -746,7 +746,7 @@ class GCRuntime static bool initializeSweepActions(); void setGrayRootsTracer(JSTraceDataOp traceOp, void* data); - MOZ_MUST_USE bool addBlackRootsTracer(JSTraceDataOp traceOp, void* data); + [[nodiscard]] bool addBlackRootsTracer(JSTraceDataOp traceOp, void* data); void removeBlackRootsTracer(JSTraceDataOp traceOp, void* data); void setMaxMallocBytes(size_t value); @@ -763,12 +763,12 @@ class GCRuntime void setObjectsTenuredCallback(JSObjectsTenuredCallback callback, void* data); void callObjectsTenuredCallback(); - MOZ_MUST_USE bool addFinalizeCallback(JSFinalizeCallback callback, void* data); + [[nodiscard]] bool addFinalizeCallback(JSFinalizeCallback callback, void* data); void removeFinalizeCallback(JSFinalizeCallback func); - MOZ_MUST_USE bool addWeakPointerZoneGroupCallback(JSWeakPointerZoneGroupCallback callback, + [[nodiscard]] bool addWeakPointerZoneGroupCallback(JSWeakPointerZoneGroupCallback callback, void* data); void removeWeakPointerZoneGroupCallback(JSWeakPointerZoneGroupCallback callback); - MOZ_MUST_USE bool addWeakPointerCompartmentCallback(JSWeakPointerCompartmentCallback callback, + [[nodiscard]] bool addWeakPointerCompartmentCallback(JSWeakPointerCompartmentCallback callback, void* data); void removeWeakPointerCompartmentCallback(JSWeakPointerCompartmentCallback callback); JS::GCSliceCallback setSliceCallback(JS::GCSliceCallback callback); @@ -859,7 +859,7 @@ class GCRuntime // Allocator template <AllowGC allowGC> - MOZ_MUST_USE bool checkAllocatorState(JSContext* cx, AllocKind kind); + [[nodiscard]] bool checkAllocatorState(JSContext* cx, AllocKind kind); template <AllowGC allowGC> JSObject* tryNewNurseryObject(JSContext* cx, size_t thingSize, size_t nDynamicSlots, const Class* clasp); @@ -880,7 +880,7 @@ class GCRuntime void arenaAllocatedDuringGC(JS::Zone* zone, Arena* arena); // Allocator internals - MOZ_MUST_USE bool gcIfNeededPerAllocation(JSContext* cx); + [[nodiscard]] bool gcIfNeededPerAllocation(JSContext* cx); template <typename T> static void checkIncrementalZoneState(ExclusiveContext* cx, T* t); static TenuredCell* refillFreeListFromAnyThread(ExclusiveContext* cx, AllocKind thingKind, @@ -915,18 +915,18 @@ class GCRuntime // Check if the system state is such that GC has been supressed // or otherwise delayed. - MOZ_MUST_USE bool checkIfGCAllowedInCurrentState(JS::gcreason::Reason reason); + [[nodiscard]] bool checkIfGCAllowedInCurrentState(JS::gcreason::Reason reason); gcstats::ZoneGCStats scanZonesBeforeGC(); void collect(bool nonincrementalByAPI, SliceBudget budget, JS::gcreason::Reason reason) JS_HAZ_GC_CALL; - MOZ_MUST_USE bool gcCycle(bool nonincrementalByAPI, SliceBudget& budget, + [[nodiscard]] bool gcCycle(bool nonincrementalByAPI, SliceBudget& budget, JS::gcreason::Reason reason); bool shouldRepeatForDeadZone(JS::gcreason::Reason reason); void incrementalCollectSlice(SliceBudget& budget, JS::gcreason::Reason reason, AutoLockForExclusiveAccess& lock); void purgeRuntime(AutoLockForExclusiveAccess& lock); - MOZ_MUST_USE bool beginMarkPhase(JS::gcreason::Reason reason, AutoLockForExclusiveAccess& lock); + [[nodiscard]] bool beginMarkPhase(JS::gcreason::Reason reason, AutoLockForExclusiveAccess& lock); bool shouldPreserveJITCode(JSCompartment* comp, int64_t currentTime, JS::gcreason::Reason reason, bool canAllocateMoreCode); void traceRuntimeForMajorGC(JSTracer* trc, AutoLockForExclusiveAccess& lock); @@ -947,7 +947,7 @@ class GCRuntime void beginSweepPhase(bool lastGC, AutoLockForExclusiveAccess& lock); void findZoneGroups(AutoLockForExclusiveAccess& lock); - MOZ_MUST_USE bool findInterZoneEdges(); + [[nodiscard]] bool findInterZoneEdges(); void getNextZoneGroup(); void endMarkingZoneGroup(); void beginSweepingZoneGroup(AutoLockForExclusiveAccess& lock); @@ -976,7 +976,7 @@ class GCRuntime void endCompactPhase(JS::gcreason::Reason reason); void sweepTypesAfterCompacting(Zone* zone); void sweepZoneAfterCompacting(Zone* zone); - MOZ_MUST_USE bool relocateArenas(Zone* zone, JS::gcreason::Reason reason, + [[nodiscard]] bool relocateArenas(Zone* zone, JS::gcreason::Reason reason, Arena*& relocatedListOut, SliceBudget& sliceBudget); void updateTypeDescrObjects(MovingTracer* trc, Zone* zone); void updateCellPointers(MovingTracer* trc, Zone* zone, AllocKinds kinds, size_t bgTaskCount); diff --git a/js/src/gc/GCTrace.h b/js/src/gc/GCTrace.h index 4ebb74ee6f..14d684f63d 100644 --- a/js/src/gc/GCTrace.h +++ b/js/src/gc/GCTrace.h @@ -16,7 +16,7 @@ namespace gc { #ifdef JS_GC_TRACE -extern MOZ_MUST_USE bool InitTrace(GCRuntime& gc); +[[nodiscard]] extern bool InitTrace(GCRuntime& gc); extern void FinishTrace(); extern bool TraceEnabled(); extern void TraceNurseryAlloc(Cell* thing, size_t size); @@ -32,7 +32,7 @@ extern void TraceTypeNewScript(js::ObjectGroup* group); #else -inline MOZ_MUST_USE bool InitTrace(GCRuntime& gc) { return true; } +[[nodiscard]] inline bool InitTrace(GCRuntime& gc) { return true; } inline void FinishTrace() {} inline bool TraceEnabled() { return false; } inline void TraceNurseryAlloc(Cell* thing, size_t size) {} diff --git a/js/src/gc/Heap.h b/js/src/gc/Heap.h index 3e14ed906f..b24896d100 100644 --- a/js/src/gc/Heap.h +++ b/js/src/gc/Heap.h @@ -1020,7 +1020,7 @@ struct Chunk void releaseArena(JSRuntime* rt, Arena* arena, const AutoLockGC& lock); void recycleArena(Arena* arena, SortedArenaList& dest, size_t thingsPerArena); - MOZ_MUST_USE bool decommitOneFreeArena(JSRuntime* rt, AutoLockGC& lock); + [[nodiscard]] bool decommitOneFreeArena(JSRuntime* rt, AutoLockGC& lock); void decommitAllArenasWithoutUnlocking(const AutoLockGC& lock); static Chunk* allocate(JSRuntime* rt); diff --git a/js/src/gc/Marking.h b/js/src/gc/Marking.h index 414079f799..8d5f353a54 100644 --- a/js/src/gc/Marking.h +++ b/js/src/gc/Marking.h @@ -86,13 +86,13 @@ class MarkStack end_ = stack + capacity; } - MOZ_MUST_USE bool init(JSGCMode gcMode); + [[nodiscard]] bool init(JSGCMode gcMode); void setBaseCapacity(JSGCMode mode); size_t maxCapacity() const { return maxCapacity_; } void setMaxCapacity(size_t maxCapacity); - MOZ_MUST_USE bool push(uintptr_t item) { + [[nodiscard]] bool push(uintptr_t item) { if (tos_ == end_) { if (!enlarge(1)) return false; @@ -102,7 +102,7 @@ class MarkStack return true; } - MOZ_MUST_USE bool push(uintptr_t item1, uintptr_t item2, uintptr_t item3) { + [[nodiscard]] bool push(uintptr_t item1, uintptr_t item2, uintptr_t item3) { uintptr_t* nextTos = tos_ + 3; if (nextTos > end_) { if (!enlarge(3)) @@ -129,7 +129,7 @@ class MarkStack void reset(); /* Grow the stack, ensuring there is space for at least count elements. */ - MOZ_MUST_USE bool enlarge(unsigned count); + [[nodiscard]] bool enlarge(unsigned count); void setGCMode(JSGCMode gcMode); @@ -169,7 +169,7 @@ class GCMarker : public JSTracer { public: explicit GCMarker(JSRuntime* rt); - MOZ_MUST_USE bool init(JSGCMode gcMode); + [[nodiscard]] bool init(JSGCMode gcMode); void setMaxCapacity(size_t maxCap) { stack.setMaxCapacity(maxCap); } size_t maxCapacity() const { return stack.maxCapacity(); } @@ -217,7 +217,7 @@ class GCMarker : public JSTracer void delayMarkingArena(gc::Arena* arena); void delayMarkingChildren(const void* thing); void markDelayedChildren(gc::Arena* arena); - MOZ_MUST_USE bool markDelayedChildren(SliceBudget& budget); + [[nodiscard]] bool markDelayedChildren(SliceBudget& budget); bool hasDelayedChildren() const { return !!unmarkedArenaStackTop; } @@ -226,7 +226,7 @@ class GCMarker : public JSTracer return isMarkStackEmpty() && !unmarkedArenaStackTop; } - MOZ_MUST_USE bool drainMarkStack(SliceBudget& budget); + [[nodiscard]] bool drainMarkStack(SliceBudget& budget); void setGCMode(JSGCMode mode) { stack.setGCMode(mode); } @@ -291,7 +291,7 @@ class GCMarker : public JSTracer // Mark the given GC thing, but do not trace its children. Return true // if the thing became marked. template <typename T> - MOZ_MUST_USE bool mark(T* thing); + [[nodiscard]] bool mark(T* thing); void pushTaggedPtr(StackTag tag, void* ptr) { checkZone(ptr); @@ -321,7 +321,7 @@ class GCMarker : public JSTracer return stack.isEmpty(); } - MOZ_MUST_USE bool restoreValueArray(JSObject* obj, void** vpp, void** endp); + [[nodiscard]] bool restoreValueArray(JSObject* obj, void** vpp, void** endp); void saveValueRanges(); inline void processMarkStackTop(SliceBudget& budget); diff --git a/js/src/gc/Nursery.h b/js/src/gc/Nursery.h index 2935890c03..621b07dcaa 100644 --- a/js/src/gc/Nursery.h +++ b/js/src/gc/Nursery.h @@ -133,7 +133,7 @@ class Nursery explicit Nursery(JSRuntime* rt); ~Nursery(); - MOZ_MUST_USE bool init(uint32_t maxNurseryBytes, AutoLockGC& lock); + [[nodiscard]] bool init(uint32_t maxNurseryBytes, AutoLockGC& lock); unsigned maxChunks() const { return maxNurseryChunks_; } unsigned numChunks() const { return chunks_.length(); } @@ -198,7 +198,7 @@ class Nursery * sets |*ref| to the new location of the object and returns true. Otherwise * returns false and leaves |*ref| unset. */ - MOZ_ALWAYS_INLINE MOZ_MUST_USE bool getForwardedPointer(JSObject** ref) const; + [[nodiscard]] MOZ_ALWAYS_INLINE bool getForwardedPointer(JSObject** ref) const; /* Forward a slots/elements pointer stored in an Ion frame. */ void forwardBufferPointer(HeapSlot** pSlotsElems); @@ -215,7 +215,7 @@ class Nursery void waitBackgroundFreeEnd(); - MOZ_MUST_USE bool addedUniqueIdToCell(gc::Cell* cell) { + [[nodiscard]] bool addedUniqueIdToCell(gc::Cell* cell) { if (!IsInsideNursery(cell) || !isEnabled()) return true; MOZ_ASSERT(cellsWithUid_.initialized()); @@ -226,7 +226,7 @@ class Nursery using SweepThunk = void (*)(void *data); void queueSweepAction(SweepThunk thunk, void* data); - MOZ_MUST_USE bool queueDictionaryModeObjectToSweep(NativeObject* obj); + [[nodiscard]] bool queueDictionaryModeObjectToSweep(NativeObject* obj); size_t sizeOfHeapCommitted() const { return numChunks() * gc::ChunkSize; diff --git a/js/src/gc/NurseryAwareHashMap.h b/js/src/gc/NurseryAwareHashMap.h index 9f9486deaa..9f24e51616 100644 --- a/js/src/gc/NurseryAwareHashMap.h +++ b/js/src/gc/NurseryAwareHashMap.h @@ -83,7 +83,7 @@ class NurseryAwareHashMap explicit NurseryAwareHashMap(AllocPolicy a = AllocPolicy()) : map(a) {} - MOZ_MUST_USE bool init(uint32_t len = 16) { return map.init(len); } + [[nodiscard]] bool init(uint32_t len = 16) { return map.init(len); } bool empty() const { return map.empty(); } Ptr lookup(const Lookup& l) const { return map.lookup(l); } @@ -99,7 +99,7 @@ class NurseryAwareHashMap return map.sizeOfIncludingThis(mallocSizeOf); } - MOZ_MUST_USE bool put(const Key& k, const Value& v) { + [[nodiscard]] bool put(const Key& k, const Value& v) { auto p = map.lookupForAdd(k); if (p) { if (!JS::GCPolicy<Key>::isTenured(k) || !JS::GCPolicy<Value>::isTenured(v)) { diff --git a/js/src/gc/Statistics.h b/js/src/gc/Statistics.h index 9e28be9f97..6eaac75649 100644 --- a/js/src/gc/Statistics.h +++ b/js/src/gc/Statistics.h @@ -184,7 +184,7 @@ struct Statistics /* Create a convenient type for referring to tables of phase times. */ using PhaseTimeTable = int64_t[NumTimingArrays][PHASE_LIMIT]; - static MOZ_MUST_USE bool initialize(); + [[nodiscard]] static bool initialize(); explicit Statistics(JSRuntime* rt); ~Statistics(); @@ -213,8 +213,8 @@ struct Statistics SliceBudget budget, JS::gcreason::Reason reason); void endSlice(); - MOZ_MUST_USE bool startTimingMutator(); - MOZ_MUST_USE bool stopTimingMutator(double& mutator_ms, double& gc_ms); + [[nodiscard]] bool startTimingMutator(); + [[nodiscard]] bool stopTimingMutator(double& mutator_ms, double& gc_ms); // Note when we sweep a zone or compartment. void sweptZone() { ++zoneStats.sweptZoneCount; } diff --git a/js/src/gc/StoreBuffer.h b/js/src/gc/StoreBuffer.h index f9158ef9c2..053a203f65 100644 --- a/js/src/gc/StoreBuffer.h +++ b/js/src/gc/StoreBuffer.h @@ -79,7 +79,7 @@ class StoreBuffer explicit MonoTypeBuffer() : last_(T()) {} ~MonoTypeBuffer() { stores_.finish(); } - MOZ_MUST_USE bool init() { + [[nodiscard]] bool init() { if (!stores_.initialized() && !stores_.init()) return false; clear(); @@ -146,7 +146,7 @@ class StoreBuffer explicit GenericBuffer() : storage_(nullptr) {} ~GenericBuffer() { js_delete(storage_); } - MOZ_MUST_USE bool init() { + [[nodiscard]] bool init() { if (!storage_) storage_ = js_new<LifoAlloc>(LifoAllocBlockSize); clear(); @@ -387,7 +387,7 @@ class StoreBuffer { } - MOZ_MUST_USE bool enable(); + [[nodiscard]] bool enable(); void disable(); bool isEnabled() const { return enabled_; } diff --git a/js/src/gc/Zone.h b/js/src/gc/Zone.h index 323aa27758..6b5edbdcac 100644 --- a/js/src/gc/Zone.h +++ b/js/src/gc/Zone.h @@ -140,7 +140,7 @@ struct Zone : public JS::shadow::Zone, { explicit Zone(JSRuntime* rt); ~Zone(); - MOZ_MUST_USE bool init(bool isSystem); + [[nodiscard]] bool init(bool isSystem); void findOutgoingEdges(js::gc::ZoneComponentFinder& finder); @@ -172,7 +172,7 @@ struct Zone : public JS::shadow::Zone, bool isTooMuchMalloc() const { return gcMallocBytes <= 0; } void onTooMuchMalloc(); - MOZ_MUST_USE void* onOutOfMemory(js::AllocFunction allocFunc, size_t nbytes, + [[nodiscard]] void* onOutOfMemory(js::AllocFunction allocFunc, size_t nbytes, void* reallocPtr = nullptr) { if (!js::CurrentThreadCanAccessRuntime(runtime_)) return nullptr; @@ -422,7 +422,7 @@ struct Zone : public JS::shadow::Zone, } // Creates a HashNumber based on getUniqueId. Returns false on OOM. - MOZ_MUST_USE bool getHashCode(js::gc::Cell* cell, js::HashNumber* hashp) { + [[nodiscard]] bool getHashCode(js::gc::Cell* cell, js::HashNumber* hashp) { uint64_t uid; if (!getUniqueId(cell, &uid)) return false; @@ -432,7 +432,7 @@ struct Zone : public JS::shadow::Zone, // Puts an existing UID in |uidp|, or creates a new UID for this Cell and // puts that into |uidp|. Returns false on OOM. - MOZ_MUST_USE bool getUniqueId(js::gc::Cell* cell, uint64_t* uidp) { + [[nodiscard]] bool getUniqueId(js::gc::Cell* cell, uint64_t* uidp) { MOZ_ASSERT(uidp); MOZ_ASSERT(js::CurrentThreadCanAccessZone(this)); @@ -472,7 +472,7 @@ struct Zone : public JS::shadow::Zone, } // Return true if this cell has a UID associated with it. - MOZ_MUST_USE bool hasUniqueId(js::gc::Cell* cell) { + [[nodiscard]] bool hasUniqueId(js::gc::Cell* cell) { MOZ_ASSERT(js::CurrentThreadCanAccessZone(this)); return uniqueIds_.has(cell); } @@ -731,7 +731,7 @@ class ZoneAllocPolicy void free_(void* p) { js_free(p); } void reportAllocOverflow() const {} - MOZ_MUST_USE bool checkSimulatedOOM() const { + [[nodiscard]] bool checkSimulatedOOM() const { return !js::oom::ShouldFailWithOOM(); } }; diff --git a/js/src/irregexp/InfallibleVector.h b/js/src/irregexp/InfallibleVector.h index eafa576acf..4172a55956 100644 --- a/js/src/irregexp/InfallibleVector.h +++ b/js/src/irregexp/InfallibleVector.h @@ -1,6 +1,7 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-// Copyright 2012 the V8 project authors. All rights reserved.
+// Copyright 2012 the V8 project authors.
+// Copyright 2023 Moonchild Productions.
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
@@ -38,7 +39,7 @@ namespace irregexp { // InfallibleVector is like Vector, but all its methods are infallible (they
// crash on OOM). We use this class instead of Vector to avoid a ton of
-// MOZ_MUST_USE warnings in irregexp code (imported from V8).
+// [[nodiscard]] warnings in irregexp code (imported from V8).
template<typename T, size_t N>
class InfallibleVector
{
diff --git a/js/src/jit/AliasAnalysis.h b/js/src/jit/AliasAnalysis.h index 778bab4946..7370c7e693 100644 --- a/js/src/jit/AliasAnalysis.h +++ b/js/src/jit/AliasAnalysis.h @@ -21,7 +21,7 @@ class AliasAnalysis : public AliasAnalysisShared public: AliasAnalysis(MIRGenerator* mir, MIRGraph& graph); - MOZ_MUST_USE bool analyze() override; + [[nodiscard]] bool analyze() override; }; } // namespace jit diff --git a/js/src/jit/AliasAnalysisShared.h b/js/src/jit/AliasAnalysisShared.h index ba3e335eff..3c91cd449c 100644 --- a/js/src/jit/AliasAnalysisShared.h +++ b/js/src/jit/AliasAnalysisShared.h @@ -26,7 +26,7 @@ class AliasAnalysisShared graph_(graph) {} - virtual MOZ_MUST_USE bool analyze() { + [[nodiscard]] virtual bool analyze() { return true; } diff --git a/js/src/jit/AlignmentMaskAnalysis.h b/js/src/jit/AlignmentMaskAnalysis.h index 4cee7683ff..30543b6b76 100644 --- a/js/src/jit/AlignmentMaskAnalysis.h +++ b/js/src/jit/AlignmentMaskAnalysis.h @@ -22,7 +22,7 @@ class AlignmentMaskAnalysis : graph_(graph) {} - MOZ_MUST_USE bool analyze(); + [[nodiscard]] bool analyze(); }; } /* namespace jit */ diff --git a/js/src/jit/BacktrackingAllocator.h b/js/src/jit/BacktrackingAllocator.h index cbf7fca9ae..7f35ee8f4b 100644 --- a/js/src/jit/BacktrackingAllocator.h +++ b/js/src/jit/BacktrackingAllocator.h @@ -94,7 +94,7 @@ class Requirement int priority() const; - MOZ_MUST_USE bool merge(const Requirement& newRequirement) { + [[nodiscard]] bool merge(const Requirement& newRequirement) { // Merge newRequirement with any existing requirement, returning false // if the new and old requirements conflict. MOZ_ASSERT(newRequirement.kind() != Requirement::MUST_REUSE_INPUT); @@ -382,7 +382,7 @@ class SpillSet : public TempObject return new(alloc) SpillSet(alloc); } - MOZ_MUST_USE bool addSpilledBundle(LiveBundle* bundle) { + [[nodiscard]] bool addSpilledBundle(LiveBundle* bundle) { return list_.append(bundle); } size_t numSpilledBundles() const { @@ -450,9 +450,9 @@ class LiveBundle : public TempObject ranges_.removeAndIncrement(iter); } void addRange(LiveRange* range); - MOZ_MUST_USE bool addRange(TempAllocator& alloc, uint32_t vreg, + [[nodiscard]] bool addRange(TempAllocator& alloc, uint32_t vreg, CodePosition from, CodePosition to); - MOZ_MUST_USE bool addRangeAndDistributeUses(TempAllocator& alloc, LiveRange* oldRange, + [[nodiscard]] bool addRangeAndDistributeUses(TempAllocator& alloc, LiveRange* oldRange, CodePosition from, CodePosition to); LiveRange* popFirstRange(); #ifdef DEBUG @@ -576,7 +576,7 @@ class VirtualRegister return firstRange()->bundle(); } - MOZ_MUST_USE bool addInitialRange(TempAllocator& alloc, CodePosition from, CodePosition to); + [[nodiscard]] bool addInitialRange(TempAllocator& alloc, CodePosition from, CodePosition to); void addInitialUse(UsePosition* use); void setInitialDefinition(CodePosition from); }; @@ -681,7 +681,7 @@ class BacktrackingAllocator : protected RegisterAllocator callRanges(nullptr) { } - MOZ_MUST_USE bool go(); + [[nodiscard]] bool go(); private: @@ -689,10 +689,10 @@ class BacktrackingAllocator : protected RegisterAllocator typedef Vector<LiveBundle*, 4, SystemAllocPolicy> LiveBundleVector; // Liveness methods. - MOZ_MUST_USE bool init(); - MOZ_MUST_USE bool buildLivenessInfo(); + [[nodiscard]] bool init(); + [[nodiscard]] bool buildLivenessInfo(); - MOZ_MUST_USE bool addInitialFixedRange(AnyRegister reg, CodePosition from, CodePosition to); + [[nodiscard]] bool addInitialFixedRange(AnyRegister reg, CodePosition from, CodePosition to); VirtualRegister& vreg(const LDefinition* def) { return vregs[def->virtualRegister()]; @@ -703,42 +703,42 @@ class BacktrackingAllocator : protected RegisterAllocator } // Allocation methods. - MOZ_MUST_USE bool tryMergeBundles(LiveBundle* bundle0, LiveBundle* bundle1); - MOZ_MUST_USE bool tryMergeReusedRegister(VirtualRegister& def, VirtualRegister& input); - MOZ_MUST_USE bool mergeAndQueueRegisters(); - MOZ_MUST_USE bool tryAllocateFixed(LiveBundle* bundle, Requirement requirement, + [[nodiscard]] bool tryMergeBundles(LiveBundle* bundle0, LiveBundle* bundle1); + [[nodiscard]] bool tryMergeReusedRegister(VirtualRegister& def, VirtualRegister& input); + [[nodiscard]] bool mergeAndQueueRegisters(); + [[nodiscard]] bool tryAllocateFixed(LiveBundle* bundle, Requirement requirement, bool* success, bool* pfixed, LiveBundleVector& conflicting); - MOZ_MUST_USE bool tryAllocateNonFixed(LiveBundle* bundle, Requirement requirement, + [[nodiscard]] bool tryAllocateNonFixed(LiveBundle* bundle, Requirement requirement, Requirement hint, bool* success, bool* pfixed, LiveBundleVector& conflicting); - MOZ_MUST_USE bool processBundle(MIRGenerator* mir, LiveBundle* bundle); - MOZ_MUST_USE bool computeRequirement(LiveBundle* bundle, Requirement *prequirement, + [[nodiscard]] bool processBundle(MIRGenerator* mir, LiveBundle* bundle); + [[nodiscard]] bool computeRequirement(LiveBundle* bundle, Requirement *prequirement, Requirement *phint); - MOZ_MUST_USE bool tryAllocateRegister(PhysicalRegister& r, LiveBundle* bundle, bool* success, + [[nodiscard]] bool tryAllocateRegister(PhysicalRegister& r, LiveBundle* bundle, bool* success, bool* pfixed, LiveBundleVector& conflicting); - MOZ_MUST_USE bool evictBundle(LiveBundle* bundle); - MOZ_MUST_USE bool splitAndRequeueBundles(LiveBundle* bundle, + [[nodiscard]] bool evictBundle(LiveBundle* bundle); + [[nodiscard]] bool splitAndRequeueBundles(LiveBundle* bundle, const LiveBundleVector& newBundles); - MOZ_MUST_USE bool spill(LiveBundle* bundle); + [[nodiscard]] bool spill(LiveBundle* bundle); bool isReusedInput(LUse* use, LNode* ins, bool considerCopy); bool isRegisterUse(UsePosition* use, LNode* ins, bool considerCopy = false); bool isRegisterDefinition(LiveRange* range); - MOZ_MUST_USE bool pickStackSlot(SpillSet* spill); - MOZ_MUST_USE bool insertAllRanges(LiveRangeSet& set, LiveBundle* bundle); + [[nodiscard]] bool pickStackSlot(SpillSet* spill); + [[nodiscard]] bool insertAllRanges(LiveRangeSet& set, LiveBundle* bundle); // Reification methods. - MOZ_MUST_USE bool pickStackSlots(); - MOZ_MUST_USE bool resolveControlFlow(); - MOZ_MUST_USE bool reifyAllocations(); - MOZ_MUST_USE bool populateSafepoints(); - MOZ_MUST_USE bool annotateMoveGroups(); - MOZ_MUST_USE bool deadRange(LiveRange* range); + [[nodiscard]] bool pickStackSlots(); + [[nodiscard]] bool resolveControlFlow(); + [[nodiscard]] bool reifyAllocations(); + [[nodiscard]] bool populateSafepoints(); + [[nodiscard]] bool annotateMoveGroups(); + [[nodiscard]] bool deadRange(LiveRange* range); size_t findFirstNonCallSafepoint(CodePosition from); size_t findFirstSafepoint(CodePosition pos, size_t startFrom); void addLiveRegistersForRange(VirtualRegister& reg, LiveRange* range); - MOZ_MUST_USE bool addMove(LMoveGroup* moves, LiveRange* from, LiveRange* to, + [[nodiscard]] bool addMove(LMoveGroup* moves, LiveRange* from, LiveRange* to, LDefinition::Type type) { LAllocation fromAlloc = from->bundle()->allocation(); LAllocation toAlloc = to->bundle()->allocation(); @@ -746,7 +746,7 @@ class BacktrackingAllocator : protected RegisterAllocator return moves->add(fromAlloc, toAlloc, type); } - MOZ_MUST_USE bool moveInput(LInstruction* ins, LiveRange* from, LiveRange* to, + [[nodiscard]] bool moveInput(LInstruction* ins, LiveRange* from, LiveRange* to, LDefinition::Type type) { if (from->bundle()->allocation() == to->bundle()->allocation()) { return true; @@ -755,7 +755,7 @@ class BacktrackingAllocator : protected RegisterAllocator return addMove(moves, from, to, type); } - MOZ_MUST_USE bool moveAfter(LInstruction* ins, LiveRange* from, LiveRange* to, + [[nodiscard]] bool moveAfter(LInstruction* ins, LiveRange* from, LiveRange* to, LDefinition::Type type) { if (from->bundle()->allocation() == to->bundle()->allocation()) { return true; @@ -764,7 +764,7 @@ class BacktrackingAllocator : protected RegisterAllocator return addMove(moves, from, to, type); } - MOZ_MUST_USE bool moveAtExit(LBlock* block, LiveRange* from, LiveRange* to, + [[nodiscard]] bool moveAtExit(LBlock* block, LiveRange* from, LiveRange* to, LDefinition::Type type) { if (from->bundle()->allocation() == to->bundle()->allocation()) { return true; @@ -773,7 +773,7 @@ class BacktrackingAllocator : protected RegisterAllocator return addMove(moves, from, to, type); } - MOZ_MUST_USE bool moveAtEntry(LBlock* block, LiveRange* from, LiveRange* to, + [[nodiscard]] bool moveAtEntry(LBlock* block, LiveRange* from, LiveRange* to, LDefinition::Type type) { if (from->bundle()->allocation() == to->bundle()->allocation()) { return true; @@ -782,7 +782,7 @@ class BacktrackingAllocator : protected RegisterAllocator return addMove(moves, from, to, type); } - MOZ_MUST_USE bool moveAtEdge(LBlock* predecessor, LBlock* successor, LiveRange* from, + [[nodiscard]] bool moveAtEdge(LBlock* predecessor, LBlock* successor, LiveRange* from, LiveRange* to, LDefinition::Type type); // Debugging methods. @@ -801,15 +801,15 @@ class BacktrackingAllocator : protected RegisterAllocator size_t maximumSpillWeight(const LiveBundleVector& bundles); - MOZ_MUST_USE bool chooseBundleSplit(LiveBundle* bundle, bool fixed, LiveBundle* conflict); + [[nodiscard]] bool chooseBundleSplit(LiveBundle* bundle, bool fixed, LiveBundle* conflict); - MOZ_MUST_USE bool splitAt(LiveBundle* bundle, const SplitPositionVector& splitPositions); - MOZ_MUST_USE bool trySplitAcrossHotcode(LiveBundle* bundle, bool* success); - MOZ_MUST_USE bool trySplitAfterLastRegisterUse(LiveBundle* bundle, LiveBundle* conflict, + [[nodiscard]] bool splitAt(LiveBundle* bundle, const SplitPositionVector& splitPositions); + [[nodiscard]] bool trySplitAcrossHotcode(LiveBundle* bundle, bool* success); + [[nodiscard]] bool trySplitAfterLastRegisterUse(LiveBundle* bundle, LiveBundle* conflict, bool* success); - MOZ_MUST_USE bool trySplitBeforeFirstRegisterUse(LiveBundle* bundle, LiveBundle* conflict, + [[nodiscard]] bool trySplitBeforeFirstRegisterUse(LiveBundle* bundle, LiveBundle* conflict, bool* success); - MOZ_MUST_USE bool splitAcrossCalls(LiveBundle* bundle); + [[nodiscard]] bool splitAcrossCalls(LiveBundle* bundle); bool compilingWasm() { return mir->info().compilingWasm(); diff --git a/js/src/jit/Bailouts.h b/js/src/jit/Bailouts.h index d8727b917d..923c03e63e 100644 --- a/js/src/jit/Bailouts.h +++ b/js/src/jit/Bailouts.h @@ -150,7 +150,7 @@ class BailoutFrameInfo } }; -MOZ_MUST_USE bool EnsureHasEnvironmentObjects(JSContext* cx, AbstractFramePtr fp); +[[nodiscard]] bool EnsureHasEnvironmentObjects(JSContext* cx, AbstractFramePtr fp); struct BaselineBailoutInfo; diff --git a/js/src/jit/BaselineBailouts.cpp b/js/src/jit/BaselineBailouts.cpp index 4bcaadee47..7b1bdc8c3f 100644 --- a/js/src/jit/BaselineBailouts.cpp +++ b/js/src/jit/BaselineBailouts.cpp @@ -116,7 +116,7 @@ struct BaselineStackBuilder js_free(buffer_); } - MOZ_MUST_USE bool init() { + [[nodiscard]] bool init() { MOZ_ASSERT(!buffer_); MOZ_ASSERT(bufferUsed_ == 0); buffer_ = reinterpret_cast<uint8_t*>(js_calloc(bufferTotal_)); @@ -142,7 +142,7 @@ struct BaselineStackBuilder return true; } - MOZ_MUST_USE bool enlarge() { + [[nodiscard]] bool enlarge() { MOZ_ASSERT(buffer_ != nullptr); if (bufferTotal_ & mozilla::tl::MulOverflowMask<2>::value) return false; @@ -182,7 +182,7 @@ struct BaselineStackBuilder return framePushed_; } - MOZ_MUST_USE bool subtract(size_t size, const char* info = nullptr) { + [[nodiscard]] bool subtract(size_t size, const char* info = nullptr) { // enlarge the buffer if need be. while (size > bufferAvail_) { if (!enlarge()) @@ -203,7 +203,7 @@ struct BaselineStackBuilder } template <typename T> - MOZ_MUST_USE bool write(const T& t) { + [[nodiscard]] bool write(const T& t) { MOZ_ASSERT(!(uintptr_t(&t) >= uintptr_t(header_->copyStackBottom) && uintptr_t(&t) < uintptr_t(header_->copyStackTop)), "Should not reference memory that can be freed"); @@ -214,7 +214,7 @@ struct BaselineStackBuilder } template <typename T> - MOZ_MUST_USE bool writePtr(T* t, const char* info) { + [[nodiscard]] bool writePtr(T* t, const char* info) { if (!write<T*>(t)) return false; if (info) @@ -224,7 +224,7 @@ struct BaselineStackBuilder return true; } - MOZ_MUST_USE bool writeWord(size_t w, const char* info) { + [[nodiscard]] bool writeWord(size_t w, const char* info) { if (!write<size_t>(w)) return false; if (info) { @@ -241,7 +241,7 @@ struct BaselineStackBuilder return true; } - MOZ_MUST_USE bool writeValue(const Value& val, const char* info) { + [[nodiscard]] bool writeValue(const Value& val, const char* info) { if (!write<Value>(val)) return false; if (info) { @@ -253,7 +253,7 @@ struct BaselineStackBuilder return true; } - MOZ_MUST_USE bool maybeWritePadding(size_t alignment, size_t after, const char* info) { + [[nodiscard]] bool maybeWritePadding(size_t alignment, size_t after, const char* info) { MOZ_ASSERT(framePushed_ % sizeof(Value) == 0); MOZ_ASSERT(after % sizeof(Value) == 0); size_t offset = ComputeByteAlignment(after, alignment); diff --git a/js/src/jit/BaselineCacheIR.cpp b/js/src/jit/BaselineCacheIR.cpp index 5317f0e4e5..a2cb20111b 100644 --- a/js/src/jit/BaselineCacheIR.cpp +++ b/js/src/jit/BaselineCacheIR.cpp @@ -168,7 +168,7 @@ class MOZ_RAII CacheRegisterAllocator writer_(writer) {} - MOZ_MUST_USE bool init(const AllocatableGeneralRegisterSet& available) { + [[nodiscard]] bool init(const AllocatableGeneralRegisterSet& available) { availableRegs_ = available; if (!origInputLocations_.resize(writer_.numInputOperands())) return false; @@ -394,12 +394,12 @@ class MOZ_RAII BaselineCacheIRCompiler : public CacheIRCompiler stubDataOffset_(stubDataOffset) {} - MOZ_MUST_USE bool init(CacheKind kind); + [[nodiscard]] bool init(CacheKind kind); JitCode* compile(); private: -#define DEFINE_OP(op) MOZ_MUST_USE bool emit##op(); +#define DEFINE_OP(op) [[nodiscard]] bool emit##op(); CACHE_IR_OPS(DEFINE_OP) #undef DEFINE_OP diff --git a/js/src/jit/BaselineCompiler.h b/js/src/jit/BaselineCompiler.h index 30da13d9c1..de1b75d29a 100644 --- a/js/src/jit/BaselineCompiler.h +++ b/js/src/jit/BaselineCompiler.h @@ -285,43 +285,43 @@ class BaselineCompiler : public BaselineCompilerSpecific public: BaselineCompiler(JSContext* cx, TempAllocator& alloc, JSScript* script); - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); MethodStatus compile(); private: MethodStatus emitBody(); - MOZ_MUST_USE bool emitCheckThis(ValueOperand val); + [[nodiscard]] bool emitCheckThis(ValueOperand val); void emitLoadReturnValue(ValueOperand val); void emitInitializeLocals(); - MOZ_MUST_USE bool emitPrologue(); - MOZ_MUST_USE bool emitEpilogue(); - MOZ_MUST_USE bool emitOutOfLinePostBarrierSlot(); - MOZ_MUST_USE bool emitIC(ICStub* stub, ICEntry::Kind kind); - MOZ_MUST_USE bool emitOpIC(ICStub* stub) { + [[nodiscard]] bool emitPrologue(); + [[nodiscard]] bool emitEpilogue(); + [[nodiscard]] bool emitOutOfLinePostBarrierSlot(); + [[nodiscard]] bool emitIC(ICStub* stub, ICEntry::Kind kind); + [[nodiscard]] bool emitOpIC(ICStub* stub) { return emitIC(stub, ICEntry::Kind_Op); } - MOZ_MUST_USE bool emitNonOpIC(ICStub* stub) { + [[nodiscard]] bool emitNonOpIC(ICStub* stub) { return emitIC(stub, ICEntry::Kind_NonOp); } - MOZ_MUST_USE bool emitStackCheck(bool earlyCheck=false); - MOZ_MUST_USE bool emitInterruptCheck(); - MOZ_MUST_USE bool emitWarmUpCounterIncrement(bool allowOsr=true); - MOZ_MUST_USE bool emitArgumentTypeChecks(); + [[nodiscard]] bool emitStackCheck(bool earlyCheck=false); + [[nodiscard]] bool emitInterruptCheck(); + [[nodiscard]] bool emitWarmUpCounterIncrement(bool allowOsr=true); + [[nodiscard]] bool emitArgumentTypeChecks(); void emitIsDebuggeeCheck(); - MOZ_MUST_USE bool emitDebugPrologue(); - MOZ_MUST_USE bool emitDebugTrap(); - MOZ_MUST_USE bool emitTraceLoggerEnter(); - MOZ_MUST_USE bool emitTraceLoggerExit(); - MOZ_MUST_USE bool emitTraceLoggerResume(Register script, AllocatableGeneralRegisterSet& regs); + [[nodiscard]] bool emitDebugPrologue(); + [[nodiscard]] bool emitDebugTrap(); + [[nodiscard]] bool emitTraceLoggerEnter(); + [[nodiscard]] bool emitTraceLoggerExit(); + [[nodiscard]] bool emitTraceLoggerResume(Register script, AllocatableGeneralRegisterSet& regs); void emitProfilerEnterFrame(); void emitProfilerExitFrame(); - MOZ_MUST_USE bool initEnvironmentChain(); + [[nodiscard]] bool initEnvironmentChain(); void storeValue(const StackValue* source, const Address& dest, const ValueOperand& scratch); @@ -331,35 +331,35 @@ class BaselineCompiler : public BaselineCompilerSpecific #undef EMIT_OP // JSOP_NEG, JSOP_BITNOT, JSOP_INC, JSOP_DEC - MOZ_MUST_USE bool emitUnaryArith(); + [[nodiscard]] bool emitUnaryArith(); // JSOP_BITXOR, JSOP_LSH, JSOP_ADD etc. - MOZ_MUST_USE bool emitBinaryArith(); + [[nodiscard]] bool emitBinaryArith(); // Handles JSOP_LT, JSOP_GT, and friends - MOZ_MUST_USE bool emitCompare(); + [[nodiscard]] bool emitCompare(); - MOZ_MUST_USE bool emitReturn(); + [[nodiscard]] bool emitReturn(); - MOZ_MUST_USE bool emitToBoolean(); - MOZ_MUST_USE bool emitTest(bool branchIfTrue); - MOZ_MUST_USE bool emitAndOr(bool branchIfTrue); - MOZ_MUST_USE bool emitCall(); - MOZ_MUST_USE bool emitSpreadCall(); + [[nodiscard]] bool emitToBoolean(); + [[nodiscard]] bool emitTest(bool branchIfTrue); + [[nodiscard]] bool emitAndOr(bool branchIfTrue); + [[nodiscard]] bool emitCall(); + [[nodiscard]] bool emitSpreadCall(); - MOZ_MUST_USE bool emitInitPropGetterSetter(); - MOZ_MUST_USE bool emitInitElemGetterSetter(); + [[nodiscard]] bool emitInitPropGetterSetter(); + [[nodiscard]] bool emitInitElemGetterSetter(); - MOZ_MUST_USE bool emitFormalArgAccess(uint32_t arg, bool get); + [[nodiscard]] bool emitFormalArgAccess(uint32_t arg, bool get); - MOZ_MUST_USE bool emitThrowConstAssignment(); - MOZ_MUST_USE bool emitUninitializedLexicalCheck(const ValueOperand& val); + [[nodiscard]] bool emitThrowConstAssignment(); + [[nodiscard]] bool emitUninitializedLexicalCheck(const ValueOperand& val); - MOZ_MUST_USE bool emitIsMagicValue(); + [[nodiscard]] bool emitIsMagicValue(); - MOZ_MUST_USE bool addPCMappingEntry(bool addIndexEntry); + [[nodiscard]] bool addPCMappingEntry(bool addIndexEntry); - MOZ_MUST_USE bool addYieldAndAwaitOffset(); + [[nodiscard]] bool addYieldAndAwaitOffset(); void getEnvironmentCoordinateObject(Register reg); Address getEnvironmentCoordinateAddressFromObject(Register objReg, Register reg); diff --git a/js/src/jit/BaselineDebugModeOSR.h b/js/src/jit/BaselineDebugModeOSR.h index 5ffc988f3e..1cbfc51e03 100644 --- a/js/src/jit/BaselineDebugModeOSR.h +++ b/js/src/jit/BaselineDebugModeOSR.h @@ -134,7 +134,7 @@ struct BaselineDebugModeOSRInfo void popValueInto(PCMappingSlotInfo::SlotLocation loc, Value* vp); }; -MOZ_MUST_USE bool +[[nodiscard]] bool RecompileOnStackBaselineScriptsForDebugMode(JSContext* cx, const Debugger::ExecutionObservableSet& obs, Debugger::IsObserving observing); diff --git a/js/src/jit/BaselineFrame.h b/js/src/jit/BaselineFrame.h index c54569627f..165b78ab25 100644 --- a/js/src/jit/BaselineFrame.h +++ b/js/src/jit/BaselineFrame.h @@ -102,7 +102,7 @@ class BaselineFrame // This is the old frame pointer saved in the prologue. static const uint32_t FramePointerOffset = sizeof(void*); - MOZ_MUST_USE bool initForOsr(InterpreterFrame* fp, uint32_t numStackValues); + [[nodiscard]] bool initForOsr(InterpreterFrame* fp, uint32_t numStackValues); uint32_t frameSize() const { return frameSize_; @@ -259,12 +259,12 @@ class BaselineFrame return &flags_; } - inline MOZ_MUST_USE bool pushLexicalEnvironment(JSContext* cx, Handle<LexicalScope*> scope); - inline MOZ_MUST_USE bool freshenLexicalEnvironment(JSContext* cx); - inline MOZ_MUST_USE bool recreateLexicalEnvironment(JSContext* cx); + [[nodiscard]] inline bool pushLexicalEnvironment(JSContext* cx, Handle<LexicalScope*> scope); + [[nodiscard]] inline bool freshenLexicalEnvironment(JSContext* cx); + [[nodiscard]] inline bool recreateLexicalEnvironment(JSContext* cx); - MOZ_MUST_USE bool initFunctionEnvironmentObjects(JSContext* cx); - MOZ_MUST_USE bool pushVarEnvironment(JSContext* cx, HandleScope scope); + [[nodiscard]] bool initFunctionEnvironmentObjects(JSContext* cx); + [[nodiscard]] bool pushVarEnvironment(JSContext* cx, HandleScope scope); void initArgsObjUnchecked(ArgumentsObject& argsobj) { flags_ |= HAS_ARGS_OBJ; diff --git a/js/src/jit/BaselineFrameInfo.h b/js/src/jit/BaselineFrameInfo.h index f407a9276d..6a1e47322f 100644 --- a/js/src/jit/BaselineFrameInfo.h +++ b/js/src/jit/BaselineFrameInfo.h @@ -178,7 +178,7 @@ class FrameInfo spIndex(0) { } - MOZ_MUST_USE bool init(TempAllocator& alloc); + [[nodiscard]] bool init(TempAllocator& alloc); size_t nlocals() const { return script->nfixed(); diff --git a/js/src/jit/BaselineIC.h b/js/src/jit/BaselineIC.h index bd30ec0369..183644ab3a 100644 --- a/js/src/jit/BaselineIC.h +++ b/js/src/jit/BaselineIC.h @@ -41,7 +41,7 @@ class ICWarmUpCounter_Fallback : public ICFallbackStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -73,7 +73,7 @@ class ICTypeUpdate_Fallback : public ICStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -97,7 +97,7 @@ class ICTypeUpdate_PrimitiveSet : public TypeCheckPrimitiveSetStub public: class Compiler : public TypeCheckPrimitiveSetStub::Compiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, ICTypeUpdate_PrimitiveSet* existingStub, JSValueType type) @@ -141,7 +141,7 @@ class ICTypeUpdate_SingleObject : public ICStub class Compiler : public ICStubCompiler { protected: HandleObject obj_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, HandleObject obj) @@ -176,7 +176,7 @@ class ICTypeUpdate_ObjectGroup : public ICStub class Compiler : public ICStubCompiler { protected: HandleObjectGroup group_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, HandleObjectGroup group) @@ -206,7 +206,7 @@ class ICToBool_Fallback : public ICFallbackStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -229,7 +229,7 @@ class ICToBool_Int32 : public ICStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -252,7 +252,7 @@ class ICToBool_String : public ICStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -275,7 +275,7 @@ class ICToBool_NullUndefined : public ICStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -298,7 +298,7 @@ class ICToBool_Double : public ICStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -321,7 +321,7 @@ class ICToBool_Object : public ICStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -374,7 +374,7 @@ class ICGetElem_Fallback : public ICMonitoredFallbackStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -699,10 +699,10 @@ class ICGetElemNativeCompiler : public ICStubCompiler HandleFunction getter_; uint32_t pcOffset_; - MOZ_MUST_USE bool emitCheckKey(MacroAssembler& masm, Label& failure); - MOZ_MUST_USE bool emitCallNative(MacroAssembler& masm, Register objReg); - MOZ_MUST_USE bool emitCallScripted(MacroAssembler& masm, Register objReg); - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool emitCheckKey(MacroAssembler& masm, Label& failure); + [[nodiscard]] bool emitCallNative(MacroAssembler& masm, Register objReg); + [[nodiscard]] bool emitCallScripted(MacroAssembler& masm, Register objReg); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); protected: virtual int32_t getKey() const { @@ -808,7 +808,7 @@ class ICGetElem_String : public ICStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -845,7 +845,7 @@ class ICGetElem_Dense : public ICMonitoredStub RootedShape shape_; protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -891,7 +891,7 @@ class ICGetElem_UnboxedArray : public ICMonitoredStub JSValueType elementType_; protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -938,7 +938,7 @@ class ICGetElem_TypedArray : public ICStub TypedThingLayout layout_; protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -987,7 +987,7 @@ class ICGetElem_Arguments : public ICMonitoredStub Which which_; protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -1033,7 +1033,7 @@ class ICSetElem_Fallback : public ICFallbackStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -1075,7 +1075,7 @@ class ICSetElem_DenseOrUnboxedArray : public ICUpdatedStub RootedObjectGroup group_; JSValueType unboxedType_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: virtual int32_t getKey() const { @@ -1183,7 +1183,7 @@ class ICSetElemDenseOrUnboxedArrayAddCompiler : public ICStubCompiler { size_t protoChainDepth_; JSValueType unboxedType_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); protected: virtual int32_t getKey() const { @@ -1248,7 +1248,7 @@ class ICSetElem_TypedArray : public ICStub bool expectOutOfBounds_; protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -1289,7 +1289,7 @@ class ICIn_Fallback : public ICFallbackStub class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -1373,7 +1373,7 @@ class ICInNativeCompiler : public ICStubCompiler RootedObject holder_; RootedPropertyName name_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: ICInNativeCompiler(JSContext* cx, ICStub::Kind kind, HandleObject obj, HandleObject holder, @@ -1474,7 +1474,7 @@ class ICInNativeDoesNotExistCompiler : public ICStubCompiler (static_cast<int32_t>(protoChainDepth_) << 17); } - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: ICInNativeDoesNotExistCompiler(JSContext* cx, HandleObject obj, HandlePropertyName name, @@ -1508,7 +1508,7 @@ class ICIn_Dense : public ICStub RootedShape shape_; protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, Shape* shape) @@ -1546,7 +1546,7 @@ class ICGetName_Fallback : public ICMonitoredFallbackStub class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -1582,7 +1582,7 @@ class ICGetName_GlobalLexical : public ICMonitoredStub uint32_t slot_; protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, ICStub* firstMonitorStub, uint32_t slot) @@ -1639,7 +1639,7 @@ class ICGetName_Env : public ICMonitoredStub uint32_t offset_; protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); protected: virtual int32_t getKey() const { @@ -1679,7 +1679,7 @@ class ICBindName_Fallback : public ICFallbackStub public: class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -1705,7 +1705,7 @@ class ICGetIntrinsic_Fallback : public ICMonitoredFallbackStub public: class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -1741,7 +1741,7 @@ class ICGetIntrinsic_Constant : public ICStub } class Compiler : public ICStubCompiler { - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); HandleValue value_; @@ -1790,7 +1790,7 @@ class ICSetProp_Fallback : public ICFallbackStub protected: uint32_t returnOffset_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); void postGenerateStubCode(MacroAssembler& masm, Handle<JitCode*> code); public: @@ -1852,7 +1852,7 @@ class ICSetProp_Native : public ICUpdatedStub (static_cast<int32_t>(obj_->is<UnboxedPlainObject>()) << 18); } - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, HandleObject obj, bool isFixedSlot, uint32_t offset) @@ -1958,7 +1958,7 @@ class ICSetPropNativeAddCompiler : public ICStubCompiler (static_cast<int32_t>(protoChainDepth_) << 19); } - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: ICSetPropNativeAddCompiler(JSContext* cx, HandleObject obj, @@ -2024,7 +2024,7 @@ class ICSetProp_Unboxed : public ICUpdatedStub uint32_t fieldOffset_; JSValueType fieldType_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -2104,7 +2104,7 @@ class ICSetProp_TypedObject : public ICUpdatedStub TypedThingLayout layout_; Rooted<SimpleTypeDescr*> fieldDescr_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -2251,7 +2251,7 @@ class ICSetProp_CallScripted : public ICSetPropCallSetter class Compiler : public ICSetPropCallSetter::Compiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, HandleObject obj, HandleObject holder, HandleFunction setter, @@ -2288,7 +2288,7 @@ class ICSetProp_CallNative : public ICSetPropCallSetter class Compiler : public ICSetPropCallSetter::Compiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, HandleObject obj, HandleObject holder, HandleFunction setter, @@ -2398,7 +2398,7 @@ class ICCall_Fallback : public ICMonitoredFallbackStub bool isConstructing_; bool isSpread_; uint32_t returnOffset_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); void postGenerateStubCode(MacroAssembler& masm, Handle<JitCode*> code); virtual int32_t getKey() const { @@ -2491,7 +2491,7 @@ class ICCallScriptedCompiler : public ICCallStubCompiler { RootedFunction callee_; RootedObject templateObject_; uint32_t pcOffset_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -2584,7 +2584,7 @@ class ICCall_Native : public ICMonitoredStub RootedFunction callee_; RootedObject templateObject_; uint32_t pcOffset_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -2662,7 +2662,7 @@ class ICCall_ClassHook : public ICMonitoredStub Native native_; RootedObject templateObject_; uint32_t pcOffset_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -2723,7 +2723,7 @@ class ICCall_ScriptedApplyArray : public ICMonitoredStub protected: ICStub* firstMonitorStub_; uint32_t pcOffset_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -2771,7 +2771,7 @@ class ICCall_ScriptedApplyArguments : public ICMonitoredStub protected: ICStub* firstMonitorStub_; uint32_t pcOffset_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -2818,7 +2818,7 @@ class ICCall_ScriptedFunCall : public ICMonitoredStub protected: ICStub* firstMonitorStub_; uint32_t pcOffset_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -2889,7 +2889,7 @@ class ICCall_StringSplit : public ICMonitoredStub RootedString expectedSep_; RootedObject templateObject_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -2926,7 +2926,7 @@ class ICCall_IsSuspendedStarGenerator : public ICStub public: class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -2960,7 +2960,7 @@ class ICTableSwitch : public ICStub void fixupJumpTable(JSScript* script, BaselineScript* baseline); class Compiler : public ICStubCompiler { - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); jsbytecode* pc_; @@ -2985,7 +2985,7 @@ class ICIteratorNew_Fallback : public ICFallbackStub public: class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -3018,7 +3018,7 @@ class ICIteratorMore_Fallback : public ICFallbackStub class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -3043,7 +3043,7 @@ class ICIteratorMore_Native : public ICStub public: class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -3068,7 +3068,7 @@ class ICIteratorClose_Fallback : public ICFallbackStub public: class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -3105,7 +3105,7 @@ class ICInstanceOf_Fallback : public ICFallbackStub class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -3154,7 +3154,7 @@ class ICInstanceOf_Function : public ICStub uint32_t slot_; protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, Shape* shape, JSObject* prototypeObj, uint32_t slot) @@ -3185,7 +3185,7 @@ class ICTypeOf_Fallback : public ICFallbackStub public: class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -3218,7 +3218,7 @@ class ICTypeOf_Typed : public ICFallbackStub protected: JSType type_; RootedString typeString_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -3259,7 +3259,7 @@ class ICRest_Fallback : public ICFallbackStub class Compiler : public ICStubCompiler { protected: RootedArrayObject templateObject; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, ArrayObject* templateObject) @@ -3287,7 +3287,7 @@ class ICRetSub_Fallback : public ICFallbackStub class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx) @@ -3328,7 +3328,7 @@ class ICRetSub_Resume : public ICStub uint32_t pcOffset_; uint8_t* addr_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, uint32_t pcOffset, uint8_t* addr) diff --git a/js/src/jit/BaselineInspector.h b/js/src/jit/BaselineInspector.h index 556f28ee5b..9e027c5850 100644 --- a/js/src/jit/BaselineInspector.h +++ b/js/src/jit/BaselineInspector.h @@ -89,12 +89,12 @@ class BaselineInspector } ICStub* monomorphicStub(jsbytecode* pc); - MOZ_MUST_USE bool dimorphicStub(jsbytecode* pc, ICStub** pfirst, ICStub** psecond); + [[nodiscard]] bool dimorphicStub(jsbytecode* pc, ICStub** pfirst, ICStub** psecond); public: typedef Vector<ReceiverGuard, 4, JitAllocPolicy> ReceiverVector; typedef Vector<ObjectGroup*, 4, JitAllocPolicy> ObjectGroupVector; - MOZ_MUST_USE bool maybeInfoForPropertyOp(jsbytecode* pc, ReceiverVector& receivers, + [[nodiscard]] bool maybeInfoForPropertyOp(jsbytecode* pc, ReceiverVector& receivers, ObjectGroupVector& convertUnboxedGroups); SetElemICInspector setElemICInspector(jsbytecode* pc) { @@ -112,7 +112,7 @@ class BaselineInspector bool hasSeenDoubleResult(jsbytecode* pc); bool hasSeenNonStringIterMore(jsbytecode* pc); - MOZ_MUST_USE bool isOptimizableCallStringSplit(jsbytecode* pc, JSString** strOut, + [[nodiscard]] bool isOptimizableCallStringSplit(jsbytecode* pc, JSString** strOut, JSString** sepOut, JSObject** objOut); JSObject* getTemplateObject(jsbytecode* pc); JSObject* getTemplateObjectForNative(jsbytecode* pc, Native native); @@ -127,16 +127,16 @@ class BaselineInspector LexicalEnvironmentObject* templateNamedLambdaObject(); CallObject* templateCallObject(); - MOZ_MUST_USE bool commonGetPropFunction(jsbytecode* pc, JSObject** holder, Shape** holderShape, + [[nodiscard]] bool commonGetPropFunction(jsbytecode* pc, JSObject** holder, Shape** holderShape, JSFunction** commonGetter, Shape** globalShape, bool* isOwnProperty, ReceiverVector& receivers, ObjectGroupVector& convertUnboxedGroups); - MOZ_MUST_USE bool commonSetPropFunction(jsbytecode* pc, JSObject** holder, Shape** holderShape, + [[nodiscard]] bool commonSetPropFunction(jsbytecode* pc, JSObject** holder, Shape** holderShape, JSFunction** commonSetter, bool* isOwnProperty, ReceiverVector& receivers, ObjectGroupVector& convertUnboxedGroups); - MOZ_MUST_USE bool instanceOfData(jsbytecode* pc, Shape** shape, uint32_t* slot, + [[nodiscard]] bool instanceOfData(jsbytecode* pc, Shape** shape, uint32_t* slot, JSObject** prototypeObject); }; diff --git a/js/src/jit/BaselineJIT.h b/js/src/jit/BaselineJIT.h index dd7a92c6d9..234e60ff96 100644 --- a/js/src/jit/BaselineJIT.h +++ b/js/src/jit/BaselineJIT.h @@ -416,7 +416,7 @@ struct BaselineScript // the result may not be accurate. jsbytecode* approximatePcForNativeAddress(JSScript* script, uint8_t* nativeAddress); - MOZ_MUST_USE bool addDependentWasmImport(JSContext* cx, wasm::Instance& instance, uint32_t idx); + [[nodiscard]] bool addDependentWasmImport(JSContext* cx, wasm::Instance& instance, uint32_t idx); void removeDependentWasmImport(wasm::Instance& instance, uint32_t idx); void unlinkDependentWasmImports(FreeOp* fop); void clearDependentWasmImports(); diff --git a/js/src/jit/BitSet.h b/js/src/jit/BitSet.h index d0adeeddd4..9551736344 100644 --- a/js/src/jit/BitSet.h +++ b/js/src/jit/BitSet.h @@ -52,7 +52,7 @@ class BitSet bits_(nullptr), numBits_(numBits) {} - MOZ_MUST_USE bool init(TempAllocator& alloc); + [[nodiscard]] bool init(TempAllocator& alloc); unsigned int getNumBits() const { return numBits_; diff --git a/js/src/jit/BytecodeAnalysis.h b/js/src/jit/BytecodeAnalysis.h index 3e9251b7dc..6e3a21ea25 100644 --- a/js/src/jit/BytecodeAnalysis.h +++ b/js/src/jit/BytecodeAnalysis.h @@ -44,7 +44,7 @@ class BytecodeAnalysis public: explicit BytecodeAnalysis(TempAllocator& alloc, JSScript* script); - MOZ_MUST_USE bool init(TempAllocator& alloc, GSNCache& gsn); + [[nodiscard]] bool init(TempAllocator& alloc, GSNCache& gsn); BytecodeInfo& info(jsbytecode* pc) { MOZ_ASSERT(infos_[script_->pcToOffset(pc)].initialized); diff --git a/js/src/jit/CacheIR.h b/js/src/jit/CacheIR.h index 4bc523a972..69cc4a4577 100644 --- a/js/src/jit/CacheIR.h +++ b/js/src/jit/CacheIR.h @@ -409,18 +409,18 @@ class MOZ_RAII GetPropIRGenerator enum class PreliminaryObjectAction { None, Unlink, NotePreliminary }; PreliminaryObjectAction preliminaryObjectAction_; - MOZ_MUST_USE bool tryAttachNative(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId); - MOZ_MUST_USE bool tryAttachUnboxed(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId); - MOZ_MUST_USE bool tryAttachUnboxedExpando(CacheIRWriter& writer, HandleObject obj, + [[nodiscard]] bool tryAttachNative(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId); + [[nodiscard]] bool tryAttachUnboxed(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId); + [[nodiscard]] bool tryAttachUnboxedExpando(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId); - MOZ_MUST_USE bool tryAttachTypedObject(CacheIRWriter& writer, HandleObject obj, + [[nodiscard]] bool tryAttachTypedObject(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId); - MOZ_MUST_USE bool tryAttachObjectLength(CacheIRWriter& writer, HandleObject obj, + [[nodiscard]] bool tryAttachObjectLength(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId); - MOZ_MUST_USE bool tryAttachModuleNamespace(CacheIRWriter& writer, HandleObject obj, + [[nodiscard]] bool tryAttachModuleNamespace(CacheIRWriter& writer, HandleObject obj, ObjOperandId objId); - MOZ_MUST_USE bool tryAttachPrimitive(CacheIRWriter& writer, ValOperandId valId); + [[nodiscard]] bool tryAttachPrimitive(CacheIRWriter& writer, ValOperandId valId); GetPropIRGenerator(const GetPropIRGenerator&) = delete; GetPropIRGenerator& operator=(const GetPropIRGenerator&) = delete; @@ -431,7 +431,7 @@ class MOZ_RAII GetPropIRGenerator bool emitted() const { return emitted_; } - MOZ_MUST_USE bool tryAttachStub(mozilla::Maybe<CacheIRWriter>& writer); + [[nodiscard]] bool tryAttachStub(mozilla::Maybe<CacheIRWriter>& writer); bool shouldUnlinkPreliminaryObjectStubs() const { return preliminaryObjectAction_ == PreliminaryObjectAction::Unlink; diff --git a/js/src/jit/CodeGenerator.h b/js/src/jit/CodeGenerator.h index b0fd03538d..bd8549842a 100644 --- a/js/src/jit/CodeGenerator.h +++ b/js/src/jit/CodeGenerator.h @@ -56,7 +56,7 @@ class OutOfLineNaNToZero; class CodeGenerator final : public CodeGeneratorSpecific { void generateArgumentsChecks(bool bailout = true); - MOZ_MUST_USE bool generateBody(); + [[nodiscard]] bool generateBody(); ConstantOrRegister toConstantOrRegister(LInstruction* lir, size_t n, MIRType type); @@ -65,11 +65,11 @@ class CodeGenerator final : public CodeGeneratorSpecific ~CodeGenerator(); public: - MOZ_MUST_USE bool generate(); - MOZ_MUST_USE bool generateWasm(wasm::SigIdDesc sigId, wasm::TrapOffset trapOffset, + [[nodiscard]] bool generate(); + [[nodiscard]] bool generateWasm(wasm::SigIdDesc sigId, wasm::TrapOffset trapOffset, wasm::FuncOffsets *offsets); - MOZ_MUST_USE bool link(JSContext* cx, CompilerConstraintList* constraints); - MOZ_MUST_USE bool linkSharedStubs(JSContext* cx); + [[nodiscard]] bool link(JSContext* cx, CompilerConstraintList* constraints); + [[nodiscard]] bool linkSharedStubs(JSContext* cx); void visitOsiPoint(LOsiPoint* lir); void visitGoto(LGoto* lir); @@ -466,7 +466,7 @@ class CodeGenerator final : public CodeGeneratorSpecific bool strict, bool needsTypeBarrier, bool guardHoles, jsbytecode* profilerLeavePc); - MOZ_MUST_USE bool generateBranchV(const ValueOperand& value, Label* ifTrue, Label* ifFalse, + [[nodiscard]] bool generateBranchV(const ValueOperand& value, Label* ifTrue, Label* ifFalse, FloatRegister fr); void emitLambdaInit(Register resultReg, Register envChainReg, diff --git a/js/src/jit/EdgeCaseAnalysis.h b/js/src/jit/EdgeCaseAnalysis.h index 86e10d83e5..bc6827a16b 100644 --- a/js/src/jit/EdgeCaseAnalysis.h +++ b/js/src/jit/EdgeCaseAnalysis.h @@ -20,7 +20,7 @@ class EdgeCaseAnalysis public: EdgeCaseAnalysis(MIRGenerator* mir, MIRGraph& graph); - MOZ_MUST_USE bool analyzeLate(); + [[nodiscard]] bool analyzeLate(); }; diff --git a/js/src/jit/EffectiveAddressAnalysis.h b/js/src/jit/EffectiveAddressAnalysis.h index a912cc34d1..f2cf933027 100644 --- a/js/src/jit/EffectiveAddressAnalysis.h +++ b/js/src/jit/EffectiveAddressAnalysis.h @@ -19,7 +19,7 @@ class EffectiveAddressAnalysis MIRGraph& graph_; template <typename AsmJSMemoryAccess> - MOZ_MUST_USE bool tryAddDisplacement(AsmJSMemoryAccess* ins, int32_t o); + [[nodiscard]] bool tryAddDisplacement(AsmJSMemoryAccess* ins, int32_t o); template <typename AsmJSMemoryAccess> void analyzeAsmJSHeapAccess(AsmJSMemoryAccess* ins); @@ -29,7 +29,7 @@ class EffectiveAddressAnalysis : mir_(mir), graph_(graph) {} - MOZ_MUST_USE bool analyze(); + [[nodiscard]] bool analyze(); }; } /* namespace jit */ diff --git a/js/src/jit/ExecutableAllocator.h b/js/src/jit/ExecutableAllocator.h index c16809c818..7932602c79 100644 --- a/js/src/jit/ExecutableAllocator.h +++ b/js/src/jit/ExecutableAllocator.h @@ -190,13 +190,13 @@ class ExecutableAllocator static void reprotectPool(JSRuntime* rt, ExecutablePool* pool, ProtectionSetting protection); public: - MOZ_MUST_USE + [[nodiscard]] static bool makeWritable(void* start, size_t size) { return ReprotectRegion(start, size, ProtectionSetting::Writable); } - MOZ_MUST_USE + [[nodiscard]] static bool makeExecutable(void* start, size_t size) { return ReprotectRegion(start, size, ProtectionSetting::Executable); diff --git a/js/src/jit/FixedList.h b/js/src/jit/FixedList.h index 23f4367dc7..9780d58c9f 100644 --- a/js/src/jit/FixedList.h +++ b/js/src/jit/FixedList.h @@ -31,7 +31,7 @@ class FixedList { } // Dynamic memory allocation requires the ability to report failure. - MOZ_MUST_USE bool init(TempAllocator& alloc, size_t length) { + [[nodiscard]] bool init(TempAllocator& alloc, size_t length) { if (length == 0) return true; @@ -59,7 +59,7 @@ class FixedList length_ -= num; } - MOZ_MUST_USE bool growBy(TempAllocator& alloc, size_t num) { + [[nodiscard]] bool growBy(TempAllocator& alloc, size_t num) { size_t newlength = length_ + num; if (newlength < length_) return false; diff --git a/js/src/jit/FlowAliasAnalysis.h b/js/src/jit/FlowAliasAnalysis.h index 91309d0d49..3779014b02 100644 --- a/js/src/jit/FlowAliasAnalysis.h +++ b/js/src/jit/FlowAliasAnalysis.h @@ -32,34 +32,34 @@ class FlowAliasAnalysis : public AliasAnalysisShared public: FlowAliasAnalysis(MIRGenerator* mir, MIRGraph& graph); - MOZ_MUST_USE bool analyze() override; + [[nodiscard]] bool analyze() override; protected: /* Process instructions. */ - MOZ_MUST_USE bool processStore(BlockStoreInfo& stores, MDefinition* store); - MOZ_MUST_USE bool processLoad(BlockStoreInfo& stores, MDefinition* load); - MOZ_MUST_USE bool processDeferredLoads(LoopInfo* info); + [[nodiscard]] bool processStore(BlockStoreInfo& stores, MDefinition* store); + [[nodiscard]] bool processLoad(BlockStoreInfo& stores, MDefinition* load); + [[nodiscard]] bool processDeferredLoads(LoopInfo* info); /* Improve dependency and helpers. */ - MOZ_MUST_USE bool improveDependency(MDefinition* load, MDefinitionVector& inputStores, - MDefinitionVector& outputStores); - MOZ_MUST_USE bool improveNonAliasedStores(MDefinition* load, MDefinitionVector& inputStores, - MDefinitionVector& outputStores, bool* improved, - bool onlyControlInstructions = false); - MOZ_MUST_USE bool improveStoresInFinishedLoops(MDefinition* load, MDefinitionVector& stores, - bool* improved); - - MOZ_MUST_USE bool improveLoopDependency(MDefinition* load, MDefinitionVector& inputStores, - MDefinitionVector& outputStores); - MOZ_MUST_USE bool deferImproveDependency(MDefinitionVector& stores); + [[nodiscard]] bool improveDependency(MDefinition* load, MDefinitionVector& inputStores, + MDefinitionVector& outputStores); + [[nodiscard]] bool improveNonAliasedStores(MDefinition* load, MDefinitionVector& inputStores, + MDefinitionVector& outputStores, bool* improved, + bool onlyControlInstructions = false); + [[nodiscard]] bool improveStoresInFinishedLoops(MDefinition* load, MDefinitionVector& stores, + bool* improved); + + [[nodiscard]] bool improveLoopDependency(MDefinition* load, MDefinitionVector& inputStores, + MDefinitionVector& outputStores); + [[nodiscard]] bool deferImproveDependency(MDefinitionVector& stores); /* Save dependency info. */ void saveLoadDependency(MDefinition* load, MDefinitionVector& dependencies); - MOZ_MUST_USE bool saveStoreDependency(MDefinition* store, BlockStoreInfo& prevStores); + [[nodiscard]] bool saveStoreDependency(MDefinition* store, BlockStoreInfo& prevStores); /* Helper functions. */ - MOZ_MUST_USE bool computeBlockStores(MBasicBlock* block); - MOZ_MUST_USE bool isLoopInvariant(MDefinition* load, MDefinition* store, bool* loopinvariant); + [[nodiscard]] bool computeBlockStores(MBasicBlock* block); + [[nodiscard]] bool isLoopInvariant(MDefinition* load, MDefinition* store, bool* loopinvariant); bool loopIsFinished(MBasicBlock* loopheader); }; diff --git a/js/src/jit/FoldLinearArithConstants.h b/js/src/jit/FoldLinearArithConstants.h index 2a493e1b9e..67a0980b6c 100644 --- a/js/src/jit/FoldLinearArithConstants.h +++ b/js/src/jit/FoldLinearArithConstants.h @@ -12,8 +12,7 @@ namespace js { namespace jit { -MOZ_MUST_USE bool -FoldLinearArithConstants(MIRGenerator* mir, MIRGraph& graph); +[[nodiscard]] bool FoldLinearArithConstants(MIRGenerator* mir, MIRGraph& graph); } /* namespace jit */ } /* namespace js */ diff --git a/js/src/jit/InstructionReordering.h b/js/src/jit/InstructionReordering.h index b43b9f55e9..baa904dfcd 100644 --- a/js/src/jit/InstructionReordering.h +++ b/js/src/jit/InstructionReordering.h @@ -11,8 +11,7 @@ namespace js { namespace jit { -MOZ_MUST_USE bool -ReorderInstructions(MIRGenerator* mir, MIRGraph& graph); +[[nodiscard]] bool ReorderInstructions(MIRGenerator* mir, MIRGraph& graph); } // namespace jit } // namespace js diff --git a/js/src/jit/Ion.h b/js/src/jit/Ion.h index 59a7823499..55709414ba 100644 --- a/js/src/jit/Ion.h +++ b/js/src/jit/Ion.h @@ -81,7 +81,7 @@ class JitContext }; // Initialize Ion statically for all JSRuntimes. -MOZ_MUST_USE bool InitializeIon(); +[[nodiscard]] bool InitializeIon(); // Get and set the current JIT context. JitContext* GetJitContext(); @@ -91,7 +91,7 @@ void SetJitContext(JitContext* ctx); bool CanIonCompileScript(JSContext* cx, JSScript* script, bool osr); -MOZ_MUST_USE bool IonCompileScriptForBaseline(JSContext* cx, BaselineFrame* frame, jsbytecode* pc); +[[nodiscard]] bool IonCompileScriptForBaseline(JSContext* cx, BaselineFrame* frame, jsbytecode* pc); MethodStatus CanEnter(JSContext* cx, RunState& state); MethodStatus CanEnterUsingFastInvoke(JSContext* cx, HandleScript script, uint32_t numActualArgs); @@ -122,8 +122,8 @@ IsErrorStatus(JitExecStatus status) struct EnterJitData; -MOZ_MUST_USE bool SetEnterJitData(JSContext* cx, EnterJitData& data, RunState& state, - MutableHandle<GCVector<Value>> vals); +[[nodiscard]] bool SetEnterJitData(JSContext* cx, EnterJitData& data, RunState& state, + MutableHandle<GCVector<Value>> vals); JitExecStatus IonCannon(JSContext* cx, RunState& state); @@ -146,7 +146,7 @@ class MIRGenerator; class LIRGraph; class CodeGenerator; -MOZ_MUST_USE bool OptimizeMIR(MIRGenerator* mir); +[[nodiscard]] bool OptimizeMIR(MIRGenerator* mir); LIRGraph* GenerateLIR(MIRGenerator* mir); CodeGenerator* GenerateCode(MIRGenerator* mir, LIRGraph* lir); CodeGenerator* CompileBackEnd(MIRGenerator* mir); diff --git a/js/src/jit/IonAnalysis.cpp b/js/src/jit/IonAnalysis.cpp index aa8f8164b5..ded3ea17ad 100644 --- a/js/src/jit/IonAnalysis.cpp +++ b/js/src/jit/IonAnalysis.cpp @@ -4465,7 +4465,7 @@ JS_FOR_EACH_TRACEKIND(TRACE_ROOTS) #undef TRACE_ROOTS } -MOZ_MUST_USE bool +[[nodiscard]] bool jit::CreateMIRRootList(IonBuilder& builder) { MOZ_ASSERT(!builder.info().isAnalysis()); diff --git a/js/src/jit/IonAnalysis.h b/js/src/jit/IonAnalysis.h index e6b7fa2aa2..6434da6a67 100644 --- a/js/src/jit/IonAnalysis.h +++ b/js/src/jit/IonAnalysis.h @@ -17,13 +17,13 @@ namespace jit { class MIRGenerator; class MIRGraph; -MOZ_MUST_USE bool +[[nodiscard]] bool PruneUnusedBranches(MIRGenerator* mir, MIRGraph& graph); -MOZ_MUST_USE bool +[[nodiscard]] bool FoldTests(MIRGraph& graph); -MOZ_MUST_USE bool +[[nodiscard]] bool SplitCriticalEdges(MIRGraph& graph); bool @@ -34,7 +34,7 @@ enum Observability { AggressiveObservability }; -MOZ_MUST_USE bool +[[nodiscard]] bool EliminatePhis(MIRGenerator* mir, MIRGraph& graph, Observability observe); size_t @@ -43,38 +43,38 @@ MarkLoopBlocks(MIRGraph& graph, MBasicBlock* header, bool* canOsr); void UnmarkLoopBlocks(MIRGraph& graph, MBasicBlock* header); -MOZ_MUST_USE bool +[[nodiscard]] bool MakeLoopsContiguous(MIRGraph& graph); -MOZ_MUST_USE bool +[[nodiscard]] bool EliminateDeadResumePointOperands(MIRGenerator* mir, MIRGraph& graph); -MOZ_MUST_USE bool +[[nodiscard]] bool EliminateDeadCode(MIRGenerator* mir, MIRGraph& graph); -MOZ_MUST_USE bool +[[nodiscard]] bool ApplyTypeInformation(MIRGenerator* mir, MIRGraph& graph); void RenumberBlocks(MIRGraph& graph); -MOZ_MUST_USE bool +[[nodiscard]] bool AccountForCFGChanges(MIRGenerator* mir, MIRGraph& graph, bool updateAliasAnalysis, bool underValueNumberer = false); -MOZ_MUST_USE bool +[[nodiscard]] bool RemoveUnmarkedBlocks(MIRGenerator* mir, MIRGraph& graph, uint32_t numMarkedBlocks); -MOZ_MUST_USE bool +[[nodiscard]] bool CreateMIRRootList(IonBuilder& builder); void ClearDominatorTree(MIRGraph& graph); -MOZ_MUST_USE bool +[[nodiscard]] bool BuildDominatorTree(MIRGraph& graph); -MOZ_MUST_USE bool +[[nodiscard]] bool BuildPhiReverseMapping(MIRGraph& graph); void @@ -86,10 +86,10 @@ AssertGraphCoherency(MIRGraph& graph); void AssertExtendedGraphCoherency(MIRGraph& graph, bool underValueNumberer = false); -MOZ_MUST_USE bool +[[nodiscard]] bool EliminateRedundantChecks(MIRGraph& graph); -MOZ_MUST_USE bool +[[nodiscard]] bool AddKeepAliveInstructions(MIRGraph& graph); class MDefinition; @@ -121,7 +121,7 @@ enum class MathSpace { SimpleLinearSum ExtractLinearSum(MDefinition* ins, MathSpace space = MathSpace::Unknown); -MOZ_MUST_USE bool +[[nodiscard]] bool ExtractLinearInequality(MTest* test, BranchDirection direction, SimpleLinearSum* plhs, MDefinition** prhs, bool* plessEqual); @@ -157,15 +157,15 @@ class LinearSum // These return false on an integer overflow, and afterwards the sum must // not be used. - MOZ_MUST_USE bool multiply(int32_t scale); - MOZ_MUST_USE bool add(const LinearSum& other, int32_t scale = 1); - MOZ_MUST_USE bool add(SimpleLinearSum other, int32_t scale = 1); - MOZ_MUST_USE bool add(MDefinition* term, int32_t scale); - MOZ_MUST_USE bool add(int32_t constant); + [[nodiscard]] bool multiply(int32_t scale); + [[nodiscard]] bool add(const LinearSum& other, int32_t scale = 1); + [[nodiscard]] bool add(SimpleLinearSum other, int32_t scale = 1); + [[nodiscard]] bool add(MDefinition* term, int32_t scale); + [[nodiscard]] bool add(int32_t constant); // Unlike the above function, on failure this leaves the sum unchanged and // it can still be used. - MOZ_MUST_USE bool divide(uint32_t scale); + [[nodiscard]] bool divide(uint32_t scale); int32_t constant() const { return constant_; } size_t numTerms() const { return terms_.length(); } @@ -191,7 +191,7 @@ ConvertLinearSum(TempAllocator& alloc, MBasicBlock* block, const LinearSum& sum, MCompare* ConvertLinearInequality(TempAllocator& alloc, MBasicBlock* block, const LinearSum& sum); -MOZ_MUST_USE bool +[[nodiscard]] bool AnalyzeNewScriptDefiniteProperties(JSContext* cx, DPAConstraintInfo& constraintInfo, HandleFunction fun, @@ -199,7 +199,7 @@ AnalyzeNewScriptDefiniteProperties(JSContext* cx, HandlePlainObject baseobj, Vector<TypeNewScript::Initializer>* initializerList); -MOZ_MUST_USE bool +[[nodiscard]] bool AnalyzeArgumentsUsage(JSContext* cx, JSScript* script); bool diff --git a/js/src/jit/IonBuilder.h b/js/src/jit/IonBuilder.h index 8f616b74eb..c5275d7b89 100644 --- a/js/src/jit/IonBuilder.h +++ b/js/src/jit/IonBuilder.h @@ -217,15 +217,15 @@ class IonBuilder // Callers of build() and buildInline() should always check whether the // call overrecursed, if false is returned. Overrecursion is not // signaled as OOM and will not in general be caught by OOM paths. - MOZ_MUST_USE bool build(); - MOZ_MUST_USE bool buildInline(IonBuilder* callerBuilder, MResumePoint* callerResumePoint, + [[nodiscard]] bool build(); + [[nodiscard]] bool buildInline(IonBuilder* callerBuilder, MResumePoint* callerResumePoint, CallInfo& callInfo); private: - MOZ_MUST_USE bool traverseBytecode(); + [[nodiscard]] bool traverseBytecode(); ControlStatus snoopControlFlow(JSOp op); - MOZ_MUST_USE bool processIterators(); - MOZ_MUST_USE bool inspectOpcode(JSOp op); + [[nodiscard]] bool processIterators(); + [[nodiscard]] bool inspectOpcode(JSOp op); uint32_t readIndex(jsbytecode* pc); JSAtom* readAtom(jsbytecode* pc); bool abort(const char* message, ...) MOZ_FORMAT_PRINTF(2, 3); @@ -233,12 +233,12 @@ class IonBuilder void spew(const char* message); JSFunction* getSingleCallTarget(TemporaryTypeSet* calleeTypes); - MOZ_MUST_USE bool getPolyCallTargets(TemporaryTypeSet* calleeTypes, bool constructing, + [[nodiscard]] bool getPolyCallTargets(TemporaryTypeSet* calleeTypes, bool constructing, ObjectVector& targets, uint32_t maxTargets); void popCfgStack(); DeferredEdge* filterDeadDeferredEdges(DeferredEdge* edge); - MOZ_MUST_USE bool processDeferredContinues(CFGState& state); + [[nodiscard]] bool processDeferredContinues(CFGState& state); ControlStatus processControlEnd(); ControlStatus processCfgStack(); ControlStatus processCfgEntry(CFGState& state); @@ -265,11 +265,11 @@ class IonBuilder ControlStatus processContinue(JSOp op); ControlStatus processBreak(JSOp op, jssrcnote* sn); ControlStatus maybeLoop(JSOp op, jssrcnote* sn); - MOZ_MUST_USE bool pushLoop(CFGState::State state, jsbytecode* stopAt, MBasicBlock* entry, + [[nodiscard]] bool pushLoop(CFGState::State state, jsbytecode* stopAt, MBasicBlock* entry, bool osr, jsbytecode* loopHead, jsbytecode* initialPc, jsbytecode* bodyStart, jsbytecode* bodyEnd, jsbytecode* exitpc, jsbytecode* continuepc); - MOZ_MUST_USE bool analyzeNewLoopTypes(MBasicBlock* entry, jsbytecode* start, jsbytecode* end); + [[nodiscard]] bool analyzeNewLoopTypes(MBasicBlock* entry, jsbytecode* start, jsbytecode* end); MBasicBlock* addBlock(MBasicBlock* block, uint32_t loopDepth); MBasicBlock* newBlock(MBasicBlock* predecessor, jsbytecode* pc); @@ -310,9 +310,9 @@ class IonBuilder // Incorporates a type/typeSet into an OSR value for a loop, after the loop // body has been processed. - MOZ_MUST_USE bool addOsrValueTypeBarrier(uint32_t slot, MInstruction** def, + [[nodiscard]] bool addOsrValueTypeBarrier(uint32_t slot, MInstruction** def, MIRType type, TemporaryTypeSet* typeSet); - MOZ_MUST_USE bool maybeAddOsrTypeBarriers(); + [[nodiscard]] bool maybeAddOsrTypeBarriers(); // Restarts processing of a loop if the type information at its header was // incomplete. @@ -328,19 +328,19 @@ class IonBuilder // Please see the Big Honkin' Comment about how resume points work in // IonBuilder.cpp, near the definition for this function. - MOZ_MUST_USE bool resume(MInstruction* ins, jsbytecode* pc, MResumePoint::Mode mode); - MOZ_MUST_USE bool resumeAt(MInstruction* ins, jsbytecode* pc); - MOZ_MUST_USE bool resumeAfter(MInstruction* ins); - MOZ_MUST_USE bool maybeInsertResume(); + [[nodiscard]] bool resume(MInstruction* ins, jsbytecode* pc, MResumePoint::Mode mode); + [[nodiscard]] bool resumeAt(MInstruction* ins, jsbytecode* pc); + [[nodiscard]] bool resumeAfter(MInstruction* ins); + [[nodiscard]] bool maybeInsertResume(); void insertRecompileCheck(); - MOZ_MUST_USE bool initParameters(); + [[nodiscard]] bool initParameters(); void initLocals(); void rewriteParameter(uint32_t slotIdx, MDefinition* param, int32_t argIndex); - MOZ_MUST_USE bool rewriteParameters(); - MOZ_MUST_USE bool initEnvironmentChain(MDefinition* callee = nullptr); - MOZ_MUST_USE bool initArgumentsObject(); + [[nodiscard]] bool rewriteParameters(); + [[nodiscard]] bool initEnvironmentChain(MDefinition* callee = nullptr); + [[nodiscard]] bool initArgumentsObject(); void pushConstant(const Value& v); MConstant* constant(const Value& v); @@ -350,27 +350,27 @@ class IonBuilder MInstruction* setInitializedLength(MDefinition* obj, JSValueType unboxedType, size_t count); // Improve the type information at tests - MOZ_MUST_USE bool improveTypesAtTest(MDefinition* ins, bool trueBranch, MTest* test); - MOZ_MUST_USE bool improveTypesAtCompare(MCompare* ins, bool trueBranch, MTest* test); - MOZ_MUST_USE bool improveTypesAtNullOrUndefinedCompare(MCompare* ins, bool trueBranch, + [[nodiscard]] bool improveTypesAtTest(MDefinition* ins, bool trueBranch, MTest* test); + [[nodiscard]] bool improveTypesAtCompare(MCompare* ins, bool trueBranch, MTest* test); + [[nodiscard]] bool improveTypesAtNullOrUndefinedCompare(MCompare* ins, bool trueBranch, MTest* test); - MOZ_MUST_USE bool improveTypesAtTypeOfCompare(MCompare* ins, bool trueBranch, MTest* test); + [[nodiscard]] bool improveTypesAtTypeOfCompare(MCompare* ins, bool trueBranch, MTest* test); // Used to detect triangular structure at test. - MOZ_MUST_USE bool detectAndOrStructure(MPhi* ins, bool* branchIsTrue); - MOZ_MUST_USE bool replaceTypeSet(MDefinition* subject, TemporaryTypeSet* type, MTest* test); + [[nodiscard]] bool detectAndOrStructure(MPhi* ins, bool* branchIsTrue); + [[nodiscard]] bool replaceTypeSet(MDefinition* subject, TemporaryTypeSet* type, MTest* test); // Add a guard which ensure that the set of type which goes through this // generated code correspond to the observed types for the bytecode. MDefinition* addTypeBarrier(MDefinition* def, TemporaryTypeSet* observed, BarrierKind kind, MTypeBarrier** pbarrier = nullptr); - MOZ_MUST_USE bool pushTypeBarrier(MDefinition* def, TemporaryTypeSet* observed, + [[nodiscard]] bool pushTypeBarrier(MDefinition* def, TemporaryTypeSet* observed, BarrierKind kind); // As pushTypeBarrier, but will compute the needBarrier boolean itself based // on observed and the JSFunction that we're planning to call. The // JSFunction must be a DOM method or getter. - MOZ_MUST_USE bool pushDOMTypeBarrier(MInstruction* ins, TemporaryTypeSet* observed, + [[nodiscard]] bool pushDOMTypeBarrier(MInstruction* ins, TemporaryTypeSet* observed, JSFunction* func); // If definiteType is not known or def already has the right type, just @@ -412,13 +412,13 @@ class IonBuilder bool invalidatedIdempotentCache(); bool hasStaticEnvironmentObject(EnvironmentCoordinate ec, JSObject** pcall); - MOZ_MUST_USE bool loadSlot(MDefinition* obj, size_t slot, size_t nfixed, MIRType rvalType, + [[nodiscard]] bool loadSlot(MDefinition* obj, size_t slot, size_t nfixed, MIRType rvalType, BarrierKind barrier, TemporaryTypeSet* types); - MOZ_MUST_USE bool loadSlot(MDefinition* obj, Shape* shape, MIRType rvalType, + [[nodiscard]] bool loadSlot(MDefinition* obj, Shape* shape, MIRType rvalType, BarrierKind barrier, TemporaryTypeSet* types); - MOZ_MUST_USE bool storeSlot(MDefinition* obj, size_t slot, size_t nfixed, MDefinition* value, + [[nodiscard]] bool storeSlot(MDefinition* obj, size_t slot, size_t nfixed, MDefinition* value, bool needsBarrier, MIRType slotType = MIRType::None); - MOZ_MUST_USE bool storeSlot(MDefinition* obj, Shape* shape, MDefinition* value, + [[nodiscard]] bool storeSlot(MDefinition* obj, Shape* shape, MDefinition* value, bool needsBarrier, MIRType slotType = MIRType::None); bool shouldAbortOnPreliminaryGroups(MDefinition *obj); @@ -426,135 +426,135 @@ class IonBuilder MDefinition* maybeUnboxForPropertyAccess(MDefinition* def); // jsop_getprop() helpers. - MOZ_MUST_USE bool checkIsDefinitelyOptimizedArguments(MDefinition* obj, bool* isOptimizedArgs); - MOZ_MUST_USE bool getPropTryInferredConstant(bool* emitted, MDefinition* obj, + [[nodiscard]] bool checkIsDefinitelyOptimizedArguments(MDefinition* obj, bool* isOptimizedArgs); + [[nodiscard]] bool getPropTryInferredConstant(bool* emitted, MDefinition* obj, PropertyName* name, TemporaryTypeSet* types); - MOZ_MUST_USE bool getPropTryArgumentsLength(bool* emitted, MDefinition* obj); - MOZ_MUST_USE bool getPropTryArgumentsCallee(bool* emitted, MDefinition* obj, + [[nodiscard]] bool getPropTryArgumentsLength(bool* emitted, MDefinition* obj); + [[nodiscard]] bool getPropTryArgumentsCallee(bool* emitted, MDefinition* obj, PropertyName* name); - MOZ_MUST_USE bool getPropTryConstant(bool* emitted, MDefinition* obj, jsid id, + [[nodiscard]] bool getPropTryConstant(bool* emitted, MDefinition* obj, jsid id, TemporaryTypeSet* types); - MOZ_MUST_USE bool getPropTryNotDefined(bool* emitted, MDefinition* obj, jsid id, + [[nodiscard]] bool getPropTryNotDefined(bool* emitted, MDefinition* obj, jsid id, TemporaryTypeSet* types); - MOZ_MUST_USE bool getPropTryDefiniteSlot(bool* emitted, MDefinition* obj, PropertyName* name, + [[nodiscard]] bool getPropTryDefiniteSlot(bool* emitted, MDefinition* obj, PropertyName* name, BarrierKind barrier, TemporaryTypeSet* types); - MOZ_MUST_USE bool getPropTryModuleNamespace(bool* emitted, MDefinition* obj, PropertyName* name, + [[nodiscard]] bool getPropTryModuleNamespace(bool* emitted, MDefinition* obj, PropertyName* name, BarrierKind barrier, TemporaryTypeSet* types); - MOZ_MUST_USE bool getPropTryUnboxed(bool* emitted, MDefinition* obj, PropertyName* name, + [[nodiscard]] bool getPropTryUnboxed(bool* emitted, MDefinition* obj, PropertyName* name, BarrierKind barrier, TemporaryTypeSet* types); - MOZ_MUST_USE bool getPropTryCommonGetter(bool* emitted, MDefinition* obj, PropertyName* name, + [[nodiscard]] bool getPropTryCommonGetter(bool* emitted, MDefinition* obj, PropertyName* name, TemporaryTypeSet* types); - MOZ_MUST_USE bool getPropTryInlineAccess(bool* emitted, MDefinition* obj, PropertyName* name, + [[nodiscard]] bool getPropTryInlineAccess(bool* emitted, MDefinition* obj, PropertyName* name, BarrierKind barrier, TemporaryTypeSet* types); - MOZ_MUST_USE bool getPropTryTypedObject(bool* emitted, MDefinition* obj, PropertyName* name); - MOZ_MUST_USE bool getPropTryScalarPropOfTypedObject(bool* emitted, MDefinition* typedObj, + [[nodiscard]] bool getPropTryTypedObject(bool* emitted, MDefinition* obj, PropertyName* name); + [[nodiscard]] bool getPropTryScalarPropOfTypedObject(bool* emitted, MDefinition* typedObj, int32_t fieldOffset, TypedObjectPrediction fieldTypeReprs); - MOZ_MUST_USE bool getPropTryReferencePropOfTypedObject(bool* emitted, MDefinition* typedObj, + [[nodiscard]] bool getPropTryReferencePropOfTypedObject(bool* emitted, MDefinition* typedObj, int32_t fieldOffset, TypedObjectPrediction fieldPrediction, PropertyName* name); - MOZ_MUST_USE bool getPropTryComplexPropOfTypedObject(bool* emitted, MDefinition* typedObj, + [[nodiscard]] bool getPropTryComplexPropOfTypedObject(bool* emitted, MDefinition* typedObj, int32_t fieldOffset, TypedObjectPrediction fieldTypeReprs, size_t fieldIndex); - MOZ_MUST_USE bool getPropTryInnerize(bool* emitted, MDefinition* obj, PropertyName* name, + [[nodiscard]] bool getPropTryInnerize(bool* emitted, MDefinition* obj, PropertyName* name, TemporaryTypeSet* types); - MOZ_MUST_USE bool getPropTryCache(bool* emitted, MDefinition* obj, PropertyName* name, + [[nodiscard]] bool getPropTryCache(bool* emitted, MDefinition* obj, PropertyName* name, BarrierKind barrier, TemporaryTypeSet* types); - MOZ_MUST_USE bool getPropTrySharedStub(bool* emitted, MDefinition* obj, + [[nodiscard]] bool getPropTrySharedStub(bool* emitted, MDefinition* obj, TemporaryTypeSet* types); // jsop_setprop() helpers. - MOZ_MUST_USE bool setPropTryCommonSetter(bool* emitted, MDefinition* obj, + [[nodiscard]] bool setPropTryCommonSetter(bool* emitted, MDefinition* obj, PropertyName* name, MDefinition* value); - MOZ_MUST_USE bool setPropTryCommonDOMSetter(bool* emitted, MDefinition* obj, + [[nodiscard]] bool setPropTryCommonDOMSetter(bool* emitted, MDefinition* obj, MDefinition* value, JSFunction* setter, TemporaryTypeSet* objTypes); - MOZ_MUST_USE bool setPropTryDefiniteSlot(bool* emitted, MDefinition* obj, + [[nodiscard]] bool setPropTryDefiniteSlot(bool* emitted, MDefinition* obj, PropertyName* name, MDefinition* value, bool barrier, TemporaryTypeSet* objTypes); - MOZ_MUST_USE bool setPropTryUnboxed(bool* emitted, MDefinition* obj, + [[nodiscard]] bool setPropTryUnboxed(bool* emitted, MDefinition* obj, PropertyName* name, MDefinition* value, bool barrier, TemporaryTypeSet* objTypes); - MOZ_MUST_USE bool setPropTryInlineAccess(bool* emitted, MDefinition* obj, + [[nodiscard]] bool setPropTryInlineAccess(bool* emitted, MDefinition* obj, PropertyName* name, MDefinition* value, bool barrier, TemporaryTypeSet* objTypes); - MOZ_MUST_USE bool setPropTryTypedObject(bool* emitted, MDefinition* obj, + [[nodiscard]] bool setPropTryTypedObject(bool* emitted, MDefinition* obj, PropertyName* name, MDefinition* value); - MOZ_MUST_USE bool setPropTryReferencePropOfTypedObject(bool* emitted, MDefinition* obj, + [[nodiscard]] bool setPropTryReferencePropOfTypedObject(bool* emitted, MDefinition* obj, int32_t fieldOffset, MDefinition* value, TypedObjectPrediction fieldPrediction, PropertyName* name); - MOZ_MUST_USE bool setPropTryScalarPropOfTypedObject(bool* emitted, + [[nodiscard]] bool setPropTryScalarPropOfTypedObject(bool* emitted, MDefinition* obj, int32_t fieldOffset, MDefinition* value, TypedObjectPrediction fieldTypeReprs); - MOZ_MUST_USE bool setPropTryCache(bool* emitted, MDefinition* obj, + [[nodiscard]] bool setPropTryCache(bool* emitted, MDefinition* obj, PropertyName* name, MDefinition* value, bool barrier, TemporaryTypeSet* objTypes); // jsop_binary_arith helpers. MBinaryArithInstruction* binaryArithInstruction(JSOp op, MDefinition* left, MDefinition* right); MIRType binaryArithNumberSpecialization(MDefinition* left, MDefinition* right); - MOZ_MUST_USE bool binaryArithTryConcat(bool* emitted, JSOp op, MDefinition* left, + [[nodiscard]] bool binaryArithTryConcat(bool* emitted, JSOp op, MDefinition* left, MDefinition* right); - MOZ_MUST_USE MBinaryArithInstruction* binaryArithEmitSpecialized(MDefinition::Opcode op, + [[nodiscard]] MBinaryArithInstruction* binaryArithEmitSpecialized(MDefinition::Opcode op, MIRType specialization, MDefinition* left, MDefinition* right); - MOZ_MUST_USE bool binaryArithTrySpecialized(bool* emitted, JSOp op, MDefinition* left, + [[nodiscard]] bool binaryArithTrySpecialized(bool* emitted, JSOp op, MDefinition* left, MDefinition* right); - MOZ_MUST_USE bool binaryArithTrySpecializedOnBaselineInspector(bool* emitted, JSOp op, + [[nodiscard]] bool binaryArithTrySpecializedOnBaselineInspector(bool* emitted, JSOp op, MDefinition* left, MDefinition* right); - MOZ_MUST_USE bool arithTrySharedStub(bool* emitted, JSOp op, MDefinition* left, + [[nodiscard]] bool arithTrySharedStub(bool* emitted, JSOp op, MDefinition* left, MDefinition* right); // jsop_bitnot helpers. - MOZ_MUST_USE bool bitnotTrySpecialized(bool* emitted, MDefinition* input); + [[nodiscard]] bool bitnotTrySpecialized(bool* emitted, MDefinition* input); // jsop_inc_or_dec helpers. MDefinition* unaryArithConvertToBinary(JSOp op, MDefinition::Opcode* defOp); - MOZ_MUST_USE bool unaryArithTrySpecialized(bool* emitted, JSOp op, MDefinition* value); - MOZ_MUST_USE bool unaryArithTrySpecializedOnBaselineInspector(bool* emitted, JSOp op, + [[nodiscard]] bool unaryArithTrySpecialized(bool* emitted, JSOp op, MDefinition* value); + [[nodiscard]] bool unaryArithTrySpecializedOnBaselineInspector(bool* emitted, JSOp op, MDefinition* value); // jsop_pow helpers. - MOZ_MUST_USE bool powTrySpecialized(bool* emitted, MDefinition* base, MDefinition* power, + [[nodiscard]] bool powTrySpecialized(bool* emitted, MDefinition* base, MDefinition* power, MIRType outputType); // jsop_compare helpers. - MOZ_MUST_USE bool compareTrySpecialized(bool* emitted, JSOp op, MDefinition* left, + [[nodiscard]] bool compareTrySpecialized(bool* emitted, JSOp op, MDefinition* left, MDefinition* right); - MOZ_MUST_USE bool compareTryBitwise(bool* emitted, JSOp op, MDefinition* left, + [[nodiscard]] bool compareTryBitwise(bool* emitted, JSOp op, MDefinition* left, MDefinition* right); - MOZ_MUST_USE bool compareTrySpecializedOnBaselineInspector(bool* emitted, JSOp op, + [[nodiscard]] bool compareTrySpecializedOnBaselineInspector(bool* emitted, JSOp op, MDefinition* left, MDefinition* right); - MOZ_MUST_USE bool compareTrySharedStub(bool* emitted, JSOp op, MDefinition* left, + [[nodiscard]] bool compareTrySharedStub(bool* emitted, JSOp op, MDefinition* left, MDefinition* right); // jsop_newarray helpers. - MOZ_MUST_USE bool newArrayTrySharedStub(bool* emitted); - MOZ_MUST_USE bool newArrayTryTemplateObject(bool* emitted, JSObject* templateObject, + [[nodiscard]] bool newArrayTrySharedStub(bool* emitted); + [[nodiscard]] bool newArrayTryTemplateObject(bool* emitted, JSObject* templateObject, uint32_t length); - MOZ_MUST_USE bool newArrayTryVM(bool* emitted, JSObject* templateObject, uint32_t length); + [[nodiscard]] bool newArrayTryVM(bool* emitted, JSObject* templateObject, uint32_t length); // jsop_newobject helpers. - MOZ_MUST_USE bool newObjectTrySharedStub(bool* emitted); - MOZ_MUST_USE bool newObjectTryTemplateObject(bool* emitted, JSObject* templateObject); - MOZ_MUST_USE bool newObjectTryVM(bool* emitted, JSObject* templateObject); + [[nodiscard]] bool newObjectTrySharedStub(bool* emitted); + [[nodiscard]] bool newObjectTryTemplateObject(bool* emitted, JSObject* templateObject); + [[nodiscard]] bool newObjectTryVM(bool* emitted, JSObject* templateObject); // jsop_in helpers. - MOZ_MUST_USE bool inTryDense(bool* emitted, MDefinition* obj, MDefinition* id); - MOZ_MUST_USE bool inTryFold(bool* emitted, MDefinition* obj, MDefinition* id); + [[nodiscard]] bool inTryDense(bool* emitted, MDefinition* obj, MDefinition* id); + [[nodiscard]] bool inTryFold(bool* emitted, MDefinition* obj, MDefinition* id); // binary data lookup helpers. TypedObjectPrediction typedObjectPrediction(MDefinition* typedObj); TypedObjectPrediction typedObjectPrediction(TemporaryTypeSet* types); - MOZ_MUST_USE bool typedObjectHasField(MDefinition* typedObj, + [[nodiscard]] bool typedObjectHasField(MDefinition* typedObj, PropertyName* name, size_t* fieldOffset, TypedObjectPrediction* fieldTypeReprs, @@ -572,87 +572,87 @@ class IonBuilder MDefinition* typeObjectForElementFromArrayStructType(MDefinition* typedObj); MDefinition* typeObjectForFieldFromStructType(MDefinition* type, size_t fieldIndex); - MOZ_MUST_USE bool storeReferenceTypedObjectValue(MDefinition* typedObj, + [[nodiscard]] bool storeReferenceTypedObjectValue(MDefinition* typedObj, const LinearSum& byteOffset, ReferenceTypeDescr::Type type, MDefinition* value, PropertyName* name); - MOZ_MUST_USE bool storeScalarTypedObjectValue(MDefinition* typedObj, + [[nodiscard]] bool storeScalarTypedObjectValue(MDefinition* typedObj, const LinearSum& byteOffset, ScalarTypeDescr::Type type, MDefinition* value); - MOZ_MUST_USE bool checkTypedObjectIndexInBounds(uint32_t elemSize, + [[nodiscard]] bool checkTypedObjectIndexInBounds(uint32_t elemSize, MDefinition* obj, MDefinition* index, TypedObjectPrediction objTypeDescrs, LinearSum* indexAsByteOffset); - MOZ_MUST_USE bool pushDerivedTypedObject(bool* emitted, + [[nodiscard]] bool pushDerivedTypedObject(bool* emitted, MDefinition* obj, const LinearSum& byteOffset, TypedObjectPrediction derivedTypeDescrs, MDefinition* derivedTypeObj); - MOZ_MUST_USE bool pushScalarLoadFromTypedObject(MDefinition* obj, + [[nodiscard]] bool pushScalarLoadFromTypedObject(MDefinition* obj, const LinearSum& byteoffset, ScalarTypeDescr::Type type); - MOZ_MUST_USE bool pushReferenceLoadFromTypedObject(MDefinition* typedObj, + [[nodiscard]] bool pushReferenceLoadFromTypedObject(MDefinition* typedObj, const LinearSum& byteOffset, ReferenceTypeDescr::Type type, PropertyName* name); JSObject* getStaticTypedArrayObject(MDefinition* obj, MDefinition* index); // jsop_setelem() helpers. - MOZ_MUST_USE bool setElemTryTypedArray(bool* emitted, MDefinition* object, + [[nodiscard]] bool setElemTryTypedArray(bool* emitted, MDefinition* object, MDefinition* index, MDefinition* value); - MOZ_MUST_USE bool setElemTryTypedObject(bool* emitted, MDefinition* obj, + [[nodiscard]] bool setElemTryTypedObject(bool* emitted, MDefinition* obj, MDefinition* index, MDefinition* value); - MOZ_MUST_USE bool setElemTryTypedStatic(bool* emitted, MDefinition* object, + [[nodiscard]] bool setElemTryTypedStatic(bool* emitted, MDefinition* object, MDefinition* index, MDefinition* value); - MOZ_MUST_USE bool setElemTryDense(bool* emitted, MDefinition* object, + [[nodiscard]] bool setElemTryDense(bool* emitted, MDefinition* object, MDefinition* index, MDefinition* value, bool writeHole); - MOZ_MUST_USE bool setElemTryArguments(bool* emitted, MDefinition* object, + [[nodiscard]] bool setElemTryArguments(bool* emitted, MDefinition* object, MDefinition* index, MDefinition* value); - MOZ_MUST_USE bool setElemTryCache(bool* emitted, MDefinition* object, + [[nodiscard]] bool setElemTryCache(bool* emitted, MDefinition* object, MDefinition* index, MDefinition* value); - MOZ_MUST_USE bool setElemTryReferenceElemOfTypedObject(bool* emitted, + [[nodiscard]] bool setElemTryReferenceElemOfTypedObject(bool* emitted, MDefinition* obj, MDefinition* index, TypedObjectPrediction objPrediction, MDefinition* value, TypedObjectPrediction elemPrediction); - MOZ_MUST_USE bool setElemTryScalarElemOfTypedObject(bool* emitted, + [[nodiscard]] bool setElemTryScalarElemOfTypedObject(bool* emitted, MDefinition* obj, MDefinition* index, TypedObjectPrediction objTypeReprs, MDefinition* value, TypedObjectPrediction elemTypeReprs, uint32_t elemSize); - MOZ_MUST_USE bool initializeArrayElement(MDefinition* obj, size_t index, MDefinition* value, + [[nodiscard]] bool initializeArrayElement(MDefinition* obj, size_t index, MDefinition* value, JSValueType unboxedType, bool addResumePointAndIncrementInitializedLength); // jsop_getelem() helpers. - MOZ_MUST_USE bool getElemTryDense(bool* emitted, MDefinition* obj, MDefinition* index); - MOZ_MUST_USE bool getElemTryGetProp(bool* emitted, MDefinition* obj, MDefinition* index); - MOZ_MUST_USE bool getElemTryTypedStatic(bool* emitted, MDefinition* obj, MDefinition* index); - MOZ_MUST_USE bool getElemTryTypedArray(bool* emitted, MDefinition* obj, MDefinition* index); - MOZ_MUST_USE bool getElemTryTypedObject(bool* emitted, MDefinition* obj, MDefinition* index); - MOZ_MUST_USE bool getElemTryString(bool* emitted, MDefinition* obj, MDefinition* index); - MOZ_MUST_USE bool getElemTryArguments(bool* emitted, MDefinition* obj, MDefinition* index); - MOZ_MUST_USE bool getElemTryArgumentsInlined(bool* emitted, MDefinition* obj, + [[nodiscard]] bool getElemTryDense(bool* emitted, MDefinition* obj, MDefinition* index); + [[nodiscard]] bool getElemTryGetProp(bool* emitted, MDefinition* obj, MDefinition* index); + [[nodiscard]] bool getElemTryTypedStatic(bool* emitted, MDefinition* obj, MDefinition* index); + [[nodiscard]] bool getElemTryTypedArray(bool* emitted, MDefinition* obj, MDefinition* index); + [[nodiscard]] bool getElemTryTypedObject(bool* emitted, MDefinition* obj, MDefinition* index); + [[nodiscard]] bool getElemTryString(bool* emitted, MDefinition* obj, MDefinition* index); + [[nodiscard]] bool getElemTryArguments(bool* emitted, MDefinition* obj, MDefinition* index); + [[nodiscard]] bool getElemTryArgumentsInlined(bool* emitted, MDefinition* obj, MDefinition* index); - MOZ_MUST_USE bool getElemTryCache(bool* emitted, MDefinition* obj, MDefinition* index); - MOZ_MUST_USE bool getElemTryScalarElemOfTypedObject(bool* emitted, + [[nodiscard]] bool getElemTryCache(bool* emitted, MDefinition* obj, MDefinition* index); + [[nodiscard]] bool getElemTryScalarElemOfTypedObject(bool* emitted, MDefinition* obj, MDefinition* index, TypedObjectPrediction objTypeReprs, TypedObjectPrediction elemTypeReprs, uint32_t elemSize); - MOZ_MUST_USE bool getElemTryReferenceElemOfTypedObject(bool* emitted, + [[nodiscard]] bool getElemTryReferenceElemOfTypedObject(bool* emitted, MDefinition* obj, MDefinition* index, TypedObjectPrediction objPrediction, TypedObjectPrediction elemPrediction); - MOZ_MUST_USE bool getElemTryComplexElemOfTypedObject(bool* emitted, + [[nodiscard]] bool getElemTryComplexElemOfTypedObject(bool* emitted, MDefinition* obj, MDefinition* index, TypedObjectPrediction objTypeReprs, @@ -683,7 +683,7 @@ class IonBuilder return length; } - MOZ_MUST_USE bool improveThisTypesForCall(); + [[nodiscard]] bool improveThisTypesForCall(); MDefinition* getCallee(); MDefinition* getAliasedVar(EnvironmentCoordinate ec); @@ -691,118 +691,118 @@ class IonBuilder MDefinition* convertToBoolean(MDefinition* input); - MOZ_MUST_USE bool tryFoldInstanceOf(MDefinition* lhs, JSObject* protoObject); - MOZ_MUST_USE bool hasOnProtoChain(TypeSet::ObjectKey* key, JSObject* protoObject, + [[nodiscard]] bool tryFoldInstanceOf(MDefinition* lhs, JSObject* protoObject); + [[nodiscard]] bool hasOnProtoChain(TypeSet::ObjectKey* key, JSObject* protoObject, bool* hasOnProto); - MOZ_MUST_USE bool jsop_add(MDefinition* left, MDefinition* right); - MOZ_MUST_USE bool jsop_bitnot(); - MOZ_MUST_USE bool jsop_bitop(JSOp op); - MOZ_MUST_USE bool jsop_binary_arith(JSOp op); - MOZ_MUST_USE bool jsop_binary_arith(JSOp op, MDefinition* left, MDefinition* right); - MOZ_MUST_USE bool jsop_pow(); - MOZ_MUST_USE bool jsop_pos(); - MOZ_MUST_USE bool jsop_neg(); - MOZ_MUST_USE bool jsop_tonumeric(); - MOZ_MUST_USE bool jsop_inc_or_dec(JSOp op); - MOZ_MUST_USE bool jsop_tostring(); - MOZ_MUST_USE bool jsop_setarg(uint32_t arg); - MOZ_MUST_USE bool jsop_defvar(uint32_t index); - MOZ_MUST_USE bool jsop_deflexical(uint32_t index); - MOZ_MUST_USE bool jsop_deffun(uint32_t index); - MOZ_MUST_USE bool jsop_notearg(); - MOZ_MUST_USE bool jsop_throwsetconst(); - MOZ_MUST_USE bool jsop_checklexical(); - MOZ_MUST_USE bool jsop_checkaliasedlexical(EnvironmentCoordinate ec); - MOZ_MUST_USE bool jsop_funcall(uint32_t argc); - MOZ_MUST_USE bool jsop_funapply(uint32_t argc); - MOZ_MUST_USE bool jsop_funapplyarguments(uint32_t argc); - MOZ_MUST_USE bool jsop_funapplyarray(uint32_t argc); - MOZ_MUST_USE bool jsop_call(uint32_t argc, bool constructing); - MOZ_MUST_USE bool jsop_call(uint32_t argc, bool constructing, bool ignoresReturnValue); - MOZ_MUST_USE bool jsop_eval(uint32_t argc); - MOZ_MUST_USE bool jsop_ifeq(JSOp op); - MOZ_MUST_USE bool jsop_try(); - MOZ_MUST_USE bool jsop_label(); - MOZ_MUST_USE bool jsop_condswitch(); - MOZ_MUST_USE bool jsop_logical(JSOp op); - MOZ_MUST_USE bool jsop_dup2(); - MOZ_MUST_USE bool jsop_loophead(jsbytecode* pc); - MOZ_MUST_USE bool jsop_compare(JSOp op); - MOZ_MUST_USE bool jsop_compare(JSOp op, MDefinition* left, MDefinition* right); - MOZ_MUST_USE bool getStaticName(JSObject* staticObject, PropertyName* name, bool* psucceeded, + [[nodiscard]] bool jsop_add(MDefinition* left, MDefinition* right); + [[nodiscard]] bool jsop_bitnot(); + [[nodiscard]] bool jsop_bitop(JSOp op); + [[nodiscard]] bool jsop_binary_arith(JSOp op); + [[nodiscard]] bool jsop_binary_arith(JSOp op, MDefinition* left, MDefinition* right); + [[nodiscard]] bool jsop_pow(); + [[nodiscard]] bool jsop_pos(); + [[nodiscard]] bool jsop_neg(); + [[nodiscard]] bool jsop_tonumeric(); + [[nodiscard]] bool jsop_inc_or_dec(JSOp op); + [[nodiscard]] bool jsop_tostring(); + [[nodiscard]] bool jsop_setarg(uint32_t arg); + [[nodiscard]] bool jsop_defvar(uint32_t index); + [[nodiscard]] bool jsop_deflexical(uint32_t index); + [[nodiscard]] bool jsop_deffun(uint32_t index); + [[nodiscard]] bool jsop_notearg(); + [[nodiscard]] bool jsop_throwsetconst(); + [[nodiscard]] bool jsop_checklexical(); + [[nodiscard]] bool jsop_checkaliasedlexical(EnvironmentCoordinate ec); + [[nodiscard]] bool jsop_funcall(uint32_t argc); + [[nodiscard]] bool jsop_funapply(uint32_t argc); + [[nodiscard]] bool jsop_funapplyarguments(uint32_t argc); + [[nodiscard]] bool jsop_funapplyarray(uint32_t argc); + [[nodiscard]] bool jsop_call(uint32_t argc, bool constructing); + [[nodiscard]] bool jsop_call(uint32_t argc, bool constructing, bool ignoresReturnValue); + [[nodiscard]] bool jsop_eval(uint32_t argc); + [[nodiscard]] bool jsop_ifeq(JSOp op); + [[nodiscard]] bool jsop_try(); + [[nodiscard]] bool jsop_label(); + [[nodiscard]] bool jsop_condswitch(); + [[nodiscard]] bool jsop_logical(JSOp op); + [[nodiscard]] bool jsop_dup2(); + [[nodiscard]] bool jsop_loophead(jsbytecode* pc); + [[nodiscard]] bool jsop_compare(JSOp op); + [[nodiscard]] bool jsop_compare(JSOp op, MDefinition* left, MDefinition* right); + [[nodiscard]] bool getStaticName(JSObject* staticObject, PropertyName* name, bool* psucceeded, MDefinition* lexicalCheck = nullptr); - MOZ_MUST_USE bool loadStaticSlot(JSObject* staticObject, BarrierKind barrier, + [[nodiscard]] bool loadStaticSlot(JSObject* staticObject, BarrierKind barrier, TemporaryTypeSet* types, uint32_t slot); - MOZ_MUST_USE bool setStaticName(JSObject* staticObject, PropertyName* name); - MOZ_MUST_USE bool jsop_getgname(PropertyName* name); - MOZ_MUST_USE bool jsop_getname(PropertyName* name); - MOZ_MUST_USE bool jsop_intrinsic(PropertyName* name); - MOZ_MUST_USE bool jsop_getimport(PropertyName* name); - MOZ_MUST_USE bool jsop_bindname(PropertyName* name); - MOZ_MUST_USE bool jsop_bindvar(); - MOZ_MUST_USE bool jsop_getelem(); - MOZ_MUST_USE bool jsop_getelem_dense(MDefinition* obj, MDefinition* index, + [[nodiscard]] bool setStaticName(JSObject* staticObject, PropertyName* name); + [[nodiscard]] bool jsop_getgname(PropertyName* name); + [[nodiscard]] bool jsop_getname(PropertyName* name); + [[nodiscard]] bool jsop_intrinsic(PropertyName* name); + [[nodiscard]] bool jsop_getimport(PropertyName* name); + [[nodiscard]] bool jsop_bindname(PropertyName* name); + [[nodiscard]] bool jsop_bindvar(); + [[nodiscard]] bool jsop_getelem(); + [[nodiscard]] bool jsop_getelem_dense(MDefinition* obj, MDefinition* index, JSValueType unboxedType); - MOZ_MUST_USE bool jsop_getelem_typed(MDefinition* obj, MDefinition* index, + [[nodiscard]] bool jsop_getelem_typed(MDefinition* obj, MDefinition* index, ScalarTypeDescr::Type arrayType); - MOZ_MUST_USE bool jsop_setelem(); - MOZ_MUST_USE bool jsop_setelem_dense(TemporaryTypeSet::DoubleConversion conversion, + [[nodiscard]] bool jsop_setelem(); + [[nodiscard]] bool jsop_setelem_dense(TemporaryTypeSet::DoubleConversion conversion, MDefinition* object, MDefinition* index, MDefinition* value, JSValueType unboxedType, bool writeHole, bool* emitted); - MOZ_MUST_USE bool jsop_setelem_typed(ScalarTypeDescr::Type arrayType, + [[nodiscard]] bool jsop_setelem_typed(ScalarTypeDescr::Type arrayType, MDefinition* object, MDefinition* index, MDefinition* value); - MOZ_MUST_USE bool jsop_length(); - MOZ_MUST_USE bool jsop_length_fastPath(); - MOZ_MUST_USE bool jsop_arguments(); - MOZ_MUST_USE bool jsop_arguments_getelem(); - MOZ_MUST_USE bool jsop_runonce(); - MOZ_MUST_USE bool jsop_rest(); - MOZ_MUST_USE bool jsop_not(); - MOZ_MUST_USE bool jsop_getprop(PropertyName* name); - MOZ_MUST_USE bool jsop_setprop(PropertyName* name); - MOZ_MUST_USE bool jsop_delprop(PropertyName* name); - MOZ_MUST_USE bool jsop_delelem(); - MOZ_MUST_USE bool jsop_newarray(uint32_t length); - MOZ_MUST_USE bool jsop_newarray(JSObject* templateObject, uint32_t length); - MOZ_MUST_USE bool jsop_newarray_copyonwrite(); - MOZ_MUST_USE bool jsop_newobject(); - MOZ_MUST_USE bool jsop_initelem(); - MOZ_MUST_USE bool jsop_initelem_array(); - MOZ_MUST_USE bool jsop_initelem_getter_setter(); - MOZ_MUST_USE bool jsop_mutateproto(); - MOZ_MUST_USE bool jsop_initprop(PropertyName* name); - MOZ_MUST_USE bool jsop_initprop_getter_setter(PropertyName* name); - MOZ_MUST_USE bool jsop_regexp(RegExpObject* reobj); - MOZ_MUST_USE bool jsop_object(JSObject* obj); - MOZ_MUST_USE bool jsop_lambda(JSFunction* fun); - MOZ_MUST_USE bool jsop_lambda_arrow(JSFunction* fun); - MOZ_MUST_USE bool jsop_setfunname(uint8_t prefixKind); - MOZ_MUST_USE bool jsop_functionthis(); - MOZ_MUST_USE bool jsop_globalthis(); - MOZ_MUST_USE bool jsop_typeof(); - MOZ_MUST_USE bool jsop_toasync(); - MOZ_MUST_USE bool jsop_toasyncgen(); - MOZ_MUST_USE bool jsop_toasynciter(); - MOZ_MUST_USE bool jsop_toid(); - MOZ_MUST_USE bool jsop_iter(uint8_t flags); - MOZ_MUST_USE bool jsop_itermore(); - MOZ_MUST_USE bool jsop_isnoiter(); - MOZ_MUST_USE bool jsop_iterend(); - MOZ_MUST_USE bool jsop_in(); - MOZ_MUST_USE bool jsop_instanceof(); - MOZ_MUST_USE bool jsop_getaliasedvar(EnvironmentCoordinate ec); - MOZ_MUST_USE bool jsop_setaliasedvar(EnvironmentCoordinate ec); - MOZ_MUST_USE bool jsop_debugger(); - MOZ_MUST_USE bool jsop_newtarget(); - MOZ_MUST_USE bool jsop_checkisobj(uint8_t kind); - MOZ_MUST_USE bool jsop_checkiscallable(uint8_t kind); - MOZ_MUST_USE bool jsop_checkobjcoercible(); - MOZ_MUST_USE bool jsop_pushcallobj(); - MOZ_MUST_USE bool jsop_importmeta(); - MOZ_MUST_USE bool jsop_dynamic_import(); + [[nodiscard]] bool jsop_length(); + [[nodiscard]] bool jsop_length_fastPath(); + [[nodiscard]] bool jsop_arguments(); + [[nodiscard]] bool jsop_arguments_getelem(); + [[nodiscard]] bool jsop_runonce(); + [[nodiscard]] bool jsop_rest(); + [[nodiscard]] bool jsop_not(); + [[nodiscard]] bool jsop_getprop(PropertyName* name); + [[nodiscard]] bool jsop_setprop(PropertyName* name); + [[nodiscard]] bool jsop_delprop(PropertyName* name); + [[nodiscard]] bool jsop_delelem(); + [[nodiscard]] bool jsop_newarray(uint32_t length); + [[nodiscard]] bool jsop_newarray(JSObject* templateObject, uint32_t length); + [[nodiscard]] bool jsop_newarray_copyonwrite(); + [[nodiscard]] bool jsop_newobject(); + [[nodiscard]] bool jsop_initelem(); + [[nodiscard]] bool jsop_initelem_array(); + [[nodiscard]] bool jsop_initelem_getter_setter(); + [[nodiscard]] bool jsop_mutateproto(); + [[nodiscard]] bool jsop_initprop(PropertyName* name); + [[nodiscard]] bool jsop_initprop_getter_setter(PropertyName* name); + [[nodiscard]] bool jsop_regexp(RegExpObject* reobj); + [[nodiscard]] bool jsop_object(JSObject* obj); + [[nodiscard]] bool jsop_lambda(JSFunction* fun); + [[nodiscard]] bool jsop_lambda_arrow(JSFunction* fun); + [[nodiscard]] bool jsop_setfunname(uint8_t prefixKind); + [[nodiscard]] bool jsop_functionthis(); + [[nodiscard]] bool jsop_globalthis(); + [[nodiscard]] bool jsop_typeof(); + [[nodiscard]] bool jsop_toasync(); + [[nodiscard]] bool jsop_toasyncgen(); + [[nodiscard]] bool jsop_toasynciter(); + [[nodiscard]] bool jsop_toid(); + [[nodiscard]] bool jsop_iter(uint8_t flags); + [[nodiscard]] bool jsop_itermore(); + [[nodiscard]] bool jsop_isnoiter(); + [[nodiscard]] bool jsop_iterend(); + [[nodiscard]] bool jsop_in(); + [[nodiscard]] bool jsop_instanceof(); + [[nodiscard]] bool jsop_getaliasedvar(EnvironmentCoordinate ec); + [[nodiscard]] bool jsop_setaliasedvar(EnvironmentCoordinate ec); + [[nodiscard]] bool jsop_debugger(); + [[nodiscard]] bool jsop_newtarget(); + [[nodiscard]] bool jsop_checkisobj(uint8_t kind); + [[nodiscard]] bool jsop_checkiscallable(uint8_t kind); + [[nodiscard]] bool jsop_checkobjcoercible(); + [[nodiscard]] bool jsop_pushcallobj(); + [[nodiscard]] bool jsop_importmeta(); + [[nodiscard]] bool jsop_dynamic_import(); /* Inlining. */ @@ -830,7 +830,7 @@ class IonBuilder // Oracles. InliningDecision canInlineTarget(JSFunction* target, CallInfo& callInfo); InliningDecision makeInliningDecision(JSObject* target, CallInfo& callInfo); - MOZ_MUST_USE bool selectInliningTargets(const ObjectVector& targets, CallInfo& callInfo, + [[nodiscard]] bool selectInliningTargets(const ObjectVector& targets, CallInfo& callInfo, BoolVector& choiceSet, uint32_t* numInlineable); // Native inlining helpers. @@ -962,13 +962,13 @@ class IonBuilder // Call functions InliningStatus inlineCallsite(const ObjectVector& targets, CallInfo& callInfo); - MOZ_MUST_USE bool inlineCalls(CallInfo& callInfo, const ObjectVector& targets, + [[nodiscard]] bool inlineCalls(CallInfo& callInfo, const ObjectVector& targets, BoolVector& choiceSet, MGetPropertyCache* maybeCache); // Inlining helpers. - MOZ_MUST_USE bool inlineGenericFallback(JSFunction* target, CallInfo& callInfo, + [[nodiscard]] bool inlineGenericFallback(JSFunction* target, CallInfo& callInfo, MBasicBlock* dispatchBlock); - MOZ_MUST_USE bool inlineObjectGroupFallback(CallInfo& callInfo, MBasicBlock* dispatchBlock, + [[nodiscard]] bool inlineObjectGroupFallback(CallInfo& callInfo, MBasicBlock* dispatchBlock, MObjectGroupDispatch* dispatch, MGetPropertyCache* cache, MBasicBlock** fallbackTarget); @@ -978,22 +978,22 @@ class IonBuilder DoCheckAtomicResult }; - MOZ_MUST_USE bool atomicsMeetsPreconditions(CallInfo& callInfo, Scalar::Type* arrayElementType, + [[nodiscard]] bool atomicsMeetsPreconditions(CallInfo& callInfo, Scalar::Type* arrayElementType, bool* requiresDynamicCheck, AtomicCheckResult checkResult=DoCheckAtomicResult); void atomicsCheckBounds(CallInfo& callInfo, MInstruction** elements, MDefinition** index); - MOZ_MUST_USE bool testNeedsArgumentCheck(JSFunction* target, CallInfo& callInfo); + [[nodiscard]] bool testNeedsArgumentCheck(JSFunction* target, CallInfo& callInfo); MCall* makeCallHelper(JSFunction* target, CallInfo& callInfo); - MOZ_MUST_USE bool makeCall(JSFunction* target, CallInfo& callInfo); + [[nodiscard]] bool makeCall(JSFunction* target, CallInfo& callInfo); MDefinition* patchInlinedReturn(CallInfo& callInfo, MBasicBlock* exit, MBasicBlock* bottom); MDefinition* patchInlinedReturns(CallInfo& callInfo, MIRGraphReturns& returns, MBasicBlock* bottom); MDefinition* specializeInlinedReturn(MDefinition* rdef, MBasicBlock* exit); - MOZ_MUST_USE bool objectsHaveCommonPrototype(TemporaryTypeSet* types, PropertyName* name, + [[nodiscard]] bool objectsHaveCommonPrototype(TemporaryTypeSet* types, PropertyName* name, bool isGetter, JSObject* foundProto, bool* guardGlobal); void freezePropertiesForCommonPrototype(TemporaryTypeSet* types, PropertyName* name, @@ -1001,12 +1001,12 @@ class IonBuilder /* * Callers must pass a non-null globalGuard if they pass a non-null globalShape. */ - MOZ_MUST_USE bool testCommonGetterSetter(TemporaryTypeSet* types, PropertyName* name, + [[nodiscard]] bool testCommonGetterSetter(TemporaryTypeSet* types, PropertyName* name, bool isGetter, JSObject* foundProto, Shape* lastProperty, JSFunction* getterOrSetter, MDefinition** guard, Shape* globalShape = nullptr, MDefinition** globalGuard = nullptr); - MOZ_MUST_USE bool testShouldDOMCall(TypeSet* inTypes, + [[nodiscard]] bool testShouldDOMCall(TypeSet* inTypes, JSFunction* func, JSJitInfo::OpType opType); MDefinition* @@ -1015,7 +1015,7 @@ class IonBuilder const BaselineInspector::ObjectGroupVector& convertUnboxedGroups, bool isOwnProperty); - MOZ_MUST_USE bool annotateGetPropertyCache(MDefinition* obj, PropertyName* name, + [[nodiscard]] bool annotateGetPropertyCache(MDefinition* obj, PropertyName* name, MGetPropertyCache* getPropCache, TemporaryTypeSet* objTypes, TemporaryTypeSet* pushedTypes); @@ -1046,8 +1046,8 @@ class IonBuilder MDefinition* elements, int32_t elementsOffset, MDefinition* scaledOffset, JSValueType unboxedType, MDefinition* value, bool preBarrier = true); - MOZ_MUST_USE bool checkPreliminaryGroups(MDefinition *obj); - MOZ_MUST_USE bool freezePropTypeSets(TemporaryTypeSet* types, + [[nodiscard]] bool checkPreliminaryGroups(MDefinition *obj); + [[nodiscard]] bool freezePropTypeSets(TemporaryTypeSet* types, JSObject* foundProto, PropertyName* name); bool canInlinePropertyOpShapes(const BaselineInspector::ReceiverVector& receivers); @@ -1057,7 +1057,7 @@ class IonBuilder // updating |current| directly. setCurrent() should only be used in cases // where the block cannot have phis whose type needs to be computed. - MOZ_MUST_USE bool setCurrentAndSpecializePhis(MBasicBlock* block) { + [[nodiscard]] bool setCurrentAndSpecializePhis(MBasicBlock* block) { if (block) { if (!block->specializePhis(alloc())) return false; @@ -1140,7 +1140,7 @@ class IonBuilder void trace(JSTracer* trc); private: - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); JSContext* analysisContext; BaselineFrameInspector* baselineFrame_; @@ -1368,7 +1368,7 @@ class CallInfo setter_(false) { } - MOZ_MUST_USE bool init(CallInfo& callInfo) { + [[nodiscard]] bool init(CallInfo& callInfo) { MOZ_ASSERT(constructing_ == callInfo.constructing()); fun_ = callInfo.fun(); @@ -1384,7 +1384,7 @@ class CallInfo return true; } - MOZ_MUST_USE bool init(MBasicBlock* current, uint32_t argc) { + [[nodiscard]] bool init(MBasicBlock* current, uint32_t argc) { MOZ_ASSERT(args_.empty()); // Get the arguments in the right order @@ -1427,7 +1427,7 @@ class CallInfo return argc() + 2 + constructing(); } - MOZ_MUST_USE bool setArgs(const MDefinitionVector& args) { + [[nodiscard]] bool setArgs(const MDefinitionVector& args) { MOZ_ASSERT(args_.empty()); return args_.appendAll(args); } diff --git a/js/src/jit/IonCaches.h b/js/src/jit/IonCaches.h index 914965055b..13b0600e1c 100644 --- a/js/src/jit/IonCaches.h +++ b/js/src/jit/IonCaches.h @@ -302,7 +302,7 @@ class IonCache // Combine both linkStub and attachStub into one function. In addition, it // produces a spew augmented with the attachKind string. - MOZ_MUST_USE bool linkAndAttachStub(JSContext* cx, MacroAssembler& masm, StubAttacher& attacher, + [[nodiscard]] bool linkAndAttachStub(JSContext* cx, MacroAssembler& masm, StubAttacher& attacher, IonScript* ion, const char* attachKind, JS::TrackedOutcome = JS::TrackedOutcome::ICOptStub_GenericSuccess); @@ -504,76 +504,76 @@ class GetPropertyIC : public IonCache void maybeDisable(bool emitted); // Attach the proper stub, if possible - MOZ_MUST_USE bool tryAttachStub(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleValue idval, bool* emitted); + [[nodiscard]] bool tryAttachStub(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleValue idval, bool* emitted); - MOZ_MUST_USE bool tryAttachProxy(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleId id, void* returnAddr, - bool* emitted); + [[nodiscard]] bool tryAttachProxy(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleId id, void* returnAddr, + bool* emitted); - MOZ_MUST_USE bool tryAttachGenericProxy(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleId id, void* returnAddr, - bool* emitted); + [[nodiscard]] bool tryAttachGenericProxy(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleId id, void* returnAddr, + bool* emitted); - MOZ_MUST_USE bool tryAttachDOMProxyShadowed(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, HandleId id, - void* returnAddr, bool* emitted); + [[nodiscard]] bool tryAttachDOMProxyShadowed(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, HandleId id, + void* returnAddr, bool* emitted); - MOZ_MUST_USE bool tryAttachDOMProxyUnshadowed(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, HandleId id, - bool resetNeeded, void* returnAddr, - bool* emitted); - - MOZ_MUST_USE bool tryAttachNative(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleId id, void* returnAddr, - bool* emitted); + [[nodiscard]] bool tryAttachDOMProxyUnshadowed(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, HandleId id, + bool resetNeeded, void* returnAddr, + bool* emitted); - MOZ_MUST_USE bool tryAttachUnboxed(JSContext* cx, HandleScript outerScript, IonScript* ion, + [[nodiscard]] bool tryAttachNative(JSContext* cx, HandleScript outerScript, IonScript* ion, HandleObject obj, HandleId id, void* returnAddr, bool* emitted); - MOZ_MUST_USE bool tryAttachUnboxedExpando(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, HandleId id, - void* returnAddr, bool* emitted); + [[nodiscard]] bool tryAttachUnboxed(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleId id, void* returnAddr, + bool* emitted); - MOZ_MUST_USE bool tryAttachUnboxedArrayLength(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, HandleId id, - void* returnAddr, bool* emitted); + [[nodiscard]] bool tryAttachUnboxedExpando(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, HandleId id, + void* returnAddr, bool* emitted); - MOZ_MUST_USE bool tryAttachTypedArrayLength(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, HandleId id, - bool* emitted); + [[nodiscard]] bool tryAttachUnboxedArrayLength(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, HandleId id, + void* returnAddr, bool* emitted); - MOZ_MUST_USE bool tryAttachArgumentsLength(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, HandleId id, - bool* emitted); + [[nodiscard]] bool tryAttachTypedArrayLength(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, HandleId id, + bool* emitted); - MOZ_MUST_USE bool tryAttachArgumentsElement(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, HandleValue idval, + [[nodiscard]] bool tryAttachArgumentsLength(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, HandleId id, bool* emitted); - MOZ_MUST_USE bool tryAttachDenseElement(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleValue idval, bool* emitted); + [[nodiscard]] bool tryAttachArgumentsElement(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, HandleValue idval, + bool* emitted); + + [[nodiscard]] bool tryAttachDenseElement(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleValue idval, bool* emitted); static bool canAttachDenseElementHole(JSObject* obj, HandleValue idval, TypedOrValueRegister output); - MOZ_MUST_USE bool tryAttachDenseElementHole(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, - HandleValue idval, bool* emitted); + [[nodiscard]] bool tryAttachDenseElementHole(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, + HandleValue idval, bool* emitted); static bool canAttachTypedOrUnboxedArrayElement(JSObject* obj, const Value& idval, TypedOrValueRegister output); - MOZ_MUST_USE bool tryAttachTypedOrUnboxedArrayElement(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, - HandleValue idval, bool* emitted); + [[nodiscard]] bool tryAttachTypedOrUnboxedArrayElement(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, + HandleValue idval, bool* emitted); - MOZ_MUST_USE bool tryAttachModuleNamespace(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, HandleId id, - void* returnAddr, bool* emitted); + [[nodiscard]] bool tryAttachModuleNamespace(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, HandleId id, + void* returnAddr, bool* emitted); - static MOZ_MUST_USE bool update(JSContext* cx, HandleScript outerScript, size_t cacheIndex, - HandleObject obj, HandleValue id, MutableHandleValue vp); + [[nodiscard]] static bool update(JSContext* cx, HandleScript outerScript, size_t cacheIndex, + HandleObject obj, HandleValue id, MutableHandleValue vp); }; class SetPropertyIC : public IonCache @@ -673,59 +673,59 @@ class SetPropertyIC : public IonCache CanAttachCallSetter }; - MOZ_MUST_USE bool attachSetSlot(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleShape shape, bool checkTypeset); + [[nodiscard]] bool attachSetSlot(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleShape shape, bool checkTypeset); - MOZ_MUST_USE bool attachCallSetter(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleObject holder, HandleShape shape, - void* returnAddr); + [[nodiscard]] bool attachCallSetter(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleObject holder, HandleShape shape, + void* returnAddr); - MOZ_MUST_USE bool attachAddSlot(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleId id, HandleShape oldShape, - HandleObjectGroup oldGroup, bool checkTypeset); + [[nodiscard]] bool attachAddSlot(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleId id, HandleShape oldShape, + HandleObjectGroup oldGroup, bool checkTypeset); - MOZ_MUST_USE bool attachGenericProxy(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleId id, void* returnAddr); + [[nodiscard]] bool attachGenericProxy(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleId id, void* returnAddr); - MOZ_MUST_USE bool attachDOMProxyShadowed(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, HandleId id, - void* returnAddr); + [[nodiscard]] bool attachDOMProxyShadowed(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, HandleId id, + void* returnAddr); - MOZ_MUST_USE bool attachDOMProxyUnshadowed(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, HandleId id, - void* returnAddr); + [[nodiscard]] bool attachDOMProxyUnshadowed(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, HandleId id, + void* returnAddr); - static MOZ_MUST_USE bool update(JSContext* cx, HandleScript outerScript, size_t cacheIndex, - HandleObject obj, HandleValue idval, HandleValue value); + [[nodiscard]] static bool update(JSContext* cx, HandleScript outerScript, size_t cacheIndex, + HandleObject obj, HandleValue idval, HandleValue value); - MOZ_MUST_USE bool tryAttachNative(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleId id, bool* emitted, - bool* tryNativeAddSlot); + [[nodiscard]] bool tryAttachNative(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleId id, bool* emitted, + bool* tryNativeAddSlot); - MOZ_MUST_USE bool tryAttachUnboxed(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleId id, bool* emitted); + [[nodiscard]] bool tryAttachUnboxed(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleId id, bool* emitted); - MOZ_MUST_USE bool tryAttachUnboxedExpando(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, HandleId id, - bool* emitted); + [[nodiscard]] bool tryAttachUnboxedExpando(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, HandleId id, + bool* emitted); - MOZ_MUST_USE bool tryAttachProxy(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleId id, bool* emitted); + [[nodiscard]] bool tryAttachProxy(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleId id, bool* emitted); - MOZ_MUST_USE bool tryAttachStub(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleValue idval, HandleValue value, - MutableHandleId id, bool* emitted, bool* tryNativeAddSlot); + [[nodiscard]] bool tryAttachStub(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleValue idval, HandleValue value, + MutableHandleId id, bool* emitted, bool* tryNativeAddSlot); - MOZ_MUST_USE bool tryAttachAddSlot(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, HandleId id, HandleObjectGroup oldGroup, - HandleShape oldShape, bool tryNativeAddSlot, bool* emitted); + [[nodiscard]] bool tryAttachAddSlot(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, HandleId id, HandleObjectGroup oldGroup, + HandleShape oldShape, bool tryNativeAddSlot, bool* emitted); - MOZ_MUST_USE bool tryAttachDenseElement(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject obj, const Value& idval, bool* emitted); + [[nodiscard]] bool tryAttachDenseElement(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject obj, const Value& idval, bool* emitted); - MOZ_MUST_USE bool tryAttachTypedArrayElement(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject obj, - HandleValue idval, HandleValue val, bool* emitted); + [[nodiscard]] bool tryAttachTypedArrayElement(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject obj, + HandleValue idval, HandleValue val, bool* emitted); }; class BindNameIC : public IonCache @@ -755,11 +755,11 @@ class BindNameIC : public IonCache return output_; } - MOZ_MUST_USE bool attachGlobal(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject envChain); + [[nodiscard]] bool attachGlobal(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject envChain); - MOZ_MUST_USE bool attachNonGlobal(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject envChain, HandleObject holder); + [[nodiscard]] bool attachNonGlobal(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject envChain, HandleObject holder); static JSObject* update(JSContext* cx, HandleScript outerScript, size_t cacheIndex, HandleObject envChain); @@ -804,19 +804,19 @@ class NameIC : public IonCache return typeOf_; } - MOZ_MUST_USE bool attachReadSlot(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject envChain, HandleObject holderBase, - HandleNativeObject holder, Handle<PropertyResult> prop); + [[nodiscard]] bool attachReadSlot(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject envChain, HandleObject holderBase, + HandleNativeObject holder, Handle<PropertyResult> prop); - MOZ_MUST_USE bool attachCallGetter(JSContext* cx, HandleScript outerScript, IonScript* ion, - HandleObject envChain, HandleObject obj, - HandleObject holder, HandleShape shape, - void* returnAddr); + [[nodiscard]] bool attachCallGetter(JSContext* cx, HandleScript outerScript, IonScript* ion, + HandleObject envChain, HandleObject obj, + HandleObject holder, HandleShape shape, + void* returnAddr); - MOZ_MUST_USE bool attachTypeOfNoProperty(JSContext* cx, HandleScript outerScript, - IonScript* ion, HandleObject envChain); + [[nodiscard]] bool attachTypeOfNoProperty(JSContext* cx, HandleScript outerScript, + IonScript* ion, HandleObject envChain); - static MOZ_MUST_USE bool + [[nodiscard]] static bool update(JSContext* cx, HandleScript outerScript, size_t cacheIndex, HandleObject envChain, MutableHandleValue vp); }; diff --git a/js/src/jit/IonCode.h b/js/src/jit/IonCode.h index 2d9469dead..ddc0af4bb7 100644 --- a/js/src/jit/IonCode.h +++ b/js/src/jit/IonCode.h @@ -434,7 +434,7 @@ struct IonScript bool hasProfilingInstrumentation() const { return hasProfilingInstrumentation_; } - MOZ_MUST_USE bool addTraceLoggerEvent(TraceLoggerEvent& event) { + [[nodiscard]] bool addTraceLoggerEvent(TraceLoggerEvent& event) { MOZ_ASSERT(event.hasPayload()); return traceLoggerEvents_.append(Move(event)); } @@ -617,7 +617,7 @@ struct IonBlockCounts public: - MOZ_MUST_USE bool init(uint32_t id, uint32_t offset, char* description, + [[nodiscard]] bool init(uint32_t id, uint32_t offset, char* description, uint32_t numSuccessors) { id_ = id; offset_ = offset; @@ -715,7 +715,7 @@ struct IonScriptCounts } } - MOZ_MUST_USE bool init(size_t numBlocks) { + [[nodiscard]] bool init(size_t numBlocks) { blocks_ = js_pod_calloc<IonBlockCounts>(numBlocks); if (!blocks_) return false; diff --git a/js/src/jit/JitAllocPolicy.h b/js/src/jit/JitAllocPolicy.h index 2befa593f5..195a81b1ec 100644 --- a/js/src/jit/JitAllocPolicy.h +++ b/js/src/jit/JitAllocPolicy.h @@ -43,7 +43,7 @@ class TempAllocator return lifoScope_.alloc().allocInfallible(bytes); } - MOZ_MUST_USE void* allocate(size_t bytes) + [[nodiscard]] void* allocate(size_t bytes) { LifoAlloc::AutoFallibleScope fallibleAllocator(lifoAlloc()); void* p = lifoScope_.alloc().alloc(bytes); @@ -53,7 +53,7 @@ class TempAllocator } template <typename T> - MOZ_MUST_USE T* allocateArray(size_t n) + [[nodiscard]] T* allocateArray(size_t n) { LifoAlloc::AutoFallibleScope fallibleAllocator(lifoAlloc()); size_t bytes; @@ -73,7 +73,7 @@ class TempAllocator return &lifoScope_.alloc(); } - MOZ_MUST_USE bool ensureBallast() { + [[nodiscard]] bool ensureBallast() { JS_OOM_POSSIBLY_FAIL_BOOL(); return lifoScope_.alloc().ensureUnusedApproximate(BallastSize); } @@ -126,7 +126,7 @@ class JitAllocPolicy } void reportAllocOverflow() const { } - MOZ_MUST_USE bool checkSimulatedOOM() const { + [[nodiscard]] bool checkSimulatedOOM() const { return !js::oom::ShouldFailWithOOM(); } }; diff --git a/js/src/jit/JitCompartment.h b/js/src/jit/JitCompartment.h index a6cbd86719..4ef5cb4e4a 100644 --- a/js/src/jit/JitCompartment.h +++ b/js/src/jit/JitCompartment.h @@ -215,14 +215,14 @@ class JitRuntime public: explicit JitRuntime(JSRuntime* rt); ~JitRuntime(); - MOZ_MUST_USE bool initialize(JSContext* cx, js::AutoLockForExclusiveAccess& lock); + [[nodiscard]] bool initialize(JSContext* cx, js::AutoLockForExclusiveAccess& lock); uint8_t* allocateOsrTempData(size_t size); void freeOsrTempData(); static void Mark(JSTracer* trc, js::AutoLockForExclusiveAccess& lock); static void MarkJitcodeGlobalTableUnconditionally(JSTracer* trc); - static MOZ_MUST_USE bool MarkJitcodeGlobalTableIteratively(JSTracer* trc); + [[nodiscard]] static bool MarkJitcodeGlobalTableIteratively(JSTracer* trc); static void SweepJitcodeGlobalTable(JSRuntime* rt); ExecutableAllocator& execAlloc() { @@ -473,7 +473,7 @@ class JitCompartment return p->value(); return nullptr; } - MOZ_MUST_USE bool putStubCode(JSContext* cx, uint32_t key, Handle<JitCode*> stubCode) { + [[nodiscard]] bool putStubCode(JSContext* cx, uint32_t key, Handle<JitCode*> stubCode) { MOZ_ASSERT(stubCode); if (!stubCodes_->putNew(key, stubCode.get())) { ReportOutOfMemory(cx); @@ -490,7 +490,7 @@ class JitCompartment *stubInfo = nullptr; return nullptr; } - MOZ_MUST_USE bool putCacheIRStubCode(const CacheIRStubKey::Lookup& lookup, CacheIRStubKey& key, + [[nodiscard]] bool putCacheIRStubCode(const CacheIRStubKey::Lookup& lookup, CacheIRStubKey& key, JitCode* stubCode) { CacheIRStubCodeMap::AddPtr p = cacheIRStubCodes_->lookupForAdd(lookup); @@ -528,10 +528,10 @@ class JitCompartment JitCompartment(); ~JitCompartment(); - MOZ_MUST_USE bool initialize(JSContext* cx); + [[nodiscard]] bool initialize(JSContext* cx); // Initialize code stubs only used by Ion, not Baseline. - MOZ_MUST_USE bool ensureIonStubsExist(JSContext* cx); + [[nodiscard]] bool ensureIonStubsExist(JSContext* cx); void mark(JSTracer* trc, JSCompartment* compartment); void sweep(FreeOp* fop, JSCompartment* compartment); @@ -544,7 +544,7 @@ class JitCompartment return regExpMatcherStub_; } - MOZ_MUST_USE bool ensureRegExpMatcherStubExists(JSContext* cx) { + [[nodiscard]] bool ensureRegExpMatcherStubExists(JSContext* cx) { if (regExpMatcherStub_) return true; regExpMatcherStub_ = generateRegExpMatcherStub(cx); @@ -555,7 +555,7 @@ class JitCompartment return regExpSearcherStub_; } - MOZ_MUST_USE bool ensureRegExpSearcherStubExists(JSContext* cx) { + [[nodiscard]] bool ensureRegExpSearcherStubExists(JSContext* cx) { if (regExpSearcherStub_) return true; regExpSearcherStub_ = generateRegExpSearcherStub(cx); @@ -566,7 +566,7 @@ class JitCompartment return regExpTesterStub_; } - MOZ_MUST_USE bool ensureRegExpTesterStubExists(JSContext* cx) { + [[nodiscard]] bool ensureRegExpTesterStubExists(JSContext* cx) { if (regExpTesterStub_) return true; regExpTesterStub_ = generateRegExpTesterStub(cx); diff --git a/js/src/jit/JitFrameIterator.h b/js/src/jit/JitFrameIterator.h index abe2dbb231..bff72c844d 100644 --- a/js/src/jit/JitFrameIterator.h +++ b/js/src/jit/JitFrameIterator.h @@ -279,9 +279,9 @@ class JitProfilingFrameIterator inline JitFrameLayout* framePtr(); inline JSScript* frameScript(); - MOZ_MUST_USE bool tryInitWithPC(void* pc); - MOZ_MUST_USE bool tryInitWithTable(JitcodeGlobalTable* table, void* pc, JSRuntime* rt, - bool forLastCallSite); + [[nodiscard]] bool tryInitWithPC(void* pc); + [[nodiscard]] bool tryInitWithTable(JitcodeGlobalTable* table, void* pc, JSRuntime* rt, + bool forLastCallSite); void fixBaselineReturnAddress(); void moveToNextFrame(CommonFrameLayout* frame); @@ -323,7 +323,7 @@ class RInstructionResults ~RInstructionResults(); - MOZ_MUST_USE bool init(JSContext* cx, uint32_t numResults); + [[nodiscard]] bool init(JSContext* cx, uint32_t numResults); bool isInitialized() const; size_t length() const; @@ -444,7 +444,7 @@ class SnapshotIterator Value fromInstructionResult(uint32_t index) const; Value allocationValue(const RValueAllocation& a, ReadMethod rm = RM_Normal); - MOZ_MUST_USE bool allocationReadable(const RValueAllocation& a, ReadMethod rm = RM_Normal); + [[nodiscard]] bool allocationReadable(const RValueAllocation& a, ReadMethod rm = RM_Normal); void writeAllocationValuePayload(const RValueAllocation& a, const Value& v); void warnUnreadableAllocation(); @@ -481,7 +481,7 @@ class SnapshotIterator public: // Exhibits frame properties contained in the snapshot. uint32_t pcOffset() const; - inline MOZ_MUST_USE bool resumeAfter() const { + [[nodiscard]] inline bool resumeAfter() const { // Inline frames are inlined on calls, which are considered as being // resumed on the Call as baseline will push the pc once we return from // the call. @@ -514,12 +514,12 @@ class SnapshotIterator // recover instructions. This vector should be registered before the // beginning of the iteration. This function is in charge of allocating // enough space for all instructions results, and return false iff it fails. - MOZ_MUST_USE bool initInstructionResults(MaybeReadFallback& fallback); + [[nodiscard]] bool initInstructionResults(MaybeReadFallback& fallback); protected: // This function is used internally for computing the result of the recover // instructions. - MOZ_MUST_USE bool computeInstructionResults(JSContext* cx, RInstructionResults* results) const; + [[nodiscard]] bool computeInstructionResults(JSContext* cx, RInstructionResults* results) const; public: // Handle iterating over frames of the snapshots. diff --git a/js/src/jit/JitcodeMap.h b/js/src/jit/JitcodeMap.h index 0f096a9e69..df690abe35 100644 --- a/js/src/jit/JitcodeMap.h +++ b/js/src/jit/JitcodeMap.h @@ -319,8 +319,8 @@ class JitcodeGlobalEntry void* canonicalNativeAddrFor(JSRuntime*rt, void* ptr) const; - MOZ_MUST_USE bool callStackAtAddr(JSRuntime* rt, void* ptr, BytecodeLocationVector& results, - uint32_t* depth) const; + [[nodiscard]] bool callStackAtAddr(JSRuntime* rt, void* ptr, BytecodeLocationVector& results, + uint32_t* depth) const; uint32_t callStackAtAddr(JSRuntime* rt, void* ptr, const char** results, uint32_t maxResults) const; @@ -416,8 +416,8 @@ class JitcodeGlobalEntry void* canonicalNativeAddrFor(JSRuntime* rt, void* ptr) const; - MOZ_MUST_USE bool callStackAtAddr(JSRuntime* rt, void* ptr, BytecodeLocationVector& results, - uint32_t* depth) const; + [[nodiscard]] bool callStackAtAddr(JSRuntime* rt, void* ptr, BytecodeLocationVector& results, + uint32_t* depth) const; uint32_t callStackAtAddr(JSRuntime* rt, void* ptr, const char** results, uint32_t maxResults) const; @@ -455,8 +455,8 @@ class JitcodeGlobalEntry void* canonicalNativeAddrFor(JSRuntime* rt, void* ptr) const; - MOZ_MUST_USE bool callStackAtAddr(JSRuntime* rt, void* ptr, BytecodeLocationVector& results, - uint32_t* depth) const; + [[nodiscard]] bool callStackAtAddr(JSRuntime* rt, void* ptr, BytecodeLocationVector& results, + uint32_t* depth) const; uint32_t callStackAtAddr(JSRuntime* rt, void* ptr, const char** results, uint32_t maxResults) const; @@ -494,8 +494,8 @@ class JitcodeGlobalEntry return nullptr; } - MOZ_MUST_USE bool callStackAtAddr(JSRuntime* rt, void* ptr, BytecodeLocationVector& results, - uint32_t* depth) const + [[nodiscard]] bool callStackAtAddr(JSRuntime* rt, void* ptr, BytecodeLocationVector& results, + uint32_t* depth) const { return true; } @@ -758,8 +758,8 @@ class JitcodeGlobalEntry // outermost appended last. // // Returns false on memory failure. - MOZ_MUST_USE bool callStackAtAddr(JSRuntime* rt, void* ptr, BytecodeLocationVector& results, - uint32_t* depth) const + [[nodiscard]] bool callStackAtAddr(JSRuntime* rt, void* ptr, BytecodeLocationVector& results, + uint32_t* depth) const { switch (kind()) { case Ion: @@ -1041,16 +1041,16 @@ class JitcodeGlobalTable const JitcodeGlobalEntry& lookupForSamplerInfallible(void* ptr, JSRuntime* rt, uint32_t sampleBufferGen); - MOZ_MUST_USE bool addEntry(const JitcodeGlobalEntry::IonEntry& entry, JSRuntime* rt) { + [[nodiscard]] bool addEntry(const JitcodeGlobalEntry::IonEntry& entry, JSRuntime* rt) { return addEntry(JitcodeGlobalEntry(entry), rt); } - MOZ_MUST_USE bool addEntry(const JitcodeGlobalEntry::BaselineEntry& entry, JSRuntime* rt) { + [[nodiscard]] bool addEntry(const JitcodeGlobalEntry::BaselineEntry& entry, JSRuntime* rt) { return addEntry(JitcodeGlobalEntry(entry), rt); } - MOZ_MUST_USE bool addEntry(const JitcodeGlobalEntry::IonCacheEntry& entry, JSRuntime* rt) { + [[nodiscard]] bool addEntry(const JitcodeGlobalEntry::IonCacheEntry& entry, JSRuntime* rt) { return addEntry(JitcodeGlobalEntry(entry), rt); } - MOZ_MUST_USE bool addEntry(const JitcodeGlobalEntry::DummyEntry& entry, JSRuntime* rt) { + [[nodiscard]] bool addEntry(const JitcodeGlobalEntry::DummyEntry& entry, JSRuntime* rt) { return addEntry(JitcodeGlobalEntry(entry), rt); } @@ -1059,11 +1059,11 @@ class JitcodeGlobalTable void setAllEntriesAsExpired(JSRuntime* rt); void markUnconditionally(JSTracer* trc); - MOZ_MUST_USE bool markIteratively(JSTracer* trc); + [[nodiscard]] bool markIteratively(JSTracer* trc); void sweep(JSRuntime* rt); private: - MOZ_MUST_USE bool addEntry(const JitcodeGlobalEntry& entry, JSRuntime* rt); + [[nodiscard]] bool addEntry(const JitcodeGlobalEntry& entry, JSRuntime* rt); JitcodeGlobalEntry* lookupInternal(void* ptr); @@ -1229,9 +1229,9 @@ class JitcodeRegionEntry const CodeGeneratorShared::NativeToBytecode* end); // Write a run, starting at the given NativeToBytecode entry, into the given buffer writer. - static MOZ_MUST_USE bool WriteRun(CompactBufferWriter& writer, JSScript** scriptList, - uint32_t scriptListSize, uint32_t runLength, - const CodeGeneratorShared::NativeToBytecode* entry); + [[nodiscard]] static bool WriteRun(CompactBufferWriter& writer, JSScript** scriptList, + uint32_t scriptListSize, uint32_t runLength, + const CodeGeneratorShared::NativeToBytecode* entry); // Delta Run entry formats are encoded little-endian: // @@ -1438,8 +1438,8 @@ class JitcodeIonTable regionOffsets_[i] = 0; } - MOZ_MUST_USE bool makeIonEntry(JSContext* cx, JitCode* code, uint32_t numScripts, - JSScript** scripts, JitcodeGlobalEntry::IonEntry& out); + [[nodiscard]] bool makeIonEntry(JSContext* cx, JitCode* code, uint32_t numScripts, + JSScript** scripts, JitcodeGlobalEntry::IonEntry& out); uint32_t numRegions() const { return numRegions_; @@ -1478,11 +1478,11 @@ class JitcodeIonTable return payloadEnd() - regionOffset(0); } - static MOZ_MUST_USE bool WriteIonTable(CompactBufferWriter& writer, - JSScript** scriptList, uint32_t scriptListSize, - const CodeGeneratorShared::NativeToBytecode* start, - const CodeGeneratorShared::NativeToBytecode* end, - uint32_t* tableOffsetOut, uint32_t* numRegionsOut); + [[nodiscard]] static bool WriteIonTable(CompactBufferWriter& writer, + JSScript** scriptList, uint32_t scriptListSize, + const CodeGeneratorShared::NativeToBytecode* start, + const CodeGeneratorShared::NativeToBytecode* end, + uint32_t* tableOffsetOut, uint32_t* numRegionsOut); }; diff --git a/js/src/jit/LICM.h b/js/src/jit/LICM.h index 3c8117bd19..64569450fd 100644 --- a/js/src/jit/LICM.h +++ b/js/src/jit/LICM.h @@ -16,7 +16,7 @@ namespace jit { class MIRGenerator; class MIRGraph; -MOZ_MUST_USE bool LICM(MIRGenerator* mir, MIRGraph& graph); +[[nodiscard]] bool LICM(MIRGenerator* mir, MIRGraph& graph); } // namespace jit } // namespace js diff --git a/js/src/jit/LIR.h b/js/src/jit/LIR.h index bee3b3ebea..ce911ae958 100644 --- a/js/src/jit/LIR.h +++ b/js/src/jit/LIR.h @@ -965,7 +965,7 @@ class LBlock public: explicit LBlock(MBasicBlock* block); - MOZ_MUST_USE bool init(TempAllocator& alloc); + [[nodiscard]] bool init(TempAllocator& alloc); void add(LInstruction* ins) { ins->setBlock(this); @@ -1156,7 +1156,7 @@ class LVariadicInstruction : public details::LInstructionFixedDefsTempsHelper<De FixedList<LAllocation> operands_; public: - MOZ_MUST_USE bool init(TempAllocator& alloc, size_t length) { + [[nodiscard]] bool init(TempAllocator& alloc, size_t length) { return operands_.init(alloc, length); } size_t numOperands() const final override { @@ -1193,13 +1193,13 @@ class LRecoverInfo : public TempObject RecoverOffset recoverOffset_; explicit LRecoverInfo(TempAllocator& alloc); - MOZ_MUST_USE bool init(MResumePoint* mir); + [[nodiscard]] bool init(MResumePoint* mir); // Fill the instruction vector such as all instructions needed for the // recovery are pushed before the current instruction. - MOZ_MUST_USE bool appendOperands(MNode* ins); - MOZ_MUST_USE bool appendDefinition(MDefinition* def); - MOZ_MUST_USE bool appendResumePoint(MResumePoint* rp); + [[nodiscard]] bool appendOperands(MNode* ins); + [[nodiscard]] bool appendDefinition(MDefinition* def); + [[nodiscard]] bool appendResumePoint(MResumePoint* rp); public: static LRecoverInfo* New(MIRGenerator* gen, MResumePoint* mir); @@ -1291,7 +1291,7 @@ class LSnapshot : public TempObject BailoutKind bailoutKind_; LSnapshot(LRecoverInfo* recover, BailoutKind kind); - MOZ_MUST_USE bool init(MIRGenerator* gen); + [[nodiscard]] bool init(MIRGenerator* gen); public: static LSnapshot* New(MIRGenerator* gen, LRecoverInfo* recover, BailoutKind kind); @@ -1480,7 +1480,7 @@ class LSafepoint : public TempObject LiveGeneralRegisterSet gcRegs() const { return gcRegs_; } - MOZ_MUST_USE bool addGcSlot(bool stack, uint32_t slot) { + [[nodiscard]] bool addGcSlot(bool stack, uint32_t slot) { bool result = gcSlots_.append(SlotEntry(stack, slot)); if (result) assertInvariants(); @@ -1500,13 +1500,13 @@ class LSafepoint : public TempObject slotsOrElementsRegs_.addUnchecked(reg); assertInvariants(); } - MOZ_MUST_USE bool addSlotsOrElementsSlot(bool stack, uint32_t slot) { + [[nodiscard]] bool addSlotsOrElementsSlot(bool stack, uint32_t slot) { bool result = slotsOrElementsSlots_.append(SlotEntry(stack, slot)); if (result) assertInvariants(); return result; } - MOZ_MUST_USE bool addSlotsOrElementsPointer(LAllocation alloc) { + [[nodiscard]] bool addSlotsOrElementsPointer(LAllocation alloc) { if (alloc.isMemory()) return addSlotsOrElementsSlot(alloc.isStackSlot(), alloc.memorySlot()); MOZ_ASSERT(alloc.isRegister()); @@ -1525,7 +1525,7 @@ class LSafepoint : public TempObject return false; } - MOZ_MUST_USE bool addGcPointer(LAllocation alloc) { + [[nodiscard]] bool addGcPointer(LAllocation alloc) { if (alloc.isMemory()) return addGcSlot(alloc.isStackSlot(), alloc.memorySlot()); if (alloc.isRegister()) @@ -1545,7 +1545,7 @@ class LSafepoint : public TempObject return false; } - MOZ_MUST_USE bool addValueSlot(bool stack, uint32_t slot) { + [[nodiscard]] bool addValueSlot(bool stack, uint32_t slot) { bool result = valueSlots_.append(SlotEntry(stack, slot)); if (result) assertInvariants(); @@ -1565,14 +1565,14 @@ class LSafepoint : public TempObject #ifdef JS_NUNBOX32 - MOZ_MUST_USE bool addNunboxParts(uint32_t typeVreg, LAllocation type, LAllocation payload) { + [[nodiscard]] bool addNunboxParts(uint32_t typeVreg, LAllocation type, LAllocation payload) { bool result = nunboxParts_.append(NunboxEntry(typeVreg, type, payload)); if (result) assertInvariants(); return result; } - MOZ_MUST_USE bool addNunboxType(uint32_t typeVreg, LAllocation type) { + [[nodiscard]] bool addNunboxType(uint32_t typeVreg, LAllocation type) { for (size_t i = 0; i < nunboxParts_.length(); i++) { if (nunboxParts_[i].type == type) return true; @@ -1590,7 +1590,7 @@ class LSafepoint : public TempObject return result; } - MOZ_MUST_USE bool addNunboxPayload(uint32_t payloadVreg, LAllocation payload) { + [[nodiscard]] bool addNunboxPayload(uint32_t payloadVreg, LAllocation payload) { for (size_t i = 0; i < nunboxParts_.length(); i++) { if (nunboxParts_[i].payload == payload) return true; @@ -1646,7 +1646,7 @@ class LSafepoint : public TempObject return valueRegs_; } - MOZ_MUST_USE bool addBoxedValue(LAllocation alloc) { + [[nodiscard]] bool addBoxedValue(LAllocation alloc) { if (alloc.isRegister()) { Register reg = alloc.toRegister().gpr(); if (!valueRegs().has(reg)) @@ -1788,7 +1788,7 @@ class LIRGraph public: explicit LIRGraph(MIRGraph* mir); - MOZ_MUST_USE bool init() { + [[nodiscard]] bool init() { return constantPoolMap_.init() && blocks_.init(mir_.alloc(), mir_.numBlocks()); } MIRGraph& mir() const { @@ -1803,7 +1803,7 @@ class LIRGraph uint32_t numBlockIds() const { return mir_.numBlockIds(); } - MOZ_MUST_USE bool initBlock(MBasicBlock* mir) { + [[nodiscard]] bool initBlock(MBasicBlock* mir) { auto* block = &blocks_[mir->id()]; auto* lir = new (block) LBlock(mir); return lir->init(mir_.alloc()); @@ -1855,7 +1855,7 @@ class LIRGraph uint32_t totalSlotCount() const { return paddedLocalSlotCount() + argumentsSize(); } - MOZ_MUST_USE bool addConstantToPool(const Value& v, uint32_t* index); + [[nodiscard]] bool addConstantToPool(const Value& v, uint32_t* index); size_t numConstants() const { return constantPool_.length(); } diff --git a/js/src/jit/LoopUnroller.h b/js/src/jit/LoopUnroller.h index 096bdd2e42..4c1923c522 100644 --- a/js/src/jit/LoopUnroller.h +++ b/js/src/jit/LoopUnroller.h @@ -11,8 +11,7 @@ namespace js { namespace jit { -MOZ_MUST_USE bool -UnrollLoops(MIRGraph& graph, const LoopIterationBoundVector& bounds); +[[nodiscard]] bool UnrollLoops(MIRGraph& graph, const LoopIterationBoundVector& bounds); } // namespace jit } // namespace js diff --git a/js/src/jit/Lowering.h b/js/src/jit/Lowering.h index 8c380dcdef..e2b053643d 100644 --- a/js/src/jit/Lowering.h +++ b/js/src/jit/Lowering.h @@ -45,7 +45,7 @@ class LIRGenerator : public LIRGeneratorSpecific maxargslots_(0) { } - MOZ_MUST_USE bool generate(); + [[nodiscard]] bool generate(); private: LBoxAllocation useBoxFixedAtStart(MDefinition* mir, Register reg1, Register reg2) { @@ -60,11 +60,11 @@ class LIRGenerator : public LIRGeneratorSpecific void lowerBinaryV(JSOp op, MBinaryInstruction* ins); void definePhis(); - MOZ_MUST_USE bool lowerCallArguments(MCall* call); + [[nodiscard]] bool lowerCallArguments(MCall* call); public: - MOZ_MUST_USE bool visitInstruction(MInstruction* ins); - MOZ_MUST_USE bool visitBlock(MBasicBlock* block); + [[nodiscard]] bool visitInstruction(MInstruction* ins); + [[nodiscard]] bool visitBlock(MBasicBlock* block); // Visitor hooks are explicit, to give CPU-specific versions a chance to // intercept without a bunch of explicit gunk in the .cpp. diff --git a/js/src/jit/MIR.h b/js/src/jit/MIR.h index 62f49c8bad..f21454fd76 100644 --- a/js/src/jit/MIR.h +++ b/js/src/jit/MIR.h @@ -292,7 +292,7 @@ class MNode : public TempObject inline MDefinition* toDefinition(); inline MResumePoint* toResumePoint(); - virtual MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const; + [[nodiscard]] virtual bool writeRecoverData(CompactBufferWriter& writer) const; virtual void dump(GenericPrinter& out) const = 0; virtual void dump() const = 0; @@ -393,7 +393,7 @@ class StoreDependency : public TempObject : all_(alloc) { } - MOZ_MUST_USE bool init(MDefinitionVector& all) { + [[nodiscard]] bool init(MDefinitionVector& all) { if (!all_.appendAll(all)) return false; return true; @@ -800,7 +800,7 @@ class MDefinition : public MNode // Replace the current instruction by an optimized-out constant in all uses // of the current instruction. Note, that optimized-out constant should not // be observed, and thus they should not flow in any computation. - MOZ_MUST_USE bool optimizeOutAllUses(TempAllocator& alloc); + [[nodiscard]] bool optimizeOutAllUses(TempAllocator& alloc); // Replace the current instruction by a dominating instruction |dom| in all // instruction, but keep the current instruction for resume point and @@ -810,7 +810,7 @@ class MDefinition : public MNode // Mark this instruction as having replaced all uses of ins, as during GVN, // returning false if the replacement should not be performed. For use when // GVN eliminates instructions which are not equivalent to one another. - virtual MOZ_MUST_USE bool updateForReplacement(MDefinition* ins) { + [[nodiscard]] virtual bool updateForReplacement(MDefinition* ins) { return true; } @@ -1027,17 +1027,17 @@ class MRootList : public TempObject void trace(JSTracer* trc); template <typename T> - MOZ_MUST_USE bool append(T ptr) { + [[nodiscard]] bool append(T ptr) { if (ptr) return roots_[JS::MapTypeToRootKind<T>::kind]->append(ptr); return true; } template <typename T> - MOZ_MUST_USE bool append(const CompilerGCPointer<T>& ptr) { + [[nodiscard]] bool append(const CompilerGCPointer<T>& ptr) { return append(static_cast<T>(ptr)); } - MOZ_MUST_USE bool append(const ReceiverGuard& guard) { + [[nodiscard]] bool append(const ReceiverGuard& guard) { return append(guard.group) && append(guard.shape); } }; @@ -1362,7 +1362,7 @@ class MVariadicT : public T FixedList<MUse> operands_; protected: - MOZ_MUST_USE bool init(TempAllocator& alloc, size_t length) { + [[nodiscard]] bool init(TempAllocator& alloc, size_t length) { return operands_.init(alloc, length); } void initOperand(size_t index, MDefinition* operand) { @@ -1533,7 +1533,7 @@ class MConstant : public MNullaryInstruction // Try to convert this constant to boolean, similar to js::ToBoolean. // Returns false if the type is MIRType::Magic*. - bool MOZ_MUST_USE valueToBoolean(bool* res) const; + [[nodiscard]] bool valueToBoolean(bool* res) const; // Like valueToBoolean, but returns the result directly instead of using // an outparam. Should not be used if this constant might be a magic value. @@ -1552,7 +1552,7 @@ class MConstant : public MNullaryInstruction return AliasSet::None(); } - MOZ_MUST_USE bool updateForReplacement(MDefinition* def) override { + [[nodiscard]] bool updateForReplacement(MDefinition* def) override { MConstant* c = def->toConstant(); // During constant folding, we don't want to replace a float32 // value by a double value. @@ -1803,7 +1803,7 @@ class MTableSwitch final return successors_.length(); } - MOZ_MUST_USE bool addSuccessor(MBasicBlock* successor, size_t* index) { + [[nodiscard]] bool addSuccessor(MBasicBlock* successor, size_t* index) { MOZ_ASSERT(successors_.length() < (size_t)(high_ - low_ + 2)); MOZ_ASSERT(!successors_.empty()); *index = successors_.length(); @@ -1848,14 +1848,14 @@ class MTableSwitch final return high() - low() + 1; } - MOZ_MUST_USE bool addDefault(MBasicBlock* block, size_t* index = nullptr) { + [[nodiscard]] bool addDefault(MBasicBlock* block, size_t* index = nullptr) { MOZ_ASSERT(successors_.empty()); if (index) *index = 0; return successors_.append(block); } - MOZ_MUST_USE bool addCase(size_t successorIndex) { + [[nodiscard]] bool addCase(size_t successorIndex) { return cases_.append(successorIndex); } @@ -1864,7 +1864,7 @@ class MTableSwitch final return blocks_[i]; } - MOZ_MUST_USE bool addBlock(MBasicBlock* block) { + [[nodiscard]] bool addBlock(MBasicBlock* block) { return blocks_.append(block); } @@ -2116,7 +2116,7 @@ MakeSingletonTypeSet(CompilerConstraintList* constraints, JSObject* obj); TemporaryTypeSet* MakeSingletonTypeSet(CompilerConstraintList* constraints, ObjectGroup* obj); -MOZ_MUST_USE bool +[[nodiscard]] bool MergeTypes(TempAllocator& alloc, MIRType* ptype, TemporaryTypeSet** ptypeSet, MIRType newType, TemporaryTypeSet* newTypeSet); @@ -2197,7 +2197,7 @@ class MNewArray return AliasSet::None(); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { // The template object can safely be used in the recover instruction // because it can never be mutated by any other function execution. @@ -2313,7 +2313,7 @@ class MNewTypedArray return AliasSet::None(); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -2428,7 +2428,7 @@ class MNewObject return vmCall_; } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { // The template object can safely be used in the recover instruction // because it can never be mutated by any other function execution. @@ -2542,7 +2542,7 @@ class MNewDerivedTypedObject return AliasSet::None(); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -2557,7 +2557,7 @@ struct OperandIndexMap : public TempObject // have any large number of properties. FixedList<uint8_t> map; - MOZ_MUST_USE bool init(TempAllocator& alloc, JSObject* templateObject); + [[nodiscard]] bool init(TempAllocator& alloc, JSObject* templateObject); }; // Represent the content of all slots of an object. This instruction is not @@ -2578,7 +2578,7 @@ class MObjectState MObjectState(JSObject *templateObject, OperandIndexMap* operandIndex); explicit MObjectState(MObjectState* state); - MOZ_MUST_USE bool init(TempAllocator& alloc, MDefinition* obj); + [[nodiscard]] bool init(TempAllocator& alloc, MDefinition* obj); void initSlot(uint32_t slot, MDefinition* def) { initOperand(slot + 1, def); @@ -2597,7 +2597,7 @@ class MObjectState // As we might do read of uninitialized properties, we have to copy the // initial values from the template object. - MOZ_MUST_USE bool initFromTemplateObject(TempAllocator& alloc, MDefinition* undefinedVal); + [[nodiscard]] bool initFromTemplateObject(TempAllocator& alloc, MDefinition* undefinedVal); size_t numFixedSlots() const { return numFixedSlots_; @@ -2647,7 +2647,7 @@ class MObjectState replaceOperand(operandIndex_->map[offset], def); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -2664,7 +2664,7 @@ class MArrayState explicit MArrayState(MDefinition* arr); - MOZ_MUST_USE bool init(TempAllocator& alloc, MDefinition* obj, MDefinition* len); + [[nodiscard]] bool init(TempAllocator& alloc, MDefinition* obj, MDefinition* len); void initElement(uint32_t index, MDefinition* def) { initOperand(index + 2, def); @@ -2694,7 +2694,7 @@ class MArrayState replaceOperand(index + 2, def); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -3181,7 +3181,7 @@ class MAssertRecoveredOnBailout // Needed to assert that float32 instructions are correctly recovered. bool canConsumeFloat32(MUse* use) const override { return true; } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -3381,8 +3381,8 @@ class MCompare INSTRUCTION_HEADER(Compare) TRIVIAL_NEW_WRAPPERS - MOZ_MUST_USE bool tryFold(bool* result); - MOZ_MUST_USE bool evaluateConstantOperands(TempAllocator& alloc, bool* result); + [[nodiscard]] bool tryFold(bool* result); + [[nodiscard]] bool evaluateConstantOperands(TempAllocator& alloc, bool* result); MDefinition* foldsTo(TempAllocator& alloc) override; void filtersUndefinedOrNull(bool trueBranch, MDefinition** subject, bool* filtersUndefined, bool* filtersNull); @@ -3458,8 +3458,8 @@ class MCompare ALLOW_CLONE(MCompare) protected: - MOZ_MUST_USE bool tryFoldEqualOperands(bool* result); - MOZ_MUST_USE bool tryFoldTypeOf(bool* result); + [[nodiscard]] bool tryFoldEqualOperands(bool* result); + [[nodiscard]] bool tryFoldTypeOf(bool* result); bool congruentTo(const MDefinition* ins) const override { if (!binaryCongruentTo(ins)) @@ -3769,7 +3769,7 @@ class MCreateThisWithTemplate return AliasSet::None(); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override; }; @@ -4036,7 +4036,7 @@ class MToDouble implicitTruncate_ = Max(implicitTruncate_, kind); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { if (input()->type() == MIRType::Value) { return false; @@ -4103,7 +4103,7 @@ class MToFloat32 bool canConsumeFloat32(MUse* use) const override { return true; } bool canProduceFloat32() const override { return true; } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -4479,7 +4479,7 @@ class MTruncateToInt32 } #endif - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return input()->type() < MIRType::Symbol; } @@ -4589,7 +4589,7 @@ class MBitNot } void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ != MIRType::None; } @@ -4647,7 +4647,7 @@ class MTypeOf return congruentIfOperandsEqual(ins); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -4784,7 +4784,7 @@ class MBitAnd : public MBinaryBitwiseInstruction } void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ != MIRType::None; } @@ -4816,7 +4816,7 @@ class MBitOr : public MBinaryBitwiseInstruction return this; } void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ != MIRType::None; } @@ -4849,7 +4849,7 @@ class MBitXor : public MBinaryBitwiseInstruction } void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ < MIRType::Object; } @@ -4896,7 +4896,7 @@ class MLsh : public MShiftInstruction } void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ != MIRType::None; } @@ -4922,7 +4922,7 @@ class MRsh : public MShiftInstruction } void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ < MIRType::Object; } @@ -4965,7 +4965,7 @@ class MUrsh : public MShiftInstruction void computeRange(TempAllocator& alloc) override; void collectRangeInfoPreTrunc() override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ < MIRType::Object; } @@ -5009,7 +5009,7 @@ class MSignExtendInt32 return AliasSet::None(); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -5175,7 +5175,7 @@ class MMinMax } MDefinition* foldsTo(TempAllocator& alloc) override; void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -5225,7 +5225,7 @@ class MAbs bool isFloat32Commutative() const override { return true; } void trySpecializeFloat32(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -5371,7 +5371,7 @@ class MSqrt bool isFloat32Commutative() const override { return true; } void trySpecializeFloat32(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -5433,7 +5433,7 @@ class MAtan2 return true; } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -5468,7 +5468,7 @@ class MHypot return true; } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -5516,7 +5516,7 @@ class MPow bool possiblyCalls() const override { return true; } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { // Temporarily disable recovery to relieve fuzzer pressure. See bug 1188586. return false; @@ -5566,7 +5566,7 @@ class MPowHalf return AliasSet::None(); } void collectRangeInfoPreTrunc() override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -5596,7 +5596,7 @@ class MRandom : public MNullaryInstruction void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { #ifdef JS_MORE_DETERMINISTIC @@ -5691,7 +5691,7 @@ class MMathFunction } void trySpecializeFloat32(TempAllocator& alloc) override; void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { if (input()->type() == MIRType::SinCosDouble) return false; @@ -5743,7 +5743,7 @@ class MAdd : public MBinaryArithInstruction void truncate() override; TruncateKind operandTruncateKind(size_t index) const override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ < MIRType::Object; } @@ -5785,7 +5785,7 @@ class MSub : public MBinaryArithInstruction void truncate() override; TruncateKind operandTruncateKind(size_t index) const override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ < MIRType::Object; } @@ -5880,7 +5880,7 @@ class MMul : public MBinaryArithInstruction canBeNegativeZero_ = negativeZero; } - MOZ_MUST_USE bool updateForReplacement(MDefinition* ins) override; + [[nodiscard]] bool updateForReplacement(MDefinition* ins) override; bool fallible() const { return canBeNegativeZero_ || canOverflow(); @@ -5899,7 +5899,7 @@ class MMul : public MBinaryArithInstruction Mode mode() const { return mode_; } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ < MIRType::Object; } @@ -6033,7 +6033,7 @@ class MDiv : public MBinaryArithInstruction void collectRangeInfoPreTrunc() override; TruncateKind operandTruncateKind(size_t index) const override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ < MIRType::Object; } @@ -6129,7 +6129,7 @@ class MMod : public MBinaryArithInstruction return trapOffset_; } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return specialization_ < MIRType::Object; } @@ -6176,7 +6176,7 @@ class MConcat return AliasSet::None(); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -6210,7 +6210,7 @@ class MCharCodeAt void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -6240,7 +6240,7 @@ class MFromCharCode return congruentIfOperandsEqual(ins); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -6340,7 +6340,7 @@ class MStringSplit // it as store instruction, see also MNewArray. return AliasSet::None(); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -6510,12 +6510,12 @@ class MPhi final // Add types for this phi which speculate about new inputs that may come in // via a loop backedge. - MOZ_MUST_USE bool addBackedgeType(TempAllocator& alloc, MIRType type, + [[nodiscard]] bool addBackedgeType(TempAllocator& alloc, MIRType type, TemporaryTypeSet* typeSet); // Initializes the operands vector to the given capacity, // permitting use of addInput() instead of addInputSlow(). - MOZ_MUST_USE bool reserveLength(size_t length) { + [[nodiscard]] bool reserveLength(size_t length) { return inputs_.reserve(length); } @@ -6526,7 +6526,7 @@ class MPhi final // Appends a new input to the input vector. May perform reallocation. // Prefer reserveLength() and addInput() instead, where possible. - MOZ_MUST_USE bool addInputSlow(MDefinition* ins) { + [[nodiscard]] bool addInputSlow(MDefinition* ins) { return inputs_.emplaceBack(ins, this); } @@ -7064,7 +7064,7 @@ class MRegExpMatcher TRIVIAL_NEW_WRAPPERS NAMED_OPERANDS((0, regexp), (1, string), (2, lastIndex)) - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; @@ -7099,7 +7099,7 @@ class MRegExpSearcher TRIVIAL_NEW_WRAPPERS NAMED_OPERANDS((0, regexp), (1, string), (2, lastIndex)) - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; @@ -7138,7 +7138,7 @@ class MRegExpTester return true; } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -7251,7 +7251,7 @@ class MStringReplace return AliasSet::None(); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { if (isFlatReplacement_) { MOZ_ASSERT(!pattern()->isRegExp()); @@ -7392,7 +7392,7 @@ class MLambda const LambdaFunctionInfo& info() const { return info_; } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -8112,7 +8112,7 @@ class MNot bool congruentTo(const MDefinition* ins) const override { return congruentIfOperandsEqual(ins); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -9582,7 +9582,7 @@ class InlinePropertyTable : public TempObject return pc_; } - MOZ_MUST_USE bool addEntry(TempAllocator& alloc, ObjectGroup* group, JSFunction* func) { + [[nodiscard]] bool addEntry(TempAllocator& alloc, ObjectGroup* group, JSFunction* func) { return entries_.append(new(alloc) Entry(group, func)); } @@ -9703,7 +9703,7 @@ class MGetPropertyCache } void setBlock(MBasicBlock* block) override; - MOZ_MUST_USE bool updateForReplacement(MDefinition* ins) override; + [[nodiscard]] bool updateForReplacement(MDefinition* ins) override; bool allowDoubleResult() const; @@ -9761,7 +9761,7 @@ class MGetPropertyPolymorphic return congruentIfOperandsEqual(ins); } - MOZ_MUST_USE bool addReceiver(const ReceiverGuard& receiver, Shape* shape) { + [[nodiscard]] bool addReceiver(const ReceiverGuard& receiver, Shape* shape) { PolymorphicEntry entry; entry.receiver = receiver; entry.shape = shape; @@ -9826,7 +9826,7 @@ class MSetPropertyPolymorphic return new(alloc) MSetPropertyPolymorphic(alloc, obj, value, name); } - MOZ_MUST_USE bool addReceiver(const ReceiverGuard& receiver, Shape* shape) { + [[nodiscard]] bool addReceiver(const ReceiverGuard& receiver, Shape* shape) { PolymorphicEntry entry; entry.receiver = receiver; entry.shape = shape; @@ -9952,7 +9952,7 @@ class MDispatchInstruction } public: - MOZ_MUST_USE bool addCase(JSFunction* func, ObjectGroup* funcGroup, MBasicBlock* block) { + [[nodiscard]] bool addCase(JSFunction* func, ObjectGroup* funcGroup, MBasicBlock* block) { return map_.append(Entry(func, funcGroup, block)); } uint32_t numCases() const { @@ -10162,7 +10162,7 @@ class MGuardReceiverPolymorphic return new(alloc) MGuardReceiverPolymorphic(alloc, obj); } - MOZ_MUST_USE bool addReceiver(const ReceiverGuard& receiver) { + [[nodiscard]] bool addReceiver(const ReceiverGuard& receiver) { return receivers_.append(receiver); } size_t numReceivers() const { @@ -10896,7 +10896,7 @@ class MGetDOMProperty return info_; } - MOZ_MUST_USE bool init(TempAllocator& alloc, MDefinition* obj, MDefinition* guard, + [[nodiscard]] bool init(TempAllocator& alloc, MDefinition* obj, MDefinition* guard, MDefinition* globalGuard) { MOZ_ASSERT(obj); // guard can be null. @@ -11049,7 +11049,7 @@ class MStringLength void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -11090,7 +11090,7 @@ class MFloor return congruentIfOperandsEqual(ins); } void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -11131,7 +11131,7 @@ class MCeil return congruentIfOperandsEqual(ins); } void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -11173,7 +11173,7 @@ class MRound return congruentIfOperandsEqual(ins); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } @@ -11397,7 +11397,7 @@ class MArgumentsLength : public MNullaryInstruction void computeRange(TempAllocator& alloc) override; - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; @@ -11910,7 +11910,7 @@ class MResumePoint final : protected: // Initializes operands_ to an empty array of a fixed length. // The array may then be filled in by inherit(). - MOZ_MUST_USE bool init(TempAllocator& alloc); + [[nodiscard]] bool init(TempAllocator& alloc); void clearOperand(size_t index) { // FixedList doesn't initialize its elements, so do an unchecked init. @@ -12000,7 +12000,7 @@ class MResumePoint final : } } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; // Register a store instruction on the current resume point. This // instruction would be recovered when we are bailing out. The |cache| @@ -12292,7 +12292,7 @@ class MAtomicIsLockFree return congruentIfOperandsEqual(ins); } - MOZ_MUST_USE bool writeRecoverData(CompactBufferWriter& writer) const override; + [[nodiscard]] bool writeRecoverData(CompactBufferWriter& writer) const override; bool canRecoverOnBailout() const override { return true; } diff --git a/js/src/jit/MIRGenerator.h b/js/src/jit/MIRGenerator.h index 53e1155be9..3f1ee61f38 100644 --- a/js/src/jit/MIRGenerator.h +++ b/js/src/jit/MIRGenerator.h @@ -48,7 +48,7 @@ class MIRGenerator MIRGraph& graph() { return *graph_; } - MOZ_MUST_USE bool ensureBallast() { + [[nodiscard]] bool ensureBallast() { return alloc().ensureBallast(); } const JitRuntime* jitRuntime() const { @@ -78,7 +78,7 @@ class MIRGenerator return error_; } - MOZ_MUST_USE bool instrumentedProfiling() { + [[nodiscard]] bool instrumentedProfiling() { if (!instrumentedProfilingIsCached_) { instrumentedProfiling_ = GetJitContext()->runtime->spsProfiler().enabled(); instrumentedProfilingIsCached_ = true; diff --git a/js/src/jit/MIRGraph.h b/js/src/jit/MIRGraph.h index d68be8039c..a404adc3e9 100644 --- a/js/src/jit/MIRGraph.h +++ b/js/src/jit/MIRGraph.h @@ -46,11 +46,11 @@ class MBasicBlock : public TempObject, public InlineListNode<MBasicBlock> private: MBasicBlock(MIRGraph& graph, const CompileInfo& info, BytecodeSite* site, Kind kind); - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); void copySlots(MBasicBlock* from); - MOZ_MUST_USE bool inherit(TempAllocator& alloc, BytecodeAnalysis* analysis, MBasicBlock* pred, + [[nodiscard]] bool inherit(TempAllocator& alloc, BytecodeAnalysis* analysis, MBasicBlock* pred, uint32_t popped, unsigned stackPhiCount = 0); - MOZ_MUST_USE bool inheritResumePoint(MBasicBlock* pred); + [[nodiscard]] bool inheritResumePoint(MBasicBlock* pred); void assertUsesAreNotWithin(MUseIterator use, MUseIterator end); // This block cannot be reached by any means. @@ -154,8 +154,8 @@ class MBasicBlock : public TempObject, public InlineListNode<MBasicBlock> MDefinition* argumentsObject(); // Increase the number of slots available - MOZ_MUST_USE bool increaseSlots(size_t num); - MOZ_MUST_USE bool ensureHasSlots(size_t num); + [[nodiscard]] bool increaseSlots(size_t num); + [[nodiscard]] bool ensureHasSlots(size_t num); // Initializes a slot value; must not be called for normal stack // operations, as it will not create new SSA names for copies. @@ -166,7 +166,7 @@ class MBasicBlock : public TempObject, public InlineListNode<MBasicBlock> // In an OSR block, set all MOsrValues to use the MResumePoint attached to // the MStart. - MOZ_MUST_USE bool linkOsrValues(MStart* start); + [[nodiscard]] bool linkOsrValues(MStart* start); // Sets the instruction associated with various slot types. The // instruction must lie at the top of the stack. @@ -220,17 +220,17 @@ class MBasicBlock : public TempObject, public InlineListNode<MBasicBlock> // Adds a predecessor. Every predecessor must have the same exit stack // depth as the entry state to this block. Adding a predecessor // automatically creates phi nodes and rewrites uses as needed. - MOZ_MUST_USE bool addPredecessor(TempAllocator& alloc, MBasicBlock* pred); - MOZ_MUST_USE bool addPredecessorPopN(TempAllocator& alloc, MBasicBlock* pred, uint32_t popped); + [[nodiscard]] bool addPredecessor(TempAllocator& alloc, MBasicBlock* pred); + [[nodiscard]] bool addPredecessorPopN(TempAllocator& alloc, MBasicBlock* pred, uint32_t popped); // Add a predecessor which won't introduce any new phis to this block. // This may be called after the contents of this block have been built. void addPredecessorSameInputsAs(MBasicBlock* pred, MBasicBlock* existingPred); // Stranger utilities used for inlining. - MOZ_MUST_USE bool addPredecessorWithoutPhis(MBasicBlock* pred); + [[nodiscard]] bool addPredecessorWithoutPhis(MBasicBlock* pred); void inheritSlots(MBasicBlock* parent); - MOZ_MUST_USE bool initEntrySlots(TempAllocator& alloc); + [[nodiscard]] bool initEntrySlots(TempAllocator& alloc); // Replaces an edge for a given block with a new block. This is // used for critical edge splitting. @@ -255,8 +255,8 @@ class MBasicBlock : public TempObject, public InlineListNode<MBasicBlock> // Sets a back edge. This places phi nodes and rewrites instructions within // the current loop as necessary. If the backedge introduces new types for // phis at the loop header, returns a disabling abort. - MOZ_MUST_USE AbortReason setBackedge(TempAllocator& alloc, MBasicBlock* block); - MOZ_MUST_USE bool setBackedgeWasm(MBasicBlock* block); + [[nodiscard]] AbortReason setBackedge(TempAllocator& alloc, MBasicBlock* block); + [[nodiscard]] bool setBackedgeWasm(MBasicBlock* block); // Resets a LOOP_HEADER block to a NORMAL block. This is needed when // optimizations remove the backedge. @@ -271,11 +271,11 @@ class MBasicBlock : public TempObject, public InlineListNode<MBasicBlock> void inheritPhis(MBasicBlock* header); // Propagates backedge slots into phis operands of the loop header. - MOZ_MUST_USE bool inheritPhisFromBackedge(TempAllocator& alloc, MBasicBlock* backedge, + [[nodiscard]] bool inheritPhisFromBackedge(TempAllocator& alloc, MBasicBlock* backedge, bool* hadTypeChange); // Compute the types for phis in this block according to their inputs. - MOZ_MUST_USE bool specializePhis(TempAllocator& alloc); + [[nodiscard]] bool specializePhis(TempAllocator& alloc); void insertBefore(MInstruction* at, MInstruction* ins); void insertAfter(MInstruction* at, MInstruction* ins); @@ -683,7 +683,7 @@ class MBasicBlock : public TempObject, public InlineListNode<MBasicBlock> #endif public: explicit BackupPoint(MBasicBlock* current); - MOZ_MUST_USE bool init(TempAllocator& alloc); + [[nodiscard]] bool init(TempAllocator& alloc); MBasicBlock* restore(); }; @@ -804,7 +804,7 @@ class MIRGraph return returnAccumulator_; } - MOZ_MUST_USE bool addReturn(MBasicBlock* returnBlock) { + [[nodiscard]] bool addReturn(MBasicBlock* returnBlock) { if (!returnAccumulator_) return true; diff --git a/js/src/jit/MacroAssembler.h b/js/src/jit/MacroAssembler.h index f681456396..d9c0532c34 100644 --- a/js/src/jit/MacroAssembler.h +++ b/js/src/jit/MacroAssembler.h @@ -1886,10 +1886,10 @@ class MacroAssembler : public MacroAssemblerSpecific void convertValueToFloatingPoint(ValueOperand value, FloatRegister output, Label* fail, MIRType outputType); - MOZ_MUST_USE bool convertValueToFloatingPoint(JSContext* cx, const Value& v, + [[nodiscard]] bool convertValueToFloatingPoint(JSContext* cx, const Value& v, FloatRegister output, Label* fail, MIRType outputType); - MOZ_MUST_USE bool convertConstantOrRegisterToFloatingPoint(JSContext* cx, + [[nodiscard]] bool convertConstantOrRegisterToFloatingPoint(JSContext* cx, const ConstantOrRegister& src, FloatRegister output, Label* fail, MIRType outputType); @@ -1903,11 +1903,11 @@ class MacroAssembler : public MacroAssemblerSpecific void convertValueToDouble(ValueOperand value, FloatRegister output, Label* fail) { convertValueToFloatingPoint(value, output, fail, MIRType::Double); } - MOZ_MUST_USE bool convertValueToDouble(JSContext* cx, const Value& v, FloatRegister output, + [[nodiscard]] bool convertValueToDouble(JSContext* cx, const Value& v, FloatRegister output, Label* fail) { return convertValueToFloatingPoint(cx, v, output, fail, MIRType::Double); } - MOZ_MUST_USE bool convertConstantOrRegisterToDouble(JSContext* cx, + [[nodiscard]] bool convertConstantOrRegisterToDouble(JSContext* cx, const ConstantOrRegister& src, FloatRegister output, Label* fail) { @@ -1920,11 +1920,11 @@ class MacroAssembler : public MacroAssemblerSpecific void convertValueToFloat(ValueOperand value, FloatRegister output, Label* fail) { convertValueToFloatingPoint(value, output, fail, MIRType::Float32); } - MOZ_MUST_USE bool convertValueToFloat(JSContext* cx, const Value& v, FloatRegister output, + [[nodiscard]] bool convertValueToFloat(JSContext* cx, const Value& v, FloatRegister output, Label* fail) { return convertValueToFloatingPoint(cx, v, output, fail, MIRType::Float32); } - MOZ_MUST_USE bool convertConstantOrRegisterToFloat(JSContext* cx, + [[nodiscard]] bool convertConstantOrRegisterToFloat(JSContext* cx, const ConstantOrRegister& src, FloatRegister output, Label* fail) { @@ -1969,9 +1969,9 @@ class MacroAssembler : public MacroAssemblerSpecific convertValueToInt(value, nullptr, nullptr, nullptr, nullptr, InvalidReg, temp, output, fail, behavior); } - MOZ_MUST_USE bool convertValueToInt(JSContext* cx, const Value& v, Register output, Label* fail, + [[nodiscard]] bool convertValueToInt(JSContext* cx, const Value& v, Register output, Label* fail, IntConversionBehavior behavior); - MOZ_MUST_USE bool convertConstantOrRegisterToInt(JSContext* cx, + [[nodiscard]] bool convertConstantOrRegisterToInt(JSContext* cx, const ConstantOrRegister& src, FloatRegister temp, Register output, Label* fail, IntConversionBehavior behavior); @@ -1998,14 +1998,14 @@ class MacroAssembler : public MacroAssemblerSpecific : IntConversion_Normal, conversion); } - MOZ_MUST_USE bool convertValueToInt32(JSContext* cx, const Value& v, Register output, + [[nodiscard]] bool convertValueToInt32(JSContext* cx, const Value& v, Register output, Label* fail, bool negativeZeroCheck) { return convertValueToInt(cx, v, output, fail, negativeZeroCheck ? IntConversion_NegativeZeroCheck : IntConversion_Normal); } - MOZ_MUST_USE bool convertConstantOrRegisterToInt32(JSContext* cx, + [[nodiscard]] bool convertConstantOrRegisterToInt32(JSContext* cx, const ConstantOrRegister& src, FloatRegister temp, Register output, Label* fail, bool negativeZeroCheck) @@ -2042,11 +2042,11 @@ class MacroAssembler : public MacroAssemblerSpecific convertValueToInt(value, input, nullptr, nullptr, nullptr, InvalidReg, temp, output, fail, IntConversion_Truncate); } - MOZ_MUST_USE bool truncateValueToInt32(JSContext* cx, const Value& v, Register output, + [[nodiscard]] bool truncateValueToInt32(JSContext* cx, const Value& v, Register output, Label* fail) { return convertValueToInt(cx, v, output, fail, IntConversion_Truncate); } - MOZ_MUST_USE bool truncateConstantOrRegisterToInt32(JSContext* cx, + [[nodiscard]] bool truncateConstantOrRegisterToInt32(JSContext* cx, const ConstantOrRegister& src, FloatRegister temp, Register output, Label* fail) @@ -2076,11 +2076,11 @@ class MacroAssembler : public MacroAssemblerSpecific convertValueToInt(value, input, nullptr, nullptr, nullptr, InvalidReg, temp, output, fail, IntConversion_ClampToUint8); } - MOZ_MUST_USE bool clampValueToUint8(JSContext* cx, const Value& v, Register output, + [[nodiscard]] bool clampValueToUint8(JSContext* cx, const Value& v, Register output, Label* fail) { return convertValueToInt(cx, v, output, fail, IntConversion_ClampToUint8); } - MOZ_MUST_USE bool clampConstantOrRegisterToUint8(JSContext* cx, + [[nodiscard]] bool clampConstantOrRegisterToUint8(JSContext* cx, const ConstantOrRegister& src, FloatRegister temp, Register output, Label* fail) @@ -2114,7 +2114,7 @@ class MacroAssembler : public MacroAssemblerSpecific void restoreFrameAlignmentForICArguments(AfterICSaveLive& aic) PER_ARCH; AfterICSaveLive icSaveLive(LiveRegisterSet& liveRegs); - MOZ_MUST_USE bool icBuildOOLFakeExitFrame(void* fakeReturnAddr, AfterICSaveLive& aic); + [[nodiscard]] bool icBuildOOLFakeExitFrame(void* fakeReturnAddr, AfterICSaveLive& aic); void icRestoreLive(LiveRegisterSet& liveRegs, AfterICSaveLive& aic); // Align the stack pointer based on the number of arguments which are pushed diff --git a/js/src/jit/MoveResolver.h b/js/src/jit/MoveResolver.h index f52d6bc99a..40809b77c6 100644 --- a/js/src/jit/MoveResolver.h +++ b/js/src/jit/MoveResolver.h @@ -299,7 +299,7 @@ class MoveResolver PendingMove* findBlockingMove(const PendingMove* last); PendingMove* findCycledMove(PendingMoveIterator* stack, PendingMoveIterator end, const PendingMove* first); - MOZ_MUST_USE bool addOrderedMove(const MoveOp& move); + [[nodiscard]] bool addOrderedMove(const MoveOp& move); void reorderMove(size_t from, size_t to); // Internal reset function. Does not clear lists. @@ -319,8 +319,8 @@ class MoveResolver // // After calling addMove() for each parallel move, resolve() performs the // cycle resolution algorithm. Calling addMove() again resets the resolver. - MOZ_MUST_USE bool addMove(const MoveOperand& from, const MoveOperand& to, MoveOp::Type type); - MOZ_MUST_USE bool resolve(); + [[nodiscard]] bool addMove(const MoveOperand& from, const MoveOperand& to, MoveOp::Type type); + [[nodiscard]] bool resolve(); void sortMemoryToMemoryMoves(); size_t numMoves() const { diff --git a/js/src/jit/OptimizationTracking.h b/js/src/jit/OptimizationTracking.h index 1854fc1652..d2d6909369 100644 --- a/js/src/jit/OptimizationTracking.h +++ b/js/src/jit/OptimizationTracking.h @@ -74,8 +74,8 @@ class OptimizationTypeInfo types_(alloc) { } - MOZ_MUST_USE bool trackTypeSet(TemporaryTypeSet* typeSet); - MOZ_MUST_USE bool trackType(TypeSet::Type type); + [[nodiscard]] bool trackTypeSet(TemporaryTypeSet* typeSet); + [[nodiscard]] bool trackType(TypeSet::Type type); JS::TrackedTypeSite site() const { return site_; } MIRType mirType() const { return mirType_; } @@ -86,8 +86,8 @@ class OptimizationTypeInfo HashNumber hash() const; - MOZ_MUST_USE bool writeCompact(JSContext* cx, CompactBufferWriter& writer, - UniqueTrackedTypes& uniqueTypes) const; + [[nodiscard]] bool writeCompact(JSContext* cx, CompactBufferWriter& writer, + UniqueTrackedTypes& uniqueTypes) const; }; typedef Vector<OptimizationTypeInfo, 1, JitAllocPolicy> TempOptimizationTypeInfoVector; @@ -113,9 +113,9 @@ class TrackedOptimizations : public TempObject currentAttempt_ = UINT32_MAX; } - MOZ_MUST_USE bool trackTypeInfo(OptimizationTypeInfo&& ty); + [[nodiscard]] bool trackTypeInfo(OptimizationTypeInfo&& ty); - MOZ_MUST_USE bool trackAttempt(JS::TrackedStrategy strategy); + [[nodiscard]] bool trackAttempt(JS::TrackedStrategy strategy); void amendAttempt(uint32_t index); void trackOutcome(JS::TrackedOutcome outcome); void trackSuccess(); @@ -173,10 +173,10 @@ class UniqueTrackedOptimizations sorted_(cx) { } - MOZ_MUST_USE bool init() { return map_.init(); } - MOZ_MUST_USE bool add(const TrackedOptimizations* optimizations); + [[nodiscard]] bool init() { return map_.init(); } + [[nodiscard]] bool add(const TrackedOptimizations* optimizations); - MOZ_MUST_USE bool sortByFrequency(JSContext* cx); + [[nodiscard]] bool sortByFrequency(JSContext* cx); bool sorted() const { return !sorted_.empty(); } uint32_t count() const { MOZ_ASSERT(sorted()); return sorted_.length(); } const SortedVector& sortedVector() const { MOZ_ASSERT(sorted()); return sorted_; } @@ -406,10 +406,10 @@ class IonTrackedOptimizationsRegion uint8_t* index); static void WriteDelta(CompactBufferWriter& writer, uint32_t startDelta, uint32_t length, uint8_t index); - static MOZ_MUST_USE bool WriteRun(CompactBufferWriter& writer, - const NativeToTrackedOptimizations* start, - const NativeToTrackedOptimizations* end, - const UniqueTrackedOptimizations& unique); + [[nodiscard]] static bool WriteRun(CompactBufferWriter& writer, + const NativeToTrackedOptimizations* start, + const NativeToTrackedOptimizations* end, + const UniqueTrackedOptimizations& unique); }; class IonTrackedOptimizationsAttempts @@ -559,7 +559,7 @@ typedef IonTrackedOptimizationsOffsetsTable<IonTrackedOptimizationsAttempts> typedef IonTrackedOptimizationsOffsetsTable<IonTrackedOptimizationsTypeInfo> IonTrackedOptimizationsTypesTable; -MOZ_MUST_USE bool +[[nodiscard]] bool WriteIonTrackedOptimizationsTable(JSContext* cx, CompactBufferWriter& writer, const NativeToTrackedOptimizations* start, const NativeToTrackedOptimizations* end, diff --git a/js/src/jit/PcScriptCache.h b/js/src/jit/PcScriptCache.h index 03f8f311b4..c3060f3ea4 100644 --- a/js/src/jit/PcScriptCache.h +++ b/js/src/jit/PcScriptCache.h @@ -40,8 +40,8 @@ struct PcScriptCache } // Get a value from the cache. May perform lazy allocation. - MOZ_MUST_USE bool get(JSRuntime* rt, uint32_t hash, uint8_t* addr, - JSScript** scriptRes, jsbytecode** pcRes) + [[nodiscard]] bool get(JSRuntime* rt, uint32_t hash, uint8_t* addr, + JSScript** scriptRes, jsbytecode** pcRes) { // If a GC occurred, lazily clear the cache now. if (gcNumber != rt->gc.gcNumber()) { diff --git a/js/src/jit/PerfSpewer.h b/js/src/jit/PerfSpewer.h index 465058574b..046e17838f 100644 --- a/js/src/jit/PerfSpewer.h +++ b/js/src/jit/PerfSpewer.h @@ -65,9 +65,9 @@ class PerfSpewer BasicBlocksVector basicBlocks_; public: - virtual MOZ_MUST_USE bool startBasicBlock(MBasicBlock* blk, MacroAssembler& masm); - virtual MOZ_MUST_USE bool endBasicBlock(MacroAssembler& masm); - MOZ_MUST_USE bool noteEndInlineCode(MacroAssembler& masm); + [[nodiscard]] virtual bool startBasicBlock(MBasicBlock* blk, MacroAssembler& masm); + [[nodiscard]] virtual bool endBasicBlock(MacroAssembler& masm); + [[nodiscard]] bool noteEndInlineCode(MacroAssembler& masm); void writeProfile(JSScript* script, JitCode* code, MacroAssembler& masm); }; @@ -79,8 +79,8 @@ void writePerfSpewerJitCodeProfile(JitCode* code, const char* msg); class WasmPerfSpewer : public PerfSpewer { public: - MOZ_MUST_USE bool startBasicBlock(MBasicBlock* blk, MacroAssembler& masm) { return true; } - MOZ_MUST_USE bool endBasicBlock(MacroAssembler& masm) { return true; } + [[nodiscard]] bool startBasicBlock(MBasicBlock* blk, MacroAssembler& masm) { return true; } + [[nodiscard]] bool endBasicBlock(MacroAssembler& masm) { return true; } }; void writePerfSpewerWasmFunctionMap(uintptr_t base, uintptr_t size, const char* filename, diff --git a/js/src/jit/ProcessExecutableMemory.cpp b/js/src/jit/ProcessExecutableMemory.cpp index 7c40d93c71..a49ac22e77 100644 --- a/js/src/jit/ProcessExecutableMemory.cpp +++ b/js/src/jit/ProcessExecutableMemory.cpp @@ -441,7 +441,7 @@ class ProcessExecutableMemory pages_() {} - MOZ_MUST_USE bool init() { + [[nodiscard]] bool init() { pages_.init(); MOZ_RELEASE_ASSERT(!initialized()); diff --git a/js/src/jit/ProcessExecutableMemory.h b/js/src/jit/ProcessExecutableMemory.h index 45c9c23b8c..efc47247fa 100644 --- a/js/src/jit/ProcessExecutableMemory.h +++ b/js/src/jit/ProcessExecutableMemory.h @@ -22,11 +22,11 @@ enum class ProtectionSetting { Executable, }; -extern MOZ_MUST_USE bool ReprotectRegion(void* start, size_t size, ProtectionSetting protection); +[[nodiscard]] extern bool ReprotectRegion(void* start, size_t size, ProtectionSetting protection); // Functions called at process start-up/shutdown to initialize/release the // executable memory region. -extern MOZ_MUST_USE bool InitProcessExecutableMemory(); +[[nodiscard]] extern bool InitProcessExecutableMemory(); extern void ReleaseProcessExecutableMemory(); // Allocate/deallocate executable pages. diff --git a/js/src/jit/RangeAnalysis.h b/js/src/jit/RangeAnalysis.h index 16fe93e000..879a20c940 100644 --- a/js/src/jit/RangeAnalysis.h +++ b/js/src/jit/RangeAnalysis.h @@ -103,24 +103,24 @@ class RangeAnalysis public: RangeAnalysis(MIRGenerator* mir, MIRGraph& graph) : mir(mir), graph_(graph) {} - MOZ_MUST_USE bool addBetaNodes(); - MOZ_MUST_USE bool analyze(); - MOZ_MUST_USE bool addRangeAssertions(); - MOZ_MUST_USE bool removeBetaNodes(); - MOZ_MUST_USE bool prepareForUCE(bool* shouldRemoveDeadCode); - MOZ_MUST_USE bool tryRemovingGuards(); - MOZ_MUST_USE bool truncate(); - MOZ_MUST_USE bool removeUnnecessaryBitops(); + [[nodiscard]] bool addBetaNodes(); + [[nodiscard]] bool analyze(); + [[nodiscard]] bool addRangeAssertions(); + [[nodiscard]] bool removeBetaNodes(); + [[nodiscard]] bool prepareForUCE(bool* shouldRemoveDeadCode); + [[nodiscard]] bool tryRemovingGuards(); + [[nodiscard]] bool truncate(); + [[nodiscard]] bool removeUnnecessaryBitops(); // Any iteration bounds discovered for loops in the graph. LoopIterationBoundVector loopIterationBounds; private: - MOZ_MUST_USE bool analyzeLoop(MBasicBlock* header); + [[nodiscard]] bool analyzeLoop(MBasicBlock* header); LoopIterationBound* analyzeLoopIterationCount(MBasicBlock* header, MTest* test, BranchDirection direction); void analyzeLoopPhi(MBasicBlock* header, LoopIterationBound* loopBound, MPhi* phi); - MOZ_MUST_USE bool tryHoistBoundsCheck(MBasicBlock* header, MBoundsCheck* ins); + [[nodiscard]] bool tryHoistBoundsCheck(MBasicBlock* header, MBoundsCheck* ins); }; class Range : public TempObject { @@ -455,7 +455,7 @@ class Range : public TempObject { void dump(GenericPrinter& out) const; void dump() const; - MOZ_MUST_USE bool update(const Range* other); + [[nodiscard]] bool update(const Range* other); // Unlike the other operations, unionWith is an in-place // modification. This is to avoid a bunch of useless extra @@ -485,7 +485,7 @@ class Range : public TempObject { static Range* sign(TempAllocator& alloc, const Range* op); static Range* NaNToZero(TempAllocator& alloc, const Range* op); - static MOZ_MUST_USE bool negativeZeroMul(const Range* lhs, const Range* rhs); + [[nodiscard]] static bool negativeZeroMul(const Range* lhs, const Range* rhs); bool isUnknownInt32() const { return isInt32() && lower() == INT32_MIN && upper() == INT32_MAX; diff --git a/js/src/jit/Recover.h b/js/src/jit/Recover.h index ee330d78e5..dc4e9bed50 100644 --- a/js/src/jit/Recover.h +++ b/js/src/jit/Recover.h @@ -143,7 +143,7 @@ class MOZ_NON_PARAM RInstruction // Function used to recover the value computed by this instruction. This // function reads its arguments from the allocations listed on the snapshot // iterator and stores its returned value on the snapshot iterator too. - virtual MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const = 0; + [[nodiscard]] virtual bool recover(JSContext* cx, SnapshotIterator& iter) const = 0; // Decode an RInstruction on top of the reserved storage space, based on the // tag written by the writeRecoverData function of the corresponding MIR @@ -195,7 +195,7 @@ class RResumePoint final : public RInstruction uint32_t numOperands() const override { return numOperands_; } - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RBitNot final : public RInstruction @@ -203,7 +203,7 @@ class RBitNot final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(BitNot, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RBitAnd final : public RInstruction @@ -211,7 +211,7 @@ class RBitAnd final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(BitAnd, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RBitOr final : public RInstruction @@ -219,7 +219,7 @@ class RBitOr final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(BitOr, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RBitXor final : public RInstruction @@ -227,7 +227,7 @@ class RBitXor final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(BitXor, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RLsh final : public RInstruction @@ -235,7 +235,7 @@ class RLsh final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Lsh, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RRsh final : public RInstruction @@ -243,7 +243,7 @@ class RRsh final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Rsh, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RUrsh final : public RInstruction @@ -251,7 +251,7 @@ class RUrsh final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Ursh, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RSignExtendInt32 final : public RInstruction @@ -262,7 +262,7 @@ class RSignExtendInt32 final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(SignExtendInt32, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RAdd final : public RInstruction @@ -273,7 +273,7 @@ class RAdd final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Add, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RSub final : public RInstruction @@ -284,7 +284,7 @@ class RSub final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Sub, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RMul final : public RInstruction @@ -296,7 +296,7 @@ class RMul final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Mul, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RDiv final : public RInstruction @@ -307,7 +307,7 @@ class RDiv final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Div, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RMod final : public RInstruction @@ -315,7 +315,7 @@ class RMod final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Mod, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RNot final : public RInstruction @@ -323,7 +323,7 @@ class RNot final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Not, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RConcat final : public RInstruction @@ -331,7 +331,7 @@ class RConcat final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Concat, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RStringLength final : public RInstruction @@ -339,7 +339,7 @@ class RStringLength final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(StringLength, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RArgumentsLength final : public RInstruction @@ -347,7 +347,7 @@ class RArgumentsLength final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(ArgumentsLength, 0) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; @@ -356,7 +356,7 @@ class RFloor final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Floor, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RCeil final : public RInstruction @@ -364,7 +364,7 @@ class RCeil final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Ceil, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RRound final : public RInstruction @@ -372,7 +372,7 @@ class RRound final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Round, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RCharCodeAt final : public RInstruction @@ -380,7 +380,7 @@ class RCharCodeAt final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(CharCodeAt, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RFromCharCode final : public RInstruction @@ -388,7 +388,7 @@ class RFromCharCode final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(FromCharCode, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RPow final : public RInstruction @@ -396,7 +396,7 @@ class RPow final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Pow, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RPowHalf final : public RInstruction @@ -404,7 +404,7 @@ class RPowHalf final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(PowHalf, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RMinMax final : public RInstruction @@ -415,7 +415,7 @@ class RMinMax final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(MinMax, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RAbs final : public RInstruction @@ -423,7 +423,7 @@ class RAbs final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Abs, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RSqrt final : public RInstruction @@ -434,7 +434,7 @@ class RSqrt final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Sqrt, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RAtan2 final : public RInstruction @@ -442,7 +442,7 @@ class RAtan2 final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Atan2, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RHypot final : public RInstruction @@ -457,7 +457,7 @@ class RHypot final : public RInstruction return numOperands_; } - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RMathFunction final : public RInstruction @@ -468,14 +468,14 @@ class RMathFunction final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(MathFunction, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RRandom final : public RInstruction { RINSTRUCTION_HEADER_NUM_OP_(Random, 0) public: - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RStringSplit final : public RInstruction @@ -483,7 +483,7 @@ class RStringSplit final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(StringSplit, 3) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RNaNToZero final : public RInstruction @@ -499,7 +499,7 @@ class RRegExpMatcher final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(RegExpMatcher, 3) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RRegExpSearcher final : public RInstruction @@ -507,7 +507,7 @@ class RRegExpSearcher final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(RegExpSearcher, 3) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RRegExpTester final : public RInstruction @@ -515,7 +515,7 @@ class RRegExpTester final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(RegExpTester, 3) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RStringReplace final : public RInstruction @@ -526,7 +526,7 @@ class RStringReplace final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(StringReplace, 3) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RTypeOf final : public RInstruction @@ -534,7 +534,7 @@ class RTypeOf final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(TypeOf, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RToDouble final : public RInstruction @@ -542,7 +542,7 @@ class RToDouble final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(ToDouble, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RToFloat32 final : public RInstruction @@ -550,7 +550,7 @@ class RToFloat32 final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(ToFloat32, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RTruncateToInt32 final : public RInstruction @@ -558,7 +558,7 @@ class RTruncateToInt32 final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(TruncateToInt32, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RNewObject final : public RInstruction @@ -569,7 +569,7 @@ class RNewObject final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(NewObject, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RNewTypedArray final : public RInstruction @@ -577,7 +577,7 @@ class RNewTypedArray final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(NewTypedArray, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RNewArray final : public RInstruction @@ -588,7 +588,7 @@ class RNewArray final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(NewArray, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RNewDerivedTypedObject final : public RInstruction @@ -596,7 +596,7 @@ class RNewDerivedTypedObject final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(NewDerivedTypedObject, 3) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RCreateThisWithTemplate final : public RInstruction @@ -604,7 +604,7 @@ class RCreateThisWithTemplate final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(CreateThisWithTemplate, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RLambda final : public RInstruction @@ -612,7 +612,7 @@ class RLambda final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(Lambda, 2) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RObjectState final : public RInstruction @@ -631,7 +631,7 @@ class RObjectState final : public RInstruction return numSlots() + 1; } - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RArrayState final : public RInstruction @@ -651,7 +651,7 @@ class RArrayState final : public RInstruction return numElements() + 2; } - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RAtomicIsLockFree final : public RInstruction @@ -659,7 +659,7 @@ class RAtomicIsLockFree final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(AtomicIsLockFree, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; class RAssertRecoveredOnBailout final : public RInstruction @@ -667,7 +667,7 @@ class RAssertRecoveredOnBailout final : public RInstruction public: RINSTRUCTION_HEADER_NUM_OP_(AssertRecoveredOnBailout, 1) - MOZ_MUST_USE bool recover(JSContext* cx, SnapshotIterator& iter) const override; + [[nodiscard]] bool recover(JSContext* cx, SnapshotIterator& iter) const override; }; #undef RINSTRUCTION_HEADER_ diff --git a/js/src/jit/RegisterAllocator.h b/js/src/jit/RegisterAllocator.h index 97333fbdca..39ead5df27 100644 --- a/js/src/jit/RegisterAllocator.h +++ b/js/src/jit/RegisterAllocator.h @@ -36,13 +36,13 @@ struct AllocationIntegrityState // Record all virtual registers in the graph. This must be called before // register allocation, to pick up the original LUses. - MOZ_MUST_USE bool record(); + [[nodiscard]] bool record(); // Perform the liveness analysis on the graph, and assert on an invalid // allocation. This must be called after register allocation, to pick up // all assigned physical values. If populateSafepoints is specified, // safepoints will be filled in with liveness information. - MOZ_MUST_USE bool check(bool populateSafepoints); + [[nodiscard]] bool check(bool populateSafepoints); private: @@ -121,11 +121,11 @@ struct AllocationIntegrityState typedef HashSet<IntegrityItem, IntegrityItem, SystemAllocPolicy> IntegrityItemSet; IntegrityItemSet seen; - MOZ_MUST_USE bool checkIntegrity(LBlock* block, LInstruction* ins, uint32_t vreg, + [[nodiscard]] bool checkIntegrity(LBlock* block, LInstruction* ins, uint32_t vreg, LAllocation alloc, bool populateSafepoints); - MOZ_MUST_USE bool checkSafepointAllocation(LInstruction* ins, uint32_t vreg, LAllocation alloc, + [[nodiscard]] bool checkSafepointAllocation(LInstruction* ins, uint32_t vreg, LAllocation alloc, bool populateSafepoints); - MOZ_MUST_USE bool addPredecessor(LBlock* block, uint32_t vreg, LAllocation alloc); + [[nodiscard]] bool addPredecessor(LBlock* block, uint32_t vreg, LAllocation alloc); void dump(); }; @@ -232,7 +232,7 @@ class InstructionDataMap : insData_() { } - MOZ_MUST_USE bool init(MIRGenerator* gen, uint32_t numInstructions) { + [[nodiscard]] bool init(MIRGenerator* gen, uint32_t numInstructions) { if (!insData_.init(gen->alloc(), numInstructions)) return false; memset(&insData_[0], 0, sizeof(LNode*) * numInstructions); @@ -296,7 +296,7 @@ class RegisterAllocator } } - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); TempAllocator& alloc() const { return mir->alloc(); diff --git a/js/src/jit/RematerializedFrame.h b/js/src/jit/RematerializedFrame.h index fa3a9ef49f..694b3d02cd 100644 --- a/js/src/jit/RematerializedFrame.h +++ b/js/src/jit/RematerializedFrame.h @@ -72,10 +72,10 @@ class RematerializedFrame // Rematerialize all remaining frames pointed to by |iter| into |frames| // in older-to-younger order, e.g., frames[0] is the oldest frame. - static MOZ_MUST_USE bool RematerializeInlineFrames(JSContext* cx, uint8_t* top, - InlineFrameIterator& iter, - MaybeReadFallback& fallback, - GCVector<RematerializedFrame*>& frames); + [[nodiscard]] static bool RematerializeInlineFrames(JSContext* cx, uint8_t* top, + InlineFrameIterator& iter, + MaybeReadFallback& fallback, + GCVector<RematerializedFrame*>& frames); // Free a vector of RematerializedFrames; takes care to call the // destructor. Also clears the vector. @@ -137,8 +137,8 @@ class RematerializedFrame envChain_ = &envChain_->as<SpecificEnvironment>().enclosingEnvironment(); } - MOZ_MUST_USE bool initFunctionEnvironmentObjects(JSContext* cx); - MOZ_MUST_USE bool pushVarEnvironment(JSContext* cx, HandleScope scope); + [[nodiscard]] bool initFunctionEnvironmentObjects(JSContext* cx); + [[nodiscard]] bool pushVarEnvironment(JSContext* cx, HandleScope scope); bool hasInitialEnvironment() const { return hasInitialEnv_; diff --git a/js/src/jit/Safepoints.h b/js/src/jit/Safepoints.h index 1626d924c8..4c5858851c 100644 --- a/js/src/jit/Safepoints.h +++ b/js/src/jit/Safepoints.h @@ -28,7 +28,7 @@ class SafepointWriter public: explicit SafepointWriter(uint32_t slotCount, uint32_t argumentCount); - MOZ_MUST_USE bool init(TempAllocator& alloc); + [[nodiscard]] bool init(TempAllocator& alloc); private: // A safepoint entry is written in the order these functions appear. @@ -83,7 +83,7 @@ class SafepointReader void advanceFromGcSlots(); void advanceFromValueSlots(); void advanceFromNunboxSlots(); - MOZ_MUST_USE bool getSlotFromBitmap(SafepointSlotEntry* entry); + [[nodiscard]] bool getSlotFromBitmap(SafepointSlotEntry* entry); public: SafepointReader(IonScript* script, const SafepointIndex* si); @@ -111,17 +111,17 @@ class SafepointReader uint32_t osiReturnPointOffset() const; // Returns true if a slot was read, false if there are no more slots. - MOZ_MUST_USE bool getGcSlot(SafepointSlotEntry* entry); + [[nodiscard]] bool getGcSlot(SafepointSlotEntry* entry); // Returns true if a slot was read, false if there are no more value slots. - MOZ_MUST_USE bool getValueSlot(SafepointSlotEntry* entry); + [[nodiscard]] bool getValueSlot(SafepointSlotEntry* entry); // Returns true if a nunbox slot was read, false if there are no more // nunbox slots. - MOZ_MUST_USE bool getNunboxSlot(LAllocation* type, LAllocation* payload); + [[nodiscard]] bool getNunboxSlot(LAllocation* type, LAllocation* payload); // Returns true if a slot was read, false if there are no more slots. - MOZ_MUST_USE bool getSlotsOrElementsSlot(SafepointSlotEntry* entry); + [[nodiscard]] bool getSlotsOrElementsSlot(SafepointSlotEntry* entry); }; } // namespace jit diff --git a/js/src/jit/ScalarReplacement.h b/js/src/jit/ScalarReplacement.h index 18e0f02624..cc885642eb 100644 --- a/js/src/jit/ScalarReplacement.h +++ b/js/src/jit/ScalarReplacement.h @@ -15,8 +15,7 @@ namespace jit { class MIRGenerator; class MIRGraph; -MOZ_MUST_USE bool -ScalarReplacement(MIRGenerator* mir, MIRGraph& graph); +[[nodiscard]] bool ScalarReplacement(MIRGenerator* mir, MIRGraph& graph); } // namespace jit } // namespace js diff --git a/js/src/jit/SharedIC.h b/js/src/jit/SharedIC.h index d259ebf0bc..dcc615a608 100644 --- a/js/src/jit/SharedIC.h +++ b/js/src/jit/SharedIC.h @@ -939,10 +939,10 @@ class ICUpdatedStub : public ICStub {} public: - MOZ_MUST_USE bool initUpdatingChain(JSContext* cx, ICStubSpace* space); + [[nodiscard]] bool initUpdatingChain(JSContext* cx, ICStubSpace* space); - MOZ_MUST_USE bool addUpdateStubForValue(JSContext* cx, HandleScript script, HandleObject obj, - HandleId id, HandleValue val); + [[nodiscard]] bool addUpdateStubForValue(JSContext* cx, HandleScript script, HandleObject obj, + HandleId id, HandleValue val); void addOptimizedUpdateStub(ICStub* stub) { if (firstUpdateStub_->isTypeUpdate_Fallback()) { @@ -1015,7 +1015,7 @@ class ICStubCompiler (static_cast<int32_t>(kind) << 1); } - virtual MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm) = 0; + [[nodiscard]] virtual bool generateStubCode(MacroAssembler& masm) = 0; virtual void postGenerateStubCode(MacroAssembler& masm, Handle<JitCode*> genCode) {} JitCode* getStubCode(); @@ -1032,14 +1032,14 @@ class ICStubCompiler void pushStubPayload(MacroAssembler& masm, Register scratch); // Emits a tail call to a VMFunction wrapper. - MOZ_MUST_USE bool tailCallVM(const VMFunction& fun, MacroAssembler& masm); + [[nodiscard]] bool tailCallVM(const VMFunction& fun, MacroAssembler& masm); // Emits a normal (non-tail) call to a VMFunction wrapper. - MOZ_MUST_USE bool callVM(const VMFunction& fun, MacroAssembler& masm); + [[nodiscard]] bool callVM(const VMFunction& fun, MacroAssembler& masm); // Emits a call to a type-update IC, assuming that the value to be // checked is already in R0. - MOZ_MUST_USE bool callTypeUpdateIC(MacroAssembler& masm, uint32_t objectOffset); + [[nodiscard]] bool callTypeUpdateIC(MacroAssembler& masm, uint32_t objectOffset); // A stub frame is used when a stub wants to call into the VM without // performing a tail call. This is required for the return address @@ -1180,9 +1180,9 @@ class ICMonitoredFallbackStub : public ICFallbackStub fallbackMonitorStub_(nullptr) {} public: - MOZ_MUST_USE bool initMonitoringChain(JSContext* cx, ICStubSpace* space, + [[nodiscard]] bool initMonitoringChain(JSContext* cx, ICStubSpace* space, ICStubCompiler::Engine engine); - MOZ_MUST_USE bool addMonitorStubForValue(JSContext* cx, SharedStubInfo* info, HandleValue val); + [[nodiscard]] bool addMonitorStubForValue(JSContext* cx, SharedStubInfo* info, HandleValue val); inline ICTypeMonitor_Fallback* fallbackMonitorStub() const { return fallbackMonitorStub_; @@ -1442,7 +1442,7 @@ class ICTypeMonitor_Fallback : public ICStub // Create a new monitor stub for the type of the given value, and // add it to this chain. - MOZ_MUST_USE bool addMonitorStubForValue(JSContext* cx, SharedStubInfo* info, HandleValue val); + [[nodiscard]] bool addMonitorStubForValue(JSContext* cx, SharedStubInfo* info, HandleValue val); void resetMonitorStubChain(Zone* zone); @@ -1452,7 +1452,7 @@ class ICTypeMonitor_Fallback : public ICStub uint32_t argumentIndex_; protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, Engine engine, ICMonitoredFallbackStub* mainFallbackStub) @@ -1485,7 +1485,7 @@ class ICTypeMonitor_PrimitiveSet : public TypeCheckPrimitiveSetStub public: class Compiler : public TypeCheckPrimitiveSetStub::Compiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, Engine engine, ICTypeMonitor_PrimitiveSet* existingStub, @@ -1529,7 +1529,7 @@ class ICTypeMonitor_SingleObject : public ICStub class Compiler : public ICStubCompiler { protected: HandleObject obj_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, HandleObject obj) @@ -1563,7 +1563,7 @@ class ICTypeMonitor_ObjectGroup : public ICStub class Compiler : public ICStubCompiler { protected: HandleObjectGroup group_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, HandleObjectGroup group) @@ -1615,7 +1615,7 @@ class ICBinaryArith_Fallback : public ICFallbackStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx, Engine engine) @@ -1648,7 +1648,7 @@ class ICBinaryArith_Int32 : public ICStub JSOp op_; bool allowDouble_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); // Stub keys shift-stubs need to encode the kind, the JSOp and if we allow doubles. virtual int32_t getKey() const { @@ -1680,7 +1680,7 @@ class ICBinaryArith_StringConcat : public ICStub public: class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx, Engine engine) @@ -1711,7 +1711,7 @@ class ICBinaryArith_StringObjectConcat : public ICStub class Compiler : public ICStubCompiler { protected: bool lhsIsString_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -1743,7 +1743,7 @@ class ICBinaryArith_Double : public ICStub public: class Compiler : public ICMultiStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, JSOp op, Engine engine) @@ -1785,7 +1785,7 @@ class ICBinaryArith_BooleanWithInt32 : public ICStub JSOp op_; bool lhsIsBool_; bool rhsIsBool_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -1830,7 +1830,7 @@ class ICBinaryArith_DoubleWithInt32 : public ICStub class Compiler : public ICMultiStubCompiler { protected: bool lhsIsDouble_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -1881,7 +1881,7 @@ class ICUnaryArith_Fallback : public ICFallbackStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx, Engine engine) @@ -1905,7 +1905,7 @@ class ICUnaryArith_Int32 : public ICStub public: class Compiler : public ICMultiStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, JSOp op, Engine engine) @@ -1929,7 +1929,7 @@ class ICUnaryArith_Double : public ICStub public: class Compiler : public ICMultiStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, JSOp op, Engine engine) @@ -1973,7 +1973,7 @@ class ICCompare_Fallback : public ICFallbackStub // Compiler for this stub kind. class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx, Engine engine) @@ -1996,7 +1996,7 @@ class ICCompare_Int32 : public ICStub // Compiler for this stub kind. class Compiler : public ICMultiStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, JSOp op, Engine engine) @@ -2019,7 +2019,7 @@ class ICCompare_Double : public ICStub public: class Compiler : public ICMultiStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, JSOp op, Engine engine) @@ -2049,7 +2049,7 @@ class ICCompare_NumberWithUndefined : public ICStub class Compiler : public ICMultiStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); bool lhsIsUndefined; @@ -2084,7 +2084,7 @@ class ICCompare_String : public ICStub public: class Compiler : public ICMultiStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, JSOp op, Engine engine) @@ -2108,7 +2108,7 @@ class ICCompare_Boolean : public ICStub public: class Compiler : public ICMultiStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, JSOp op, Engine engine) @@ -2132,7 +2132,7 @@ class ICCompare_Object : public ICStub public: class Compiler : public ICMultiStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, JSOp op, Engine engine) @@ -2156,7 +2156,7 @@ class ICCompare_ObjectWithUndefined : public ICStub public: class Compiler : public ICMultiStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); bool lhsIsUndefined; bool compareWithNull; @@ -2202,7 +2202,7 @@ class ICCompare_Int32WithBoolean : public ICStub protected: JSOp op_; bool lhsIsInt32_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -2249,7 +2249,7 @@ IsPreliminaryObject(JSObject* obj); void StripPreliminaryObjectStubs(JSContext* cx, ICFallbackStub* stub); -MOZ_MUST_USE bool +[[nodiscard]] bool EffectlesslyLookupProperty(JSContext* cx, HandleObject obj, HandleId name, MutableHandleObject holder, MutableHandle<PropertyResult> prop, bool* checkDOMProxy=nullptr, @@ -2268,17 +2268,17 @@ IsCacheableGetPropReadSlot(JSObject* obj, JSObject* holder, Shape* shape, bool i void GetFixedOrDynamicSlotOffset(Shape* shape, bool* isFixed, uint32_t* offset); -MOZ_MUST_USE bool +[[nodiscard]] bool IsCacheableGetPropCall(JSContext* cx, JSObject* obj, JSObject* holder, Shape* shape, bool* isScripted, bool* isTemporarilyUnoptimizable, bool isDOMProxy=false); -MOZ_MUST_USE bool +[[nodiscard]] bool UpdateExistingGetPropCallStubs(ICFallbackStub* fallbackStub, ICStub::Kind kind, HandleNativeObject holder, HandleObject receiver, HandleFunction getter); -MOZ_MUST_USE bool +[[nodiscard]] bool CheckHasNoSuchProperty(JSContext* cx, JSObject* obj, PropertyName* name, JSObject** lastProto = nullptr, size_t* protoChainDepthOut = nullptr); @@ -2287,7 +2287,7 @@ GuardReceiverObject(MacroAssembler& masm, ReceiverGuard guard, Register object, Register scratch, size_t receiverGuardOffset, Label* failure); -MOZ_MUST_USE bool +[[nodiscard]] bool GetProtoShapes(JSObject* obj, size_t protoChainDepth, MutableHandle<ShapeVector> shapes); void @@ -2302,7 +2302,7 @@ CheckDOMProxyExpandoDoesNotShadow(JSContext* cx, MacroAssembler& masm, Register void CheckForTypedObjectWithDetachedStorage(JSContext* cx, MacroAssembler& masm, Label* failure); -MOZ_MUST_USE bool +[[nodiscard]] bool DoCallNativeGetter(JSContext* cx, HandleFunction callee, HandleObject obj, MutableHandleValue result); @@ -2344,7 +2344,7 @@ class ICGetProp_Fallback : public ICMonitoredFallbackStub protected: uint32_t returnOffset_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); void postGenerateStubCode(MacroAssembler& masm, Handle<JitCode*> code); public: @@ -2376,7 +2376,7 @@ class ICGetProp_Generic : public ICMonitoredStub class Compiler : public ICStubCompiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); ICStub* firstMonitorStub_; public: explicit Compiler(JSContext* cx, Engine engine, ICStub* firstMonitorStub) @@ -2401,7 +2401,7 @@ class ICGetProp_StringLength : public ICStub public: class Compiler : public ICStubCompiler { - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx, Engine engine) @@ -2515,7 +2515,7 @@ class ICGetPropNativeCompiler : public ICStubCompiler uint32_t offset_; bool inputDefinitelyObject_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); protected: virtual int32_t getKey() const { @@ -2695,7 +2695,7 @@ class ICGetProp_CallScripted : public ICGetPropCallGetter class Compiler : public ICGetPropCallGetter::Compiler { protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, ICStub* firstMonitorStub, HandleObject obj, @@ -2770,7 +2770,7 @@ class ICGetPropCallNativeCompiler : public ICGetPropCallGetter::Compiler { bool inputDefinitelyObject_; protected: - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { int32_t baseKey = ICGetPropCallGetter::Compiler::getKey(); @@ -2883,9 +2883,9 @@ class ICGetPropCallDOMProxyNativeCompiler : public ICStubCompiler { RootedFunction getter_; uint32_t pcOffset_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm, Address* internalStructAddr, + [[nodiscard]] bool generateStubCode(MacroAssembler& masm, Address* internalStructAddr, Address* generationAddr); - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: ICGetPropCallDOMProxyNativeCompiler(JSContext* cx, ICStub::Kind kind, @@ -2941,7 +2941,7 @@ class ICGetProp_DOMProxyShadowed : public ICMonitoredStub RootedPropertyName name_; uint32_t pcOffset_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, Engine engine, ICStub* firstMonitorStub, Handle<ProxyObject*> proxy, @@ -2973,7 +2973,7 @@ class ICGetProp_ArgumentsLength : public ICStub protected: Which which_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); virtual int32_t getKey() const { return static_cast<int32_t>(engine_) | @@ -3004,7 +3004,7 @@ class ICGetProp_ArgumentsCallee : public ICMonitoredStub class Compiler : public ICStubCompiler { protected: ICStub* firstMonitorStub_; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, Engine engine, ICStub* firstMonitorStub) @@ -3039,7 +3039,7 @@ class ICNewArray_Fallback : public ICFallbackStub public: class Compiler : public ICStubCompiler { RootedObjectGroup templateGroup; - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: Compiler(JSContext* cx, ObjectGroup* templateGroup, Engine engine) @@ -3085,7 +3085,7 @@ class ICNewObject_Fallback : public ICFallbackStub public: class Compiler : public ICStubCompiler { - MOZ_MUST_USE bool generateStubCode(MacroAssembler& masm); + [[nodiscard]] bool generateStubCode(MacroAssembler& masm); public: explicit Compiler(JSContext* cx, Engine engine) diff --git a/js/src/jit/Sink.h b/js/src/jit/Sink.h index 154300f43c..d2a9e8c646 100644 --- a/js/src/jit/Sink.h +++ b/js/src/jit/Sink.h @@ -15,8 +15,7 @@ namespace jit { class MIRGenerator; class MIRGraph; -MOZ_MUST_USE bool -Sink(MIRGenerator* mir, MIRGraph& graph); +[[nodiscard]] bool Sink(MIRGenerator* mir, MIRGraph& graph); } // namespace jit } // namespace js diff --git a/js/src/jit/Snapshots.h b/js/src/jit/Snapshots.h index d9a4962946..290dbd68cd 100644 --- a/js/src/jit/Snapshots.h +++ b/js/src/jit/Snapshots.h @@ -384,14 +384,14 @@ class SnapshotWriter SnapshotOffset lastStart_; public: - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); SnapshotOffset startSnapshot(RecoverOffset recoverOffset, BailoutKind kind); #ifdef TRACK_SNAPSHOTS void trackSnapshot(uint32_t pcOpcode, uint32_t mirOpcode, uint32_t mirId, uint32_t lirOpcode, uint32_t lirId); #endif - MOZ_MUST_USE bool add(const RValueAllocation& slot); + [[nodiscard]] bool add(const RValueAllocation& slot); uint32_t allocWritten() const { return allocWritten_; diff --git a/js/src/jit/StupidAllocator.h b/js/src/jit/StupidAllocator.h index aae2cb96bd..96c17e03f3 100644 --- a/js/src/jit/StupidAllocator.h +++ b/js/src/jit/StupidAllocator.h @@ -56,10 +56,10 @@ class StupidAllocator : public RegisterAllocator { } - MOZ_MUST_USE bool go(); + [[nodiscard]] bool go(); private: - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); void syncForBlockEnd(LBlock* block, LInstruction* ins); void allocateForInstruction(LInstruction* ins); diff --git a/js/src/jit/TypePolicy.h b/js/src/jit/TypePolicy.h index 0b9d2b37ef..8ab241ab00 100644 --- a/js/src/jit/TypePolicy.h +++ b/js/src/jit/TypePolicy.h @@ -29,7 +29,7 @@ class TypePolicy // * If untyped, optionally ask the input to try and specialize its value. // * Replace the operand with a conversion instruction. // * Insert an unconditional deoptimization (no conversion possible). - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) = 0; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) = 0; }; struct TypeSpecializationData @@ -79,8 +79,8 @@ class BoxInputsPolicy final : public TypePolicy { public: SPECIALIZATION_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -89,28 +89,28 @@ class ArithPolicy final : public TypePolicy { public: SPECIALIZATION_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; }; class AllDoublePolicy final : public TypePolicy { public: EMPTY_DATA_; - MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] bool adjustInputs(TempAllocator& alloc, MInstruction* def); }; class BitwisePolicy final : public TypePolicy { public: SPECIALIZATION_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; }; class ComparePolicy final : public TypePolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; }; // Policy for MTest instructions. @@ -118,21 +118,21 @@ class TestPolicy final : public TypePolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; }; class TypeBarrierPolicy final : public TypePolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; }; class CallPolicy final : public TypePolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; }; // Policy for MPow. First operand Double; second Double or Int32. @@ -140,7 +140,7 @@ class PowPolicy final : public TypePolicy { public: SPECIALIZATION_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; }; // Expect a string for operand Op. If the input is a Value, it is unboxed. @@ -149,8 +149,8 @@ class StringPolicy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -161,8 +161,8 @@ class ConvertToStringPolicy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -173,8 +173,8 @@ class BooleanPolicy final : private TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -185,8 +185,8 @@ class IntPolicy final : private TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -197,8 +197,8 @@ class ConvertToInt32Policy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -209,8 +209,8 @@ class TruncateToInt32Policy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -221,8 +221,8 @@ class DoublePolicy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -233,8 +233,8 @@ class Float32Policy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -246,7 +246,7 @@ class FloatingPointPolicy final : public TypePolicy { public: SPECIALIZATION_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; }; template <unsigned Op> @@ -254,8 +254,8 @@ class NoFloatPolicy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -267,7 +267,7 @@ class NoFloatPolicyAfter final : public TypePolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; }; // Box objects or strings as an input to a ToDouble instruction. @@ -275,8 +275,8 @@ class ToDoublePolicy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -286,8 +286,8 @@ class ToInt32Policy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -297,8 +297,8 @@ class ToStringPolicy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* def); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override { return staticAdjustInputs(alloc, def); } }; @@ -308,8 +308,8 @@ class ObjectPolicy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override { return staticAdjustInputs(alloc, ins); } }; @@ -323,8 +323,8 @@ class BoxPolicy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins); - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins); + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override { return staticAdjustInputs(alloc, ins); } }; @@ -335,8 +335,8 @@ class BoxExceptPolicy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins); - MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins); + [[nodiscard]] bool adjustInputs(TempAllocator& alloc, MInstruction* ins) { return staticAdjustInputs(alloc, ins); } }; @@ -347,8 +347,8 @@ class CacheIdPolicy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins); - MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins); + [[nodiscard]] bool adjustInputs(TempAllocator& alloc, MInstruction* ins) { return staticAdjustInputs(alloc, ins); } }; @@ -359,10 +359,10 @@ class MixPolicy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins) { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins) { return Lhs::staticAdjustInputs(alloc, ins) && Rhs::staticAdjustInputs(alloc, ins); } - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override { + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override { return staticAdjustInputs(alloc, ins); } }; @@ -373,12 +373,12 @@ class Mix3Policy final : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins) { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins) { return Policy1::staticAdjustInputs(alloc, ins) && Policy2::staticAdjustInputs(alloc, ins) && Policy3::staticAdjustInputs(alloc, ins); } - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override { + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override { return staticAdjustInputs(alloc, ins); } }; @@ -389,13 +389,13 @@ class Mix4Policy : public TypePolicy { public: EMPTY_DATA_; - static MOZ_MUST_USE bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins) { + [[nodiscard]] static bool staticAdjustInputs(TempAllocator& alloc, MInstruction* ins) { return Policy1::staticAdjustInputs(alloc, ins) && Policy2::staticAdjustInputs(alloc, ins) && Policy3::staticAdjustInputs(alloc, ins) && Policy4::staticAdjustInputs(alloc, ins); } - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override { + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override { return staticAdjustInputs(alloc, ins); } }; @@ -404,7 +404,7 @@ class CallSetElementPolicy final : public TypePolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; }; // First operand will be boxed to a Value (except for an object) @@ -413,7 +413,7 @@ class InstanceOfPolicy final : public TypePolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; }; class StoreTypedArrayHolePolicy; @@ -422,37 +422,37 @@ class StoreTypedArrayElementStaticPolicy; class StoreUnboxedScalarPolicy : public TypePolicy { private: - static MOZ_MUST_USE bool adjustValueInput(TempAllocator& alloc, MInstruction* ins, - Scalar::Type arrayType, MDefinition* value, - int valueOperand); + [[nodiscard]] static bool adjustValueInput(TempAllocator& alloc, MInstruction* ins, + Scalar::Type arrayType, MDefinition* value, + int valueOperand); friend class StoreTypedArrayHolePolicy; friend class StoreTypedArrayElementStaticPolicy; public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; }; class StoreTypedArrayHolePolicy final : public StoreUnboxedScalarPolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; }; class StoreTypedArrayElementStaticPolicy final : public StoreUnboxedScalarPolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; }; class StoreUnboxedObjectOrNullPolicy final : public TypePolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* def) override; }; // Accepts integers and doubles. Everything else is boxed. @@ -460,14 +460,14 @@ class ClampPolicy final : public TypePolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; }; class FilterTypeSetPolicy final : public TypePolicy { public: EMPTY_DATA_; - virtual MOZ_MUST_USE bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; + [[nodiscard]] virtual bool adjustInputs(TempAllocator& alloc, MInstruction* ins) override; }; #undef SPECIALIZATION_DATA_ diff --git a/js/src/jit/VMFunctions.h b/js/src/jit/VMFunctions.h index b134c5df05..8a2e9b92d2 100644 --- a/js/src/jit/VMFunctions.h +++ b/js/src/jit/VMFunctions.h @@ -582,10 +582,10 @@ class AutoDetectInvalidation } }; -MOZ_MUST_USE bool +[[nodiscard]] bool InvokeFunction(JSContext* cx, HandleObject obj0, bool constructing, bool ignoresReturnValue, uint32_t argc, Value* argv, MutableHandleValue rval); -MOZ_MUST_USE bool +[[nodiscard]] bool InvokeFunctionShuffleNewTarget(JSContext* cx, HandleObject obj, uint32_t numActualArgs, uint32_t numFormalArgs, Value* argv, MutableHandleValue rval); @@ -594,15 +594,15 @@ bool CheckOverRecursedWithExtra(JSContext* cx, BaselineFrame* frame, uint32_t extra, uint32_t earlyCheck); JSObject* BindVar(JSContext* cx, HandleObject scopeChain); -MOZ_MUST_USE bool +[[nodiscard]] bool DefVar(JSContext* cx, HandlePropertyName dn, unsigned attrs, HandleObject scopeChain); -MOZ_MUST_USE bool +[[nodiscard]] bool DefLexical(JSContext* cx, HandlePropertyName dn, unsigned attrs, HandleObject scopeChain); -MOZ_MUST_USE bool +[[nodiscard]] bool DefGlobalLexical(JSContext* cx, HandlePropertyName dn, unsigned attrs); -MOZ_MUST_USE bool +[[nodiscard]] bool MutatePrototype(JSContext* cx, HandlePlainObject obj, HandleValue value); -MOZ_MUST_USE bool +[[nodiscard]] bool InitProp(JSContext* cx, HandleObject obj, HandlePropertyName name, HandleValue value, jsbytecode* pc); @@ -620,21 +620,21 @@ bool GreaterThanOrEqual(JSContext* cx, MutableHandleValue lhs, MutableHandleValu template<bool Equal> bool StringsEqual(JSContext* cx, HandleString left, HandleString right, bool* res); -MOZ_MUST_USE bool ArrayPopDense(JSContext* cx, HandleObject obj, MutableHandleValue rval); -MOZ_MUST_USE bool ArrayPushDense(JSContext* cx, HandleObject obj, HandleValue v, uint32_t* length); -MOZ_MUST_USE bool ArrayShiftDense(JSContext* cx, HandleObject obj, MutableHandleValue rval); +[[nodiscard]] bool ArrayPopDense(JSContext* cx, HandleObject obj, MutableHandleValue rval); +[[nodiscard]] bool ArrayPushDense(JSContext* cx, HandleObject obj, HandleValue v, uint32_t* length); +[[nodiscard]] bool ArrayShiftDense(JSContext* cx, HandleObject obj, MutableHandleValue rval); JSString* ArrayJoin(JSContext* cx, HandleObject array, HandleString sep); -MOZ_MUST_USE bool +[[nodiscard]] bool CharCodeAt(JSContext* cx, HandleString str, int32_t index, uint32_t* code); JSFlatString* StringFromCharCode(JSContext* cx, int32_t code); JSString* StringFromCodePoint(JSContext* cx, int32_t codePoint); -MOZ_MUST_USE bool +[[nodiscard]] bool SetProperty(JSContext* cx, HandleObject obj, HandlePropertyName name, HandleValue value, bool strict, jsbytecode* pc); -MOZ_MUST_USE bool +[[nodiscard]] bool InterruptCheck(JSContext* cx); void* MallocWrapper(JSRuntime* rt, size_t nbytes); @@ -645,10 +645,10 @@ JSObject* NewStringObject(JSContext* cx, HandleString str); bool OperatorIn(JSContext* cx, HandleValue key, HandleObject obj, bool* out); bool OperatorInI(JSContext* cx, uint32_t index, HandleObject obj, bool* out); -MOZ_MUST_USE bool +[[nodiscard]] bool GetIntrinsicValue(JSContext* cx, HandlePropertyName name, MutableHandleValue rval); -MOZ_MUST_USE bool +[[nodiscard]] bool CreateThis(JSContext* cx, HandleObject callee, HandleObject newTarget, MutableHandleValue rval); void GetDynamicName(JSContext* cx, JSObject* scopeChain, JSString* str, Value* vp); @@ -659,92 +659,92 @@ void PostGlobalWriteBarrier(JSRuntime* rt, JSObject* obj); uint32_t GetIndexFromString(JSString* str); -MOZ_MUST_USE bool +[[nodiscard]] bool DebugPrologue(JSContext* cx, BaselineFrame* frame, jsbytecode* pc, bool* mustReturn); -MOZ_MUST_USE bool +[[nodiscard]] bool DebugEpilogue(JSContext* cx, BaselineFrame* frame, jsbytecode* pc, bool ok); -MOZ_MUST_USE bool +[[nodiscard]] bool DebugEpilogueOnBaselineReturn(JSContext* cx, BaselineFrame* frame, jsbytecode* pc); void FrameIsDebuggeeCheck(BaselineFrame* frame); JSObject* CreateGenerator(JSContext* cx, BaselineFrame* frame); -MOZ_MUST_USE bool +[[nodiscard]] bool NormalSuspend(JSContext* cx, HandleObject obj, BaselineFrame* frame, jsbytecode* pc, uint32_t stackDepth); -MOZ_MUST_USE bool +[[nodiscard]] bool FinalSuspend(JSContext* cx, HandleObject obj, BaselineFrame* frame, jsbytecode* pc); -MOZ_MUST_USE bool +[[nodiscard]] bool InterpretResume(JSContext* cx, HandleObject obj, HandleValue val, HandlePropertyName kind, MutableHandleValue rval); -MOZ_MUST_USE bool +[[nodiscard]] bool DebugAfterYield(JSContext* cx, BaselineFrame* frame); -MOZ_MUST_USE bool +[[nodiscard]] bool GeneratorThrowOrClose(JSContext* cx, BaselineFrame* frame, Handle<GeneratorObject*> genObj, HandleValue arg, uint32_t resumeKind); -MOZ_MUST_USE bool +[[nodiscard]] bool GlobalNameConflictsCheckFromIon(JSContext* cx, HandleScript script); -MOZ_MUST_USE bool +[[nodiscard]] bool CheckGlobalOrEvalDeclarationConflicts(JSContext* cx, BaselineFrame* frame); -MOZ_MUST_USE bool +[[nodiscard]] bool InitFunctionEnvironmentObjects(JSContext* cx, BaselineFrame* frame); -MOZ_MUST_USE bool +[[nodiscard]] bool NewArgumentsObject(JSContext* cx, BaselineFrame* frame, MutableHandleValue res); JSObject* InitRestParameter(JSContext* cx, uint32_t length, Value* rest, HandleObject templateObj, HandleObject res); -MOZ_MUST_USE bool +[[nodiscard]] bool HandleDebugTrap(JSContext* cx, BaselineFrame* frame, uint8_t* retAddr, bool* mustReturn); -MOZ_MUST_USE bool +[[nodiscard]] bool OnDebuggerStatement(JSContext* cx, BaselineFrame* frame, jsbytecode* pc, bool* mustReturn); -MOZ_MUST_USE bool +[[nodiscard]] bool GlobalHasLiveOnDebuggerStatement(JSContext* cx); -MOZ_MUST_USE bool +[[nodiscard]] bool EnterWith(JSContext* cx, BaselineFrame* frame, HandleValue val, Handle<WithScope*> templ); -MOZ_MUST_USE bool +[[nodiscard]] bool LeaveWith(JSContext* cx, BaselineFrame* frame); -MOZ_MUST_USE bool +[[nodiscard]] bool PushLexicalEnv(JSContext* cx, BaselineFrame* frame, Handle<LexicalScope*> scope); -MOZ_MUST_USE bool +[[nodiscard]] bool PopLexicalEnv(JSContext* cx, BaselineFrame* frame); -MOZ_MUST_USE bool +[[nodiscard]] bool DebugLeaveThenPopLexicalEnv(JSContext* cx, BaselineFrame* frame, jsbytecode* pc); -MOZ_MUST_USE bool +[[nodiscard]] bool FreshenLexicalEnv(JSContext* cx, BaselineFrame* frame); -MOZ_MUST_USE bool +[[nodiscard]] bool DebugLeaveThenFreshenLexicalEnv(JSContext* cx, BaselineFrame* frame, jsbytecode* pc); -MOZ_MUST_USE bool +[[nodiscard]] bool RecreateLexicalEnv(JSContext* cx, BaselineFrame* frame); -MOZ_MUST_USE bool +[[nodiscard]] bool DebugLeaveThenRecreateLexicalEnv(JSContext* cx, BaselineFrame* frame, jsbytecode* pc); -MOZ_MUST_USE bool +[[nodiscard]] bool DebugLeaveLexicalEnv(JSContext* cx, BaselineFrame* frame, jsbytecode* pc); -MOZ_MUST_USE bool +[[nodiscard]] bool PushVarEnv(JSContext* cx, BaselineFrame* frame, HandleScope scope); -MOZ_MUST_USE bool +[[nodiscard]] bool PopVarEnv(JSContext* cx, BaselineFrame* frame); -MOZ_MUST_USE bool +[[nodiscard]] bool InitBaselineFrameForOsr(BaselineFrame* frame, InterpreterFrame* interpFrame, uint32_t numStackValues); JSObject* CreateDerivedTypedObj(JSContext* cx, HandleObject descr, HandleObject owner, int32_t offset); -MOZ_MUST_USE bool +[[nodiscard]] bool Recompile(JSContext* cx); -MOZ_MUST_USE bool +[[nodiscard]] bool ForcedRecompile(JSContext* cx); JSString* StringReplace(JSContext* cx, HandleString string, HandleString pattern, HandleString repl); -MOZ_MUST_USE bool SetDenseOrUnboxedArrayElement(JSContext* cx, HandleObject obj, int32_t index, +[[nodiscard]] bool SetDenseOrUnboxedArrayElement(JSContext* cx, HandleObject obj, int32_t index, HandleValue value, bool strict); void AssertValidObjectPtr(JSContext* cx, JSObject* obj); @@ -782,25 +782,25 @@ IonMarkFunction(MIRType type) bool ObjectIsCallable(JSObject* obj); bool ObjectIsConstructor(JSObject* obj); -MOZ_MUST_USE bool +[[nodiscard]] bool ThrowRuntimeLexicalError(JSContext* cx, unsigned errorNumber); -MOZ_MUST_USE bool +[[nodiscard]] bool ThrowReadOnlyError(JSContext* cx, int32_t index); -MOZ_MUST_USE bool +[[nodiscard]] bool BaselineThrowUninitializedThis(JSContext* cx, BaselineFrame* frame); -MOZ_MUST_USE bool +[[nodiscard]] bool ThrowBadDerivedReturn(JSContext* cx, HandleValue v); -MOZ_MUST_USE bool +[[nodiscard]] bool ThrowObjectCoercible(JSContext* cx, HandleValue v); -MOZ_MUST_USE bool +[[nodiscard]] bool BaselineGetFunctionThis(JSContext* cx, BaselineFrame* frame, MutableHandleValue res); -MOZ_MUST_USE bool +[[nodiscard]] bool CheckIsCallable(JSContext* cx, HandleValue v, CheckIsCallableKind kind); extern const VMFunction ToNumberInfo; diff --git a/js/src/jit/ValueNumbering.h b/js/src/jit/ValueNumbering.h index df3540fa4b..dd2cb733c8 100644 --- a/js/src/jit/ValueNumbering.h +++ b/js/src/jit/ValueNumbering.h @@ -40,14 +40,14 @@ class ValueNumberer public: explicit VisibleValues(TempAllocator& alloc); - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); typedef ValueSet::Ptr Ptr; typedef ValueSet::AddPtr AddPtr; Ptr findLeader(const MDefinition* def) const; AddPtr findLeaderForAdd(MDefinition* def); - MOZ_MUST_USE bool add(AddPtr p, MDefinition* def); + [[nodiscard]] bool add(AddPtr p, MDefinition* def); void overwrite(AddPtr p, MDefinition* def); void forget(const MDefinition* def); void clear(); @@ -77,37 +77,37 @@ class ValueNumberer SetUseRemoved }; - MOZ_MUST_USE bool handleUseReleased(MDefinition* def, UseRemovedOption useRemovedOption); - MOZ_MUST_USE bool discardDefsRecursively(MDefinition* def); - MOZ_MUST_USE bool releaseResumePointOperands(MResumePoint* resume); - MOZ_MUST_USE bool releaseAndRemovePhiOperands(MPhi* phi); - MOZ_MUST_USE bool releaseOperands(MDefinition* def); - MOZ_MUST_USE bool discardDef(MDefinition* def); - MOZ_MUST_USE bool processDeadDefs(); + [[nodiscard]] bool handleUseReleased(MDefinition* def, UseRemovedOption useRemovedOption); + [[nodiscard]] bool discardDefsRecursively(MDefinition* def); + [[nodiscard]] bool releaseResumePointOperands(MResumePoint* resume); + [[nodiscard]] bool releaseAndRemovePhiOperands(MPhi* phi); + [[nodiscard]] bool releaseOperands(MDefinition* def); + [[nodiscard]] bool discardDef(MDefinition* def); + [[nodiscard]] bool processDeadDefs(); - MOZ_MUST_USE bool fixupOSROnlyLoop(MBasicBlock* block, MBasicBlock* backedge); - MOZ_MUST_USE bool removePredecessorAndDoDCE(MBasicBlock* block, MBasicBlock* pred, + [[nodiscard]] bool fixupOSROnlyLoop(MBasicBlock* block, MBasicBlock* backedge); + [[nodiscard]] bool removePredecessorAndDoDCE(MBasicBlock* block, MBasicBlock* pred, size_t predIndex); - MOZ_MUST_USE bool removePredecessorAndCleanUp(MBasicBlock* block, MBasicBlock* pred); + [[nodiscard]] bool removePredecessorAndCleanUp(MBasicBlock* block, MBasicBlock* pred); MDefinition* simplified(MDefinition* def) const; MDefinition* leader(MDefinition* def); bool hasLeader(const MPhi* phi, const MBasicBlock* phiBlock) const; bool loopHasOptimizablePhi(MBasicBlock* header) const; - MOZ_MUST_USE bool visitDefinition(MDefinition* def); - MOZ_MUST_USE bool visitControlInstruction(MBasicBlock* block, const MBasicBlock* root); - MOZ_MUST_USE bool visitUnreachableBlock(MBasicBlock* block); - MOZ_MUST_USE bool visitBlock(MBasicBlock* block, const MBasicBlock* root); - MOZ_MUST_USE bool visitDominatorTree(MBasicBlock* root); - MOZ_MUST_USE bool visitGraph(); + [[nodiscard]] bool visitDefinition(MDefinition* def); + [[nodiscard]] bool visitControlInstruction(MBasicBlock* block, const MBasicBlock* root); + [[nodiscard]] bool visitUnreachableBlock(MBasicBlock* block); + [[nodiscard]] bool visitBlock(MBasicBlock* block, const MBasicBlock* root); + [[nodiscard]] bool visitDominatorTree(MBasicBlock* root); + [[nodiscard]] bool visitGraph(); - MOZ_MUST_USE bool insertOSRFixups(); - MOZ_MUST_USE bool cleanupOSRFixups(); + [[nodiscard]] bool insertOSRFixups(); + [[nodiscard]] bool cleanupOSRFixups(); public: ValueNumberer(MIRGenerator* mir, MIRGraph& graph); - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); enum UpdateAliasAnalysisFlag { DontUpdateAliasAnalysis, @@ -117,7 +117,7 @@ class ValueNumberer // Optimize the graph, performing expression simplification and // canonicalization, eliminating statically fully-redundant expressions, // deleting dead instructions, and removing unreachable blocks. - MOZ_MUST_USE bool run(UpdateAliasAnalysisFlag updateAliasAnalysis); + [[nodiscard]] bool run(UpdateAliasAnalysisFlag updateAliasAnalysis); }; } // namespace jit diff --git a/js/src/jit/shared/CodeGenerator-shared.cpp b/js/src/jit/shared/CodeGenerator-shared.cpp index cdacf9ead5..ccda378a3a 100644 --- a/js/src/jit/shared/CodeGenerator-shared.cpp +++ b/js/src/jit/shared/CodeGenerator-shared.cpp @@ -1640,7 +1640,7 @@ CodeGeneratorShared::jumpToBlock(MBasicBlock* mir, Assembler::Condition cond) } #endif -MOZ_MUST_USE bool +[[nodiscard]] bool CodeGeneratorShared::addCacheLocations(const CacheLocationList& locs, size_t* numLocs, size_t* curIndex) { diff --git a/js/src/jit/shared/CodeGenerator-shared.h b/js/src/jit/shared/CodeGenerator-shared.h index 0cc10b567d..7f14e8cd58 100644 --- a/js/src/jit/shared/CodeGenerator-shared.h +++ b/js/src/jit/shared/CodeGenerator-shared.h @@ -270,8 +270,7 @@ class CodeGeneratorShared : public LElementVisitor }; protected: - MOZ_MUST_USE - bool allocateData(size_t size, size_t* offset) { + [[nodiscard]] bool allocateData(size_t size, size_t* offset) { MOZ_ASSERT(size % sizeof(void*) == 0); *offset = runtimeData_.length(); masm.propagateOOM(runtimeData_.appendN(0, size)); diff --git a/js/src/jit/x64/BaseAssembler-x64.h b/js/src/jit/x64/BaseAssembler-x64.h index f66cecf35d..2b42bc12d2 100644 --- a/js/src/jit/x64/BaseAssembler-x64.h +++ b/js/src/jit/x64/BaseAssembler-x64.h @@ -700,7 +700,7 @@ class BaseAssemblerX64 : public BaseAssembler m_formatter.oneByteOp64(OP_MOVSXD_GvEv, offset, base, index, scale, dst); } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc movl_ripr(RegisterID dst) { m_formatter.oneByteRipOp(OP_MOV_GvEv, 0, (RegisterID)dst); @@ -709,7 +709,7 @@ class BaseAssemblerX64 : public BaseAssembler return label; } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc movl_rrip(RegisterID src) { m_formatter.oneByteRipOp(OP_MOV_EvGv, 0, (RegisterID)src); @@ -718,7 +718,7 @@ class BaseAssemblerX64 : public BaseAssembler return label; } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc movq_ripr(RegisterID dst) { m_formatter.oneByteRipOp64(OP_MOV_GvEv, 0, dst); @@ -727,7 +727,7 @@ class BaseAssemblerX64 : public BaseAssembler return label; } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc movq_rrip(RegisterID src) { m_formatter.oneByteRipOp64(OP_MOV_EvGv, 0, (RegisterID)src); @@ -742,7 +742,7 @@ class BaseAssemblerX64 : public BaseAssembler m_formatter.oneByteOp64(OP_LEA, offset, base, dst); } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc leaq_rip(RegisterID dst) { m_formatter.oneByteRipOp64(OP_LEA, 0, dst); @@ -806,44 +806,44 @@ class BaseAssemblerX64 : public BaseAssembler twoByteOpInt64Simd("vmovq", VEX_PD, OP2_MOVD_VdEd, src, invalid_xmm, dst); } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc vmovsd_ripr(XMMRegisterID dst) { return twoByteRipOpSimd("vmovsd", VEX_SD, OP2_MOVSD_VsdWsd, invalid_xmm, dst); } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc vmovss_ripr(XMMRegisterID dst) { return twoByteRipOpSimd("vmovss", VEX_SS, OP2_MOVSD_VsdWsd, invalid_xmm, dst); } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc vmovsd_rrip(XMMRegisterID src) { return twoByteRipOpSimd("vmovsd", VEX_SD, OP2_MOVSD_WsdVsd, invalid_xmm, src); } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc vmovss_rrip(XMMRegisterID src) { return twoByteRipOpSimd("vmovss", VEX_SS, OP2_MOVSD_WsdVsd, invalid_xmm, src); } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc vmovdqa_rrip(XMMRegisterID src) { return twoByteRipOpSimd("vmovdqa", VEX_PD, OP2_MOVDQ_WdqVdq, invalid_xmm, src); } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc vmovaps_rrip(XMMRegisterID src) { return twoByteRipOpSimd("vmovdqa", VEX_PS, OP2_MOVAPS_WsdVsd, invalid_xmm, src); } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc vmovaps_ripr(XMMRegisterID dst) { return twoByteRipOpSimd("vmovaps", VEX_PS, OP2_MOVAPS_VsdWsd, invalid_xmm, dst); } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc vmovdqa_ripr(XMMRegisterID dst) { return twoByteRipOpSimd("vmovdqa", VEX_PD, OP2_MOVDQ_VdqWdq, invalid_xmm, dst); @@ -851,7 +851,7 @@ class BaseAssemblerX64 : public BaseAssembler private: - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc twoByteRipOpSimd(const char* name, VexOperandType ty, TwoByteOpcodeID opcode, XMMRegisterID src0, XMMRegisterID dst) { diff --git a/js/src/jit/x86-shared/AssemblerBuffer-x86-shared.h b/js/src/jit/x86-shared/AssemblerBuffer-x86-shared.h index 8a5caa58dd..66815c2131 100644 --- a/js/src/jit/x86-shared/AssemblerBuffer-x86-shared.h +++ b/js/src/jit/x86-shared/AssemblerBuffer-x86-shared.h @@ -2,6 +2,7 @@ * * ***** BEGIN LICENSE BLOCK ***** * Copyright (C) 2008 Apple Inc. All rights reserved. + * Copyright (C) 2023 Moonchild Productions. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -112,7 +113,7 @@ namespace jit { MOZ_ALWAYS_INLINE void putInt(int value) { sizedAppend<4>(value); } MOZ_ALWAYS_INLINE void putInt64(int64_t value) { sizedAppend<8>(value); } - MOZ_MUST_USE bool append(const unsigned char* values, size_t size) + [[nodiscard]] bool append(const unsigned char* values, size_t size) { if (MOZ_UNLIKELY(!m_buffer.append(values, size))) { oomDetected(); diff --git a/js/src/jit/x86-shared/BaseAssembler-x86-shared.h b/js/src/jit/x86-shared/BaseAssembler-x86-shared.h index 31a8d1f65c..ad479cd4e0 100644 --- a/js/src/jit/x86-shared/BaseAssembler-x86-shared.h +++ b/js/src/jit/x86-shared/BaseAssembler-x86-shared.h @@ -80,7 +80,7 @@ public: spew("; %s", msg); } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc twoByteNop() { spew("nop (2 byte)"); @@ -1782,7 +1782,7 @@ public: } } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc cmpl_im_disp32(int32_t rhs, int32_t offset, RegisterID base) { spew("cmpl $0x%x, " MEM_o32b, rhs, ADDR_o32b(offset, base)); @@ -1799,7 +1799,7 @@ public: return r; } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc cmpl_im_disp32(int32_t rhs, const void* addr) { spew("cmpl $0x%x, %p", rhs, addr); @@ -2514,7 +2514,7 @@ public: // Flow control: - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc call() { m_formatter.oneByteOp(OP_CALL_rel32); @@ -2538,7 +2538,7 @@ public: // Comparison of EAX against a 32-bit immediate. The immediate is patched // in as if it were a jump target. The intention is to toggle the first // byte of the instruction between a CMP and a JMP to produce a pseudo-NOP. - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc cmp_eax() { m_formatter.oneByteOp(OP_CMP_EAXIv); @@ -2563,7 +2563,7 @@ public: m_formatter.immediate32(diff - 5); } } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc jmp() { m_formatter.oneByteOp(OP_JMP_rel32); @@ -2606,7 +2606,7 @@ public: } } - MOZ_MUST_USE JmpSrc + [[nodiscard]] JmpSrc jCC(Condition cond) { m_formatter.twoByteOp(jccRel32(cond)); @@ -3829,7 +3829,7 @@ threeByteOpImmSimd("vblendps", VEX_PD, OP3_BLENDPS_VpsWpsIb, ESCAPE_3A, imm, off { memcpy(buffer, m_formatter.buffer(), size()); } - MOZ_MUST_USE bool appendBuffer(const BaseAssembler& other) + [[nodiscard]] bool appendBuffer(const BaseAssembler& other) { return m_formatter.append(other.m_formatter.buffer(), other.size()); } @@ -5048,7 +5048,7 @@ threeByteOpImmSimd("vblendps", VEX_PD, OP3_BLENDPS_VpsWpsIb, ESCAPE_3A, imm, off m_buffer.putInt64Unchecked(imm); } - MOZ_ALWAYS_INLINE MOZ_MUST_USE JmpSrc + [[nodiscard]] MOZ_ALWAYS_INLINE JmpSrc immediateRel32() { m_buffer.putIntUnchecked(0); @@ -5107,7 +5107,7 @@ threeByteOpImmSimd("vblendps", VEX_PD, OP3_BLENDPS_VpsWpsIb, ESCAPE_3A, imm, off bool isAligned(int alignment) const { return m_buffer.isAligned(alignment); } unsigned char* data() { return m_buffer.data(); } - MOZ_MUST_USE bool append(const unsigned char* values, size_t size) + [[nodiscard]] bool append(const unsigned char* values, size_t size) { return m_buffer.append(values, size); } diff --git a/js/src/jsapi.cpp b/js/src/jsapi.cpp index 9067ca3d3d..fd815d8927 100644 --- a/js/src/jsapi.cpp +++ b/js/src/jsapi.cpp @@ -4320,7 +4320,7 @@ CompileFunction(JSContext* cx, const ReadOnlyCompileOptions& optionsArg, return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool BuildFunctionString(const char* name, size_t nameLen, unsigned nargs, const char* const* argnames, const SourceBufferHolder& srcBuf, StringBuffer* out, diff --git a/js/src/jsapi.h b/js/src/jsapi.h index 19a0b805d2..df9294b418 100644 --- a/js/src/jsapi.h +++ b/js/src/jsapi.h @@ -129,14 +129,14 @@ class MOZ_RAII AutoVectorRooterBase : protected AutoGCRooter size_t length() const { return vector.length(); } bool empty() const { return vector.empty(); } - MOZ_MUST_USE bool append(const T& v) { return vector.append(v); } - MOZ_MUST_USE bool appendN(const T& v, size_t len) { return vector.appendN(v, len); } - MOZ_MUST_USE bool append(const T* ptr, size_t len) { return vector.append(ptr, len); } - MOZ_MUST_USE bool appendAll(const AutoVectorRooterBase<T>& other) { + [[nodiscard]] bool append(const T& v) { return vector.append(v); } + [[nodiscard]] bool appendN(const T& v, size_t len) { return vector.appendN(v, len); } + [[nodiscard]] bool append(const T* ptr, size_t len) { return vector.append(ptr, len); } + [[nodiscard]] bool appendAll(const AutoVectorRooterBase<T>& other) { return vector.appendAll(other.vector); } - MOZ_MUST_USE bool insert(T* p, const T& val) { return vector.insert(p, val); } + [[nodiscard]] bool insert(T* p, const T& val) { return vector.insert(p, val); } /* For use when space has already been reserved. */ void infallibleAppend(const T& v) { vector.infallibleAppend(v); } @@ -144,7 +144,7 @@ class MOZ_RAII AutoVectorRooterBase : protected AutoGCRooter void popBack() { vector.popBack(); } T popCopy() { return vector.popCopy(); } - MOZ_MUST_USE bool growBy(size_t inc) { + [[nodiscard]] bool growBy(size_t inc) { size_t oldLength = vector.length(); if (!vector.growByUninitialized(inc)) return false; @@ -152,7 +152,7 @@ class MOZ_RAII AutoVectorRooterBase : protected AutoGCRooter return true; } - MOZ_MUST_USE bool resize(size_t newLength) { + [[nodiscard]] bool resize(size_t newLength) { size_t oldLength = vector.length(); if (newLength <= oldLength) { vector.shrinkBy(oldLength - newLength); @@ -166,7 +166,7 @@ class MOZ_RAII AutoVectorRooterBase : protected AutoGCRooter void clear() { vector.clear(); } - MOZ_MUST_USE bool reserve(size_t newLength) { + [[nodiscard]] bool reserve(size_t newLength) { return vector.reserve(newLength); } @@ -5950,7 +5950,7 @@ class JS_PUBLIC_API(AutoSaveExceptionState) * This is not the same stack as `e.stack` when `e` is an `Error` object. (That * would be JS::ExceptionStackOrNull). */ -MOZ_MUST_USE JS_PUBLIC_API(JSObject*) +[[nodiscard]] JS_PUBLIC_API(JSObject*) GetPendingExceptionStack(JSContext* cx); } /* namespace JS */ diff --git a/js/src/jscntxt.h b/js/src/jscntxt.h index c4ef783d3a..654374a524 100644 --- a/js/src/jscntxt.h +++ b/js/src/jscntxt.h @@ -520,7 +520,7 @@ struct JSContext : public js::ExclusiveContext, return throwing; } - MOZ_MUST_USE + [[nodiscard]] bool getPendingException(JS::MutableHandleValue rval); js::SavedFrame* getPendingExceptionStack(); diff --git a/js/src/jscompartment.h b/js/src/jscompartment.h index a02b39301d..7815d840e3 100644 --- a/js/src/jscompartment.h +++ b/js/src/jscompartment.h @@ -578,18 +578,18 @@ struct JSCompartment JSCompartment(JS::Zone* zone, const JS::CompartmentOptions& options); ~JSCompartment(); - MOZ_MUST_USE bool init(JSContext* maybecx); + [[nodiscard]] bool init(JSContext* maybecx); - MOZ_MUST_USE inline bool wrap(JSContext* cx, JS::MutableHandleValue vp); + [[nodiscard]] inline bool wrap(JSContext* cx, JS::MutableHandleValue vp); - MOZ_MUST_USE bool wrap(JSContext* cx, js::MutableHandleString strp); - MOZ_MUST_USE bool wrap(JSContext* cx, js::MutableHandle<JS::BigInt*> bi); - MOZ_MUST_USE bool wrap(JSContext* cx, JS::MutableHandleObject obj); - MOZ_MUST_USE bool wrap(JSContext* cx, JS::MutableHandle<js::PropertyDescriptor> desc); - MOZ_MUST_USE bool wrap(JSContext* cx, JS::MutableHandle<JS::GCVector<JS::Value>> vec); - MOZ_MUST_USE bool rewrap(JSContext* cx, JS::MutableHandleObject obj, JS::HandleObject existing); + [[nodiscard]] bool wrap(JSContext* cx, js::MutableHandleString strp); + [[nodiscard]] bool wrap(JSContext* cx, js::MutableHandle<JS::BigInt*> bi); + [[nodiscard]] bool wrap(JSContext* cx, JS::MutableHandleObject obj); + [[nodiscard]] bool wrap(JSContext* cx, JS::MutableHandle<js::PropertyDescriptor> desc); + [[nodiscard]] bool wrap(JSContext* cx, JS::MutableHandle<JS::GCVector<JS::Value>> vec); + [[nodiscard]] bool rewrap(JSContext* cx, JS::MutableHandleObject obj, JS::HandleObject existing); - MOZ_MUST_USE bool putWrapper(JSContext* cx, const js::CrossCompartmentKey& wrapped, + [[nodiscard]] bool putWrapper(JSContext* cx, const js::CrossCompartmentKey& wrapped, const js::Value& wrapper); js::WrapperMap::Ptr lookupWrapper(const js::Value& wrapped) const { @@ -672,7 +672,7 @@ struct JSCompartment js::SavedStacks& savedStacks() { return savedStacks_; } // Add a name to [[VarNames]]. Reports OOM on failure. - MOZ_MUST_USE bool addToVarNames(JSContext* cx, JS::Handle<JSAtom*> name); + [[nodiscard]] bool addToVarNames(JSContext* cx, JS::Handle<JSAtom*> name); void removeFromVarNames(JS::Handle<JSAtom*> name) { varNames_.remove(name); diff --git a/js/src/jsfriendapi.h b/js/src/jsfriendapi.h index c463019dac..508ddc4419 100644 --- a/js/src/jsfriendapi.h +++ b/js/src/jsfriendapi.h @@ -1326,11 +1326,11 @@ class MOZ_STACK_CLASS JS_FRIEND_API(AutoStableStringChars) : s_(cx), state_(Uninitialized) {} - MOZ_MUST_USE + [[nodiscard]] bool init(JSContext* cx, JSString* s); /* Like init(), but Latin1 chars are inflated to TwoByte. */ - MOZ_MUST_USE + [[nodiscard]] bool initTwoByte(JSContext* cx, JSString* s); bool isLatin1() const { return state_ == Latin1; } diff --git a/js/src/jsnum.h b/js/src/jsnum.h index 7c96bfb652..d6c3bf30ab 100644 --- a/js/src/jsnum.h +++ b/js/src/jsnum.h @@ -80,7 +80,7 @@ IsInteger(const Value& val); * Convert an integer or double (contained in the given value) to a string and * append to the given buffer. */ -extern MOZ_MUST_USE bool JS_FASTCALL +[[nodiscard]] extern bool JS_FASTCALL NumberValueToStringBuffer(JSContext* cx, const Value& v, StringBuffer& sb); /* Same as js_NumberToString, different signature. */ @@ -159,7 +159,7 @@ enum class PrefixIntegerSeparatorHandling : bool { * then upon return *dp == 0 and *endp == start. */ template <typename CharT> -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool GetPrefixInteger(ExclusiveContext* cx, const CharT* start, const CharT* end, int base, PrefixIntegerSeparatorHandling separatorHandling, const CharT** endp, double* dp); @@ -169,7 +169,7 @@ GetPrefixInteger(ExclusiveContext* cx, const CharT* start, const CharT* end, int * '_', and doesn't have an |endp| outparam. It should only be used when the * characters are known to only contain digits and '_'. */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool GetDecimalInteger(ExclusiveContext* cx, const char16_t* start, const char16_t* end, double* dp); /* @@ -177,14 +177,14 @@ GetDecimalInteger(ExclusiveContext* cx, const char16_t* start, const char16_t* e * should only be used when the characters are known to only contain digits, * '.', 'e' or 'E', '+' or '-', and '_'. */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool GetDecimalNonInteger(ExclusiveContext* cx, const char16_t* start, const char16_t* end, double* dp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool StringToNumber(ExclusiveContext* cx, JSString* str, double* result); /* ES5 9.3 ToNumber, overwriting *vp with the appropriate number value. */ -MOZ_ALWAYS_INLINE MOZ_MUST_USE bool +[[nodiscard]] MOZ_ALWAYS_INLINE bool ToNumber(JSContext* cx, JS::MutableHandleValue vp) { if (vp.isNumber()) @@ -198,7 +198,7 @@ ToNumber(JSContext* cx, JS::MutableHandleValue vp) return true; } -MOZ_MUST_USE bool +[[nodiscard]] bool num_parseInt(JSContext* cx, unsigned argc, Value* vp); } /* namespace js */ @@ -216,16 +216,16 @@ num_parseInt(JSContext* cx, unsigned argc, Value* vp); * Return false if out of memory. */ template <typename CharT> -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool js_strtod(js::ExclusiveContext* cx, const CharT* begin, const CharT* end, const CharT** dEnd, double* d); namespace js { -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool num_toString(JSContext* cx, unsigned argc, Value* vp); -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool num_valueOf(JSContext* cx, unsigned argc, Value* vp); static MOZ_ALWAYS_INLINE bool @@ -265,7 +265,7 @@ IsDefinitelyIndex(const Value& v, uint32_t* indexp) } /* ES5 9.4 ToInteger. */ -static MOZ_MUST_USE inline bool +[[nodiscard]] static inline bool ToInteger(JSContext* cx, HandleValue v, double* dp) { if (v.isInt32()) { @@ -290,7 +290,7 @@ ToInteger(JSContext* cx, HandleValue v, double* dp) * For JSContext and ExclusiveContext. */ template<typename T> -MOZ_MUST_USE bool ToLengthClamped(T* cx, HandleValue v, uint32_t* out, bool* overflow); +[[nodiscard]] bool ToLengthClamped(T* cx, HandleValue v, uint32_t* out, bool* overflow); /* Convert and range check an index value as for DataView, SIMD, and Atomics * operations, eg ES7 24.2.1.1, DataView's GetViewValue(): @@ -310,7 +310,7 @@ MOZ_MUST_USE bool ToLengthClamped(T* cx, HandleValue v, uint32_t* out, bool* ove * * The returned index will always be in the range 0 <= *index <= 2^53. */ -MOZ_MUST_USE bool ToIntegerIndex(JSContext* cx, JS::HandleValue v, uint64_t* index); +[[nodiscard]] bool ToIntegerIndex(JSContext* cx, JS::HandleValue v, uint64_t* index); /* ES2017 draft 7.1.17 ToIndex * @@ -319,9 +319,9 @@ MOZ_MUST_USE bool ToIntegerIndex(JSContext* cx, JS::HandleValue v, uint64_t* ind * * The returned index will always be in the range 0 <= *index <= 2^53-1. */ -MOZ_MUST_USE bool ToIndex(JSContext* cx, JS::HandleValue v, uint64_t* index); +[[nodiscard]] bool ToIndex(JSContext* cx, JS::HandleValue v, uint64_t* index); -MOZ_MUST_USE inline bool +[[nodiscard]] inline bool SafeAdd(int32_t one, int32_t two, int32_t* res) { #if BUILTIN_CHECKED_ARITHMETIC_SUPPORTED(__builtin_sadd_overflow) @@ -336,7 +336,7 @@ SafeAdd(int32_t one, int32_t two, int32_t* res) #endif } -MOZ_MUST_USE inline bool +[[nodiscard]] inline bool SafeSub(int32_t one, int32_t two, int32_t* res) { #if BUILTIN_CHECKED_ARITHMETIC_SUPPORTED(__builtin_ssub_overflow) @@ -348,7 +348,7 @@ SafeSub(int32_t one, int32_t two, int32_t* res) #endif } -MOZ_MUST_USE inline bool +[[nodiscard]] inline bool SafeMul(int32_t one, int32_t two, int32_t* res) { #if BUILTIN_CHECKED_ARITHMETIC_SUPPORTED(__builtin_smul_overflow) @@ -360,12 +360,12 @@ SafeMul(int32_t one, int32_t two, int32_t* res) #endif } -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool ToNumberSlow(ExclusiveContext* cx, HandleValue v, double* dp); // Variant of ToNumber which takes an ExclusiveContext instead of a JSContext. // ToNumber is part of the API and can't use ExclusiveContext directly. -MOZ_ALWAYS_INLINE MOZ_MUST_USE bool +[[nodiscard]] MOZ_ALWAYS_INLINE bool ToNumber(ExclusiveContext* cx, HandleValue v, double* out) { if (v.isNumber()) { @@ -379,7 +379,7 @@ bool ToNumericSlow(ExclusiveContext* cx, JS::MutableHandleValue vp); // BigInt proposal section 3.1.6 -MOZ_ALWAYS_INLINE MOZ_MUST_USE bool +[[nodiscard]] MOZ_ALWAYS_INLINE bool ToNumeric(ExclusiveContext* cx, JS::MutableHandleValue vp) { if (vp.isNumeric()) { @@ -391,7 +391,7 @@ ToNumeric(ExclusiveContext* cx, JS::MutableHandleValue vp) bool ToInt32OrBigIntSlow(JSContext* cx, JS::MutableHandleValue vp); -MOZ_ALWAYS_INLINE MOZ_MUST_USE bool +[[nodiscard]] MOZ_ALWAYS_INLINE bool ToInt32OrBigInt(JSContext* cx, JS::MutableHandleValue vp) { if (vp.isInt32()) { diff --git a/js/src/jsobj.cpp b/js/src/jsobj.cpp index 46f89e547e..3809df8ea8 100644 --- a/js/src/jsobj.cpp +++ b/js/src/jsobj.cpp @@ -3854,7 +3854,7 @@ JSObject::maybeConstructorDisplayAtom() const } // ES 2016 7.3.20. -MOZ_MUST_USE JSObject* +[[nodiscard]] JSObject* js::SpeciesConstructor(JSContext* cx, HandleObject obj, HandleObject defaultCtor, bool (*isDefaultSpecies)(JSContext*, JSFunction*)) { @@ -3916,7 +3916,7 @@ js::SpeciesConstructor(JSContext* cx, HandleObject obj, HandleObject defaultCtor return nullptr; } -MOZ_MUST_USE JSObject* +[[nodiscard]] JSObject* js::SpeciesConstructor(JSContext* cx, HandleObject obj, JSProtoKey ctorKey, bool (*isDefaultSpecies)(JSContext*, JSFunction*)) { diff --git a/js/src/jsobj.h b/js/src/jsobj.h index a53667d251..1948eb036d 100644 --- a/js/src/jsobj.h +++ b/js/src/jsobj.h @@ -1345,11 +1345,11 @@ FreezeObject(JSContext* cx, HandleObject obj) extern bool TestIntegrityLevel(JSContext* cx, HandleObject obj, IntegrityLevel level, bool* resultp); -extern MOZ_MUST_USE JSObject* +[[nodiscard]] extern JSObject* SpeciesConstructor(JSContext* cx, HandleObject obj, HandleObject defaultCtor, bool (*isDefaultSpecies)(JSContext*, JSFunction*)); -extern MOZ_MUST_USE JSObject* +[[nodiscard]] extern JSObject* SpeciesConstructor(JSContext* cx, HandleObject obj, JSProtoKey ctorKey, bool (*isDefaultSpecies)(JSContext*, JSFunction*)); diff --git a/js/src/jsobjinlines.h b/js/src/jsobjinlines.h index a27a13fd6c..979838ea9b 100644 --- a/js/src/jsobjinlines.h +++ b/js/src/jsobjinlines.h @@ -294,7 +294,7 @@ ClassCanHaveFixedData(const Class* clasp) // returned in place of the pointer passed. If a GC occurs, the returned pointer // may be the passed pointer, relocated by GC. If no GC could occur, it's just // passed through. We root nothing unless necessary. -static MOZ_ALWAYS_INLINE MOZ_MUST_USE JSObject* +[[nodiscard]] static MOZ_ALWAYS_INLINE JSObject* SetNewObjectMetadata(ExclusiveContext* cxArg, JSObject* obj) { MOZ_ASSERT(!cxArg->compartment()->hasObjectPendingMetadata()); diff --git a/js/src/jsopcode.cpp b/js/src/jsopcode.cpp index c9ec240e7f..b82715fb6e 100644 --- a/js/src/jsopcode.cpp +++ b/js/src/jsopcode.cpp @@ -149,7 +149,7 @@ js::StackDefs(JSScript* script, jsbytecode* pc) const char * PCCounts::numExecName = "interp"; -static MOZ_MUST_USE bool +[[nodiscard]] static bool DumpIonScriptCounts(Sprinter* sp, HandleScript script, jit::IonScriptCounts* ionCounts) { if (!sp->jsprintf("IonScript [%" PRIuSIZE " blocks]:\n", ionCounts->numBlocks())) @@ -181,7 +181,7 @@ DumpIonScriptCounts(Sprinter* sp, HandleScript script, jit::IonScriptCounts* ion return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool DumpPCCounts(JSContext* cx, HandleScript script, Sprinter* sp) { MOZ_ASSERT(script->hasScriptCounts()); @@ -696,7 +696,7 @@ js::ReconstructStackDepth(JSContext* cx, JSScript* script, jsbytecode* pc, uint3 * current line. If showAll is true, include the source note type and the * entry stack depth. */ -static MOZ_MUST_USE bool +[[nodiscard]] static bool DisassembleAtPC(JSContext* cx, JSScript* scriptArg, bool lines, jsbytecode* pc, bool showAll, Sprinter* sp) { @@ -1861,7 +1861,7 @@ js::GetPCCountScriptCount(JSContext* cx) enum MaybeComma {NO_COMMA, COMMA}; -static MOZ_MUST_USE bool +[[nodiscard]] static bool AppendJSONProperty(StringBuffer& buf, const char* name, MaybeComma comma = COMMA) { if (comma && !buf.append(',')) diff --git a/js/src/jsopcode.h b/js/src/jsopcode.h index 70ae964b23..ce0658a7b3 100644 --- a/js/src/jsopcode.h +++ b/js/src/jsopcode.h @@ -875,7 +875,7 @@ GetNextPc(jsbytecode* pc) /* * Disassemblers, for debugging only. */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool Disassemble(JSContext* cx, JS::Handle<JSScript*> script, bool lines, Sprinter* sp); unsigned @@ -884,7 +884,7 @@ Disassemble1(JSContext* cx, JS::Handle<JSScript*> script, jsbytecode* pc, unsign #endif -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool DumpCompartmentPCCounts(JSContext* cx); } // namespace js diff --git a/js/src/jsscript.cpp b/js/src/jsscript.cpp index 5cf0d19195..bb59f5fba5 100644 --- a/js/src/jsscript.cpp +++ b/js/src/jsscript.cpp @@ -1840,7 +1840,7 @@ ScriptSource::functionBodyString(JSContext* cx) return substring(cx, start, stop); } -MOZ_MUST_USE bool +[[nodiscard]] bool ScriptSource::setSource(ExclusiveContext* cx, mozilla::UniquePtr<char16_t[], JS::FreePolicy>&& source, size_t length) @@ -1862,7 +1862,7 @@ ScriptSource::setSource(SharedImmutableTwoByteString&& string) data = SourceType(Uncompressed(mozilla::Move(string))); } -MOZ_MUST_USE bool +[[nodiscard]] bool ScriptSource::setCompressedSource(ExclusiveContext* cx, mozilla::UniquePtr<char[], JS::FreePolicy>&& raw, size_t rawLength, @@ -1939,7 +1939,7 @@ ScriptSource::setSourceCopy(ExclusiveContext* cx, SourceBufferHolder& srcBuf, return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool reallocUniquePtr(UniquePtr<char[], JS::FreePolicy>& unique, size_t size) { auto newPtr = static_cast<char*>(js_realloc(unique.get(), size)); diff --git a/js/src/jsscript.h b/js/src/jsscript.h index 78afa2eec2..1b29aaf0d1 100644 --- a/js/src/jsscript.h +++ b/js/src/jsscript.h @@ -520,12 +520,12 @@ class ScriptSource void addSizeOfIncludingThis(mozilla::MallocSizeOf mallocSizeOf, JS::ScriptSourceInfo* info) const; - MOZ_MUST_USE bool setSource(ExclusiveContext* cx, + [[nodiscard]] bool setSource(ExclusiveContext* cx, mozilla::UniquePtr<char16_t[], JS::FreePolicy>&& source, size_t length); void setSource(SharedImmutableTwoByteString&& string); - MOZ_MUST_USE bool setCompressedSource( + [[nodiscard]] bool setCompressedSource( ExclusiveContext* cx, mozilla::UniquePtr<char[], JS::FreePolicy>&& raw, size_t rawLength, diff --git a/js/src/jsstr.cpp b/js/src/jsstr.cpp index 593cf4d708..c539141130 100644 --- a/js/src/jsstr.cpp +++ b/js/src/jsstr.cpp @@ -1852,7 +1852,7 @@ class StringSegmentRange : stack(cx, StringVector(cx)), cur(cx) {} - MOZ_MUST_USE bool init(JSString* str) { + [[nodiscard]] bool init(JSString* str) { MOZ_ASSERT(stack.empty()); return settle(str); } @@ -1866,7 +1866,7 @@ class StringSegmentRange return cur; } - MOZ_MUST_USE bool popFront() { + [[nodiscard]] bool popFront() { MOZ_ASSERT(!empty()); if (stack.empty()) { cur = nullptr; diff --git a/js/src/jsstr.h b/js/src/jsstr.h index cd2be4e59b..8ee7259cc2 100644 --- a/js/src/jsstr.h +++ b/js/src/jsstr.h @@ -377,7 +377,7 @@ str_trimEnd(JSContext* cx, unsigned argc, Value* vp); * * Usage: lowerCase = intl_toLocaleLowerCase(string, locale) */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool intl_toLocaleLowerCase(JSContext* cx, unsigned argc, Value* vp); /** @@ -386,7 +386,7 @@ intl_toLocaleLowerCase(JSContext* cx, unsigned argc, Value* vp); * * Usage: upperCase = intl_toLocaleUpperCase(string, locale) */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool intl_toLocaleUpperCase(JSContext* cx, unsigned argc, Value* vp); diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp index 1f89e38482..b83fa6a3d5 100644 --- a/js/src/shell/js.cpp +++ b/js/src/shell/js.cpp @@ -631,7 +631,7 @@ RegisterScriptPathWithModuleLoader(JSContext* cx, HandleScript script, const cha return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool RunFile(JSContext* cx, const char* filename, FILE* file, bool compileOnly) { SkipUTF8BOM(file); @@ -744,7 +744,7 @@ GetImportMethod(JSContext* cx, HandleObject loader, MutableHandleFunction result return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool RunModule(JSContext* cx, const char* filename, FILE* file, bool compileOnly) { // Execute a module by calling |Reflect.Loader.import(filename)|. @@ -970,7 +970,7 @@ EvalAndPrint(JSContext* cx, const char* bytes, size_t length, return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ReadEvalPrintLoop(JSContext* cx, FILE* in, bool compileOnly) { ShellContext* sc = GetShellContext(cx); @@ -1071,7 +1071,7 @@ ReportCantOpenErrorUnknownEncoding(JSContext* cx, const char* filename) filename, strerror(errno)); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool Process(JSContext* cx, const char* filename, bool forceTTY, FileKind kind = FileScript) { FILE* file; @@ -2488,7 +2488,7 @@ UpdateSwitchTableBounds(JSContext* cx, HandleScript script, unsigned offset, *end = *start + (unsigned)(n * jmplen); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool SrcNotes(JSContext* cx, HandleScript script, Sprinter* sp) { if (sp->put("\nSource notes:\n") < 0 || @@ -2664,7 +2664,7 @@ TryNoteName(JSTryNoteKind kind) MOZ_CRASH("Bad JSTryNoteKind"); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool TryNotes(JSContext* cx, HandleScript script, Sprinter* sp) { if (!script->hasTrynotes()) @@ -2687,7 +2687,7 @@ TryNotes(JSContext* cx, HandleScript script, Sprinter* sp) return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ScopeNotes(JSContext* cx, HandleScript script, Sprinter* sp) { if (!script->hasScopeNotes()) @@ -2719,7 +2719,7 @@ ScopeNotes(JSContext* cx, HandleScript script, Sprinter* sp) return true; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool DisassembleScript(JSContext* cx, HandleScript script, HandleFunction fun, bool lines, bool recursive, bool sourceNotes, Sprinter* sp) { @@ -7477,7 +7477,7 @@ OptionFailure(const char* option, const char* str) return false; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool ProcessArgs(JSContext* cx, OptionParser* op) { ShellContext* sc = GetShellContext(cx); diff --git a/js/src/threading/Thread.h b/js/src/threading/Thread.h index c48f4af80f..7d9f560407 100644 --- a/js/src/threading/Thread.h +++ b/js/src/threading/Thread.h @@ -105,7 +105,7 @@ public: // result in the value being copied, which may not be the intended behavior. // See the comment below on ThreadTrampoline::args for an explanation. template <typename F, typename... Args> - MOZ_MUST_USE bool init(F&& f, Args&&... args) { + [[nodiscard]] bool init(F&& f, Args&&... args) { MOZ_RELEASE_ASSERT(!joinable()); using Trampoline = detail::ThreadTrampoline<F, Args...>; AutoEnterOOMUnsafeRegion oom; @@ -163,7 +163,7 @@ private: Options options_; // Dispatch to per-platform implementation of thread creation. - MOZ_MUST_USE bool create(THREAD_RETURN_TYPE (THREAD_CALL_API *aMain)(void*), void* aArg); + [[nodiscard]] bool create(THREAD_RETURN_TYPE (THREAD_CALL_API *aMain)(void*), void* aArg); }; namespace ThisThread { diff --git a/js/src/vm/ArgumentsObject.h b/js/src/vm/ArgumentsObject.h index 63dc044b0f..46ca2976e6 100644 --- a/js/src/vm/ArgumentsObject.h +++ b/js/src/vm/ArgumentsObject.h @@ -173,7 +173,7 @@ class ArgumentsObject : public NativeObject return data()->rareData; } - MOZ_MUST_USE bool createRareData(JSContext* cx); + [[nodiscard]] bool createRareData(JSContext* cx); RareArgumentsData* getOrCreateRareData(JSContext* cx) { if (!data()->rareData && !createRareData(cx)) diff --git a/js/src/vm/ArrayBufferObject.cpp b/js/src/vm/ArrayBufferObject.cpp index 6ace034adb..79db90ac74 100644 --- a/js/src/vm/ArrayBufferObject.cpp +++ b/js/src/vm/ArrayBufferObject.cpp @@ -548,7 +548,7 @@ class js::WasmArrayRawBuffer } #endif - MOZ_MUST_USE bool growToSizeInPlace(uint32_t oldSize, uint32_t newSize) { + [[nodiscard]] bool growToSizeInPlace(uint32_t oldSize, uint32_t newSize) { MOZ_ASSERT(newSize >= oldSize); MOZ_ASSERT_IF(maxSize(), newSize <= maxSize().value()); MOZ_ASSERT(newSize <= mappedSize()); diff --git a/js/src/vm/ArrayBufferObject.h b/js/src/vm/ArrayBufferObject.h index f4010c6c77..31aae59d06 100644 --- a/js/src/vm/ArrayBufferObject.h +++ b/js/src/vm/ArrayBufferObject.h @@ -339,16 +339,16 @@ class ArrayBufferObject : public ArrayBufferObjectMaybeShared // WebAssembly support: static ArrayBufferObject* createForWasm(JSContext* cx, uint32_t initialSize, mozilla::Maybe<uint32_t> maxSize); - static MOZ_MUST_USE bool prepareForAsmJS(JSContext* cx, Handle<ArrayBufferObject*> buffer, + [[nodiscard]] static bool prepareForAsmJS(JSContext* cx, Handle<ArrayBufferObject*> buffer, bool needGuard); size_t wasmMappedSize() const; mozilla::Maybe<uint32_t> wasmMaxSize() const; - static MOZ_MUST_USE bool wasmGrowToSizeInPlace(uint32_t newSize, + [[nodiscard]] static bool wasmGrowToSizeInPlace(uint32_t newSize, Handle<ArrayBufferObject*> oldBuf, MutableHandle<ArrayBufferObject*> newBuf, JSContext* cx); #ifndef WASM_HUGE_MEMORY - static MOZ_MUST_USE bool wasmMovingGrowToSize(uint32_t newSize, + [[nodiscard]] static bool wasmMovingGrowToSize(uint32_t newSize, Handle<ArrayBufferObject*> oldBuf, MutableHandle<ArrayBufferObject*> newBuf, JSContext* cx); diff --git a/js/src/vm/AsyncFunction.cpp b/js/src/vm/AsyncFunction.cpp index 676ad87fdc..b1d0a111db 100644 --- a/js/src/vm/AsyncFunction.cpp +++ b/js/src/vm/AsyncFunction.cpp @@ -50,8 +50,8 @@ GlobalObject::initAsyncFunction(JSContext* cx, Handle<GlobalObject*> global) return true; } -static MOZ_MUST_USE bool AsyncFunctionStart(JSContext* cx, Handle<PromiseObject*> resultPromise, - HandleValue generatorVal); +[[nodiscard]] static bool AsyncFunctionStart(JSContext* cx, Handle<PromiseObject*> resultPromise, + HandleValue generatorVal); #define UNWRAPPED_ASYNC_WRAPPED_SLOT 1 #define WRAPPED_ASYNC_UNWRAPPED_SLOT 0 @@ -184,7 +184,7 @@ AsyncFunctionResume(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleV } // Async Functions proposal 2.2 steps 3-8. -static MOZ_MUST_USE bool +[[nodiscard]] static bool AsyncFunctionStart(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleValue generatorVal) { return AsyncFunctionResume(cx, resultPromise, generatorVal, ResumeKind::Normal, UndefinedHandleValue); @@ -194,7 +194,7 @@ AsyncFunctionStart(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleVa // Implemented in js/src/builtin/Promise.cpp // Async Functions proposal 2.4. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncFunctionAwaitedFulfilled(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleValue generatorVal, HandleValue value) { @@ -205,7 +205,7 @@ js::AsyncFunctionAwaitedFulfilled(JSContext* cx, Handle<PromiseObject*> resultPr } // Async Functions proposal 2.5. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncFunctionAwaitedRejected(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleValue generatorVal, HandleValue reason) { diff --git a/js/src/vm/AsyncFunction.h b/js/src/vm/AsyncFunction.h index d1f9a44da1..47e7674ed1 100644 --- a/js/src/vm/AsyncFunction.h +++ b/js/src/vm/AsyncFunction.h @@ -26,11 +26,11 @@ WrapAsyncFunctionWithProto(JSContext* cx, HandleFunction unwrapped, HandleObject JSObject* WrapAsyncFunction(JSContext* cx, HandleFunction unwrapped); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncFunctionAwaitedFulfilled(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleValue generatorVal, HandleValue value); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncFunctionAwaitedRejected(JSContext* cx, Handle<PromiseObject*> resultPromise, HandleValue generatorVal, HandleValue reason); diff --git a/js/src/vm/AsyncIteration.cpp b/js/src/vm/AsyncIteration.cpp index 49fdf7b8d6..fb74d7c7b7 100644 --- a/js/src/vm/AsyncIteration.cpp +++ b/js/src/vm/AsyncIteration.cpp @@ -128,7 +128,7 @@ js::GetUnwrappedAsyncGenerator(JSFunction* wrapped) } // Async Iteration proposal 4.1.1 Await Fulfilled Functions. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncGeneratorAwaitedFulfilled(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue value) { @@ -136,7 +136,7 @@ js::AsyncGeneratorAwaitedFulfilled(JSContext* cx, Handle<AsyncGeneratorObject*> } // Async Iteration proposal 4.1.2 Await Rejected Functions. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncGeneratorAwaitedRejected(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue reason) { @@ -144,7 +144,7 @@ js::AsyncGeneratorAwaitedRejected(JSContext* cx, Handle<AsyncGeneratorObject*> a } // Async Iteration proposal 11.4.3.7 step 8.d-e. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncGeneratorYieldReturnAwaitedFulfilled(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue value) @@ -153,7 +153,7 @@ js::AsyncGeneratorYieldReturnAwaitedFulfilled(JSContext* cx, } // Async Iteration proposal 11.4.3.7 step 8.d-e. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncGeneratorYieldReturnAwaitedRejected(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue reason) @@ -329,7 +329,7 @@ AsyncGeneratorObject::createRequest(JSContext* cx, Handle<AsyncGeneratorObject*> return request; } -static MOZ_MUST_USE bool +[[nodiscard]] static bool InternalEnqueue(JSContext* cx, HandleArrayObject queue, HandleValue val) { uint32_t length; @@ -346,7 +346,7 @@ InternalEnqueue(JSContext* cx, HandleArrayObject queue, HandleValue val) return SetLengthProperty(cx, queue, length + 1); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool InternalDequeue(JSContext* cx, HandleArrayObject queue, MutableHandleValue val) { uint32_t length; @@ -376,7 +376,7 @@ InternalDequeue(JSContext* cx, HandleArrayObject queue, MutableHandleValue val) return SetLengthProperty(cx, queue, newlength); } -/* static */ MOZ_MUST_USE bool +[[nodiscard]] /* static */ bool AsyncGeneratorObject::enqueueRequest(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, Handle<AsyncGeneratorRequest*> request) { @@ -456,7 +456,7 @@ AsyncGeneratorRequest::create(JSContext* cx, CompletionKind completionKind, } // Async Iteration proposal 11.4.3.2 AsyncGeneratorStart steps 5.d-g. -static MOZ_MUST_USE bool +[[nodiscard]] static bool AsyncGeneratorReturned(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue value) { @@ -471,7 +471,7 @@ AsyncGeneratorReturned(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, } // Async Iteration proposal 11.4.3.2 AsyncGeneratorStart steps 5.d, f. -static MOZ_MUST_USE bool +[[nodiscard]] static bool AsyncGeneratorThrown(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj) { // Step 5.d. @@ -492,7 +492,7 @@ AsyncGeneratorThrown(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj) // Async Iteration proposal 11.4.3.7 (partially). // Most steps are done in generator. -static MOZ_MUST_USE bool +[[nodiscard]] static bool AsyncGeneratorYield(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue value) { // Step 5 is done in bytecode. @@ -510,7 +510,7 @@ AsyncGeneratorYield(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, Ha // Async Iteration proposal 11.4.3.5 AsyncGeneratorResumeNext // steps 12-14, 16-20. // Execution context switching is handled in generator. -MOZ_MUST_USE bool +[[nodiscard]] bool js::AsyncGeneratorResume(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, CompletionKind completionKind, HandleValue argument) { @@ -578,7 +578,7 @@ static const JSFunctionSpec async_generator_methods[] = { JS_FS_END }; -/* static */ MOZ_MUST_USE bool +[[nodiscard]] /* static */ bool GlobalObject::initAsyncGenerators(JSContext* cx, Handle<GlobalObject*> global) { if (global->getReservedSlot(ASYNC_ITERATOR_PROTO).isObject()) diff --git a/js/src/vm/AsyncIteration.h b/js/src/vm/AsyncIteration.h index d3deb90b1a..cda309e619 100644 --- a/js/src/vm/AsyncIteration.h +++ b/js/src/vm/AsyncIteration.h @@ -35,17 +35,17 @@ GetWrappedAsyncGenerator(JSFunction* unwrapped); JSFunction* GetUnwrappedAsyncGenerator(JSFunction* wrapped); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncGeneratorAwaitedFulfilled(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue value); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncGeneratorAwaitedRejected(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue reason); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncGeneratorYieldReturnAwaitedFulfilled(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue value); -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncGeneratorYieldReturnAwaitedRejected(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, HandleValue reason); @@ -209,7 +209,7 @@ class AsyncGeneratorObject : public NativeObject return &getFixedSlot(Slot_Generator).toObject().as<GeneratorObject>(); } - static MOZ_MUST_USE bool + [[nodiscard]] static bool enqueueRequest(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, Handle<AsyncGeneratorRequest*> request); @@ -287,7 +287,7 @@ class AsyncFromSyncIteratorObject : public NativeObject } }; -MOZ_MUST_USE bool +[[nodiscard]] bool AsyncGeneratorResume(JSContext* cx, Handle<AsyncGeneratorObject*> asyncGenObj, CompletionKind completionKind, HandleValue argument); diff --git a/js/src/vm/BigIntType.h b/js/src/vm/BigIntType.h index 693f8bf36c..c46e6b98c4 100644 --- a/js/src/vm/BigIntType.h +++ b/js/src/vm/BigIntType.h @@ -223,10 +223,10 @@ class BigInt final : public js::gc::TenuredCell { static size_t calculateMaximumCharactersRequired(HandleBigInt x, unsigned radix); - static MOZ_MUST_USE bool calculateMaximumDigitsRequired(js::ExclusiveContext* cx, - uint8_t radix, - size_t charCount, - size_t* result); + [[nodiscard]] static bool calculateMaximumDigitsRequired(js::ExclusiveContext* cx, + uint8_t radix, + size_t charCount, + size_t* result); static bool absoluteDivWithDigitDivisor( js::ExclusiveContext* cx, Handle<BigInt*> x, Digit divisor, diff --git a/js/src/vm/Debugger.h b/js/src/vm/Debugger.h index 56a6318ba9..e44cb908fd 100644 --- a/js/src/vm/Debugger.h +++ b/js/src/vm/Debugger.h @@ -110,7 +110,7 @@ class DebuggerWeakMap : private WeakMap<HeapPtr<UnbarrieredKey>, HeapPtr<JSObjec using Base::all; using Base::trace; - MOZ_MUST_USE bool init(uint32_t len = 16) { + [[nodiscard]] bool init(uint32_t len = 16) { return Base::init(len) && zoneCounts.init(); } @@ -166,7 +166,7 @@ class DebuggerWeakMap : private WeakMap<HeapPtr<UnbarrieredKey>, HeapPtr<JSObjec Base::assertEntriesNotAboutToBeFinalized(); } - MOZ_MUST_USE bool incZoneCount(JS::Zone* zone) { + [[nodiscard]] bool incZoneCount(JS::Zone* zone) { CountMap::Ptr p = zoneCounts.lookupWithDefault(zone, 0); if (!p) return false; @@ -219,7 +219,7 @@ class MOZ_RAII EvalOptions { ~EvalOptions(); const char* filename() const { return filename_; } unsigned lineno() const { return lineno_; } - MOZ_MUST_USE bool setFilename(JSContext* cx, const char* filename); + [[nodiscard]] bool setFilename(JSContext* cx, const char* filename); void setLineno(unsigned lineno) { lineno_ = lineno; } }; @@ -391,7 +391,7 @@ class Debugger : private mozilla::LinkedListElement<Debugger> static const size_t DEFAULT_MAX_LOG_LENGTH = 5000; - MOZ_MUST_USE bool appendAllocationSite(JSContext* cx, HandleObject obj, HandleSavedFrame frame, + [[nodiscard]] bool appendAllocationSite(JSContext* cx, HandleObject obj, HandleSavedFrame frame, double when); /* @@ -417,7 +417,7 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * debuggee's compartment. The given debuggee global must be observed by at * least one Debugger that is enabled and tracking allocations. */ - static MOZ_MUST_USE bool addAllocationsTracking(JSContext* cx, Handle<GlobalObject*> debuggee); + [[nodiscard]] static bool addAllocationsTracking(JSContext* cx, Handle<GlobalObject*> debuggee); /* * Remove allocations tracking for objects allocated within the given @@ -429,7 +429,7 @@ class Debugger : private mozilla::LinkedListElement<Debugger> /* * Add or remove allocations tracking for all debuggees. */ - MOZ_MUST_USE bool addAllocationsTrackingForAllDebuggees(JSContext* cx); + [[nodiscard]] bool addAllocationsTrackingForAllDebuggees(JSContext* cx); void removeAllocationsTrackingForAllDebuggees(); /* @@ -495,7 +495,7 @@ class Debugger : private mozilla::LinkedListElement<Debugger> class ScriptQuery; class ObjectQuery; - MOZ_MUST_USE bool addDebuggeeGlobal(JSContext* cx, Handle<GlobalObject*> obj); + [[nodiscard]] bool addDebuggeeGlobal(JSContext* cx, Handle<GlobalObject*> obj); void removeDebuggeeGlobal(FreeOp* fop, GlobalObject* global, WeakGlobalObjectSet::Enum* debugEnum); @@ -586,8 +586,8 @@ class Debugger : private mozilla::LinkedListElement<Debugger> static const Class class_; private: - static MOZ_MUST_USE bool getHookImpl(JSContext* cx, CallArgs& args, Debugger& dbg, Hook which); - static MOZ_MUST_USE bool setHookImpl(JSContext* cx, CallArgs& args, Debugger& dbg, Hook which); + [[nodiscard]] static bool getHookImpl(JSContext* cx, CallArgs& args, Debugger& dbg, Hook which); + [[nodiscard]] static bool setHookImpl(JSContext* cx, CallArgs& args, Debugger& dbg, Hook which); static bool getEnabled(JSContext* cx, unsigned argc, Value* vp); static bool setEnabled(JSContext* cx, unsigned argc, Value* vp); @@ -656,15 +656,15 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * compute it ourselves from |frame|. */ using DebuggerFrameVector = GCVector<DebuggerFrame*>; - static MOZ_MUST_USE bool getDebuggerFrames(AbstractFramePtr frame, + [[nodiscard]] static bool getDebuggerFrames(AbstractFramePtr frame, MutableHandle<DebuggerFrameVector> frames); public: - static MOZ_MUST_USE bool ensureExecutionObservabilityOfOsrFrame(JSContext* cx, + [[nodiscard]] static bool ensureExecutionObservabilityOfOsrFrame(JSContext* cx, InterpreterFrame* frame); // Public for DebuggerScript_setBreakpoint. - static MOZ_MUST_USE bool ensureExecutionObservabilityOfScript(JSContext* cx, JSScript* script); + [[nodiscard]] static bool ensureExecutionObservabilityOfScript(JSContext* cx, JSScript* script); // Whether the Debugger instance needs to observe all non-AOT JS // execution of its debugees. @@ -679,30 +679,30 @@ class Debugger : private mozilla::LinkedListElement<Debugger> IsObserving observesCoverage() const; private: - static MOZ_MUST_USE bool ensureExecutionObservabilityOfFrame(JSContext* cx, + [[nodiscard]] static bool ensureExecutionObservabilityOfFrame(JSContext* cx, AbstractFramePtr frame); - static MOZ_MUST_USE bool ensureExecutionObservabilityOfCompartment(JSContext* cx, + [[nodiscard]] static bool ensureExecutionObservabilityOfCompartment(JSContext* cx, JSCompartment* comp); static bool hookObservesAllExecution(Hook which); - MOZ_MUST_USE bool updateObservesAllExecutionOnDebuggees(JSContext* cx, IsObserving observing); - MOZ_MUST_USE bool updateObservesCoverageOnDebuggees(JSContext* cx, IsObserving observing); + [[nodiscard]] bool updateObservesAllExecutionOnDebuggees(JSContext* cx, IsObserving observing); + [[nodiscard]] bool updateObservesCoverageOnDebuggees(JSContext* cx, IsObserving observing); void updateObservesAsmJSOnDebuggees(IsObserving observing); JSObject* getHook(Hook hook) const; bool hasAnyLiveHooks(JSRuntime* rt) const; - static MOZ_MUST_USE bool slowPathCheckNoExecute(JSContext* cx, HandleScript script); + [[nodiscard]] static bool slowPathCheckNoExecute(JSContext* cx, HandleScript script); static JSTrapStatus slowPathOnEnterFrame(JSContext* cx, AbstractFramePtr frame); - static MOZ_MUST_USE bool slowPathOnLeaveFrame(JSContext* cx, AbstractFramePtr frame, + [[nodiscard]] static bool slowPathOnLeaveFrame(JSContext* cx, AbstractFramePtr frame, jsbytecode* pc, bool ok); static JSTrapStatus slowPathOnDebuggerStatement(JSContext* cx, AbstractFramePtr frame); static JSTrapStatus slowPathOnExceptionUnwind(JSContext* cx, AbstractFramePtr frame); static void slowPathOnNewScript(JSContext* cx, HandleScript script); static void slowPathOnNewWasmInstance(JSContext* cx, Handle<WasmInstanceObject*> wasmInstance); static void slowPathOnNewGlobalObject(JSContext* cx, Handle<GlobalObject*> global); - static MOZ_MUST_USE bool slowPathOnLogAllocationSite(JSContext* cx, HandleObject obj, + [[nodiscard]] static bool slowPathOnLogAllocationSite(JSContext* cx, HandleObject obj, HandleSavedFrame frame, double when, GlobalObject::DebuggerVector& dbgs); static void slowPathPromiseHook(JSContext* cx, Hook hook, HandleObject promise); @@ -768,10 +768,10 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * Gets a Debugger.Frame object. If maybeIter is non-null, we eagerly copy * its data if we need to make a new Debugger.Frame. */ - MOZ_MUST_USE bool getScriptFrameWithIter(JSContext* cx, AbstractFramePtr frame, + [[nodiscard]] bool getScriptFrameWithIter(JSContext* cx, AbstractFramePtr frame, const ScriptFrameIter* maybeIter, MutableHandleValue vp); - MOZ_MUST_USE bool getScriptFrameWithIter(JSContext* cx, AbstractFramePtr frame, + [[nodiscard]] bool getScriptFrameWithIter(JSContext* cx, AbstractFramePtr frame, const ScriptFrameIter* maybeIter, MutableHandleDebuggerFrame result); @@ -779,7 +779,7 @@ class Debugger : private mozilla::LinkedListElement<Debugger> static inline Debugger* fromOnNewGlobalObjectWatchersLink(JSCList* link); - static MOZ_MUST_USE bool replaceFrameGuts(JSContext* cx, AbstractFramePtr from, + [[nodiscard]] static bool replaceFrameGuts(JSContext* cx, AbstractFramePtr from, AbstractFramePtr to, ScriptFrameIter& iter); @@ -787,7 +787,7 @@ class Debugger : private mozilla::LinkedListElement<Debugger> Debugger(JSContext* cx, NativeObject* dbg); ~Debugger(); - MOZ_MUST_USE bool init(JSContext* cx); + [[nodiscard]] bool init(JSContext* cx); inline const js::GCPtrNativeObject& toJSObject() const; inline js::GCPtrNativeObject& toJSObjectRef(); static inline Debugger* fromJSObject(const JSObject* obj); @@ -816,14 +816,14 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * them and returns true. If not, it returns false. */ static void markIncomingCrossCompartmentEdges(JSTracer* tracer); - static MOZ_MUST_USE bool markAllIteratively(GCMarker* trc); + [[nodiscard]] static bool markAllIteratively(GCMarker* trc); static void markAll(JSTracer* trc); static void sweepAll(FreeOp* fop); static void detachAllDebuggersFromGlobal(FreeOp* fop, GlobalObject* global); static void findZoneEdges(JS::Zone* v, gc::ZoneComponentFinder& finder); // Checks it the current compartment is allowed to execute code. - static inline MOZ_MUST_USE bool checkNoExecute(JSContext* cx, HandleScript script); + [[nodiscard]] static inline bool checkNoExecute(JSContext* cx, HandleScript script); /* * JSTrapStatus Overview @@ -883,19 +883,19 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * throw, or vice versa: we can redirect to a complete copy of the * alternative path, containing its own call to onLeaveFrame.) */ - static inline MOZ_MUST_USE bool onLeaveFrame(JSContext* cx, AbstractFramePtr frame, + [[nodiscard]] static inline bool onLeaveFrame(JSContext* cx, AbstractFramePtr frame, jsbytecode* pc, bool ok); static inline void onNewScript(JSContext* cx, HandleScript script); static inline void onNewWasmInstance(JSContext* cx, Handle<WasmInstanceObject*> wasmInstance); static inline void onNewGlobalObject(JSContext* cx, Handle<GlobalObject*> global); - static inline MOZ_MUST_USE bool onLogAllocationSite(JSContext* cx, JSObject* obj, + [[nodiscard]] static inline bool onLogAllocationSite(JSContext* cx, JSObject* obj, HandleSavedFrame frame, double when); static JSTrapStatus onTrap(JSContext* cx, MutableHandleValue vp); static JSTrapStatus onSingleStep(JSContext* cx, MutableHandleValue vp); - static MOZ_MUST_USE bool handleBaselineOsr(JSContext* cx, InterpreterFrame* from, + [[nodiscard]] static bool handleBaselineOsr(JSContext* cx, InterpreterFrame* from, jit::BaselineFrame* to); - static MOZ_MUST_USE bool handleIonBailout(JSContext* cx, jit::RematerializedFrame* from, + [[nodiscard]] static bool handleIonBailout(JSContext* cx, jit::RematerializedFrame* from, jit::BaselineFrame* to); static void handleUnrecoverableIonBailoutError(JSContext* cx, jit::RematerializedFrame* frame); static void propagateForcedReturn(JSContext* cx, AbstractFramePtr frame, HandleValue rval); @@ -917,8 +917,8 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * or create a Debugger.Environment object for the given Env. On success, * store the Environment object in *vp and return true. */ - MOZ_MUST_USE bool wrapEnvironment(JSContext* cx, Handle<Env*> env, MutableHandleValue vp); - MOZ_MUST_USE bool wrapEnvironment(JSContext* cx, Handle<Env*> env, + [[nodiscard]] bool wrapEnvironment(JSContext* cx, Handle<Env*> env, MutableHandleValue vp); + [[nodiscard]] bool wrapEnvironment(JSContext* cx, Handle<Env*> env, MutableHandleDebuggerEnvironment result); /* @@ -941,8 +941,8 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * unaccessible uninitialized binding, this produces a plain object of the * form { uninitialized: true }. */ - MOZ_MUST_USE bool wrapDebuggeeValue(JSContext* cx, MutableHandleValue vp); - MOZ_MUST_USE bool wrapDebuggeeObject(JSContext* cx, HandleObject obj, + [[nodiscard]] bool wrapDebuggeeValue(JSContext* cx, MutableHandleValue vp); + [[nodiscard]] bool wrapDebuggeeObject(JSContext* cx, HandleObject obj, MutableHandleDebuggerObject result); /* @@ -972,9 +972,9 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * debugger compartment--mirror symmetry. But compartment wrapping always * happens in the target compartment--rotational symmetry.) */ - MOZ_MUST_USE bool unwrapDebuggeeValue(JSContext* cx, MutableHandleValue vp); - MOZ_MUST_USE bool unwrapDebuggeeObject(JSContext* cx, MutableHandleObject obj); - MOZ_MUST_USE bool unwrapPropertyDescriptor(JSContext* cx, HandleObject obj, + [[nodiscard]] bool unwrapDebuggeeValue(JSContext* cx, MutableHandleValue vp); + [[nodiscard]] bool unwrapDebuggeeObject(JSContext* cx, MutableHandleObject obj); + [[nodiscard]] bool unwrapPropertyDescriptor(JSContext* cx, HandleObject obj, MutableHandle<PropertyDescriptor> desc); /* @@ -983,7 +983,7 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * Use this if you have already access to a frame pointer without having * to incur the cost of walking the stack. */ - MOZ_MUST_USE bool getScriptFrame(JSContext* cx, AbstractFramePtr frame, MutableHandleValue vp) { + [[nodiscard]] bool getScriptFrame(JSContext* cx, AbstractFramePtr frame, MutableHandleValue vp) { return getScriptFrameWithIter(cx, frame, nullptr, vp); } @@ -995,11 +995,11 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * frame, in which case the cost of walking the stack has already been * paid. */ - MOZ_MUST_USE bool getScriptFrame(JSContext* cx, const ScriptFrameIter& iter, + [[nodiscard]] bool getScriptFrame(JSContext* cx, const ScriptFrameIter& iter, MutableHandleValue vp) { return getScriptFrameWithIter(cx, iter.abstractFramePtr(), &iter, vp); } - MOZ_MUST_USE bool getScriptFrame(JSContext* cx, const ScriptFrameIter& iter, + [[nodiscard]] bool getScriptFrame(JSContext* cx, const ScriptFrameIter& iter, MutableHandleDebuggerFrame result); @@ -1018,7 +1018,7 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * and |value|. |value| should be the return value or exception value, not * wrapped as a debuggee value. |cx| must be in the debugger compartment. */ - MOZ_MUST_USE bool newCompletionValue(JSContext* cx, JSTrapStatus status, const Value& value, + [[nodiscard]] bool newCompletionValue(JSContext* cx, JSTrapStatus status, const Value& value, MutableHandleValue result); /* @@ -1033,7 +1033,7 @@ class Debugger : private mozilla::LinkedListElement<Debugger> * pending exception. (This ordinarily returns true even if the ok argument * is false.) */ - MOZ_MUST_USE bool receiveCompletionValue(mozilla::Maybe<AutoCompartment>& ac, bool ok, + [[nodiscard]] bool receiveCompletionValue(mozilla::Maybe<AutoCompartment>& ac, bool ok, HandleValue val, MutableHandleValue vp); @@ -1094,19 +1094,19 @@ class DebuggerEnvironment : public NativeObject HandleNativeObject debugger); DebuggerEnvironmentType type() const; - MOZ_MUST_USE bool getParent(JSContext* cx, MutableHandleDebuggerEnvironment result) const; - MOZ_MUST_USE bool getObject(JSContext* cx, MutableHandleDebuggerObject result) const; - MOZ_MUST_USE bool getCallee(JSContext* cx, MutableHandleDebuggerObject result) const; + [[nodiscard]] bool getParent(JSContext* cx, MutableHandleDebuggerEnvironment result) const; + [[nodiscard]] bool getObject(JSContext* cx, MutableHandleDebuggerObject result) const; + [[nodiscard]] bool getCallee(JSContext* cx, MutableHandleDebuggerObject result) const; bool isDebuggee() const; bool isOptimized() const; - static MOZ_MUST_USE bool getNames(JSContext* cx, HandleDebuggerEnvironment environment, + [[nodiscard]] static bool getNames(JSContext* cx, HandleDebuggerEnvironment environment, MutableHandle<IdVector> result); - static MOZ_MUST_USE bool find(JSContext* cx, HandleDebuggerEnvironment environment, + [[nodiscard]] static bool find(JSContext* cx, HandleDebuggerEnvironment environment, HandleId id, MutableHandleDebuggerEnvironment result); - static MOZ_MUST_USE bool getVariable(JSContext* cx, HandleDebuggerEnvironment environment, + [[nodiscard]] static bool getVariable(JSContext* cx, HandleDebuggerEnvironment environment, HandleId id, MutableHandleValue result); - static MOZ_MUST_USE bool setVariable(JSContext* cx, HandleDebuggerEnvironment environment, + [[nodiscard]] static bool setVariable(JSContext* cx, HandleDebuggerEnvironment environment, HandleId id, HandleValue value); private: @@ -1125,19 +1125,19 @@ class DebuggerEnvironment : public NativeObject bool requireDebuggee(JSContext* cx) const; - static MOZ_MUST_USE bool construct(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool construct(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool typeGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool parentGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool objectGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool calleeGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool inspectableGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool optimizedOutGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool typeGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool parentGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool objectGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool calleeGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool inspectableGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool optimizedOutGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool namesMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool findMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool getVariableMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool setVariableMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool namesMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool findMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool getVariableMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool setVariableMethod(JSContext* cx, unsigned argc, Value* vp); }; enum class DebuggerFrameType { @@ -1168,22 +1168,22 @@ class DebuggerFrame : public NativeObject static DebuggerFrame* create(JSContext* cx, HandleObject proto, AbstractFramePtr referent, const ScriptFrameIter* maybeIter, HandleNativeObject debugger); - static MOZ_MUST_USE bool getCallee(JSContext* cx, HandleDebuggerFrame frame, + [[nodiscard]] static bool getCallee(JSContext* cx, HandleDebuggerFrame frame, MutableHandleDebuggerObject result); - static MOZ_MUST_USE bool getIsConstructing(JSContext* cx, HandleDebuggerFrame frame, + [[nodiscard]] static bool getIsConstructing(JSContext* cx, HandleDebuggerFrame frame, bool& result); - static MOZ_MUST_USE bool getEnvironment(JSContext* cx, HandleDebuggerFrame frame, + [[nodiscard]] static bool getEnvironment(JSContext* cx, HandleDebuggerFrame frame, MutableHandleDebuggerEnvironment result); static bool getIsGenerator(HandleDebuggerFrame frame); - static MOZ_MUST_USE bool getOffset(JSContext* cx, HandleDebuggerFrame frame, size_t& result); - static MOZ_MUST_USE bool getOlder(JSContext* cx, HandleDebuggerFrame frame, + [[nodiscard]] static bool getOffset(JSContext* cx, HandleDebuggerFrame frame, size_t& result); + [[nodiscard]] static bool getOlder(JSContext* cx, HandleDebuggerFrame frame, MutableHandleDebuggerFrame result); - static MOZ_MUST_USE bool getThis(JSContext* cx, HandleDebuggerFrame frame, + [[nodiscard]] static bool getThis(JSContext* cx, HandleDebuggerFrame frame, MutableHandleValue result); static DebuggerFrameType getType(HandleDebuggerFrame frame); static DebuggerFrameImplementation getImplementation(HandleDebuggerFrame frame); - static MOZ_MUST_USE bool eval(JSContext* cx, HandleDebuggerFrame frame, + [[nodiscard]] static bool eval(JSContext* cx, HandleDebuggerFrame frame, mozilla::Range<const char16_t> chars, HandleObject bindings, const EvalOptions& options, JSTrapStatus& status, MutableHandleValue value); @@ -1197,24 +1197,24 @@ class DebuggerFrame : public NativeObject static const JSFunctionSpec methods_[]; static AbstractFramePtr getReferent(HandleDebuggerFrame frame); - static MOZ_MUST_USE bool getScriptFrameIter(JSContext* cx, HandleDebuggerFrame frame, + [[nodiscard]] static bool getScriptFrameIter(JSContext* cx, HandleDebuggerFrame frame, mozilla::Maybe<ScriptFrameIter>& result); - static MOZ_MUST_USE bool construct(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool construct(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool calleeGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool constructingGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool environmentGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool generatorGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool liveGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool offsetGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool olderGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool thisGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool typeGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool implementationGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool calleeGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool constructingGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool environmentGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool generatorGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool liveGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool offsetGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool olderGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool thisGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool typeGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool implementationGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool evalMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool evalWithBindingsMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool evalMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool evalWithBindingsMethod(JSContext* cx, unsigned argc, Value* vp); Debugger* owner() const; }; @@ -1229,75 +1229,75 @@ class DebuggerObject : public NativeObject HandleNativeObject debugger); // Properties - static MOZ_MUST_USE bool getClassName(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getClassName(JSContext* cx, HandleDebuggerObject object, MutableHandleString result); - static MOZ_MUST_USE bool getGlobal(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getGlobal(JSContext* cx, HandleDebuggerObject object, MutableHandleDebuggerObject result); - static MOZ_MUST_USE bool getParameterNames(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getParameterNames(JSContext* cx, HandleDebuggerObject object, MutableHandle<StringVector> result); - static MOZ_MUST_USE bool getBoundTargetFunction(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getBoundTargetFunction(JSContext* cx, HandleDebuggerObject object, MutableHandleDebuggerObject result); - static MOZ_MUST_USE bool getBoundThis(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getBoundThis(JSContext* cx, HandleDebuggerObject object, MutableHandleValue result); - static MOZ_MUST_USE bool getBoundArguments(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getBoundArguments(JSContext* cx, HandleDebuggerObject object, MutableHandle<ValueVector> result); - static MOZ_MUST_USE bool getAllocationSite(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getAllocationSite(JSContext* cx, HandleDebuggerObject object, MutableHandleObject result); - static MOZ_MUST_USE bool getErrorMessageName(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getErrorMessageName(JSContext* cx, HandleDebuggerObject object, MutableHandleString result); - static MOZ_MUST_USE bool getErrorNotes(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getErrorNotes(JSContext* cx, HandleDebuggerObject object, MutableHandleValue result); - static MOZ_MUST_USE bool getErrorLineNumber(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getErrorLineNumber(JSContext* cx, HandleDebuggerObject object, MutableHandleValue result); - static MOZ_MUST_USE bool getErrorColumnNumber(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getErrorColumnNumber(JSContext* cx, HandleDebuggerObject object, MutableHandleValue result); - static MOZ_MUST_USE bool getScriptedProxyTarget(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getScriptedProxyTarget(JSContext* cx, HandleDebuggerObject object, MutableHandleDebuggerObject result); - static MOZ_MUST_USE bool getScriptedProxyHandler(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getScriptedProxyHandler(JSContext* cx, HandleDebuggerObject object, MutableHandleDebuggerObject result); - static MOZ_MUST_USE bool getPromiseValue(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getPromiseValue(JSContext* cx, HandleDebuggerObject object, MutableHandleValue result); - static MOZ_MUST_USE bool getPromiseReason(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getPromiseReason(JSContext* cx, HandleDebuggerObject object, MutableHandleValue result); // Methods - static MOZ_MUST_USE bool isExtensible(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool isExtensible(JSContext* cx, HandleDebuggerObject object, bool& result); - static MOZ_MUST_USE bool isSealed(JSContext* cx, HandleDebuggerObject object, bool& result); - static MOZ_MUST_USE bool isFrozen(JSContext* cx, HandleDebuggerObject object, bool& result); - static MOZ_MUST_USE bool getPrototypeOf(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool isSealed(JSContext* cx, HandleDebuggerObject object, bool& result); + [[nodiscard]] static bool isFrozen(JSContext* cx, HandleDebuggerObject object, bool& result); + [[nodiscard]] static bool getPrototypeOf(JSContext* cx, HandleDebuggerObject object, MutableHandleDebuggerObject result); - static MOZ_MUST_USE bool getOwnPropertyNames(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getOwnPropertyNames(JSContext* cx, HandleDebuggerObject object, MutableHandle<IdVector> result); - static MOZ_MUST_USE bool getOwnPropertySymbols(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getOwnPropertySymbols(JSContext* cx, HandleDebuggerObject object, MutableHandle<IdVector> result); - static MOZ_MUST_USE bool getOwnPropertyDescriptor(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool getOwnPropertyDescriptor(JSContext* cx, HandleDebuggerObject object, HandleId id, MutableHandle<PropertyDescriptor> desc); - static MOZ_MUST_USE bool preventExtensions(JSContext* cx, HandleDebuggerObject object); - static MOZ_MUST_USE bool seal(JSContext* cx, HandleDebuggerObject object); - static MOZ_MUST_USE bool freeze(JSContext* cx, HandleDebuggerObject object); - static MOZ_MUST_USE bool defineProperty(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool preventExtensions(JSContext* cx, HandleDebuggerObject object); + [[nodiscard]] static bool seal(JSContext* cx, HandleDebuggerObject object); + [[nodiscard]] static bool freeze(JSContext* cx, HandleDebuggerObject object); + [[nodiscard]] static bool defineProperty(JSContext* cx, HandleDebuggerObject object, HandleId id, Handle<PropertyDescriptor> desc); - static MOZ_MUST_USE bool defineProperties(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool defineProperties(JSContext* cx, HandleDebuggerObject object, Handle<IdVector> ids, Handle<PropertyDescriptorVector> descs); - static MOZ_MUST_USE bool deleteProperty(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool deleteProperty(JSContext* cx, HandleDebuggerObject object, HandleId id, ObjectOpResult& result); - static MOZ_MUST_USE bool call(JSContext* cx, HandleDebuggerObject object, HandleValue thisv, + [[nodiscard]] static bool call(JSContext* cx, HandleDebuggerObject object, HandleValue thisv, Handle<ValueVector> args, MutableHandleValue result); - static MOZ_MUST_USE bool forceLexicalInitializationByName(JSContext* cx, + [[nodiscard]] static bool forceLexicalInitializationByName(JSContext* cx, HandleDebuggerObject object, HandleId id, bool& result); - static MOZ_MUST_USE bool executeInGlobal(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool executeInGlobal(JSContext* cx, HandleDebuggerObject object, mozilla::Range<const char16_t> chars, HandleObject bindings, const EvalOptions& options, JSTrapStatus& status, MutableHandleValue value); - static MOZ_MUST_USE bool makeDebuggeeValue(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool makeDebuggeeValue(JSContext* cx, HandleDebuggerObject object, HandleValue value, MutableHandleValue result); - static MOZ_MUST_USE bool unsafeDereference(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool unsafeDereference(JSContext* cx, HandleDebuggerObject object, MutableHandleObject result); - static MOZ_MUST_USE bool unwrap(JSContext* cx, HandleDebuggerObject object, + [[nodiscard]] static bool unwrap(JSContext* cx, HandleDebuggerObject object, MutableHandleDebuggerObject result); // Infallible properties @@ -1338,68 +1338,68 @@ class DebuggerObject : public NativeObject PromiseObject* promise() const; - static MOZ_MUST_USE bool requireGlobal(JSContext* cx, HandleDebuggerObject object); - static MOZ_MUST_USE bool requirePromise(JSContext* cx, HandleDebuggerObject object); + [[nodiscard]] static bool requireGlobal(JSContext* cx, HandleDebuggerObject object); + [[nodiscard]] static bool requirePromise(JSContext* cx, HandleDebuggerObject object); - static MOZ_MUST_USE bool construct(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool construct(JSContext* cx, unsigned argc, Value* vp); // JSNative properties - static MOZ_MUST_USE bool callableGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool isBoundFunctionGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool isArrowFunctionGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool protoGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool classGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool nameGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool displayNameGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool parameterNamesGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool scriptGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool environmentGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool boundTargetFunctionGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool boundThisGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool boundArgumentsGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool globalGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool allocationSiteGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool errorMessageNameGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool errorNotesGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool errorLineNumberGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool errorColumnNumberGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool isProxyGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool proxyTargetGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool proxyHandlerGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool isPromiseGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool promiseStateGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool promiseValueGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool promiseReasonGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool promiseLifetimeGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool promiseTimeToResolutionGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool promiseAllocationSiteGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool promiseResolutionSiteGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool promiseIDGetter(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool promiseDependentPromisesGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool callableGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool isBoundFunctionGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool isArrowFunctionGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool protoGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool classGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool nameGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool displayNameGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool parameterNamesGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool scriptGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool environmentGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool boundTargetFunctionGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool boundThisGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool boundArgumentsGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool globalGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool allocationSiteGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool errorMessageNameGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool errorNotesGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool errorLineNumberGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool errorColumnNumberGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool isProxyGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool proxyTargetGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool proxyHandlerGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool isPromiseGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool promiseStateGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool promiseValueGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool promiseReasonGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool promiseLifetimeGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool promiseTimeToResolutionGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool promiseAllocationSiteGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool promiseResolutionSiteGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool promiseIDGetter(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool promiseDependentPromisesGetter(JSContext* cx, unsigned argc, Value* vp); // JSNative methods - static MOZ_MUST_USE bool isExtensibleMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool isSealedMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool isFrozenMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool getOwnPropertyNamesMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool getOwnPropertySymbolsMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool getOwnPropertyDescriptorMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool preventExtensionsMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool sealMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool freezeMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool definePropertyMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool definePropertiesMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool deletePropertyMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool callMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool applyMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool asEnvironmentMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool forceLexicalInitializationByNameMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool executeInGlobalMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool executeInGlobalWithBindingsMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool makeDebuggeeValueMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool unsafeDereferenceMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool unwrapMethod(JSContext* cx, unsigned argc, Value* vp); - static MOZ_MUST_USE bool getErrorReport(JSContext* cx, HandleObject maybeError, + [[nodiscard]] static bool isExtensibleMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool isSealedMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool isFrozenMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool getOwnPropertyNamesMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool getOwnPropertySymbolsMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool getOwnPropertyDescriptorMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool preventExtensionsMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool sealMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool freezeMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool definePropertyMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool definePropertiesMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool deletePropertyMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool callMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool applyMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool asEnvironmentMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool forceLexicalInitializationByNameMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool executeInGlobalMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool executeInGlobalWithBindingsMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool makeDebuggeeValueMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool unsafeDereferenceMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool unwrapMethod(JSContext* cx, unsigned argc, Value* vp); + [[nodiscard]] static bool getErrorReport(JSContext* cx, HandleObject maybeError, JSErrorReport*& report); }; @@ -1557,7 +1557,7 @@ Debugger::onLogAllocationSite(JSContext* cx, JSObject* obj, HandleSavedFrame fra return Debugger::slowPathOnLogAllocationSite(cx, hobj, frame, when, *dbgs); } -MOZ_MUST_USE bool ReportObjectRequired(JSContext* cx); +[[nodiscard]] bool ReportObjectRequired(JSContext* cx); } /* namespace js */ diff --git a/js/src/vm/EnvironmentObject.h b/js/src/vm/EnvironmentObject.h index a74018047a..b38ba15a93 100644 --- a/js/src/vm/EnvironmentObject.h +++ b/js/src/vm/EnvironmentObject.h @@ -1083,35 +1083,35 @@ FindScriptOrModulePrivateForScript(JSScript* script); ModuleEnvironmentObject* GetModuleEnvironmentForScript(JSScript* script); -MOZ_MUST_USE bool +[[nodiscard]] bool GetThisValueForDebuggerMaybeOptimizedOut(JSContext* cx, AbstractFramePtr frame, jsbytecode* pc, MutableHandleValue res); -MOZ_MUST_USE bool +[[nodiscard]] bool CheckVarNameConflict(JSContext* cx, Handle<LexicalEnvironmentObject*> lexicalEnv, HandlePropertyName name); -MOZ_MUST_USE bool +[[nodiscard]] bool CheckCanDeclareGlobalBinding(JSContext* cx, Handle<GlobalObject*> global, HandlePropertyName name, bool isFunction); -MOZ_MUST_USE bool +[[nodiscard]] bool CheckLexicalNameConflict(JSContext* cx, Handle<LexicalEnvironmentObject*> lexicalEnv, HandleObject varObj, HandlePropertyName name); -MOZ_MUST_USE bool +[[nodiscard]] bool CheckGlobalDeclarationConflicts(JSContext* cx, HandleScript script, Handle<LexicalEnvironmentObject*> lexicalEnv, HandleObject varObj); -MOZ_MUST_USE bool +[[nodiscard]] bool CheckEvalDeclarationConflicts(JSContext* cx, HandleScript script, HandleObject envChain, HandleObject varObj); -MOZ_MUST_USE bool +[[nodiscard]] bool InitFunctionEnvironmentObjects(JSContext* cx, AbstractFramePtr frame); -MOZ_MUST_USE bool +[[nodiscard]] bool PushVarEnvironmentObject(JSContext* cx, HandleScope scope, AbstractFramePtr frame); #ifdef DEBUG diff --git a/js/src/vm/ErrorReporting.h b/js/src/vm/ErrorReporting.h index ed061e6428..96f3ef6f49 100644 --- a/js/src/vm/ErrorReporting.h +++ b/js/src/vm/ErrorReporting.h @@ -81,7 +81,7 @@ ReportCompileError(ErrorMetadata&& metadata, UniquePtr<JSErrorNotes> notes, * This function DOES NOT respect an existing werror option. If the caller * wishes such option to be respected, it must do so itself. */ -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool ReportCompileWarning(JSContext* cx, ErrorMetadata&& metadata, UniquePtr<JSErrorNotes> notes, unsigned flags, unsigned errorNumber, va_list args); diff --git a/js/src/vm/GeneratorObject.cpp b/js/src/vm/GeneratorObject.cpp index f0718c0f86..4c789e1da8 100644 --- a/js/src/vm/GeneratorObject.cpp +++ b/js/src/vm/GeneratorObject.cpp @@ -371,7 +371,7 @@ GlobalObject::initStarGenerators(JSContext* cx, Handle<GlobalObject*> global) return true; } -MOZ_MUST_USE bool +[[nodiscard]] bool js::CheckStarGeneratorResumptionValue(JSContext* cx, HandleValue v) { // yield/return value should be an Object. diff --git a/js/src/vm/GeneratorObject.h b/js/src/vm/GeneratorObject.h index c717d25e66..d5d7e7dbc2 100644 --- a/js/src/vm/GeneratorObject.h +++ b/js/src/vm/GeneratorObject.h @@ -226,7 +226,7 @@ bool GeneratorThrowOrClose(JSContext* cx, AbstractFramePtr frame, Handle<Generat HandleValue val, uint32_t resumeKind); void SetReturnValueForClosingGenerator(JSContext* cx, AbstractFramePtr frame); -MOZ_MUST_USE bool +[[nodiscard]] bool CheckStarGeneratorResumptionValue(JSContext* cx, HandleValue v); } // namespace js diff --git a/js/src/vm/NativeObject.h b/js/src/vm/NativeObject.h index 86977d109f..56c9ba7f09 100644 --- a/js/src/vm/NativeObject.h +++ b/js/src/vm/NativeObject.h @@ -515,7 +515,7 @@ class NativeObject : public ShapedObject */ bool setSlotSpan(ExclusiveContext* cx, uint32_t span); - static MOZ_MUST_USE bool toDictionaryMode(ExclusiveContext* cx, HandleNativeObject obj); + [[nodiscard]] static bool toDictionaryMode(ExclusiveContext* cx, HandleNativeObject obj); private: friend class TenuringTracer; @@ -614,13 +614,13 @@ class NativeObject : public ShapedObject } public: - static MOZ_MUST_USE bool generateOwnShape(ExclusiveContext* cx, HandleNativeObject obj, + [[nodiscard]] static bool generateOwnShape(ExclusiveContext* cx, HandleNativeObject obj, Shape* newShape = nullptr) { return replaceWithNewEquivalentShape(cx, obj, obj->lastProperty(), newShape); } - static MOZ_MUST_USE bool shadowingShapeChange(ExclusiveContext* cx, HandleNativeObject obj, + [[nodiscard]] static bool shadowingShapeChange(ExclusiveContext* cx, HandleNativeObject obj, const Shape& shape); static bool clearFlag(ExclusiveContext* cx, HandleNativeObject obj, BaseShape::Flag flag); @@ -794,7 +794,7 @@ class NativeObject : public ShapedObject unsigned flags, ShapeTable::Entry* entry, bool allowDictionary, const AutoKeepShapeTables& keep); - static MOZ_MUST_USE bool fillInAfterSwap(JSContext* cx, HandleNativeObject obj, + [[nodiscard]] static bool fillInAfterSwap(JSContext* cx, HandleNativeObject obj, const Vector<Value>& values, void* priv); public: diff --git a/js/src/vm/Printer.h b/js/src/vm/Printer.h index 60f1a62716..9f96e6f16d 100644 --- a/js/src/vm/Printer.h +++ b/js/src/vm/Printer.h @@ -83,14 +83,14 @@ class Sprinter final : public GenericPrinter size_t size; // size of buffer allocated at base ptrdiff_t offset; // offset of next free char in buffer - MOZ_MUST_USE bool realloc_(size_t newSize); + [[nodiscard]] bool realloc_(size_t newSize); public: explicit Sprinter(ExclusiveContext* cx, bool shouldReportOOM = true); ~Sprinter(); // Initialize this sprinter, returns false on error. - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); void checkInvariants() const; @@ -114,7 +114,7 @@ class Sprinter final : public GenericPrinter // Format the given format/arguments as if by JS_vsmprintf, then put it. // Return true on success, else return false and report an error (typically // OOM). - MOZ_MUST_USE bool jsprintf(const char* fmt, ...) MOZ_FORMAT_PRINTF(2, 3); + [[nodiscard]] bool jsprintf(const char* fmt, ...) MOZ_FORMAT_PRINTF(2, 3); // Prints a formatted string into the buffer. virtual int vprintf(const char* fmt, va_list ap) override; @@ -142,7 +142,7 @@ class Fprinter final : public GenericPrinter ~Fprinter(); // Initialize this printer, returns false on error. - MOZ_MUST_USE bool init(const char* path); + [[nodiscard]] bool init(const char* path); void init(FILE* fp); bool isInitialized() const { return file_ != nullptr; diff --git a/js/src/vm/RegExpObject.h b/js/src/vm/RegExpObject.h index 5247731112..a251511dd6 100644 --- a/js/src/vm/RegExpObject.h +++ b/js/src/vm/RegExpObject.h @@ -460,7 +460,7 @@ class RegExpObject : public NativeObject static bool isOriginalFlagGetter(JSNative native, RegExpFlag* mask); - static MOZ_MUST_USE bool getShared(JSContext* cx, Handle<RegExpObject*> regexp, + [[nodiscard]] static bool getShared(JSContext* cx, Handle<RegExpObject*> regexp, MutableHandleRegExpShared shared); bool hasShared() { @@ -483,7 +483,7 @@ class RegExpObject : public NativeObject void initAndZeroLastIndex(HandleAtom source, RegExpFlag flags, ExclusiveContext* cx); #ifdef DEBUG - static MOZ_MUST_USE bool dumpBytecode(JSContext* cx, Handle<RegExpObject*> regexp, + [[nodiscard]] static bool dumpBytecode(JSContext* cx, Handle<RegExpObject*> regexp, bool match_only, HandleLinearString input); #endif @@ -492,7 +492,7 @@ class RegExpObject : public NativeObject * Precondition: the syntax for |source| has already been validated. * Side effect: sets the private field. */ - static MOZ_MUST_USE bool createShared(JSContext* cx, Handle<RegExpObject*> regexp, + [[nodiscard]] static bool createShared(JSContext* cx, Handle<RegExpObject*> regexp, MutableHandleRegExpShared shared); PreBarriered<RegExpShared*>& sharedRef() { diff --git a/js/src/vm/SavedFrame.h b/js/src/vm/SavedFrame.h index 6995cbb359..2981b9e4a3 100644 --- a/js/src/vm/SavedFrame.h +++ b/js/src/vm/SavedFrame.h @@ -157,7 +157,7 @@ class SavedFrame : public NativeObject { private: static SavedFrame* create(JSContext* cx); - static MOZ_MUST_USE bool finishSavedFrameInit(JSContext* cx, HandleObject ctor, HandleObject proto); + [[nodiscard]] static bool finishSavedFrameInit(JSContext* cx, HandleObject ctor, HandleObject proto); void initFromLookup(HandleLookup lookup); void initSource(JSAtom* source); void initLine(uint32_t line); @@ -228,7 +228,7 @@ struct ReconstructedSavedFramePrincipals : public JSPrincipals this->refcount = 1; } - MOZ_MUST_USE bool write(JSContext* cx, JSStructuredCloneWriter* writer) override { + [[nodiscard]] bool write(JSContext* cx, JSStructuredCloneWriter* writer) override { MOZ_ASSERT(false, "ReconstructedSavedFramePrincipals should never be exposed to embedders"); return false; } @@ -311,8 +311,8 @@ class ConcreteStackFrame<SavedFrame> : public BaseStackFrame { bool isSystem() const override; - MOZ_MUST_USE bool constructSavedFrameStack(JSContext* cx, - MutableHandleObject outSavedFrameStack) + [[nodiscard]] bool constructSavedFrameStack(JSContext* cx, + MutableHandleObject outSavedFrameStack) const override; }; diff --git a/js/src/vm/SavedStacks.cpp b/js/src/vm/SavedStacks.cpp index 59b3e6bd14..10f147cf13 100644 --- a/js/src/vm/SavedStacks.cpp +++ b/js/src/vm/SavedStacks.cpp @@ -600,7 +600,7 @@ GetFirstSubsumedSavedFrame(JSContext* cx, HandleObject savedFrame, return GetFirstSubsumedFrame(cx, frame, selfHosted, skippedAsync); } -static MOZ_MUST_USE bool +[[nodiscard]] static bool SavedFrame_checkThis(JSContext* cx, CallArgs& args, const char* fnName, MutableHandleObject frame) { diff --git a/js/src/vm/SavedStacks.h b/js/src/vm/SavedStacks.h index 3ea6c40874..b757f7ebdd 100644 --- a/js/src/vm/SavedStacks.h +++ b/js/src/vm/SavedStacks.h @@ -161,11 +161,11 @@ class SavedStacks { creatingSavedFrame(false) { } - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); bool initialized() const { return frames.initialized(); } - MOZ_MUST_USE bool saveCurrentStack(JSContext* cx, MutableHandleSavedFrame frame, + [[nodiscard]] bool saveCurrentStack(JSContext* cx, MutableHandleSavedFrame frame, JS::StackCapture&& capture = JS::StackCapture(JS::AllFrames())); - MOZ_MUST_USE bool copyAsyncStack(JSContext* cx, HandleObject asyncStack, + [[nodiscard]] bool copyAsyncStack(JSContext* cx, HandleObject asyncStack, HandleString asyncCause, MutableHandleSavedFrame adoptedStack, uint32_t maxFrameCount = 0); @@ -218,10 +218,10 @@ class SavedStacks { } }; - MOZ_MUST_USE bool insertFrames(JSContext* cx, FrameIter& iter, + [[nodiscard]] bool insertFrames(JSContext* cx, FrameIter& iter, MutableHandleSavedFrame frame, JS::StackCapture&& capture); - MOZ_MUST_USE bool adoptAsyncStack(JSContext* cx, HandleSavedFrame asyncStack, + [[nodiscard]] bool adoptAsyncStack(JSContext* cx, HandleSavedFrame asyncStack, HandleString asyncCause, MutableHandleSavedFrame adoptedStack, uint32_t maxFrameCount); @@ -291,7 +291,7 @@ class SavedStacks { using PCLocationMap = GCHashMap<PCKey, LocationValue, PCLocationHasher, SystemAllocPolicy>; PCLocationMap pcLocationMap; - MOZ_MUST_USE bool getLocation(JSContext* cx, const FrameIter& iter, + [[nodiscard]] bool getLocation(JSContext* cx, const FrameIter& iter, MutableHandle<LocationValue> locationp); }; diff --git a/js/src/vm/Shape.h b/js/src/vm/Shape.h index bb813997f0..b1f3476312 100644 --- a/js/src/vm/Shape.h +++ b/js/src/vm/Shape.h @@ -654,9 +654,9 @@ class Shape : public gc::TenuredCell static inline Shape* search(ExclusiveContext* cx, Shape* start, jsid id); template<MaybeAdding Adding = MaybeAdding::NotAdding> - static inline MOZ_MUST_USE bool search(ExclusiveContext* cx, Shape* start, jsid id, - const AutoKeepShapeTables&, - Shape** pshape, ShapeTable::Entry** pentry); + [[nodiscard]] static inline bool search(ExclusiveContext* cx, Shape* start, jsid id, + const AutoKeepShapeTables&, + Shape** pshape, ShapeTable::Entry** pentry); static inline Shape* searchNoHashify(Shape* start, jsid id); @@ -694,7 +694,7 @@ class Shape : public gc::TenuredCell bool makeOwnBaseShape(ExclusiveContext* cx); - MOZ_ALWAYS_INLINE MOZ_MUST_USE bool maybeCreateTableForLookup(ExclusiveContext* cx); + [[nodiscard]] MOZ_ALWAYS_INLINE bool maybeCreateTableForLookup(ExclusiveContext* cx); public: bool hasTable() const { return base()->hasTable(); } @@ -707,7 +707,7 @@ class Shape : public gc::TenuredCell } template <typename T> - MOZ_MUST_USE ShapeTable* ensureTableForDictionary(ExclusiveContext* cx, const T& nogc) { + [[nodiscard]] ShapeTable* ensureTableForDictionary(ExclusiveContext* cx, const T& nogc) { MOZ_ASSERT(inDictionary()); if (ShapeTable* table = maybeTable(nogc)) return table; diff --git a/js/src/vm/SharedImmutableStringsCache-inl.h b/js/src/vm/SharedImmutableStringsCache-inl.h index da05444d7e..6d46179f6b 100644 --- a/js/src/vm/SharedImmutableStringsCache-inl.h +++ b/js/src/vm/SharedImmutableStringsCache-inl.h @@ -11,7 +11,7 @@ namespace js { template <typename IntoOwnedChars> -MOZ_MUST_USE mozilla::Maybe<SharedImmutableString> +[[nodiscard]] mozilla::Maybe<SharedImmutableString> SharedImmutableStringsCache::getOrCreate(const char* chars, size_t length, IntoOwnedChars intoOwnedChars) { @@ -40,7 +40,7 @@ SharedImmutableStringsCache::getOrCreate(const char* chars, size_t length, } template <typename IntoOwnedTwoByteChars> -MOZ_MUST_USE mozilla::Maybe<SharedImmutableTwoByteString> +[[nodiscard]] mozilla::Maybe<SharedImmutableTwoByteString> SharedImmutableStringsCache::getOrCreate(const char16_t* chars, size_t length, IntoOwnedTwoByteChars intoOwnedTwoByteChars) { MOZ_ASSERT(inner_); diff --git a/js/src/vm/SharedImmutableStringsCache.cpp b/js/src/vm/SharedImmutableStringsCache.cpp index 186fc4f490..8711fb9b41 100644 --- a/js/src/vm/SharedImmutableStringsCache.cpp +++ b/js/src/vm/SharedImmutableStringsCache.cpp @@ -91,7 +91,7 @@ SharedImmutableTwoByteString::clone() const return SharedImmutableTwoByteString(string_.clone()); } -MOZ_MUST_USE mozilla::Maybe<SharedImmutableString> +[[nodiscard]] mozilla::Maybe<SharedImmutableString> SharedImmutableStringsCache::getOrCreate(OwnedChars&& chars, size_t length) { OwnedChars owned(mozilla::Move(chars)); @@ -99,13 +99,13 @@ SharedImmutableStringsCache::getOrCreate(OwnedChars&& chars, size_t length) return getOrCreate(owned.get(), length, [&]() { return mozilla::Move(owned); }); } -MOZ_MUST_USE mozilla::Maybe<SharedImmutableString> +[[nodiscard]] mozilla::Maybe<SharedImmutableString> SharedImmutableStringsCache::getOrCreate(const char* chars, size_t length) { return getOrCreate(chars, length, [&]() { return DuplicateString(chars, length); }); } -MOZ_MUST_USE mozilla::Maybe<SharedImmutableTwoByteString> +[[nodiscard]] mozilla::Maybe<SharedImmutableTwoByteString> SharedImmutableStringsCache::getOrCreate(OwnedTwoByteChars&& chars, size_t length) { OwnedTwoByteChars owned(mozilla::Move(chars)); @@ -113,7 +113,7 @@ SharedImmutableStringsCache::getOrCreate(OwnedTwoByteChars&& chars, size_t lengt return getOrCreate(owned.get(), length, [&]() { return mozilla::Move(owned); }); } -MOZ_MUST_USE mozilla::Maybe<SharedImmutableTwoByteString> +[[nodiscard]] mozilla::Maybe<SharedImmutableTwoByteString> SharedImmutableStringsCache::getOrCreate(const char16_t* chars, size_t length) { return getOrCreate(chars, length, [&]() { return DuplicateString(chars, length); }); diff --git a/js/src/vm/SharedImmutableStringsCache.h b/js/src/vm/SharedImmutableStringsCache.h index bbde5f631e..b4bec63da6 100644 --- a/js/src/vm/SharedImmutableStringsCache.h +++ b/js/src/vm/SharedImmutableStringsCache.h @@ -65,7 +65,7 @@ class SharedImmutableStringsCache * returned. */ template <typename IntoOwnedChars> - MOZ_MUST_USE mozilla::Maybe<SharedImmutableString> + [[nodiscard]] mozilla::Maybe<SharedImmutableString> getOrCreate(const char* chars, size_t length, IntoOwnedChars intoOwnedChars); /** @@ -75,7 +75,7 @@ class SharedImmutableStringsCache * On success, `Some` is returned. In the case of OOM failure, `Nothing` is * returned. */ - MOZ_MUST_USE mozilla::Maybe<SharedImmutableString> + [[nodiscard]] mozilla::Maybe<SharedImmutableString> getOrCreate(OwnedChars&& chars, size_t length); /** @@ -86,7 +86,7 @@ class SharedImmutableStringsCache * On success, `Some` is returned. In the case of OOM failure, `Nothing` is * returned. */ - MOZ_MUST_USE mozilla::Maybe<SharedImmutableString> + [[nodiscard]] mozilla::Maybe<SharedImmutableString> getOrCreate(const char* chars, size_t length); /** @@ -108,7 +108,7 @@ class SharedImmutableStringsCache * returned. */ template <typename IntoOwnedTwoByteChars> - MOZ_MUST_USE mozilla::Maybe<SharedImmutableTwoByteString> + [[nodiscard]] mozilla::Maybe<SharedImmutableTwoByteString> getOrCreate(const char16_t* chars, size_t length, IntoOwnedTwoByteChars intoOwnedTwoByteChars); /** @@ -118,7 +118,7 @@ class SharedImmutableStringsCache * On success, `Some` is returned. In the case of OOM failure, `Nothing` is * returned. */ - MOZ_MUST_USE mozilla::Maybe<SharedImmutableTwoByteString> + [[nodiscard]] mozilla::Maybe<SharedImmutableTwoByteString> getOrCreate(OwnedTwoByteChars&& chars, size_t length); /** @@ -129,7 +129,7 @@ class SharedImmutableStringsCache * On success, `Some` is returned. In the case of OOM failure, `Nothing` is * returned. */ - MOZ_MUST_USE mozilla::Maybe<SharedImmutableTwoByteString> + [[nodiscard]] mozilla::Maybe<SharedImmutableTwoByteString> getOrCreate(const char16_t* chars, size_t length); size_t sizeOfExcludingThis(mozilla::MallocSizeOf mallocSizeOf) const { diff --git a/js/src/vm/StringBuffer.h b/js/src/vm/StringBuffer.h index 502a3bc6f6..3bda9fc72f 100644 --- a/js/src/vm/StringBuffer.h +++ b/js/src/vm/StringBuffer.h @@ -67,7 +67,7 @@ class StringBuffer return cb.ref<TwoByteCharBuffer>(); } - MOZ_MUST_USE bool inflateChars(); + [[nodiscard]] bool inflateChars(); public: explicit StringBuffer(ExclusiveContext* cx) @@ -92,12 +92,12 @@ class StringBuffer else twoByteChars().clear(); } - MOZ_MUST_USE bool reserve(size_t len) { + [[nodiscard]] bool reserve(size_t len) { if (len > reserved_) reserved_ = len; return isLatin1() ? latin1Chars().reserve(len) : twoByteChars().reserve(len); } - MOZ_MUST_USE bool resize(size_t len) { + [[nodiscard]] bool resize(size_t len) { return isLatin1() ? latin1Chars().resize(len) : twoByteChars().resize(len); } bool empty() const { @@ -110,7 +110,7 @@ class StringBuffer return isLatin1() ? latin1Chars()[idx] : twoByteChars()[idx]; } - MOZ_MUST_USE bool ensureTwoByteChars() { + [[nodiscard]] bool ensureTwoByteChars() { if (isLatin1() && !inflateChars()) return false; @@ -120,7 +120,7 @@ class StringBuffer return true; } - MOZ_MUST_USE bool append(const char16_t c) { + [[nodiscard]] bool append(const char16_t c) { if (isLatin1()) { if (c <= JSString::MAX_LATIN1_CHAR) return latin1Chars().append(Latin1Char(c)); @@ -129,10 +129,10 @@ class StringBuffer } return twoByteChars().append(c); } - MOZ_MUST_USE bool append(Latin1Char c) { + [[nodiscard]] bool append(Latin1Char c) { return isLatin1() ? latin1Chars().append(c) : twoByteChars().append(c); } - MOZ_MUST_USE bool append(char c) { + [[nodiscard]] bool append(char c) { return append(Latin1Char(c)); } @@ -141,37 +141,37 @@ class StringBuffer return twoByteChars(); } - inline MOZ_MUST_USE bool append(const char16_t* begin, const char16_t* end); + [[nodiscard]] inline bool append(const char16_t* begin, const char16_t* end); - MOZ_MUST_USE bool append(const char16_t* chars, size_t len) { + [[nodiscard]] bool append(const char16_t* chars, size_t len) { return append(chars, chars + len); } - MOZ_MUST_USE bool append(const Latin1Char* begin, const Latin1Char* end) { + [[nodiscard]] bool append(const Latin1Char* begin, const Latin1Char* end) { return isLatin1() ? latin1Chars().append(begin, end) : twoByteChars().append(begin, end); } - MOZ_MUST_USE bool append(const Latin1Char* chars, size_t len) { + [[nodiscard]] bool append(const Latin1Char* chars, size_t len) { return append(chars, chars + len); } - MOZ_MUST_USE bool append(const JS::ConstCharPtr chars, size_t len) { + [[nodiscard]] bool append(const JS::ConstCharPtr chars, size_t len) { return append(chars.get(), chars.get() + len); } - MOZ_MUST_USE bool appendN(Latin1Char c, size_t n) { + [[nodiscard]] bool appendN(Latin1Char c, size_t n) { return isLatin1() ? latin1Chars().appendN(c, n) : twoByteChars().appendN(c, n); } - inline MOZ_MUST_USE bool append(JSString* str); - inline MOZ_MUST_USE bool append(JSLinearString* str); - inline MOZ_MUST_USE bool appendSubstring(JSString* base, size_t off, size_t len); - inline MOZ_MUST_USE bool appendSubstring(JSLinearString* base, size_t off, size_t len); + [[nodiscard]] inline bool append(JSString* str); + [[nodiscard]] inline bool append(JSLinearString* str); + [[nodiscard]] inline bool appendSubstring(JSString* base, size_t off, size_t len); + [[nodiscard]] inline bool appendSubstring(JSLinearString* base, size_t off, size_t len); - MOZ_MUST_USE bool append(const char* chars, size_t len) { + [[nodiscard]] bool append(const char* chars, size_t len) { return append(reinterpret_cast<const Latin1Char*>(chars), len); } template <size_t ArrayLength> - MOZ_MUST_USE bool append(const char (&array)[ArrayLength]) { + [[nodiscard]] bool append(const char (&array)[ArrayLength]) { return append(array, ArrayLength - 1); /* No trailing '\0'. */ } diff --git a/js/src/vm/TypeInference.h b/js/src/vm/TypeInference.h index 58c606912c..b66509d1e8 100644 --- a/js/src/vm/TypeInference.h +++ b/js/src/vm/TypeInference.h @@ -843,14 +843,14 @@ public: DPAConstraintInfo(const DPAConstraintInfo&) = delete; void operator=(const DPAConstraintInfo&) = delete; - MOZ_MUST_USE bool addProtoConstraint(JSObject* proto, jsid id) { + [[nodiscard]] bool addProtoConstraint(JSObject* proto, jsid id) { return protoConstraints_.emplaceBack(proto, id); } - MOZ_MUST_USE bool addInliningConstraint(JSScript* caller, JSScript* callee) { + [[nodiscard]] bool addInliningConstraint(JSScript* caller, JSScript* callee) { return inliningConstraints_.emplaceBack(caller, callee); } - MOZ_MUST_USE bool finishConstraints(JSContext* cx, ObjectGroup* group); + [[nodiscard]] bool finishConstraints(JSContext* cx, ObjectGroup* group); }; bool diff --git a/js/src/vm/TypedArrayObject.h b/js/src/vm/TypedArrayObject.h index 8b4b0b5092..8ff820b916 100644 --- a/js/src/vm/TypedArrayObject.h +++ b/js/src/vm/TypedArrayObject.h @@ -316,7 +316,7 @@ class TypedArrayObject : public NativeObject bool convertForSideEffect(JSContext* cx, HandleValue v) const; }; -MOZ_MUST_USE bool TypedArray_bufferGetter(JSContext* cx, unsigned argc, Value* vp); +[[nodiscard]] bool TypedArray_bufferGetter(JSContext* cx, unsigned argc, Value* vp); extern TypedArrayObject* TypedArrayCreateWithTemplate(JSContext* cx, HandleObject templateObj, int32_t len); diff --git a/js/src/vm/Xdr.h b/js/src/vm/Xdr.h index 419b0dc86b..e21448e1e2 100644 --- a/js/src/vm/Xdr.h +++ b/js/src/vm/Xdr.h @@ -426,14 +426,14 @@ class XDRIncrementalEncoder : public XDREncoder AutoXDRTree::Key getTopLevelTreeKey() const override; AutoXDRTree::Key getTreeKey(JSFunction* fun) const override; - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); void createOrReplaceSubTree(AutoXDRTree* child) override; void endSubTree() override; // Append the content collected during the incremental encoding into the // buffer given as argument. - MOZ_MUST_USE bool linearize(JS::TranscodeBuffer& buffer); + [[nodiscard]] bool linearize(JS::TranscodeBuffer& buffer); }; } /* namespace js */ diff --git a/js/src/wasm/AsmJS.cpp b/js/src/wasm/AsmJS.cpp index 9bb3f08e79..1c42ceca59 100644 --- a/js/src/wasm/AsmJS.cpp +++ b/js/src/wasm/AsmJS.cpp @@ -1595,7 +1595,7 @@ class MOZ_STACK_CLASS ModuleValidator MOZ_ASSERT(!moduleFunctionName_); moduleFunctionName_ = name; } - MOZ_MUST_USE bool initGlobalArgumentName(PropertyName* n) { + [[nodiscard]] bool initGlobalArgumentName(PropertyName* n) { MOZ_ASSERT(n->isTenured()); globalArgumentName_ = n; if (n) { @@ -1605,7 +1605,7 @@ class MOZ_STACK_CLASS ModuleValidator } return true; } - MOZ_MUST_USE bool initImportArgumentName(PropertyName* n) { + [[nodiscard]] bool initImportArgumentName(PropertyName* n) { MOZ_ASSERT(n->isTenured()); importArgumentName_ = n; if (n) { @@ -1615,7 +1615,7 @@ class MOZ_STACK_CLASS ModuleValidator } return true; } - MOZ_MUST_USE bool initBufferArgumentName(PropertyName* n) { + [[nodiscard]] bool initBufferArgumentName(PropertyName* n) { MOZ_ASSERT(n->isTenured()); bufferArgumentName_ = n; if (n) { @@ -2500,11 +2500,11 @@ class MOZ_STACK_CLASS FunctionValidator Encoder& encoder() { return *encoder_; } - MOZ_MUST_USE bool writeInt32Lit(int32_t i32) { + [[nodiscard]] bool writeInt32Lit(int32_t i32) { return encoder().writeOp(Op::I32Const) && encoder().writeVarS32(i32); } - MOZ_MUST_USE bool writeConstExpr(const NumLit& lit) { + [[nodiscard]] bool writeConstExpr(const NumLit& lit) { switch (lit.which()) { case NumLit::Fixnum: case NumLit::NegativeInt: @@ -2521,11 +2521,11 @@ class MOZ_STACK_CLASS FunctionValidator } MOZ_CRASH("unexpected literal type"); } - MOZ_MUST_USE bool writeCall(ParseNode* pn, Op op) { + [[nodiscard]] bool writeCall(ParseNode* pn, Op op) { return encoder().writeOp(op) && fg_.addCallSiteLineNum(m().tokenStream().srcCoords.lineNum(pn->pn_pos.begin)); } - MOZ_MUST_USE bool prepareCall(ParseNode* pn) { + [[nodiscard]] bool prepareCall(ParseNode* pn) { return fg_.addCallSiteLineNum(m().tokenStream().srcCoords.lineNum(pn->pn_pos.begin)); } }; diff --git a/js/src/wasm/AsmJS.h b/js/src/wasm/AsmJS.h index 2bad4b3e4e..abdbf5111d 100644 --- a/js/src/wasm/AsmJS.h +++ b/js/src/wasm/AsmJS.h @@ -39,7 +39,7 @@ typedef frontend::Parser<frontend::FullParseHandler> AsmJSParser; // indeterminate amount and the entire function should be reparsed from the // beginning. -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool CompileAsmJS(ExclusiveContext* cx, AsmJSParser& parser, frontend::ParseNode* stmtList, bool* validated); diff --git a/js/src/wasm/WasmBaselineCompile.cpp b/js/src/wasm/WasmBaselineCompile.cpp index 152d15cf24..38d8d5b99b 100644 --- a/js/src/wasm/WasmBaselineCompile.cpp +++ b/js/src/wasm/WasmBaselineCompile.cpp @@ -1,6 +1,7 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * Copyright 2016 Mozilla Foundation + * Copyright 2023 Moonchild Productions * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -583,11 +584,11 @@ class BaseCompiler const ValTypeVector& locals, FuncCompileResults& compileResults); - MOZ_MUST_USE bool init(); + [[nodiscard]] bool init(); void finish(); - MOZ_MUST_USE bool emitFunction(); + [[nodiscard]] bool emitFunction(); // Used by some of the ScratchRegister implementations. operator MacroAssembler&() const { return masm; } @@ -607,14 +608,14 @@ class BaseCompiler // // Out of line code management. - MOZ_MUST_USE OutOfLineCode* addOutOfLineCode(OutOfLineCode* ool) { + [[nodiscard]] OutOfLineCode* addOutOfLineCode(OutOfLineCode* ool) { if (!ool || !outOfLine_.append(ool)) return nullptr; ool->setFramePushed(masm.framePushed()); return ool; } - MOZ_MUST_USE bool generateOutOfLineCode() { + [[nodiscard]] bool generateOutOfLineCode() { for (uint32_t i = 0; i < outOfLine_.length(); i++) { OutOfLineCode* ool = outOfLine_[i]; ool->bind(masm); @@ -1010,7 +1011,7 @@ class BaseCompiler freeFPU(r.reg); } - MOZ_MUST_USE RegI32 needI32() { + [[nodiscard]] RegI32 needI32() { if (!hasGPR()) sync(); // TODO / OPTIMIZE: improve this (Bug 1316802) return RegI32(allocGPR()); @@ -1030,7 +1031,7 @@ class BaseCompiler needI32(r1); } - MOZ_MUST_USE RegI64 needI64() { + [[nodiscard]] RegI64 needI64() { if (!hasInt64()) sync(); // TODO / OPTIMIZE: improve this (Bug 1316802) return RegI64(allocInt64()); @@ -1047,7 +1048,7 @@ class BaseCompiler needI64(r1); } - MOZ_MUST_USE RegF32 needF32() { + [[nodiscard]] RegF32 needF32() { if (!hasFPU<MIRType::Float32>()) sync(); // TODO / OPTIMIZE: improve this (Bug 1316802) return RegF32(allocFPU<MIRType::Float32>()); @@ -1059,7 +1060,7 @@ class BaseCompiler allocFPU(specific.reg); } - MOZ_MUST_USE RegF64 needF64() { + [[nodiscard]] RegF64 needF64() { if (!hasFPU<MIRType::Double>()) sync(); // TODO / OPTIMIZE: improve this (Bug 1316802) return RegF64(allocFPU<MIRType::Double>()); @@ -1491,7 +1492,7 @@ class BaseCompiler } } - MOZ_MUST_USE RegI32 popI32() { + [[nodiscard]] RegI32 popI32() { Stk& v = stk_.back(); RegI32 r; if (v.kind() == Stk::RegisterI32) @@ -1545,7 +1546,7 @@ class BaseCompiler } } - MOZ_MUST_USE RegI64 popI64() { + [[nodiscard]] RegI64 popI64() { Stk& v = stk_.back(); RegI64 r; if (v.kind() == Stk::RegisterI64) @@ -1599,7 +1600,7 @@ class BaseCompiler } } - MOZ_MUST_USE RegF64 popF64() { + [[nodiscard]] RegF64 popF64() { Stk& v = stk_.back(); RegF64 r; if (v.kind() == Stk::RegisterF64) @@ -1648,7 +1649,7 @@ class BaseCompiler } } - MOZ_MUST_USE RegF32 popF32() { + [[nodiscard]] RegF32 popF32() { Stk& v = stk_.back(); RegF32 r; if (v.kind() == Stk::RegisterF32) @@ -1673,7 +1674,7 @@ class BaseCompiler return specific; } - MOZ_MUST_USE bool popConstI32(int32_t& c) { + [[nodiscard]] bool popConstI32(int32_t& c) { Stk& v = stk_.back(); if (v.kind() != Stk::ConstI32) return false; @@ -1701,7 +1702,7 @@ class BaseCompiler // popping of the stack we can just use the JoinReg as it will // become available in that process. - MOZ_MUST_USE AnyReg popJoinReg() { + [[nodiscard]] AnyReg popJoinReg() { switch (stk_.back().kind()) { case Stk::RegisterI32: case Stk::ConstI32: @@ -1731,7 +1732,7 @@ class BaseCompiler } } - MOZ_MUST_USE AnyReg allocJoinReg(ExprType type) { + [[nodiscard]] AnyReg allocJoinReg(ExprType type) { switch (type) { case ExprType::I32: allocGPR(joinRegI32.reg); @@ -1926,7 +1927,7 @@ class BaseCompiler Vector<Control, 8, SystemAllocPolicy> ctl_; - MOZ_MUST_USE bool pushControl(UniquePooledLabel* label, UniquePooledLabel* otherLabel = nullptr) + [[nodiscard]] bool pushControl(UniquePooledLabel* label, UniquePooledLabel* otherLabel = nullptr) { uint32_t framePushed = masm.framePushed(); uint32_t stackSize = stk_.length(); @@ -1956,7 +1957,7 @@ class BaseCompiler return ctl_[ctl_.length() - 1 - relativeDepth]; } - MOZ_MUST_USE PooledLabel* newLabel() { + [[nodiscard]] PooledLabel* newLabel() { // TODO / INVESTIGATE (Bug 1316819): allocate() is fallible, but we can // probably rely on an infallible allocator here. That would simplify // code later. @@ -2825,7 +2826,7 @@ class BaseCompiler } }; - MOZ_MUST_USE bool truncateF32ToI32(RegF32 src, RegI32 dest, bool isUnsigned) { + [[nodiscard]] bool truncateF32ToI32(RegF32 src, RegI32 dest, bool isUnsigned) { TrapOffset off = trapOffset(); OutOfLineCode* ool; if (isCompilingAsmJS()) { @@ -2853,7 +2854,7 @@ class BaseCompiler return true; } - MOZ_MUST_USE bool truncateF64ToI32(RegF64 src, RegI32 dest, bool isUnsigned) { + [[nodiscard]] bool truncateF64ToI32(RegF64 src, RegI32 dest, bool isUnsigned) { TrapOffset off = trapOffset(); OutOfLineCode* ool; if (isCompilingAsmJS()) { @@ -2923,7 +2924,7 @@ class BaseCompiler }; #ifndef FLOAT_TO_I64_CALLOUT - MOZ_MUST_USE bool truncateF32ToI64(RegF32 src, RegI64 dest, bool isUnsigned, RegF64 temp) { + [[nodiscard]] bool truncateF32ToI64(RegF32 src, RegI64 dest, bool isUnsigned, RegF64 temp) { # if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_X86) OutOfLineCode* ool = addOutOfLineCode(new (alloc_) OutOfLineTruncateCheckF32OrF64ToI64(AnyReg(src), @@ -2943,7 +2944,7 @@ class BaseCompiler return true; } - MOZ_MUST_USE bool truncateF64ToI64(RegF64 src, RegI64 dest, bool isUnsigned, RegF64 temp) { + [[nodiscard]] bool truncateF64ToI64(RegF64 src, RegI64 dest, bool isUnsigned, RegF64 temp) { # if defined(JS_CODEGEN_X64) || defined(JS_CODEGEN_X86) OutOfLineCode* ool = addOutOfLineCode(new (alloc_) OutOfLineTruncateCheckF32OrF64ToI64(AnyReg(src), @@ -3231,7 +3232,7 @@ class BaseCompiler } // This is the temp register passed as the last argument to load() - MOZ_MUST_USE size_t loadStoreTemps(MemoryAccessDesc& access) { + [[nodiscard]] size_t loadStoreTemps(MemoryAccessDesc& access) { #if defined(JS_CODEGEN_ARM) if (IsUnaligned(access)) { switch (access.type()) { @@ -3251,7 +3252,7 @@ class BaseCompiler // ptr and dest may be the same iff dest is I32. // This may destroy ptr even if ptr and dest are not the same. - MOZ_MUST_USE bool load(MemoryAccessDesc& access, RegI32 ptr, AnyReg dest, RegI32 tmp1, + [[nodiscard]] bool load(MemoryAccessDesc& access, RegI32 ptr, AnyReg dest, RegI32 tmp1, RegI32 tmp2) { checkOffset(&access, ptr); @@ -3337,7 +3338,7 @@ class BaseCompiler // ptr and src must not be the same register. // This may destroy ptr. - MOZ_MUST_USE bool store(MemoryAccessDesc access, RegI32 ptr, AnyReg src, RegI32 tmp1, + [[nodiscard]] bool store(MemoryAccessDesc access, RegI32 ptr, AnyReg src, RegI32 tmp1, RegI32 tmp2) { checkOffset(&access, ptr); @@ -3613,38 +3614,38 @@ class BaseCompiler ////////////////////////////////////////////////////////////////////// - MOZ_MUST_USE bool emitBody(); - MOZ_MUST_USE bool emitBlock(); - MOZ_MUST_USE bool emitLoop(); - MOZ_MUST_USE bool emitIf(); - MOZ_MUST_USE bool emitElse(); - MOZ_MUST_USE bool emitEnd(); - MOZ_MUST_USE bool emitBr(); - MOZ_MUST_USE bool emitBrIf(); - MOZ_MUST_USE bool emitBrTable(); - MOZ_MUST_USE bool emitDrop(); - MOZ_MUST_USE bool emitReturn(); - MOZ_MUST_USE bool emitCallArgs(const ValTypeVector& args, FunctionCall& baselineCall); - MOZ_MUST_USE bool emitCall(); - MOZ_MUST_USE bool emitCallIndirect(bool oldStyle); - MOZ_MUST_USE bool emitCommonMathCall(uint32_t lineOrBytecode, SymbolicAddress callee, + [[nodiscard]] bool emitBody(); + [[nodiscard]] bool emitBlock(); + [[nodiscard]] bool emitLoop(); + [[nodiscard]] bool emitIf(); + [[nodiscard]] bool emitElse(); + [[nodiscard]] bool emitEnd(); + [[nodiscard]] bool emitBr(); + [[nodiscard]] bool emitBrIf(); + [[nodiscard]] bool emitBrTable(); + [[nodiscard]] bool emitDrop(); + [[nodiscard]] bool emitReturn(); + [[nodiscard]] bool emitCallArgs(const ValTypeVector& args, FunctionCall& baselineCall); + [[nodiscard]] bool emitCall(); + [[nodiscard]] bool emitCallIndirect(bool oldStyle); + [[nodiscard]] bool emitCommonMathCall(uint32_t lineOrBytecode, SymbolicAddress callee, ValTypeVector& signature, ExprType retType); - MOZ_MUST_USE bool emitUnaryMathBuiltinCall(SymbolicAddress callee, ValType operandType); - MOZ_MUST_USE bool emitBinaryMathBuiltinCall(SymbolicAddress callee, ValType operandType); + [[nodiscard]] bool emitUnaryMathBuiltinCall(SymbolicAddress callee, ValType operandType); + [[nodiscard]] bool emitBinaryMathBuiltinCall(SymbolicAddress callee, ValType operandType); #ifdef INT_DIV_I64_CALLOUT - MOZ_MUST_USE bool emitDivOrModI64BuiltinCall(SymbolicAddress callee, ValType operandType); + [[nodiscard]] bool emitDivOrModI64BuiltinCall(SymbolicAddress callee, ValType operandType); #endif - MOZ_MUST_USE bool emitGetLocal(); - MOZ_MUST_USE bool emitSetLocal(); - MOZ_MUST_USE bool emitTeeLocal(); - MOZ_MUST_USE bool emitGetGlobal(); - MOZ_MUST_USE bool emitSetGlobal(); - MOZ_MUST_USE bool emitTeeGlobal(); - MOZ_MUST_USE bool emitLoad(ValType type, Scalar::Type viewType); - MOZ_MUST_USE bool emitStore(ValType resultType, Scalar::Type viewType); - MOZ_MUST_USE bool emitTeeStore(ValType resultType, Scalar::Type viewType); - MOZ_MUST_USE bool emitTeeStoreWithCoercion(ValType resultType, Scalar::Type viewType); - MOZ_MUST_USE bool emitSelect(); + [[nodiscard]] bool emitGetLocal(); + [[nodiscard]] bool emitSetLocal(); + [[nodiscard]] bool emitTeeLocal(); + [[nodiscard]] bool emitGetGlobal(); + [[nodiscard]] bool emitSetGlobal(); + [[nodiscard]] bool emitTeeGlobal(); + [[nodiscard]] bool emitLoad(ValType type, Scalar::Type viewType); + [[nodiscard]] bool emitStore(ValType resultType, Scalar::Type viewType); + [[nodiscard]] bool emitTeeStore(ValType resultType, Scalar::Type viewType); + [[nodiscard]] bool emitTeeStoreWithCoercion(ValType resultType, Scalar::Type viewType); + [[nodiscard]] bool emitSelect(); void endBlock(ExprType type, bool isFunctionBody); void endLoop(ExprType type); @@ -3725,14 +3726,14 @@ class BaseCompiler void emitNegateF64(); void emitSqrtF32(); void emitSqrtF64(); - template<bool isUnsigned> MOZ_MUST_USE bool emitTruncateF32ToI32(); - template<bool isUnsigned> MOZ_MUST_USE bool emitTruncateF64ToI32(); + template<bool isUnsigned> [[nodiscard]] bool emitTruncateF32ToI32(); + template<bool isUnsigned> [[nodiscard]] bool emitTruncateF64ToI32(); #ifdef FLOAT_TO_I64_CALLOUT - MOZ_MUST_USE bool emitConvertFloatingToInt64Callout(SymbolicAddress callee, ValType operandType, + [[nodiscard]] bool emitConvertFloatingToInt64Callout(SymbolicAddress callee, ValType operandType, ValType resultType); #else - template<bool isUnsigned> MOZ_MUST_USE bool emitTruncateF32ToI64(); - template<bool isUnsigned> MOZ_MUST_USE bool emitTruncateF64ToI64(); + template<bool isUnsigned> [[nodiscard]] bool emitTruncateF32ToI64(); + template<bool isUnsigned> [[nodiscard]] bool emitTruncateF64ToI64(); #endif void emitWrapI64ToI32(); void emitExtendI32_8(); @@ -3751,7 +3752,7 @@ class BaseCompiler void emitConvertI32ToF64(); void emitConvertU32ToF64(); #ifdef I64_TO_FLOAT_CALLOUT - MOZ_MUST_USE bool emitConvertInt64ToFloatingCallout(SymbolicAddress callee, ValType operandType, + [[nodiscard]] bool emitConvertInt64ToFloatingCallout(SymbolicAddress callee, ValType operandType, ValType resultType); #else void emitConvertI64ToF32(); @@ -3761,8 +3762,8 @@ class BaseCompiler #endif void emitReinterpretI32AsF32(); void emitReinterpretI64AsF64(); - MOZ_MUST_USE bool emitGrowMemory(); - MOZ_MUST_USE bool emitCurrentMemory(); + [[nodiscard]] bool emitGrowMemory(); + [[nodiscard]] bool emitCurrentMemory(); }; void diff --git a/js/src/wasm/WasmBinaryFormat.h b/js/src/wasm/WasmBinaryFormat.h index 0279597cb8..d7fda3aa8a 100644 --- a/js/src/wasm/WasmBinaryFormat.h +++ b/js/src/wasm/WasmBinaryFormat.h @@ -33,12 +33,12 @@ class Encoder Bytes& bytes_; template <class T> - MOZ_MUST_USE bool write(const T& v) { + [[nodiscard]] bool write(const T& v) { return bytes_.append(reinterpret_cast<const uint8_t*>(&v), sizeof(T)); } template <typename UInt> - MOZ_MUST_USE bool writeVarU(UInt i) { + [[nodiscard]] bool writeVarU(UInt i) { do { uint8_t byte = i & 0x7f; i >>= 7; @@ -51,7 +51,7 @@ class Encoder } template <typename SInt> - MOZ_MUST_USE bool writeVarS(SInt i) { + [[nodiscard]] bool writeVarS(SInt i) { bool done; do { uint8_t byte = i & 0x7f; @@ -111,48 +111,48 @@ class Encoder // Fixed-size encoding operations simply copy the literal bytes (without // attempting to align). - MOZ_MUST_USE bool writeFixedU7(uint8_t i) { + [[nodiscard]] bool writeFixedU7(uint8_t i) { MOZ_ASSERT(i <= uint8_t(INT8_MAX)); return writeFixedU8(i); } - MOZ_MUST_USE bool writeFixedU8(uint8_t i) { + [[nodiscard]] bool writeFixedU8(uint8_t i) { return write<uint8_t>(i); } - MOZ_MUST_USE bool writeFixedU32(uint32_t i) { + [[nodiscard]] bool writeFixedU32(uint32_t i) { return write<uint32_t>(i); } - MOZ_MUST_USE bool writeFixedF32(RawF32 f) { + [[nodiscard]] bool writeFixedF32(RawF32 f) { return write<uint32_t>(f.bits()); } - MOZ_MUST_USE bool writeFixedF64(RawF64 d) { + [[nodiscard]] bool writeFixedF64(RawF64 d) { return write<uint64_t>(d.bits()); } // Variable-length encodings that all use LEB128. - MOZ_MUST_USE bool writeVarU32(uint32_t i) { + [[nodiscard]] bool writeVarU32(uint32_t i) { return writeVarU<uint32_t>(i); } - MOZ_MUST_USE bool writeVarS32(int32_t i) { + [[nodiscard]] bool writeVarS32(int32_t i) { return writeVarS<int32_t>(i); } - MOZ_MUST_USE bool writeVarU64(uint64_t i) { + [[nodiscard]] bool writeVarU64(uint64_t i) { return writeVarU<uint64_t>(i); } - MOZ_MUST_USE bool writeVarS64(int64_t i) { + [[nodiscard]] bool writeVarS64(int64_t i) { return writeVarS<int64_t>(i); } - MOZ_MUST_USE bool writeValType(ValType type) { + [[nodiscard]] bool writeValType(ValType type) { static_assert(size_t(TypeCode::Limit) <= UINT8_MAX, "fits"); MOZ_ASSERT(size_t(type) < size_t(TypeCode::Limit)); return writeFixedU8(uint8_t(type)); } - MOZ_MUST_USE bool writeBlockType(ExprType type) { + [[nodiscard]] bool writeBlockType(ExprType type) { static_assert(size_t(TypeCode::Limit) <= UINT8_MAX, "fits"); MOZ_ASSERT(size_t(type) < size_t(TypeCode::Limit)); return writeFixedU8(uint8_t(type)); } - MOZ_MUST_USE bool writeOp(Op op) { + [[nodiscard]] bool writeOp(Op op) { static_assert(size_t(Op::Limit) <= 2 * UINT8_MAX, "fits"); MOZ_ASSERT(size_t(op) < size_t(Op::Limit)); if (size_t(op) < UINT8_MAX) @@ -163,7 +163,7 @@ class Encoder // Fixed-length encodings that allow back-patching. - MOZ_MUST_USE bool writePatchableFixedU7(size_t* offset) { + [[nodiscard]] bool writePatchableFixedU7(size_t* offset) { *offset = bytes_.length(); return writeFixedU8(UINT8_MAX); } @@ -173,7 +173,7 @@ class Encoder // Variable-length encodings that allow back-patching. - MOZ_MUST_USE bool writePatchableVarU32(size_t* offset) { + [[nodiscard]] bool writePatchableVarU32(size_t* offset) { *offset = bytes_.length(); return writeVarU32(UINT32_MAX); } @@ -184,7 +184,7 @@ class Encoder // Byte ranges start with an LEB128 length followed by an arbitrary sequence // of bytes. When used for strings, bytes are to be interpreted as utf8. - MOZ_MUST_USE bool writeBytes(const void* bytes, uint32_t numBytes) { + [[nodiscard]] bool writeBytes(const void* bytes, uint32_t numBytes) { return writeVarU32(numBytes) && bytes_.append(reinterpret_cast<const uint8_t*>(bytes), numBytes); } @@ -195,7 +195,7 @@ class Encoder // end while the size's varU32 must be stored at the beginning. Immediately // after the section length is the string id of the section. - MOZ_MUST_USE bool startSection(SectionId id, size_t* offset) { + [[nodiscard]] bool startSection(SectionId id, size_t* offset) { MOZ_ASSERT(id != SectionId::UserDefined); // not supported yet return writeVarU32(uint32_t(id)) && @@ -218,7 +218,7 @@ class Decoder UniqueChars* error_; template <class T> - MOZ_MUST_USE bool read(T* out) { + [[nodiscard]] bool read(T* out) { if (bytesRemain() < sizeof(T)) return false; memcpy((void*)out, cur_, sizeof(T)); @@ -243,7 +243,7 @@ class Decoder } template <typename UInt> - MOZ_MUST_USE bool readVarU(UInt* out) { + [[nodiscard]] bool readVarU(UInt* out) { const unsigned numBits = sizeof(UInt) * CHAR_BIT; const unsigned remainderBits = numBits % 7; const unsigned numBitsInSevens = numBits - remainderBits; @@ -267,7 +267,7 @@ class Decoder } template <typename SInt> - MOZ_MUST_USE bool readVarS(SInt* out) { + [[nodiscard]] bool readVarS(SInt* out) { const unsigned numBits = sizeof(SInt) * CHAR_BIT; const unsigned remainderBits = numBits % 7; const unsigned numBitsInSevens = numBits - remainderBits; @@ -344,20 +344,20 @@ class Decoder // Fixed-size encoding operations simply copy the literal bytes (without // attempting to align). - MOZ_MUST_USE bool readFixedU8(uint8_t* i) { + [[nodiscard]] bool readFixedU8(uint8_t* i) { return read<uint8_t>(i); } - MOZ_MUST_USE bool readFixedU32(uint32_t* u) { + [[nodiscard]] bool readFixedU32(uint32_t* u) { return read<uint32_t>(u); } - MOZ_MUST_USE bool readFixedF32(RawF32* f) { + [[nodiscard]] bool readFixedF32(RawF32* f) { uint32_t u; if (!read<uint32_t>(&u)) return false; *f = RawF32::fromBits(u); return true; } - MOZ_MUST_USE bool readFixedF64(RawF64* d) { + [[nodiscard]] bool readFixedF64(RawF64* d) { uint64_t u; if (!read<uint64_t>(&u)) return false; @@ -367,27 +367,27 @@ class Decoder // Variable-length encodings that all use LEB128. - MOZ_MUST_USE bool readVarU32(uint32_t* out) { + [[nodiscard]] bool readVarU32(uint32_t* out) { return readVarU<uint32_t>(out); } - MOZ_MUST_USE bool readVarS32(int32_t* out) { + [[nodiscard]] bool readVarS32(int32_t* out) { return readVarS<int32_t>(out); } - MOZ_MUST_USE bool readVarU64(uint64_t* out) { + [[nodiscard]] bool readVarU64(uint64_t* out) { return readVarU<uint64_t>(out); } - MOZ_MUST_USE bool readVarS64(int64_t* out) { + [[nodiscard]] bool readVarS64(int64_t* out) { return readVarS<int64_t>(out); } - MOZ_MUST_USE bool readValType(uint8_t* type) { + [[nodiscard]] bool readValType(uint8_t* type) { static_assert(uint8_t(TypeCode::Limit) <= UINT8_MAX, "fits"); return readFixedU8(type); } - MOZ_MUST_USE bool readBlockType(uint8_t* type) { + [[nodiscard]] bool readBlockType(uint8_t* type) { static_assert(size_t(TypeCode::Limit) <= UINT8_MAX, "fits"); return readFixedU8(type); } - MOZ_MUST_USE bool readOp(uint16_t* op) { + [[nodiscard]] bool readOp(uint16_t* op) { static_assert(size_t(Op::Limit) <= 2 * UINT8_MAX, "fits"); uint8_t u8; if (!readFixedU8(&u8)) @@ -404,7 +404,7 @@ class Decoder // See writeBytes comment. - MOZ_MUST_USE bool readBytes(uint32_t numBytes, const uint8_t** bytes = nullptr) { + [[nodiscard]] bool readBytes(uint32_t numBytes, const uint8_t** bytes = nullptr) { if (bytes) *bytes = cur_; if (bytesRemain() < numBytes) @@ -417,7 +417,7 @@ class Decoder static const uint32_t NotStarted = UINT32_MAX; - MOZ_MUST_USE bool startSection(SectionId id, + [[nodiscard]] bool startSection(SectionId id, uint32_t* startOffset, uint32_t* size, const char* sectionName) @@ -451,7 +451,7 @@ class Decoder fail: return fail("failed to start %s section", sectionName); } - MOZ_MUST_USE bool finishSection(uint32_t startOffset, uint32_t size, + [[nodiscard]] bool finishSection(uint32_t startOffset, uint32_t size, const char* sectionName) { if (size != (cur_ - beg_) - startOffset) @@ -462,7 +462,7 @@ class Decoder // "User sections" do not cause validation errors unless the error is in // the user-defined section header itself. - MOZ_MUST_USE bool startUserDefinedSection(const char* expectedId, + [[nodiscard]] bool startUserDefinedSection(const char* expectedId, size_t expectedIdSize, uint32_t* sectionStart, uint32_t* sectionSize) @@ -492,7 +492,7 @@ class Decoder return fail("failed to start user-defined section"); } template <size_t IdSizeWith0> - MOZ_MUST_USE bool startUserDefinedSection(const char (&id)[IdSizeWith0], + [[nodiscard]] bool startUserDefinedSection(const char (&id)[IdSizeWith0], uint32_t* sectionStart, uint32_t* sectionSize) { @@ -506,7 +506,7 @@ class Decoder MOZ_ASSERT(cur_ <= end_); clearError(); } - MOZ_MUST_USE bool skipUserDefinedSection() { + [[nodiscard]] bool skipUserDefinedSection() { uint32_t sectionStart, sectionSize; if (!startUserDefinedSection(nullptr, 0, §ionStart, §ionSize)) return false; @@ -587,56 +587,56 @@ class Decoder UniqueChars DecodeName(Decoder& d); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeTableLimits(Decoder& d, TableDescVector* tables); -MOZ_MUST_USE bool +[[nodiscard]] bool GlobalIsJSCompatible(Decoder& d, ValType type, bool isMutable); -MOZ_MUST_USE bool +[[nodiscard]] bool EncodeLocalEntries(Encoder& d, const ValTypeVector& locals); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeLocalEntries(Decoder& d, ModuleKind kind, ValTypeVector* locals); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeGlobalType(Decoder& d, ValType* type, bool* isMutable); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeInitializerExpression(Decoder& d, const GlobalDescVector& globals, ValType expected, InitExpr* init); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeLimits(Decoder& d, Limits* limits); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeMemoryLimits(Decoder& d, bool hasMemory, Limits* memory); // Section macros. -MOZ_MUST_USE bool +[[nodiscard]] bool DecodePreamble(Decoder& d); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeTypeSection(Decoder& d, SigWithIdVector* sigs); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeImportSection(Decoder& d, const SigWithIdVector& sigs, Uint32Vector* funcSigIndices, GlobalDescVector* globals, TableDescVector* tables, Maybe<Limits>* memory, ImportVector* imports); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeFunctionSection(Decoder& d, const SigWithIdVector& sigs, size_t numImportedFunc, Uint32Vector* funcSigIndexes); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeUnknownSections(Decoder& d); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeDataSection(Decoder& d, bool usesMemory, uint32_t minMemoryByteLength, const GlobalDescVector& globals, DataSegmentVector* segments); -MOZ_MUST_USE bool +[[nodiscard]] bool DecodeMemorySection(Decoder& d, bool hasMemory, Limits* memory, bool* present); } // namespace wasm diff --git a/js/src/wasm/WasmBinaryIterator.h b/js/src/wasm/WasmBinaryIterator.h index ccad80f9dd..c5473ef42f 100644 --- a/js/src/wasm/WasmBinaryIterator.h +++ b/js/src/wasm/WasmBinaryIterator.h @@ -260,56 +260,56 @@ class MOZ_STACK_CLASS OpIter : private Policy DebugOnly<Op> op_; size_t offsetOfExpr_; - MOZ_MUST_USE bool readFixedU8(uint8_t* out) { + [[nodiscard]] bool readFixedU8(uint8_t* out) { if (Validate) return d_.readFixedU8(out); *out = d_.uncheckedReadFixedU8(); return true; } - MOZ_MUST_USE bool readFixedU32(uint32_t* out) { + [[nodiscard]] bool readFixedU32(uint32_t* out) { if (Validate) return d_.readFixedU32(out); *out = d_.uncheckedReadFixedU32(); return true; } - MOZ_MUST_USE bool readVarS32(int32_t* out) { + [[nodiscard]] bool readVarS32(int32_t* out) { if (Validate) return d_.readVarS32(out); *out = d_.uncheckedReadVarS32(); return true; } - MOZ_MUST_USE bool readVarU32(uint32_t* out) { + [[nodiscard]] bool readVarU32(uint32_t* out) { if (Validate) return d_.readVarU32(out); *out = d_.uncheckedReadVarU32(); return true; } - MOZ_MUST_USE bool readVarS64(int64_t* out) { + [[nodiscard]] bool readVarS64(int64_t* out) { if (Validate) return d_.readVarS64(out); *out = d_.uncheckedReadVarS64(); return true; } - MOZ_MUST_USE bool readVarU64(uint64_t* out) { + [[nodiscard]] bool readVarU64(uint64_t* out) { if (Validate) return d_.readVarU64(out); *out = d_.uncheckedReadVarU64(); return true; } - MOZ_MUST_USE bool readFixedF32(RawF32* out) { + [[nodiscard]] bool readFixedF32(RawF32* out) { if (Validate) return d_.readFixedF32(out); *out = d_.uncheckedReadFixedF32(); return true; } - MOZ_MUST_USE bool readFixedF64(RawF64* out) { + [[nodiscard]] bool readFixedF64(RawF64* out) { if (Validate) return d_.readFixedF64(out); *out = d_.uncheckedReadFixedF64(); return true; } - MOZ_MUST_USE bool readAtomicViewType(Scalar::Type* viewType) { + [[nodiscard]] bool readAtomicViewType(Scalar::Type* viewType) { uint8_t x; if (!readFixedU8(&x)) return fail("unable to read atomic view"); @@ -319,7 +319,7 @@ class MOZ_STACK_CLASS OpIter : private Policy return true; } - MOZ_MUST_USE bool readAtomicBinOpOp(jit::AtomicOp* op) { + [[nodiscard]] bool readAtomicBinOpOp(jit::AtomicOp* op) { uint8_t x; if (!readFixedU8(&x)) return fail("unable to read atomic opcode"); @@ -339,23 +339,23 @@ class MOZ_STACK_CLASS OpIter : private Policy return true; } - MOZ_MUST_USE bool readLinearMemoryAddress(uint32_t byteSize, LinearMemoryAddress<Value>* addr); - MOZ_MUST_USE bool readBlockType(ExprType* expr); + [[nodiscard]] bool readLinearMemoryAddress(uint32_t byteSize, LinearMemoryAddress<Value>* addr); + [[nodiscard]] bool readBlockType(ExprType* expr); - MOZ_MUST_USE bool typeMismatch(ExprType actual, ExprType expected) MOZ_COLD; - MOZ_MUST_USE bool checkType(ValType actual, ValType expected); - MOZ_MUST_USE bool checkType(ExprType actual, ExprType expected); + [[nodiscard]] bool typeMismatch(ExprType actual, ExprType expected) MOZ_COLD; + [[nodiscard]] bool checkType(ValType actual, ValType expected); + [[nodiscard]] bool checkType(ExprType actual, ExprType expected); - MOZ_MUST_USE bool pushControl(LabelKind kind, ExprType type, bool reachable); - MOZ_MUST_USE bool mergeControl(LabelKind* kind, ExprType* type, Value* value); - MOZ_MUST_USE bool popControl(LabelKind* kind, ExprType* type, Value* value); + [[nodiscard]] bool pushControl(LabelKind kind, ExprType type, bool reachable); + [[nodiscard]] bool mergeControl(LabelKind* kind, ExprType* type, Value* value); + [[nodiscard]] bool popControl(LabelKind* kind, ExprType* type, Value* value); - MOZ_MUST_USE bool push(ValType t) { + [[nodiscard]] bool push(ValType t) { if (MOZ_UNLIKELY(!reachable_)) return true; return valueStack_.emplaceBack(t); } - MOZ_MUST_USE bool push(TypeAndValue<Value> tv) { + [[nodiscard]] bool push(TypeAndValue<Value> tv) { if (MOZ_UNLIKELY(!reachable_)) return true; return valueStack_.append(tv); @@ -372,7 +372,7 @@ class MOZ_STACK_CLASS OpIter : private Policy } // Test whether reading the top of the value stack is currently valid. - MOZ_MUST_USE bool checkTop() { + [[nodiscard]] bool checkTop() { MOZ_ASSERT(reachable_); if (Validate && valueStack_.length() <= controlStack_.back().valueStackStart()) { if (valueStack_.empty()) @@ -383,7 +383,7 @@ class MOZ_STACK_CLASS OpIter : private Policy } // Pop the top of the value stack. - MOZ_MUST_USE bool pop(TypeAndValue<Value>* tv) { + [[nodiscard]] bool pop(TypeAndValue<Value>* tv) { if (MOZ_UNLIKELY(!reachable_)) return true; if (!checkTop()) @@ -393,7 +393,7 @@ class MOZ_STACK_CLASS OpIter : private Policy } // Pop the top of the value stack and check that it has the given type. - MOZ_MUST_USE bool popWithType(ValType expectedType, Value* value) { + [[nodiscard]] bool popWithType(ValType expectedType, Value* value) { if (MOZ_UNLIKELY(!reachable_)) return true; if (!checkTop()) @@ -407,7 +407,7 @@ class MOZ_STACK_CLASS OpIter : private Policy } // Pop the top of the value stack and discard the result. - MOZ_MUST_USE bool pop() { + [[nodiscard]] bool pop() { if (MOZ_UNLIKELY(!reachable_)) return true; if (!checkTop()) @@ -417,7 +417,7 @@ class MOZ_STACK_CLASS OpIter : private Policy } // Read the top of the value stack (without popping it). - MOZ_MUST_USE bool top(TypeAndValue<Value>* tv) { + [[nodiscard]] bool top(TypeAndValue<Value>* tv) { if (MOZ_UNLIKELY(!reachable_)) return true; if (!checkTop()) @@ -428,7 +428,7 @@ class MOZ_STACK_CLASS OpIter : private Policy // Read the top of the value stack (without popping it) and check that it // has the given type. - MOZ_MUST_USE bool topWithType(ValType expectedType, Value* value) { + [[nodiscard]] bool topWithType(ValType expectedType, Value* value) { if (MOZ_UNLIKELY(!reachable_)) return true; if (!checkTop()) @@ -442,7 +442,7 @@ class MOZ_STACK_CLASS OpIter : private Policy } // Read the value stack entry at depth |index|. - MOZ_MUST_USE bool peek(uint32_t index, TypeAndValue<Value>* tv) { + [[nodiscard]] bool peek(uint32_t index, TypeAndValue<Value>* tv) { MOZ_ASSERT(reachable_); if (Validate && valueStack_.length() - controlStack_.back().valueStackStart() < index) return fail("peeking at value from outside block"); @@ -484,13 +484,13 @@ class MOZ_STACK_CLASS OpIter : private Policy bool done() const { return d_.done(); } // Report a general failure. - MOZ_MUST_USE bool fail(const char* msg) MOZ_COLD; + [[nodiscard]] bool fail(const char* msg) MOZ_COLD; // Report an unimplemented feature. - MOZ_MUST_USE bool notYetImplemented(const char* what) MOZ_COLD; + [[nodiscard]] bool notYetImplemented(const char* what) MOZ_COLD; // Report an unrecognized opcode. - MOZ_MUST_USE bool unrecognizedOpcode(uint32_t expr) MOZ_COLD; + [[nodiscard]] bool unrecognizedOpcode(uint32_t expr) MOZ_COLD; // Test whether the iterator is currently in "reachable" code. bool inReachableCode() const { return reachable_; } @@ -498,70 +498,70 @@ class MOZ_STACK_CLASS OpIter : private Policy // ------------------------------------------------------------------------ // Decoding and validation interface. - MOZ_MUST_USE bool readOp(uint16_t* op); - MOZ_MUST_USE bool readFunctionStart(ExprType ret); - MOZ_MUST_USE bool readFunctionEnd(); - MOZ_MUST_USE bool readReturn(Value* value); - MOZ_MUST_USE bool readBlock(); - MOZ_MUST_USE bool readLoop(); - MOZ_MUST_USE bool readIf(Value* condition); - MOZ_MUST_USE bool readElse(ExprType* thenType, Value* thenValue); - MOZ_MUST_USE bool readEnd(LabelKind* kind, ExprType* type, Value* value); - MOZ_MUST_USE bool readBr(uint32_t* relativeDepth, ExprType* type, Value* value); - MOZ_MUST_USE bool readBrIf(uint32_t* relativeDepth, ExprType* type, + [[nodiscard]] bool readOp(uint16_t* op); + [[nodiscard]] bool readFunctionStart(ExprType ret); + [[nodiscard]] bool readFunctionEnd(); + [[nodiscard]] bool readReturn(Value* value); + [[nodiscard]] bool readBlock(); + [[nodiscard]] bool readLoop(); + [[nodiscard]] bool readIf(Value* condition); + [[nodiscard]] bool readElse(ExprType* thenType, Value* thenValue); + [[nodiscard]] bool readEnd(LabelKind* kind, ExprType* type, Value* value); + [[nodiscard]] bool readBr(uint32_t* relativeDepth, ExprType* type, Value* value); + [[nodiscard]] bool readBrIf(uint32_t* relativeDepth, ExprType* type, Value* value, Value* condition); - MOZ_MUST_USE bool readBrTable(uint32_t* tableLength, ExprType* type, + [[nodiscard]] bool readBrTable(uint32_t* tableLength, ExprType* type, Value* value, Value* index); - MOZ_MUST_USE bool readBrTableEntry(ExprType* type, Value* value, uint32_t* depth); - MOZ_MUST_USE bool readBrTableDefault(ExprType* type, Value* value, uint32_t* depth); - MOZ_MUST_USE bool readUnreachable(); - MOZ_MUST_USE bool readDrop(); - MOZ_MUST_USE bool readUnary(ValType operandType, Value* input); - MOZ_MUST_USE bool readConversion(ValType operandType, ValType resultType, Value* input); - MOZ_MUST_USE bool readBinary(ValType operandType, Value* lhs, Value* rhs); - MOZ_MUST_USE bool readComparison(ValType operandType, Value* lhs, Value* rhs); - MOZ_MUST_USE bool readLoad(ValType resultType, uint32_t byteSize, + [[nodiscard]] bool readBrTableEntry(ExprType* type, Value* value, uint32_t* depth); + [[nodiscard]] bool readBrTableDefault(ExprType* type, Value* value, uint32_t* depth); + [[nodiscard]] bool readUnreachable(); + [[nodiscard]] bool readDrop(); + [[nodiscard]] bool readUnary(ValType operandType, Value* input); + [[nodiscard]] bool readConversion(ValType operandType, ValType resultType, Value* input); + [[nodiscard]] bool readBinary(ValType operandType, Value* lhs, Value* rhs); + [[nodiscard]] bool readComparison(ValType operandType, Value* lhs, Value* rhs); + [[nodiscard]] bool readLoad(ValType resultType, uint32_t byteSize, LinearMemoryAddress<Value>* addr); - MOZ_MUST_USE bool readStore(ValType resultType, uint32_t byteSize, + [[nodiscard]] bool readStore(ValType resultType, uint32_t byteSize, LinearMemoryAddress<Value>* addr, Value* value); - MOZ_MUST_USE bool readTeeStore(ValType resultType, uint32_t byteSize, + [[nodiscard]] bool readTeeStore(ValType resultType, uint32_t byteSize, LinearMemoryAddress<Value>* addr, Value* value); - MOZ_MUST_USE bool readNop(); - MOZ_MUST_USE bool readCurrentMemory(); - MOZ_MUST_USE bool readGrowMemory(Value* input); - MOZ_MUST_USE bool readSelect(ValType* type, + [[nodiscard]] bool readNop(); + [[nodiscard]] bool readCurrentMemory(); + [[nodiscard]] bool readGrowMemory(Value* input); + [[nodiscard]] bool readSelect(ValType* type, Value* trueValue, Value* falseValue, Value* condition); - MOZ_MUST_USE bool readGetLocal(const ValTypeVector& locals, uint32_t* id); - MOZ_MUST_USE bool readSetLocal(const ValTypeVector& locals, uint32_t* id, Value* value); - MOZ_MUST_USE bool readTeeLocal(const ValTypeVector& locals, uint32_t* id, Value* value); - MOZ_MUST_USE bool readGetGlobal(const GlobalDescVector& globals, uint32_t* id); - MOZ_MUST_USE bool readSetGlobal(const GlobalDescVector& globals, uint32_t* id, Value* value); - MOZ_MUST_USE bool readTeeGlobal(const GlobalDescVector& globals, uint32_t* id, Value* value); - MOZ_MUST_USE bool readI32Const(int32_t* i32); - MOZ_MUST_USE bool readI64Const(int64_t* i64); - MOZ_MUST_USE bool readF32Const(RawF32* f32); - MOZ_MUST_USE bool readF64Const(RawF64* f64); - MOZ_MUST_USE bool readCall(uint32_t* calleeIndex); - MOZ_MUST_USE bool readCallIndirect(uint32_t* sigIndex, Value* callee); - MOZ_MUST_USE bool readOldCallIndirect(uint32_t* sigIndex); - MOZ_MUST_USE bool readCallArg(ValType type, uint32_t numArgs, uint32_t argIndex, Value* arg); - MOZ_MUST_USE bool readCallArgsEnd(uint32_t numArgs); - MOZ_MUST_USE bool readOldCallIndirectCallee(Value* callee); - MOZ_MUST_USE bool readCallReturn(ExprType ret); - MOZ_MUST_USE bool readAtomicLoad(LinearMemoryAddress<Value>* addr, + [[nodiscard]] bool readGetLocal(const ValTypeVector& locals, uint32_t* id); + [[nodiscard]] bool readSetLocal(const ValTypeVector& locals, uint32_t* id, Value* value); + [[nodiscard]] bool readTeeLocal(const ValTypeVector& locals, uint32_t* id, Value* value); + [[nodiscard]] bool readGetGlobal(const GlobalDescVector& globals, uint32_t* id); + [[nodiscard]] bool readSetGlobal(const GlobalDescVector& globals, uint32_t* id, Value* value); + [[nodiscard]] bool readTeeGlobal(const GlobalDescVector& globals, uint32_t* id, Value* value); + [[nodiscard]] bool readI32Const(int32_t* i32); + [[nodiscard]] bool readI64Const(int64_t* i64); + [[nodiscard]] bool readF32Const(RawF32* f32); + [[nodiscard]] bool readF64Const(RawF64* f64); + [[nodiscard]] bool readCall(uint32_t* calleeIndex); + [[nodiscard]] bool readCallIndirect(uint32_t* sigIndex, Value* callee); + [[nodiscard]] bool readOldCallIndirect(uint32_t* sigIndex); + [[nodiscard]] bool readCallArg(ValType type, uint32_t numArgs, uint32_t argIndex, Value* arg); + [[nodiscard]] bool readCallArgsEnd(uint32_t numArgs); + [[nodiscard]] bool readOldCallIndirectCallee(Value* callee); + [[nodiscard]] bool readCallReturn(ExprType ret); + [[nodiscard]] bool readAtomicLoad(LinearMemoryAddress<Value>* addr, Scalar::Type* viewType); - MOZ_MUST_USE bool readAtomicStore(LinearMemoryAddress<Value>* addr, + [[nodiscard]] bool readAtomicStore(LinearMemoryAddress<Value>* addr, Scalar::Type* viewType, Value* value); - MOZ_MUST_USE bool readAtomicBinOp(LinearMemoryAddress<Value>* addr, + [[nodiscard]] bool readAtomicBinOp(LinearMemoryAddress<Value>* addr, Scalar::Type* viewType, jit::AtomicOp* op, Value* value); - MOZ_MUST_USE bool readAtomicCompareExchange(LinearMemoryAddress<Value>* addr, + [[nodiscard]] bool readAtomicCompareExchange(LinearMemoryAddress<Value>* addr, Scalar::Type* viewType, Value* oldValue, Value* newValue); - MOZ_MUST_USE bool readAtomicExchange(LinearMemoryAddress<Value>* addr, + [[nodiscard]] bool readAtomicExchange(LinearMemoryAddress<Value>* addr, Scalar::Type* viewType, Value* newValue); diff --git a/js/src/wasm/WasmBinaryToAST.cpp b/js/src/wasm/WasmBinaryToAST.cpp index 8d6db7b357..80bec9df46 100644 --- a/js/src/wasm/WasmBinaryToAST.cpp +++ b/js/src/wasm/WasmBinaryToAST.cpp @@ -1,6 +1,7 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * Copyright 2016 Mozilla Foundation + * Copyright 2023 Moonchild Productions * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -150,7 +151,7 @@ class AstDecodeContext void popBack() { return exprs().popBack(); } AstDecodeStackItem popCopy() { return exprs().popCopy(); } AstDecodeStackItem& top() { return exprs().back(); } - MOZ_MUST_USE bool push(AstDecodeStackItem item) { return exprs().append(item); } + [[nodiscard]] bool push(AstDecodeStackItem item) { return exprs().append(item); } bool needFirst() { for (size_t i = depths().back(); i < exprs().length(); ++i) { diff --git a/js/src/wasm/WasmBinaryToExperimentalText.h b/js/src/wasm/WasmBinaryToExperimentalText.h index 6c77c583cb..a93a05eda0 100644 --- a/js/src/wasm/WasmBinaryToExperimentalText.h +++ b/js/src/wasm/WasmBinaryToExperimentalText.h @@ -46,7 +46,7 @@ struct ExperimentalTextFormatting // Translate the given binary representation of a wasm module into the module's textual // representation. -MOZ_MUST_USE bool +[[nodiscard]] bool BinaryToExperimentalText(JSContext* cx, const uint8_t* bytes, size_t length, StringBuffer& buffer, const ExperimentalTextFormatting& formatting = ExperimentalTextFormatting(), GeneratedSourceMap* sourceMap = nullptr); diff --git a/js/src/wasm/WasmBinaryToText.h b/js/src/wasm/WasmBinaryToText.h index 1674bdcd48..e2c4e530c3 100644 --- a/js/src/wasm/WasmBinaryToText.h +++ b/js/src/wasm/WasmBinaryToText.h @@ -1,6 +1,7 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * Copyright 2015 Mozilla Foundation + * Copyright 2023 Moonchild Productions * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,7 +34,7 @@ namespace wasm { // Translate the given binary representation of a wasm module into the module's textual // representation. -MOZ_MUST_USE bool +[[nodiscard]] bool BinaryToText(JSContext* cx, const uint8_t* bytes, size_t length, StringBuffer& buffer, GeneratedSourceMap* sourceMap = nullptr); diff --git a/js/src/wasm/WasmCode.h b/js/src/wasm/WasmCode.h index c6f1ace02e..1254fd9d7c 100644 --- a/js/src/wasm/WasmCode.h +++ b/js/src/wasm/WasmCode.h @@ -1,6 +1,7 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * Copyright 2016 Mozilla Foundation + * Copyright 2023 Moonchild Productions * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -530,7 +531,7 @@ class Code // asynchronously walk the stack. Otherwise, the ProfilingFrameIterator will // skip any activations of this code. - MOZ_MUST_USE bool ensureProfilingState(JSContext* cx, bool enabled); + [[nodiscard]] bool ensureProfilingState(JSContext* cx, bool enabled); bool profilingEnabled() const { return profilingEnabled_; } const char* profilingLabel(uint32_t funcIndex) const { return funcLabels_[funcIndex].get(); } diff --git a/js/src/wasm/WasmGenerator.h b/js/src/wasm/WasmGenerator.h index 85b23664a2..377898d6c7 100644 --- a/js/src/wasm/WasmGenerator.h +++ b/js/src/wasm/WasmGenerator.h @@ -1,6 +1,7 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * Copyright 2015 Mozilla Foundation + * Copyright 2023 Moonchild Productions * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -116,22 +117,22 @@ class MOZ_STACK_CLASS ModuleGenerator bool funcIsCompiled(uint32_t funcIndex) const; const CodeRange& funcCodeRange(uint32_t funcIndex) const; - MOZ_MUST_USE bool patchCallSites(TrapExitOffsetArray* maybeTrapExits = nullptr); - MOZ_MUST_USE bool patchFarJumps(const TrapExitOffsetArray& trapExits); - MOZ_MUST_USE bool finishTask(IonCompileTask* task); - MOZ_MUST_USE bool finishOutstandingTask(); - MOZ_MUST_USE bool finishFuncExports(); - MOZ_MUST_USE bool finishCodegen(); - MOZ_MUST_USE bool finishLinkData(Bytes& code); - MOZ_MUST_USE bool addFuncImport(const Sig& sig, uint32_t globalDataOffset); - MOZ_MUST_USE bool allocateGlobalBytes(uint32_t bytes, uint32_t align, uint32_t* globalDataOff); - MOZ_MUST_USE bool allocateGlobal(GlobalDesc* global); + [[nodiscard]] bool patchCallSites(TrapExitOffsetArray* maybeTrapExits = nullptr); + [[nodiscard]] bool patchFarJumps(const TrapExitOffsetArray& trapExits); + [[nodiscard]] bool finishTask(IonCompileTask* task); + [[nodiscard]] bool finishOutstandingTask(); + [[nodiscard]] bool finishFuncExports(); + [[nodiscard]] bool finishCodegen(); + [[nodiscard]] bool finishLinkData(Bytes& code); + [[nodiscard]] bool addFuncImport(const Sig& sig, uint32_t globalDataOffset); + [[nodiscard]] bool allocateGlobalBytes(uint32_t bytes, uint32_t align, uint32_t* globalDataOff); + [[nodiscard]] bool allocateGlobal(GlobalDesc* global); public: explicit ModuleGenerator(ImportVector&& imports); ~ModuleGenerator(); - MOZ_MUST_USE bool init(UniqueModuleGeneratorData shared, const CompileArgs& args, + [[nodiscard]] bool init(UniqueModuleGeneratorData shared, const CompileArgs& args, Metadata* maybeAsmJSMetadata = nullptr); bool isAsmJS() const { return metadata_->kind == ModuleKind::AsmJS; } @@ -159,23 +160,23 @@ class MOZ_STACK_CLASS ModuleGenerator uint32_t numFuncs() const; // Exports: - MOZ_MUST_USE bool addFuncExport(UniqueChars fieldName, uint32_t funcIndex); - MOZ_MUST_USE bool addTableExport(UniqueChars fieldName); - MOZ_MUST_USE bool addMemoryExport(UniqueChars fieldName); - MOZ_MUST_USE bool addGlobalExport(UniqueChars fieldName, uint32_t globalIndex); + [[nodiscard]] bool addFuncExport(UniqueChars fieldName, uint32_t funcIndex); + [[nodiscard]] bool addTableExport(UniqueChars fieldName); + [[nodiscard]] bool addMemoryExport(UniqueChars fieldName); + [[nodiscard]] bool addGlobalExport(UniqueChars fieldName, uint32_t globalIndex); // Function definitions: - MOZ_MUST_USE bool startFuncDefs(); - MOZ_MUST_USE bool startFuncDef(uint32_t lineOrBytecode, FunctionGenerator* fg); - MOZ_MUST_USE bool finishFuncDef(uint32_t funcIndex, FunctionGenerator* fg); - MOZ_MUST_USE bool finishFuncDefs(); + [[nodiscard]] bool startFuncDefs(); + [[nodiscard]] bool startFuncDef(uint32_t lineOrBytecode, FunctionGenerator* fg); + [[nodiscard]] bool finishFuncDef(uint32_t funcIndex, FunctionGenerator* fg); + [[nodiscard]] bool finishFuncDefs(); // Start function: bool setStartFunction(uint32_t funcIndex); // Segments: void setDataSegments(DataSegmentVector&& segments); - MOZ_MUST_USE bool addElemSegment(InitExpr offset, Uint32Vector&& elemFuncIndices); + [[nodiscard]] bool addElemSegment(InitExpr offset, Uint32Vector&& elemFuncIndices); // Function names: void setFuncNames(NameInBytecodeVector&& funcNames); @@ -183,12 +184,12 @@ class MOZ_STACK_CLASS ModuleGenerator // asm.js lazy initialization: void initSig(uint32_t sigIndex, Sig&& sig); void initFuncSig(uint32_t funcIndex, uint32_t sigIndex); - MOZ_MUST_USE bool initImport(uint32_t funcIndex, uint32_t sigIndex); - MOZ_MUST_USE bool initSigTableLength(uint32_t sigIndex, uint32_t length); - MOZ_MUST_USE bool initSigTableElems(uint32_t sigIndex, Uint32Vector&& elemFuncIndices); + [[nodiscard]] bool initImport(uint32_t funcIndex, uint32_t sigIndex); + [[nodiscard]] bool initSigTableLength(uint32_t sigIndex, uint32_t length); + [[nodiscard]] bool initSigTableElems(uint32_t sigIndex, Uint32Vector&& elemFuncIndices); void initMemoryUsage(MemoryUsage memoryUsage); void bumpMinMemoryLength(uint32_t newMinMemoryLength); - MOZ_MUST_USE bool addGlobal(ValType type, bool isConst, uint32_t* index); + [[nodiscard]] bool addGlobal(ValType type, bool isConst, uint32_t* index); // Finish compilation, provided the list of imports and source bytecode. // Both these Vectors may be empty (viz., b/c asm.js does different things @@ -240,7 +241,7 @@ class MOZ_STACK_CLASS FunctionGenerator Bytes& bytes() { return bytes_; } - MOZ_MUST_USE bool addCallSiteLineNum(uint32_t lineno) { + [[nodiscard]] bool addCallSiteLineNum(uint32_t lineno) { return callSiteLineNums_.append(lineno); } }; diff --git a/js/src/wasm/WasmInstance.h b/js/src/wasm/WasmInstance.h index 5c2871259c..523a08c31d 100644 --- a/js/src/wasm/WasmInstance.h +++ b/js/src/wasm/WasmInstance.h @@ -1,6 +1,7 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * Copyright 2016 Mozilla Foundation + * Copyright 2023 Moonchild Productions * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -99,7 +100,7 @@ class Instance // Execute the given export given the JS call arguments, storing the return // value in args.rval. - MOZ_MUST_USE bool callExport(JSContext* cx, uint32_t funcIndex, CallArgs args); + [[nodiscard]] bool callExport(JSContext* cx, uint32_t funcIndex, CallArgs args); // Initially, calls to imports in wasm code call out through the generic // callImport method. If the imported callee gets JIT compiled and the types @@ -121,7 +122,7 @@ class Instance // See Code::ensureProfilingState comment. - MOZ_MUST_USE bool ensureProfilingState(JSContext* cx, bool enabled); + [[nodiscard]] bool ensureProfilingState(JSContext* cx, bool enabled); // about:memory reporting: diff --git a/js/src/wasm/WasmIonCompile.h b/js/src/wasm/WasmIonCompile.h index dcd5c3c633..90f81643ec 100644 --- a/js/src/wasm/WasmIonCompile.h +++ b/js/src/wasm/WasmIonCompile.h @@ -1,6 +1,7 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * Copyright 2015 Mozilla Foundation + * Copyright 2023 Moonchild Productions * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -146,7 +147,7 @@ class IonCompileTask } }; -MOZ_MUST_USE bool +[[nodiscard]] bool IonCompileFunction(IonCompileTask* task); bool diff --git a/js/src/wasm/WasmJS.h b/js/src/wasm/WasmJS.h index ee1332102f..1ae4714f06 100644 --- a/js/src/wasm/WasmJS.h +++ b/js/src/wasm/WasmJS.h @@ -74,7 +74,7 @@ HasSupport(ExclusiveContext* cx); // Compiles the given binary wasm module given the ArrayBufferObject // and links the module's imports with the given import object. -MOZ_MUST_USE bool +[[nodiscard]] bool Eval(JSContext* cx, Handle<TypedArrayObject*> code, HandleObject importObj, MutableHandleWasmInstanceObject instanceObj); diff --git a/js/src/wasm/WasmSignalHandlers.h b/js/src/wasm/WasmSignalHandlers.h index 87faa15025..40ebfeb2e2 100644 --- a/js/src/wasm/WasmSignalHandlers.h +++ b/js/src/wasm/WasmSignalHandlers.h @@ -38,7 +38,7 @@ namespace wasm { // Ensure the given JSRuntime is set up to use signals. Failure to enable signal // handlers indicates some catastrophic failure and creation of the runtime must // fail. -MOZ_MUST_USE bool +[[nodiscard]] bool EnsureSignalHandlers(JSRuntime* rt); // Return whether signals can be used in this process for interrupts or diff --git a/js/src/wasm/WasmTextToBinary.h b/js/src/wasm/WasmTextToBinary.h index 1d16517586..7e5dce6db9 100644 --- a/js/src/wasm/WasmTextToBinary.h +++ b/js/src/wasm/WasmTextToBinary.h @@ -1,6 +1,7 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * Copyright 2015 Mozilla Foundation + * Copyright 2023 Moonchild Productions * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,7 +28,7 @@ namespace wasm { // null-terminated char16_t array) into serialized bytes. If there is an error // other than out-of-memory an error message string will be stored in 'error'. -extern MOZ_MUST_USE bool +[[nodiscard]] extern bool TextToBinary(const char16_t* text, Bytes* bytes, UniqueChars* error); } // namespace wasm diff --git a/js/src/wasm/WasmTextUtils.cpp b/js/src/wasm/WasmTextUtils.cpp index 197a211f19..b09504fa2b 100644 --- a/js/src/wasm/WasmTextUtils.cpp +++ b/js/src/wasm/WasmTextUtils.cpp @@ -73,5 +73,5 @@ js::wasm::RenderNaN(StringBuffer& sb, Raw<T> num) RenderInBase<16>(sb, payload); } -template MOZ_MUST_USE bool js::wasm::RenderNaN(StringBuffer& b, Raw<float> num); -template MOZ_MUST_USE bool js::wasm::RenderNaN(StringBuffer& b, Raw<double> num); +template [[nodiscard]] bool js::wasm::RenderNaN(StringBuffer& b, Raw<float> num); +template [[nodiscard]] bool js::wasm::RenderNaN(StringBuffer& b, Raw<double> num); diff --git a/js/src/wasm/WasmTextUtils.h b/js/src/wasm/WasmTextUtils.h index d772e621cd..a154681da9 100644 --- a/js/src/wasm/WasmTextUtils.h +++ b/js/src/wasm/WasmTextUtils.h @@ -1,6 +1,7 @@ /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * Copyright 2016 Mozilla Foundation + * Copyright 2023 Moonchild Productions * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,14 +28,14 @@ class StringBuffer; namespace wasm { template<size_t base> -MOZ_MUST_USE bool +[[nodiscard]] bool RenderInBase(StringBuffer& sb, uint64_t num); template<class T> class Raw; template<class T> -MOZ_MUST_USE bool +[[nodiscard]] bool RenderNaN(StringBuffer& sb, Raw<T> num); } // namespace wasm diff --git a/js/src/wasm/WasmTypes.h b/js/src/wasm/WasmTypes.h index 57c737e454..26112ed137 100644 --- a/js/src/wasm/WasmTypes.h +++ b/js/src/wasm/WasmTypes.h @@ -316,7 +316,7 @@ class Sig Sig() : args_(), ret_(ExprType::Void) {} Sig(ValTypeVector&& args, ExprType ret) : args_(Move(args)), ret_(ret) {} - MOZ_MUST_USE bool clone(const Sig& rhs) { + [[nodiscard]] bool clone(const Sig& rhs) { ret_ = rhs.ret_; MOZ_ASSERT(args_.empty()); return args_.appendAll(rhs.args_); diff --git a/js/xpconnect/loader/mozJSComponentLoader.cpp b/js/xpconnect/loader/mozJSComponentLoader.cpp index f4f3297469..f8af02ac0d 100644 --- a/js/xpconnect/loader/mozJSComponentLoader.cpp +++ b/js/xpconnect/loader/mozJSComponentLoader.cpp @@ -255,7 +255,7 @@ class MOZ_STACK_CLASS ComponentLoaderInfo { return mResolvedURI->GetSpec(*mKey); } - MOZ_MUST_USE nsresult GetLocation(nsCString& aLocation) { + [[nodiscard]] nsresult GetLocation(nsCString& aLocation) { nsresult rv = EnsureURI(); NS_ENSURE_SUCCESS(rv, rv); return mURI->GetSpec(aLocation); |