JavascriptSymbol.h 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. const PropertyRecord* value;
  12. DEFINE_VTABLE_CTOR(JavascriptSymbol, RecyclableObject);
  13. public:
  14. JavascriptSymbol(const PropertyRecord* val, StaticType* type) : RecyclableObject(type), value(val)
  15. {
  16. Assert(type->GetTypeId() == TypeIds_Symbol);
  17. }
  18. const PropertyRecord* GetValue() { return value; }
  19. static bool Is(Var aValue);
  20. static JavascriptSymbol* FromVar(Var aValue);
  21. class EntryInfo
  22. {
  23. public:
  24. static FunctionInfo NewInstance;
  25. static FunctionInfo ValueOf;
  26. static FunctionInfo ToString;
  27. static FunctionInfo For;
  28. static FunctionInfo KeyFor;
  29. static FunctionInfo SymbolToPrimitive;
  30. };
  31. static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...);
  32. static Var EntryValueOf(RecyclableObject* function, CallInfo callInfo, ...);
  33. static Var EntryToString(RecyclableObject* function, CallInfo callInfo, ...);
  34. static Var EntryFor(RecyclableObject* function, CallInfo callInfo, ...);
  35. static Var EntryKeyFor(RecyclableObject* function, CallInfo callInfo, ...);
  36. static Var EntrySymbolToPrimitive(RecyclableObject* function, CallInfo callInfo, ...);
  37. virtual BOOL Equals(Var other, BOOL* value, ScriptContext * requestContext) override;
  38. virtual BOOL GetDiagValueString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
  39. virtual BOOL GetDiagTypeString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
  40. virtual RecyclableObject* ToObject(ScriptContext * requestContext) override;
  41. virtual Var GetTypeOfString(ScriptContext * requestContext) override;
  42. 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; }
  43. virtual RecyclableObject * CloneToScriptContext(ScriptContext* requestContext) override;
  44. JavascriptString* ToString(ScriptContext * requestContext);
  45. static JavascriptString* ToString(const PropertyRecord* propertyRecord, ScriptContext * requestContext);
  46. private:
  47. static BOOL Equals(JavascriptSymbol* left, Var right, BOOL* value, ScriptContext * requestContext);
  48. static Var TryInvokeRemotelyOrThrow(JavascriptMethod entryPoint, ScriptContext * scriptContext, Arguments & args, long errorCode, PCWSTR varName);
  49. };
  50. }