blob: 8cb20d7807d093a9f6eb49e28b5e5094fb60ee5f [file]
//-------------------------------------------------------------------------------------------------------
// Copyright (C) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
//-------------------------------------------------------------------------------------------------------
#include "Backend.h"
int
DefaultComparer<CaseNode *>::Compare(CaseNode* caseNode1, CaseNode* caseNode2)
{
int caseVal1 = caseNode1->GetUpperBoundIntConst();
int caseVal2 = caseNode2->GetUpperBoundIntConst();
uint32 caseOffset1 = caseNode1->GetOffset();
uint32 caseOffset2 = caseNode2->GetOffset();
if (caseVal1 == caseVal2)
{
return caseOffset1 - caseOffset2;
}
if (caseVal1 > caseVal2) return 1;
return -1;
}
bool
DefaultComparer<CaseNode *>::Equals(CaseNode * caseNode1, CaseNode* caseNode2)
{
if(caseNode1->IsUpperBoundIntConst() && caseNode2->IsUpperBoundIntConst())
{
int caseVal1 = caseNode1->GetUpperBoundIntConst();
int caseVal2 = caseNode2->GetUpperBoundIntConst();
return caseVal1 == caseVal2;
}
else if(caseNode1->IsUpperBoundStrConst() && caseNode2->IsUpperBoundStrConst())
{
JITJavascriptString * caseVal1 = caseNode1->GetUpperBoundStrConst();
JITJavascriptString * caseVal2 = caseNode2->GetUpperBoundStrConst();
return JITJavascriptString::Equals(caseVal1, caseVal2);
}
else
{
AssertMsg(false, "Should not reach here. CaseNodes should store only string or integer case values");
return false;
}
}
uint
DefaultComparer<CaseNode *>::GetHashCode(CaseNode* caseNode)
{
return (uint)caseNode->GetUpperBoundIntConst();
}