forked from mirrors/gecko-dev
		
	Bug 1480660 - Remove ConstExprHash{UntilZero,String}(). r=froydnj
They were workarounds for bugs in GCC 4.9, which is no longer supported. --HG-- extra : rebase_source : b793b4643e1e44199afdb8e8b35f930e02664be8
This commit is contained in:
		
							parent
							
								
									b0b2b901d0
								
							
						
					
					
						commit
						097b276f5c
					
				
					 2 changed files with 5 additions and 30 deletions
				
			
		|  | @ -249,29 +249,16 @@ HashGeneric(Args... aArgs) | ||||||
| namespace detail { | namespace detail { | ||||||
| 
 | 
 | ||||||
| template<typename T> | template<typename T> | ||||||
| HashNumber | constexpr HashNumber | ||||||
| HashUntilZero(const T* aStr) | HashUntilZero(const T* aStr) | ||||||
| { | { | ||||||
|   HashNumber hash = 0; |   HashNumber hash = 0; | ||||||
|   for (T c; (c = *aStr); aStr++) { |   for (; T c = *aStr; aStr++) { | ||||||
|     hash = AddToHash(hash, c); |     hash = AddToHash(hash, c); | ||||||
|   } |   } | ||||||
|   return hash; |   return hash; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // This is a `constexpr` alternative to HashUntilZero(const T*). It should
 |  | ||||||
| // only be used for compile-time computation because it uses recursion.
 |  | ||||||
| // XXX: once support for GCC 4.9 is dropped, this function should be removed
 |  | ||||||
| // and HashUntilZero(const T*) should be made `constexpr`.
 |  | ||||||
| template<typename T> |  | ||||||
| constexpr HashNumber |  | ||||||
| ConstExprHashUntilZero(const T* aStr, HashNumber aHash) |  | ||||||
| { |  | ||||||
|   return !*aStr |  | ||||||
|        ? aHash |  | ||||||
|        : ConstExprHashUntilZero(aStr + 1, AddToHash(aHash, *aStr)); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| template<typename T> | template<typename T> | ||||||
| HashNumber | HashNumber | ||||||
| HashKnownLength(const T* aStr, size_t aLength) | HashKnownLength(const T* aStr, size_t aLength) | ||||||
|  | @ -310,25 +297,13 @@ HashString(const unsigned char* aStr, size_t aLength) | ||||||
|   return detail::HashKnownLength(aStr, aLength); |   return detail::HashKnownLength(aStr, aLength); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| MOZ_MUST_USE inline HashNumber |  | ||||||
| HashString(const char16_t* aStr) |  | ||||||
| { |  | ||||||
|   return detail::HashUntilZero(aStr); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // This is a `constexpr` alternative to HashString(const char16_t*). It should
 |  | ||||||
| // only be used for compile-time computation because it uses recursion.
 |  | ||||||
| //
 |  | ||||||
| // You may need to use the
 | // You may need to use the
 | ||||||
| // MOZ_{PUSH,POP}_DISABLE_INTEGRAL_CONSTANT_OVERFLOW_WARNING macros if you use
 | // MOZ_{PUSH,POP}_DISABLE_INTEGRAL_CONSTANT_OVERFLOW_WARNING macros if you use
 | ||||||
| // this function. See the comment on those macros' definitions for more detail.
 | // this function. See the comment on those macros' definitions for more detail.
 | ||||||
| //
 |  | ||||||
| // XXX: once support for GCC 4.9 is dropped, this function should be removed
 |  | ||||||
| // and HashString(const char16_t*) should be made `constexpr`.
 |  | ||||||
| MOZ_MUST_USE constexpr HashNumber | MOZ_MUST_USE constexpr HashNumber | ||||||
| ConstExprHashString(const char16_t* aStr) | HashString(const char16_t* aStr) | ||||||
| { | { | ||||||
|   return detail::ConstExprHashUntilZero(aStr, 0); |   return detail::HashUntilZero(aStr); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| MOZ_MUST_USE inline HashNumber | MOZ_MUST_USE inline HashNumber | ||||||
|  |  | ||||||
|  | @ -107,7 +107,7 @@ protected: | ||||||
|   constexpr nsAtom(const char16_t* aStr, uint32_t aLength) |   constexpr nsAtom(const char16_t* aStr, uint32_t aLength) | ||||||
|     : mLength(aLength) |     : mLength(aLength) | ||||||
|     , mKind(static_cast<uint32_t>(nsAtom::AtomKind::Static)) |     , mKind(static_cast<uint32_t>(nsAtom::AtomKind::Static)) | ||||||
|     , mHash(mozilla::ConstExprHashString(aStr)) |     , mHash(mozilla::HashString(aStr)) | ||||||
|   {} |   {} | ||||||
| 
 | 
 | ||||||
|   // Used by nsDynamicAtom.
 |   // Used by nsDynamicAtom.
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Nicholas Nethercote
						Nicholas Nethercote