//------------------------------------------------------------------------------------------------------- // 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::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::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::GetHashCode(CaseNode* caseNode) { return (uint)caseNode->GetUpperBoundIntConst(); }