2 * Copyright (C) 2012 Apple Inc. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23 * THE POSSIBILITY OF SUCH DAMAGE.
26 #ifndef PropertyName_h
27 #define PropertyName_h
29 #include "Identifier.h"
30 #include "PrivateName.h"
31 #include <wtf/Optional.h>
37 PropertyName(UniquedStringImpl
* propertyName
)
38 : m_impl(propertyName
)
42 PropertyName(const Identifier
& propertyName
)
43 : PropertyName(propertyName
.impl())
47 PropertyName(const PrivateName
& propertyName
)
48 : m_impl(propertyName
.uid())
51 ASSERT(m_impl
->isSymbol());
56 return m_impl
&& m_impl
->isSymbol();
59 UniquedStringImpl
* uid() const
64 AtomicStringImpl
* publicName() const
66 return (!m_impl
|| m_impl
->isSymbol()) ? nullptr : static_cast<AtomicStringImpl
*>(m_impl
);
69 void dump(PrintStream
& out
) const
74 out
.print("<null property name>");
78 UniquedStringImpl
* m_impl
;
81 inline bool operator==(PropertyName a
, const Identifier
& b
)
83 return a
.uid() == b
.impl();
86 inline bool operator==(const Identifier
& a
, PropertyName b
)
88 return a
.impl() == b
.uid();
91 inline bool operator==(PropertyName a
, PropertyName b
)
93 return a
.uid() == b
.uid();
96 inline bool operator==(PropertyName a
, const char* b
)
98 return equal(a
.uid(), b
);
101 inline bool operator!=(PropertyName a
, const Identifier
& b
)
103 return a
.uid() != b
.impl();
106 inline bool operator!=(const Identifier
& a
, PropertyName b
)
108 return a
.impl() != b
.uid();
111 inline bool operator!=(PropertyName a
, PropertyName b
)
113 return a
.uid() != b
.uid();
116 ALWAYS_INLINE Optional
<uint32_t> parseIndex(PropertyName propertyName
)
118 auto uid
= propertyName
.uid();
123 return parseIndex(*uid
);