JavascriptStringObject.h 4.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #pragma once
  6. namespace Js
  7. {
  8. class JavascriptStringObject : public DynamicObject
  9. {
  10. private:
  11. static PropertyId const specialPropertyIds[];
  12. protected:
  13. Field(JavascriptString*) value;
  14. DEFINE_VTABLE_CTOR(JavascriptStringObject, DynamicObject);
  15. DEFINE_MARSHAL_OBJECT_TO_SCRIPT_CONTEXT(JavascriptStringObject);
  16. JavascriptString* InternalUnwrap();
  17. private:
  18. bool GetPropertyBuiltIns(PropertyId propertyId, Var* value, ScriptContext* requestContext, BOOL* result);
  19. bool SetPropertyBuiltIns(PropertyId propertyId, PropertyOperationFlags flags, bool* result);
  20. bool GetSetterBuiltIns(PropertyId propertyId, PropertyValueInfo* info, DescriptorFlags* descriptorFlags);
  21. bool IsValidIndex(PropertyId propertyId, bool conditionMetBehavior);
  22. public:
  23. JavascriptStringObject(DynamicType * type);
  24. JavascriptStringObject(JavascriptString* value, DynamicType * type);
  25. void Initialize(JavascriptString* value);
  26. JavascriptString* Unwrap() { return InternalUnwrap(); }
  27. virtual bool HasReadOnlyPropertiesInvisibleToTypeHandler() override { return true; }
  28. virtual DescriptorFlags GetItemSetter(uint32 index, Var* setterValue, ScriptContext* requestContext) override;
  29. virtual PropertyQueryFlags HasPropertyQuery(PropertyId propertyId, _Inout_opt_ PropertyValueInfo* info) override;
  30. virtual BOOL IsConfigurable(PropertyId propertyId) override;
  31. virtual BOOL IsEnumerable(PropertyId propertyId) override;
  32. virtual BOOL IsWritable(PropertyId propertyId) override;
  33. virtual PropertyQueryFlags GetPropertyQuery(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override;
  34. virtual PropertyQueryFlags GetPropertyQuery(Var originalInstance, JavascriptString* propertyNameString, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override;
  35. virtual PropertyQueryFlags GetPropertyReferenceQuery(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext) override;
  36. virtual BOOL SetProperty(PropertyId propertyId, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override;
  37. virtual BOOL SetProperty(JavascriptString* propertyNameString, Var value, PropertyOperationFlags flags, PropertyValueInfo* info) override;
  38. virtual BOOL DeleteProperty(PropertyId propertyId, PropertyOperationFlags flags) override;
  39. virtual BOOL DeleteProperty(JavascriptString *propertyNameString, PropertyOperationFlags flags) override;
  40. virtual DescriptorFlags GetSetter(PropertyId propertyId, Var* setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override;
  41. virtual DescriptorFlags GetSetter(JavascriptString* propertyNameString, Var* setterValue, PropertyValueInfo* info, ScriptContext* requestContext) override;
  42. virtual PropertyQueryFlags HasItemQuery(uint32 index) override;
  43. virtual PropertyQueryFlags GetItemQuery(Var originalInstance, uint32 index, Var* value, ScriptContext * requestContext) override;
  44. virtual PropertyQueryFlags GetItemReferenceQuery(Var originalInstance, uint32 index, Var* value, ScriptContext * requestContext) override;
  45. virtual BOOL SetItem(uint32 index, Var value, PropertyOperationFlags flags) override;
  46. virtual BOOL GetEnumerator(JavascriptStaticEnumerator * enumerator, EnumeratorFlags flags, ScriptContext* requestContext, EnumeratorCache * enumeratorCache = nullptr) override;
  47. virtual BOOL GetDiagValueString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
  48. virtual BOOL GetDiagTypeString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
  49. virtual BOOL GetSpecialPropertyName(uint32 index, JavascriptString ** propertyName, ScriptContext * requestContext) override;
  50. virtual uint GetSpecialPropertyCount() const override;
  51. virtual PropertyId const * GetSpecialPropertyIds() const override;
  52. #if ENABLE_TTD
  53. public:
  54. void SetValue_TTD(Js::Var val);
  55. virtual void MarkVisitKindSpecificPtrs(TTD::SnapshotExtractor* extractor) override;
  56. virtual TTD::NSSnapObjects::SnapObjectType GetSnapTag_TTD() const override;
  57. virtual void ExtractSnapObjectDataInto(TTD::NSSnapObjects::SnapObject* objData, TTD::SlabAllocator& alloc) override;
  58. #endif
  59. };
  60. template <> inline bool VarIsImpl<JavascriptStringObject>(RecyclableObject* obj)
  61. {
  62. return JavascriptOperators::GetTypeId(obj) == TypeIds_StringObject;
  63. }
  64. }