1/* 2 * Copyright (c) 2021-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#ifndef ES2PANDA_COMPILER_CHECKER_ETS_CASTING_CONTEXT_H 17#define ES2PANDA_COMPILER_CHECKER_ETS_CASTING_CONTEXT_H 18 19#include "checker/types/typeRelation.h" 20 21namespace ark::es2panda::checker { 22class CastingContext { 23public: 24 // NOLINTBEGIN(cppcoreguidelines-pro-type-member-init) 25 struct ConstructorData { 26 ir::Expression *node; 27 checker::Type *source; 28 checker::Type *target; 29 lexer::SourcePosition const &pos; 30 TypeRelationFlag extraFlags = TypeRelationFlag::NONE; 31 }; 32 // NOLINTEND(cppcoreguidelines-pro-type-member-init) 33 34 CastingContext(TypeRelation *relation, std::initializer_list<TypeErrorMessageElement> list, ConstructorData &&data); 35 36 [[nodiscard]] bool UncheckedCast() const noexcept; 37 38private: 39 TypeRelationFlag flags_ {TypeRelationFlag::CASTING_CONTEXT | TypeRelationFlag::IN_CASTING_CONTEXT}; 40 bool uncheckedCast_ {true}; 41}; 42 43} // namespace ark::es2panda::checker 44 45#endif 46