JavascriptBoolean.h 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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 JavascriptBoolean sealed : public RecyclableObject
  9. {
  10. private:
  11. Field(BOOL) value;
  12. DEFINE_VTABLE_CTOR(JavascriptBoolean, RecyclableObject);
  13. public:
  14. JavascriptBoolean(BOOL val, StaticType * type) : RecyclableObject(type), value(val)
  15. {
  16. Assert(type->GetTypeId() == TypeIds_Boolean);
  17. }
  18. inline BOOL GetValue() { return value; }
  19. static Var ToVar(BOOL fValue,ScriptContext* scriptContext);
  20. class EntryInfo
  21. {
  22. public:
  23. static FunctionInfo NewInstance;
  24. static FunctionInfo ValueOf;
  25. static FunctionInfo ToString;
  26. };
  27. static Var NewInstance(RecyclableObject* function, CallInfo callInfo, ...);
  28. static Var EntryValueOf(RecyclableObject* function, CallInfo callInfo, ...);
  29. static Var EntryToString(RecyclableObject* function, CallInfo callInfo, ...);
  30. static Var OP_LdTrue(ScriptContext* scriptContext);
  31. static Var OP_LdFalse(ScriptContext* scriptContext);
  32. virtual BOOL Equals(Var other, BOOL* value, ScriptContext * requestContext) override;
  33. virtual BOOL GetDiagValueString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
  34. virtual BOOL GetDiagTypeString(StringBuilder<ArenaAllocator>* stringBuilder, ScriptContext* requestContext) override;
  35. virtual RecyclableObject* ToObject(ScriptContext * requestContext) override;
  36. virtual Var GetTypeOfString(ScriptContext * requestContext) override;
  37. // should never be called, JavascriptConversion::ToPrimitive() short-circuits and returns input value
  38. virtual BOOL ToPrimitive(JavascriptHint hint, Var* value, ScriptContext* requestContext) override {AssertMsg(false, "Boolean ToPrimitive should not be called"); *value = this; return true;}
  39. virtual RecyclableObject * CloneToScriptContext(ScriptContext* requestContext) override;
  40. public:
  41. virtual VTableValue DummyVirtualFunctionToHinderLinkerICF()
  42. {
  43. return VTableValue::VtableJavascriptBoolean;
  44. }
  45. private:
  46. static BOOL Equals(JavascriptBoolean* left, Var right, BOOL* value, ScriptContext * requestContext);
  47. static Var TryInvokeRemotelyOrThrow(JavascriptMethod entryPoint, ScriptContext * scriptContext, Arguments & args, int32 errorCode, PCWSTR varName);
  48. };
  49. template <> inline bool VarIsImpl<JavascriptBoolean>(RecyclableObject* obj)
  50. {
  51. return JavascriptOperators::GetTypeId(obj) == TypeIds_Boolean;
  52. }
  53. }