JavascriptSymbol.h 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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 JavascriptSymbol sealed : public RecyclableObject
  9. {
  10. private:
  11. Field(PropertyRecordUsageCache) propertyRecordUsageCache;
  12. DEFINE_VTABLE_CTOR(JavascriptSymbol, RecyclableObject);
  13. public:
  14. JavascriptSymbol(const PropertyRecord* val, StaticType* type) :
  15. RecyclableObject(type),
  16. propertyRecordUsageCache(type, val)
  17. {
  18. Assert(type->GetTypeId() == TypeIds_Symbol);
  19. }
  20. const PropertyRecord* GetValue() { return propertyRecordUsageCache.GetPropertyRecord(); }
  21. PropertyRecordUsageCache * GetPropertyRecordUsageCache();
  22. static uint32 GetOffsetOfLdElemInlineCache() { return offsetof(JavascriptSymbol, propertyRecordUsageCache) + PropertyRecordUsageCache::GetOffsetOfLdElemInlineCache(); }
  23. static uint32 GetOffsetOfStElemInlineCache() { return offsetof(JavascriptSymbol, propertyRecordUsageCache) + PropertyRecordUsageCache::GetOffsetOfStElemInlineCache(); }
  24. static uint32 GetOffsetOfHitRate() { return offsetof(JavascriptSymbol, propertyRecordUsageCache) + PropertyRecordUsageCache::GetOffsetOfHitRate(); }
  25. static bool Is(Var aValue);
  26. static JavascriptSymbol* FromVar(Var aValue);
  27. static JavascriptSymbol* UnsafeFromVar(Var aValue);
  28. class EntryInfo
  29. {
  30. public:
  31. static FunctionInfo NewInstance;
  32. static FunctionInfo ValueOf;
  33. static FunctionInfo ToString;
  34. static FunctionInfo For;
  35. static FunctionInfo KeyFor;
  36. static FunctionInfo SymbolToPrimitive;
  37. };
  38. static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...);
  39. static Var EntryValueOf(RecyclableObject* function, CallInfo callInfo, ...);
  40. static Var EntryToString(RecyclableObject* function, CallInfo callInfo, ...);
  41. static Var EntryFor(RecyclableObject* function, CallInfo callInfo, ...);
  42. static Var EntryKeyFor(RecyclableObject* function, CallInfo callInfo, ...);
  43. static Var EntrySymbolToPrimitive(RecyclableObject* function, CallInfo callInfo, ...);
  44. virtual BOOL Equals(Var other, BOOL* value, ScriptContext * requestContext) override;
  45. virtual BOOL GetDiagValueString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
  46. virtual BOOL GetDiagTypeString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
  47. virtual RecyclableObject* ToObject(ScriptContext * requestContext) override;
  48. virtual Var GetTypeOfString(ScriptContext * requestContext) override;
  49. virtual BOOL ToPrimitive(JavascriptHint hint, Var* value, ScriptContext* requestContext) override { AssertMsg(false, "Symbol ToPrimitive should never be called, JavascriptConversion::ToPrimitive() short-circuits and returns input value"); *value = this; return true; }
  50. virtual RecyclableObject * CloneToScriptContext(ScriptContext* requestContext) override;
  51. JavascriptString* ToString(ScriptContext * requestContext);
  52. static JavascriptString* ToString(const PropertyRecord* propertyRecord, ScriptContext * requestContext);
  53. private:
  54. static BOOL Equals(JavascriptSymbol* left, Var right, BOOL* value, ScriptContext * requestContext);
  55. static Var TryInvokeRemotelyOrThrow(JavascriptMethod entryPoint, ScriptContext * scriptContext, Arguments & args, int32 errorCode, PCWSTR varName);
  56. };
  57. }