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 170 namespace ark::es2panda::checker { 171 class Checker; 172 173 class SemanticAnalyzer { 174 public: SemanticAnalyzer(Checker *checker)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 193 protected: GetChecker() const194 Checker *GetChecker() const 195 { 196 return checker_; 197 } 198 199 private: 200 Checker *checker_; 201 }; 202 } // namespace ark::es2panda::checker 203 204 #endif // ES2PANDA_CHECKER_SEMANTICANALYZER_H 205