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_CHECKER_SEMANTICANALYZER_H 17#define ES2PANDA_CHECKER_SEMANTICANALYZER_H 18 19#include "compiler/core/dynamicContext.h" 20#include "ir/opaqueTypeNode.h" 21#include "ir/as/namedType.h" 22#include "ir/as/prefixAssertionExpression.h" 23#include "ir/base/catchClause.h" 24#include "ir/base/classDefinition.h" 25#include "ir/base/classProperty.h" 26#include "ir/base/classStaticBlock.h" 27#include "ir/base/decorator.h" 28#include "ir/base/metaProperty.h" 29#include "ir/base/methodDefinition.h" 30#include "ir/base/property.h" 31#include "ir/base/scriptFunction.h" 32#include "ir/base/spreadElement.h" 33#include "ir/base/templateElement.h" 34#include "ir/base/tsIndexSignature.h" 35#include "ir/base/tsMethodSignature.h" 36#include "ir/base/tsPropertySignature.h" 37#include "ir/base/tsSignatureDeclaration.h" 38#include "ir/ets/etsClassLiteral.h" 39#include "ir/ets/etsFunctionType.h" 40#include "ir/ets/etsImportDeclaration.h" 41#include "ir/ets/etsLaunchExpression.h" 42#include "ir/ets/etsNewArrayInstanceExpression.h" 43#include "ir/ets/etsNewClassInstanceExpression.h" 44#include "ir/ets/etsNewMultiDimArrayInstanceExpression.h" 45#include "ir/ets/etsPackageDeclaration.h" 46#include "ir/ets/etsParameterExpression.h" 47#include "ir/ets/etsPrimitiveType.h" 48#include "ir/ets/etsScript.h" 49#include "ir/ets/etsStringLiteralType.h" 50#include "ir/ets/etsStructDeclaration.h" 51#include "ir/ets/etsTypeReference.h" 52#include "ir/ets/etsTypeReferencePart.h" 53#include "ir/ets/etsWildcardType.h" 54#include "ir/expressions/arrayExpression.h" 55#include "ir/expressions/arrowFunctionExpression.h" 56#include "ir/expressions/assignmentExpression.h" 57#include "ir/expressions/awaitExpression.h" 58#include "ir/expressions/binaryExpression.h" 59#include "ir/expressions/blockExpression.h" 60#include "ir/expressions/callExpression.h" 61#include "ir/expressions/chainExpression.h" 62#include "ir/expressions/classExpression.h" 63#include "ir/expressions/conditionalExpression.h" 64#include "ir/expressions/directEvalExpression.h" 65#include "ir/expressions/functionExpression.h" 66#include "ir/expressions/identifier.h" 67#include "ir/expressions/importExpression.h" 68#include "ir/expressions/memberExpression.h" 69#include "ir/expressions/newExpression.h" 70#include "ir/expressions/objectExpression.h" 71#include "ir/expressions/omittedExpression.h" 72#include "ir/expressions/sequenceExpression.h" 73#include "ir/expressions/superExpression.h" 74#include "ir/expressions/taggedTemplateExpression.h" 75#include "ir/expressions/templateLiteral.h" 76#include "ir/expressions/thisExpression.h" 77#include "ir/expressions/typeofExpression.h" 78#include "ir/expressions/unaryExpression.h" 79#include "ir/expressions/updateExpression.h" 80#include "ir/expressions/yieldExpression.h" 81#include "ir/expressions/literals/bigIntLiteral.h" 82#include "ir/expressions/literals/booleanLiteral.h" 83#include "ir/expressions/literals/charLiteral.h" 84#include "ir/expressions/literals/nullLiteral.h" 85#include "ir/expressions/literals/numberLiteral.h" 86#include "ir/expressions/literals/regExpLiteral.h" 87#include "ir/expressions/literals/stringLiteral.h" 88#include "ir/module/exportAllDeclaration.h" 89#include "ir/module/exportDefaultDeclaration.h" 90#include "ir/module/exportNamedDeclaration.h" 91#include "ir/module/exportSpecifier.h" 92#include "ir/module/importDeclaration.h" 93#include "ir/module/importDefaultSpecifier.h" 94#include "ir/module/importNamespaceSpecifier.h" 95#include "ir/module/importSpecifier.h" 96#include "ir/statements/assertStatement.h" 97#include "ir/statements/blockStatement.h" 98#include "ir/statements/breakStatement.h" 99#include "ir/statements/classDeclaration.h" 100#include "ir/statements/continueStatement.h" 101#include "ir/statements/debuggerStatement.h" 102#include "ir/statements/doWhileStatement.h" 103#include "ir/statements/emptyStatement.h" 104#include "ir/statements/expressionStatement.h" 105#include "ir/statements/forInStatement.h" 106#include "ir/statements/forOfStatement.h" 107#include "ir/statements/forUpdateStatement.h" 108#include "ir/statements/functionDeclaration.h" 109#include "ir/statements/ifStatement.h" 110#include "ir/statements/labelledStatement.h" 111#include "ir/statements/returnStatement.h" 112#include "ir/statements/switchCaseStatement.h" 113#include "ir/statements/switchStatement.h" 114#include "ir/statements/throwStatement.h" 115#include "ir/statements/tryStatement.h" 116#include "ir/statements/variableDeclaration.h" 117#include "ir/statements/variableDeclarator.h" 118#include "ir/statements/whileStatement.h" 119#include "ir/ts/tsAnyKeyword.h" 120#include "ir/ts/tsArrayType.h" 121#include "ir/ts/tsAsExpression.h" 122#include "ir/ts/tsBigintKeyword.h" 123#include "ir/ts/tsBooleanKeyword.h" 124#include "ir/ts/tsClassImplements.h" 125#include "ir/ts/tsConditionalType.h" 126#include "ir/ts/tsConstructorType.h" 127#include "ir/ts/tsEnumDeclaration.h" 128#include "ir/ts/tsEnumMember.h" 129#include "ir/ts/tsExternalModuleReference.h" 130#include "ir/ts/tsFunctionType.h" 131#include "ir/ts/tsImportEqualsDeclaration.h" 132#include "ir/ts/tsImportType.h" 133#include "ir/ts/tsIndexedAccessType.h" 134#include "ir/ts/tsInferType.h" 135#include "ir/ts/tsInterfaceBody.h" 136#include "ir/ts/tsInterfaceDeclaration.h" 137#include "ir/ts/tsInterfaceHeritage.h" 138#include "ir/ts/tsIntersectionType.h" 139#include "ir/ts/tsLiteralType.h" 140#include "ir/ts/tsMappedType.h" 141#include "ir/ts/tsModuleBlock.h" 142#include "ir/ts/tsModuleDeclaration.h" 143#include "ir/ts/tsNamedTupleMember.h" 144#include "ir/ts/tsNeverKeyword.h" 145#include "ir/ts/tsNonNullExpression.h" 146#include "ir/ts/tsNullKeyword.h" 147#include "ir/ts/tsNumberKeyword.h" 148#include "ir/ts/tsObjectKeyword.h" 149#include "ir/ts/tsParameterProperty.h" 150#include "ir/ts/tsParenthesizedType.h" 151#include "ir/ts/tsQualifiedName.h" 152#include "ir/ts/tsStringKeyword.h" 153#include "ir/ts/tsThisType.h" 154#include "ir/ts/tsTupleType.h" 155#include "ir/ts/tsTypeAliasDeclaration.h" 156#include "ir/ts/tsTypeAssertion.h" 157#include "ir/ts/tsTypeLiteral.h" 158#include "ir/ts/tsTypeOperator.h" 159#include "ir/ts/tsTypeParameterDeclaration.h" 160#include "ir/ts/tsTypeParameter.h" 161#include "ir/ts/tsTypeParameterInstantiation.h" 162#include "ir/ts/tsTypePredicate.h" 163#include "ir/ts/tsTypeQuery.h" 164#include "ir/ts/tsTypeReference.h" 165#include "ir/ts/tsUndefinedKeyword.h" 166#include "ir/ts/tsUnionType.h" 167#include "ir/ts/tsUnknownKeyword.h" 168#include "ir/ts/tsVoidKeyword.h" 169 170namespace ark::es2panda::checker { 171class Checker; 172 173class SemanticAnalyzer { 174public: 175 explicit SemanticAnalyzer(Checker *checker) 176 { 177 checker_ = checker; 178 } 179 virtual ~SemanticAnalyzer() = default; 180 NO_COPY_SEMANTIC(SemanticAnalyzer); 181 NO_MOVE_SEMANTIC(SemanticAnalyzer); 182 183// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 184#define DECLARE_AST_NODE_CHECK_METHOD(_, nodeType) virtual checker::Type *Check(ir::nodeType *node) const = 0; 185 AST_NODE_MAPPING(DECLARE_AST_NODE_CHECK_METHOD) 186#undef DECLARE_AST_NODE_CHECK_METHOD 187 188// NOLINTNEXTLINE(cppcoreguidelines-macro-usage) 189#define DECLARE_AST_NODE_CHECK_METHOD(_, __, nodeType, ___) virtual checker::Type *Check(ir::nodeType *node) const = 0; 190 AST_NODE_REINTERPRET_MAPPING(DECLARE_AST_NODE_CHECK_METHOD) 191#undef DECLARE_AST_NODE_CHECK_METHOD 192 193protected: 194 Checker *GetChecker() const 195 { 196 return checker_; 197 } 198 199private: 200 Checker *checker_; 201}; 202} // namespace ark::es2panda::checker 203 204#endif // ES2PANDA_CHECKER_SEMANTICANALYZER_H 205