Open github-actions[bot] opened 6 months ago
/js/src/vm/SharedStencil.h
--- e11d865508b49d371a7f846c69be74995e370546/js/src/vm/SharedStencil.h +++ b22e4d52944a4901e197dba3edceaac2fd90dc95/js/src/vm/SharedStencil.h @@ -784,67 +784,107 @@ struct SharedImmutableScriptData::Hasher } }; using SharedImmutableScriptDataTable = mozilla::HashSet<SharedImmutableScriptData*, SharedImmutableScriptData::Hasher, SystemAllocPolicy>; struct MemberInitializers { +#ifdef ENABLE_DECORATORS + static constexpr size_t NumBits = 30; +#else static constexpr size_t NumBits = 31; +#endif static constexpr uint32_t MaxInitializers = BitMask(NumBits); #ifdef DEBUG bool valid = false; #endif bool hasPrivateBrand : 1; +#ifdef ENABLE_DECORATORS + bool hasDecorators : 1; +#endif + // This struct will eventually have a vector of constant values for optimizing // field initializers. uint32_t numMemberInitializers : NumBits; - MemberInitializers(bool hasPrivateBrand, uint32_t numMemberInitializers) + MemberInitializers(bool hasPrivateBrand, +#ifdef ENABLE_DECORATORS + bool hasDecorators, +#endif + uint32_t numMemberInitializers) : #ifdef DEBUG valid(true), #endif hasPrivateBrand(hasPrivateBrand), +#ifdef ENABLE_DECORATORS + hasDecorators(hasDecorators), +#endif numMemberInitializers(numMemberInitializers) { +#ifdef ENABLE_DECORATORS + MOZ_ASSERT( + this->numMemberInitializers == numMemberInitializers, + "numMemberInitializers should easily fit in the 30-bit bitfield"); +#else MOZ_ASSERT( this->numMemberInitializers == numMemberInitializers, "numMemberInitializers should easily fit in the 31-bit bitfield"); +#endif } static MemberInitializers Invalid() { return MemberInitializers(); } // Singleton to use for class constructors that do not have to initialize any // fields. This is used when we elide the trivial data but still need a valid // set to stop scope walking. static const MemberInitializers& Empty() { - static const MemberInitializers zeroInitializers(false, 0); + static const MemberInitializers zeroInitializers(false, +#ifdef ENABLE_DECORATORS + false, +#endif + 0); return zeroInitializers; } uint32_t serialize() const { +#ifdef ENABLE_DECORATORS + auto serialised = (hasPrivateBrand << (NumBits + 1)) | + hasDecorators << NumBits | numMemberInitializers; + return serialised; +#else return (hasPrivateBrand << NumBits) | numMemberInitializers; +#endif } static MemberInitializers deserialize(uint32_t bits) { +#ifdef ENABLE_DECORATORS + return MemberInitializers((bits & Bit(NumBits + 1)) != 0, + (bits & Bit(NumBits)) != 0, + bits & BitMask(NumBits)); +#else return MemberInitializers((bits & Bit(NumBits)) != 0, bits & BitMask(NumBits)); +#endif } private: MemberInitializers() : #ifdef DEBUG valid(false), #endif hasPrivateBrand(false), +#ifdef ENABLE_DECORATORS + hasDecorators(false), +#endif numMemberInitializers(0) { } }; // See JSOp::Lambda for interepretation of this index. using FunctionDeclaration = GCThingIndex; // Defined here to avoid #include cycle with Stencil.h. using FunctionDeclarationVector =
Files
/js/src/vm/SharedStencil.h
Changesets
Diffs
/js/src/vm/SharedStencil.h