| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- #pragma once
- namespace Js
- {
- // Create a string literal from a C++ string (const char16 array with compile-time determined size)
- // Note: The template arg is the string length in characters, including the NUL terminator.
- template< size_t N > JavascriptString* JavascriptLibrary::CreateStringFromCppLiteral(const char16(&value)[N]) const
- {
- CompileAssert(N>2); // Other values are handled by the specializations below
- return LiteralString::New(GetStringTypeStatic(), value, N - 1 /*don't include terminating NUL*/, this->GetRecycler());
- }
- // Specialization for the empty string
- template<> inline JavascriptString* JavascriptLibrary::CreateStringFromCppLiteral(const char16(&value)[1]) const
- {
- return GetEmptyString();
- }
-
- // Specialization for single-char strings
- template<> inline JavascriptString* JavascriptLibrary::CreateStringFromCppLiteral(const char16(&value)[2]) const
- {
- return charStringCache.GetStringForChar(value[0]);
- }
- template <size_t N>
- JavascriptFunction * JavascriptLibrary::AddFunctionToLibraryObjectWithPropertyName(DynamicObject* object, const char16(&propertyName)[N], FunctionInfo * functionInfo, int length)
- {
- // The PID need to be tracked because it is assigned to the runtime function's nameId
- return AddFunctionToLibraryObject(object, scriptContext->GetOrAddPropertyIdTracked(propertyName), functionInfo, length);
- }
- inline void JavascriptLibrary::CheckAndInvalidateIsConcatSpreadableCache(PropertyId propertyId, ScriptContext *scriptContext)
- {
- if (!PHASE_OFF1(IsConcatSpreadableCachePhase) && propertyId == PropertyIds::_symbolIsConcatSpreadable)
- {
- OUTPUT_TRACE(Phase::IsConcatSpreadableCachePhase, _u("IsConcatSpreadableCache invalidated\n"));
- scriptContext->GetThreadContext()->GetIsConcatSpreadableCache()->Invalidate();
- }
- }
- #if ENABLE_COPYONACCESS_ARRAY
- template <>
- inline void JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(const Var instance)
- {
- if (instance )
- {
- JavascriptCopyOnAccessNativeIntArray * copyOnAccessArray = JavascriptOperators::TryFromVar<JavascriptCopyOnAccessNativeIntArray>(instance);
- if (copyOnAccessArray)
- {
- copyOnAccessArray->ConvertCopyOnAccessSegment();
- }
- }
- }
- template <typename T>
- void JavascriptLibrary::CheckAndConvertCopyOnAccessNativeIntArray(const T instance)
- {
- // dummy template function
- }
- #endif
- }
|