[WTF] Import std::optional reference implementation as WTF::Optional
[WebKit-https.git] / Source / JavaScriptCore / runtime / PropertyName.h
index 7424229..d1d4d19 100644 (file)
@@ -23,8 +23,7 @@
  * THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef PropertyName_h
-#define PropertyName_h
+#pragma once
 
 #include "Identifier.h"
 #include "PrivateName.h"
@@ -34,32 +33,38 @@ namespace JSC {
 
 class PropertyName {
 public:
-    PropertyName(AtomicStringImpl* propertyName)
+    PropertyName(UniquedStringImpl* propertyName)
         : m_impl(propertyName)
     {
-        ASSERT(!m_impl || m_impl->isAtomic() || m_impl->isSymbol());
     }
 
     PropertyName(const Identifier& propertyName)
-        : PropertyName(static_cast<AtomicStringImpl*>(propertyName.impl()))
+        : PropertyName(propertyName.impl())
     {
     }
 
     PropertyName(const PrivateName& propertyName)
-        : m_impl(static_cast<AtomicStringImpl*>(propertyName.uid()))
+        : m_impl(&propertyName.uid())
     {
         ASSERT(m_impl);
         ASSERT(m_impl->isSymbol());
     }
 
-    AtomicStringImpl* uid() const
+    bool isNull() const { return !m_impl; }
+
+    bool isSymbol()
+    {
+        return m_impl && m_impl->isSymbol();
+    }
+
+    UniquedStringImpl* uid() const
     {
         return m_impl;
     }
 
     AtomicStringImpl* publicName() const
     {
-        return (!m_impl || m_impl->isSymbol()) ? nullptr : m_impl;
+        return (!m_impl || m_impl->isSymbol()) ? nullptr : static_cast<AtomicStringImpl*>(m_impl);
     }
 
     void dump(PrintStream& out) const
@@ -71,7 +76,7 @@ public:
     }
 
 private:
-    AtomicStringImpl* m_impl;
+    UniquedStringImpl* m_impl;
 };
 
 inline bool operator==(PropertyName a, const Identifier& b)
@@ -109,16 +114,14 @@ inline bool operator!=(PropertyName a, PropertyName b)
     return a.uid() != b.uid();
 }
 
-ALWAYS_INLINE Optional<uint32_t> parseIndex(PropertyName propertyName)
+ALWAYS_INLINE std::optional<uint32_t> parseIndex(PropertyName propertyName)
 {
-    AtomicStringImpl* uid = propertyName.uid();
+    auto uid = propertyName.uid();
     if (!uid)
-        return Nullopt;
+        return std::nullopt;
     if (uid->isSymbol())
-        return Nullopt;
+        return std::nullopt;
     return parseIndex(*uid);
 }
 
-}
-
-#endif
+} // namespace JSC