Changeset 212818 in webkit for trunk/Source/JavaScriptCore/runtime/PropertySlot.h
- Timestamp:
- Feb 22, 2017, 1:23:08 AM (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/JavaScriptCore/runtime/PropertySlot.h
r212717 r212818 24 24 #include "PropertyName.h" 25 25 #include "PropertyOffset.h" 26 #include "ScopeOffset.h" 26 27 #include <wtf/Assertions.h> 27 28 … … 33 34 class GetterSetter; 34 35 class JSObject; 36 class JSModuleEnvironment; 35 37 36 38 // ECMA 262-3 8.6.1 … … 87 89 }; 88 90 91 enum class AdditionalDataType : uint8_t { 92 None, 93 DOMJIT, // Annotated with DOMJIT information. 94 ModuleNamespace, // ModuleNamespaceObject's environment access. 95 }; 96 89 97 explicit PropertySlot(const JSValue thisValue, InternalMethodType internalMethodType) 90 98 : m_offset(invalidOffset) … … 95 103 , m_propertyType(TypeUnset) 96 104 , m_internalMethodType(internalMethodType) 105 , m_additionalDataType(AdditionalDataType::None) 97 106 , m_isTaintedByOpaqueObject(false) 98 107 { … … 164 173 DOMJIT::GetterSetter* domJIT() const 165 174 { 166 return m_domJIT; 175 if (m_additionalDataType == AdditionalDataType::DOMJIT) 176 return m_additionalData.domJIT; 177 return nullptr; 178 } 179 180 struct ModuleNamespaceSlot { 181 JSModuleEnvironment* environment; 182 unsigned scopeOffset; 183 }; 184 185 std::optional<ModuleNamespaceSlot> moduleNamespaceSlot() const 186 { 187 if (m_additionalDataType == AdditionalDataType::ModuleNamespace) 188 return m_additionalData.moduleNamespaceSlot; 189 return std::nullopt; 167 190 } 168 191 … … 207 230 } 208 231 232 void setValueModuleNamespace(JSObject* slotBase, unsigned attributes, JSValue value, JSModuleEnvironment* environment, ScopeOffset scopeOffset) 233 { 234 setValue(slotBase, attributes, value); 235 m_additionalDataType = AdditionalDataType::ModuleNamespace; 236 m_additionalData.moduleNamespaceSlot.environment = environment; 237 m_additionalData.moduleNamespaceSlot.scopeOffset = scopeOffset.offset(); 238 } 239 209 240 void setCustom(JSObject* slotBase, unsigned attributes, GetValueFunc getValue) 210 241 { … … 221 252 } 222 253 223 void setCacheableCustom(JSObject* slotBase, unsigned attributes, GetValueFunc getValue , DOMJIT::GetterSetter* domJIT = nullptr)254 void setCacheableCustom(JSObject* slotBase, unsigned attributes, GetValueFunc getValue) 224 255 { 225 256 ASSERT(attributes == attributesForStructure(attributes)); … … 233 264 m_propertyType = TypeCustom; 234 265 m_offset = !invalidOffset; 235 m_domJIT = domJIT; 266 } 267 268 void setCacheableCustom(JSObject* slotBase, unsigned attributes, GetValueFunc getValue, DOMJIT::GetterSetter* domJIT) 269 { 270 setCacheableCustom(slotBase, attributes, getValue); 271 if (domJIT) { 272 m_additionalDataType = AdditionalDataType::DOMJIT; 273 m_additionalData.domJIT = domJIT; 274 } 236 275 } 237 276 … … 329 368 PropertyType m_propertyType; 330 369 InternalMethodType m_internalMethodType; 331 DOMJIT::GetterSetter* m_domJIT { nullptr }; 370 AdditionalDataType m_additionalDataType; 371 union { 372 DOMJIT::GetterSetter* domJIT; 373 ModuleNamespaceSlot moduleNamespaceSlot; 374 } m_additionalData; 332 375 bool m_isTaintedByOpaqueObject; 333 376 };
Note:
See TracChangeset
for help on using the changeset viewer.