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 21 namespace ark::es2panda::checker { 22 class CastingContext { 23 public: 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 38 private: 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