1/* 2 * Copyright (c) 2024 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "everyChildInParentRange.h" 17 18namespace ark::es2panda::compiler::ast_verifier { 19 20CheckResult EveryChildInParentRange::operator()(CheckContext &ctx, const ir::AstNode *ast) 21{ 22 auto result = std::make_tuple(CheckDecision::CORRECT, CheckAction::CONTINUE); 23 if (ast->Parent() == nullptr) { 24 return result; 25 } 26 ast->Iterate([&](const ir::AstNode *node) { 27 if (ast != node->Parent()) { 28 result = {CheckDecision::INCORRECT, CheckAction::CONTINUE}; 29 } 30 if (ast->Start().line > node->Start().line || ast->End().line < node->End().line) { 31 result = {CheckDecision::INCORRECT, CheckAction::CONTINUE}; 32 } 33 if (ast->Start().line == node->Start().line && ast->Start().index > node->Start().index) { 34 result = {CheckDecision::INCORRECT, CheckAction::CONTINUE}; 35 } 36 if (ast->End().line == node->End().line && ast->End().index < node->End().index) { 37 result = {CheckDecision::INCORRECT, CheckAction::CONTINUE}; 38 } 39 ctx.AddCheckMessage("INCORRECT_CHILD_RANGE", *node, node->Start()); 40 }); 41 return result; 42} 43 44} // namespace ark::es2panda::compiler::ast_verifier 45