| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- //-------------------------------------------------------------------------------------------------------
- // Copyright (C) Microsoft. All rights reserved.
- // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
- //-------------------------------------------------------------------------------------------------------
- #include "RuntimeLibraryPch.h"
- namespace Js
- {
- JavascriptArray* JavascriptRegularExpressionResult::Create(
- void *const stackAllocationPointer,
- JavascriptString* input,
- ScriptContext* const scriptContext)
- {
- JavascriptArray* arr = JavascriptArray::New<JavascriptArray, InlineSlotCount>(stackAllocationPointer, 0, scriptContext->GetLibrary()->GetRegexResultType()); // use default array capacity
- Assert(JavascriptRegularExpressionResult::Is(arr));
- arr->SetSlot(SetSlotArguments(BuiltInPropertyRecords::input.propertyRecord.GetPropertyId(), InputIndex, input));
- // SetMatch must be called with a valid match before the object is given to script code
- // Each item will be filled in by the match loop
- return arr;
- }
- JavascriptArray* JavascriptRegularExpressionResult::Create(
- void *const stackAllocationPointer,
- const int numGroups,
- JavascriptString* input,
- ScriptContext* const scriptContext)
- {
- Assert(numGroups > 0);
- JavascriptArray* arr = JavascriptArray::NewLiteral<JavascriptArray, InlineSlotCount>(stackAllocationPointer, numGroups, scriptContext->GetLibrary()->GetRegexResultType());
- Assert(JavascriptRegularExpressionResult::Is(arr));
- arr->SetSlot(SetSlotArguments(BuiltInPropertyRecords::input.propertyRecord.GetPropertyId(), InputIndex, input));
- // SetMatch must be called with a valid match before the object is given to script code
- // Each item will be filled in by the match loop
- return arr;
- }
- #if DEBUG
- //
- // Check if a given JavascriptArray is actually JavascriptRegularExpressionResult.
- //
- bool JavascriptRegularExpressionResult::Is(JavascriptArray* arr)
- {
- return arr->GetPropertyIndex(PropertyIds::input) == InputIndex
- && arr->GetPropertyIndex(PropertyIds::index) == IndexIndex;
- }
- #endif
- void JavascriptRegularExpressionResult::SetMatch(JavascriptArray* arr, const UnifiedRegex::GroupInfo match)
- {
- Assert(JavascriptRegularExpressionResult::Is(arr));
- Assert(!match.IsUndefined());
- ScriptContext* scriptContext = arr->GetScriptContext();
- arr->SetSlot(SetSlotArguments(BuiltInPropertyRecords::index.propertyRecord.GetPropertyId(), IndexIndex, JavascriptNumber::ToVar(match.offset, scriptContext)));
- }
- void JavascriptRegularExpressionResult::InstantiateForceInlinedMembers()
- {
- // Force-inlined functions defined in a translation unit need a reference from an extern non-force-inlined function in
- // the same translation unit to force an instantiation of the force-inlined function. Otherwise, if the force-inlined
- // function is not referenced in the same translation unit, it will not be generated and the linker is not able to find
- // the definition to inline the function in other translation units.
- Assert(false);
- Create(nullptr, nullptr, nullptr);
- Create(nullptr, 0, nullptr, nullptr);
- }
- CompileAssert(JavascriptRegularExpressionResult::InlineSlotCount >= 2);
- }
|