blob: c719e60eb25d6187ad2f16a92c2d202a33d53014 [file]
//-------------------------------------------------------------------------------------------------------
// 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
{
template <typename StringType>
inline void JavascriptString::Copy(__out_ecount(bufLen) char16 *const buffer, const charcount_t bufLen)
{
Assert(buffer);
charcount_t stringLen = this->GetLength();
Assert(stringLen == m_charLength);
if (bufLen < stringLen)
{
Throw::InternalError();
}
if (IsFinalized())
{
CopyHelper(buffer, GetString(), stringLen);
return;
}
// Copy everything except nested string trees into the buffer. Collect nested string trees and the buffer locations
// where they need to be copied, and copy them at the end. This is done to avoid excessive recursion during the copy.
StringCopyInfoStack nestedStringTreeCopyInfos(GetScriptContext());
((StringType *)this)->StringType::CopyVirtual(buffer, nestedStringTreeCopyInfos, 0);
FinishCopy(buffer, nestedStringTreeCopyInfos);
}
} // namespace Js