IntlEngineInterfaceExtensionObject.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. #ifdef ENABLE_INTL_OBJECT
  7. namespace Js
  8. {
  9. enum IntlInitializationType : USHORT
  10. {
  11. Intl = 0,
  12. StringPrototype,
  13. DatePrototype,
  14. NumberPrototype,
  15. Classifier
  16. };
  17. class IntlEngineInterfaceExtensionObject : public EngineExtensionObjectBase
  18. {
  19. public:
  20. IntlEngineInterfaceExtensionObject(ScriptContext* scriptContext);
  21. void Initialize();
  22. void InjectIntlLibraryCode(_In_ ScriptContext * scriptContext, DynamicObject* intlObject, IntlInitializationType intlInitializationType);
  23. JavascriptFunction* GetDateToLocaleString() { return dateToLocaleString; }
  24. JavascriptFunction* GetDateToLocaleTimeString() { return dateToLocaleTimeString; }
  25. JavascriptFunction* GetDateToLocaleDateString() { return dateToLocaleDateString; }
  26. JavascriptFunction* GetNumberToLocaleString() { return numberToLocaleString; }
  27. JavascriptFunction* GetStringLocaleCompare() { return stringLocaleCompare; }
  28. static bool __cdecl InitializeIntlNativeInterfaces(DynamicObject* intlNativeInterfaces, DeferredTypeHandlerBase * typeHandler, DeferredInitializeMode mode);
  29. #if DBG
  30. void DumpByteCode() override;
  31. #endif
  32. class EntryInfo
  33. {
  34. public:
  35. #ifdef INTL_ENTRY
  36. #undef INTL_ENTRY
  37. #endif
  38. #define INTL_ENTRY(id, func) \
  39. static NoProfileFunctionInfo Intl_##func##;
  40. #include "IntlExtensionObjectBuiltIns.h"
  41. #undef INTL_ENTRY
  42. };
  43. #ifdef INTL_ENTRY
  44. #undef INTL_ENTRY
  45. #endif
  46. #define INTL_ENTRY(id, func) \
  47. static Var EntryIntl_##func##(RecyclableObject* function, CallInfo callInfo, ...);
  48. #include "IntlExtensionObjectBuiltIns.h"
  49. #undef INTL_ENTRY
  50. private:
  51. Field(JavascriptFunction*) dateToLocaleTimeString;
  52. Field(JavascriptFunction*) dateToLocaleDateString;
  53. Field(JavascriptFunction*) numberToLocaleString;
  54. Field(JavascriptFunction*) stringLocaleCompare;
  55. Field(JavascriptFunction*) dateToLocaleString;
  56. Field(DynamicObject*) intlNativeInterfaces;
  57. Field(FunctionBody*) intlByteCode;
  58. Field(bool) wasInitialized;
  59. void EnsureIntlByteCode(_In_ ScriptContext * scriptContext);
  60. static void deletePrototypePropertyHelper(ScriptContext* scriptContext, DynamicObject* intlObject, Js::PropertyId objectPropertyId, Js::PropertyId getterFunctionId);
  61. #ifdef INTL_WINGLOB
  62. static WindowsGlobalizationAdapter* GetWindowsGlobalizationAdapter(_In_ ScriptContext*);
  63. static void prepareWithFractionIntegerDigits(ScriptContext* scriptContext, Windows::Globalization::NumberFormatting::INumberRounderOption* rounderOptions,
  64. Windows::Globalization::NumberFormatting::INumberFormatterOptions* formatterOptions, uint16 minFractionDigits, uint16 maxFractionDigits, uint16 minIntegerDigits);
  65. static void prepareWithSignificantDigits(ScriptContext* scriptContext, Windows::Globalization::NumberFormatting::INumberRounderOption* rounderOptions, Windows::Globalization::NumberFormatting::INumberFormatter *numberFormatter,
  66. Windows::Globalization::NumberFormatting::INumberFormatterOptions* formatterOptions, uint16 minSignificantDigits, uint16 maxSignificantDigits);
  67. #endif
  68. void cleanUpIntl(ScriptContext* scriptContext, DynamicObject* intlObject);
  69. };
  70. }
  71. #endif