Lines Matching defs:node
183 void AssignAnalyzer::Analyze(const ir::AstNode *node)
193 AnalyzeNodes(node);
197 node->Start());
213 void AssignAnalyzer::AnalyzeNodes(const ir::AstNode *node)
215 node->Iterate([this](auto *childNode) { AnalyzeNode(childNode); });
218 void AssignAnalyzer::AnalyzeNode(const ir::AstNode *node)
220 if (node == nullptr) {
225 if (AnalyzeStmtNode1(node) || AnalyzeStmtNode2(node) || AnalyzeExprNode1(node) || AnalyzeExprNode2(node)) {
229 switch (node->Type()) {
231 AnalyzeStructDecl(node->AsETSStructDeclaration());
235 AnalyzeClassDecl(node->AsClassDeclaration());
239 AnalyzeClassDef(node->AsClassDefinition());
243 AnalyzeMethodDef(node->AsMethodDefinition());
247 AnalyzeVarDef(node->AsVariableDeclaration());
251 AnalyzeNodes(node);
252 if (node->IsExpression()) {
262 bool AssignAnalyzer::AnalyzeStmtNode1(const ir::AstNode *node)
264 switch (node->Type()) {
266 AnalyzeNode(node->AsExpressionStatement()->GetExpression());
270 AnalyzeBlock(node->AsBlockStatement());
274 AnalyzeDoLoop(node->AsDoWhileStatement());
278 AnalyzeWhileLoop(node->AsWhileStatement());
282 AnalyzeForLoop(node->AsForUpdateStatement());
286 AnalyzeForOfLoop(node->AsForOfStatement());
290 AnalyzeIf(node->AsIfStatement());
300 bool AssignAnalyzer::AnalyzeStmtNode2(const ir::AstNode *node)
302 switch (node->Type()) {
304 AnalyzeLabelled(node->AsLabelledStatement());
308 AnalyzeSwitch(node->AsSwitchStatement());
312 AnalyzeTry(node->AsTryStatement());
316 AnalyzeBreak(node->AsBreakStatement());
320 AnalyzeContinue(node->AsContinueStatement());
324 AnalyzeReturn(node->AsReturnStatement());
328 AnalyzeThrow(node->AsThrowStatement());
332 AnalyzeAssert(node->AsAssertStatement());
342 bool AssignAnalyzer::AnalyzeExprNode1(const ir::AstNode *node)
344 switch (node->Type()) {
346 AnalyzeNewClass(node->AsETSNewClassInstanceExpression());
350 AnalyzeCallExpr(node->AsCallExpression());
354 AnalyzeId(node->AsIdentifier());
358 AnalyzeAssignExpr(node->AsAssignmentExpression());
362 AnalyzeCondExpr(node->AsConditionalExpression());
366 AnalyzeMemberExpr(node->AsMemberExpression());
376 bool AssignAnalyzer::AnalyzeExprNode2(const ir::AstNode *node)
378 switch (node->Type()) {
380 AnalyzeBinaryExpr(node->AsBinaryExpression());
384 AnalyzeUnaryExpr(node->AsUnaryExpression());
388 AnalyzeUpdateExpr(node->AsUpdateExpression());
392 AnalyzeArrowFunctionExpr(node->AsArrowFunctionExpression());
402 void AssignAnalyzer::AnalyzeStat(const ir::AstNode *node)
404 if (node == nullptr) {
408 AnalyzeNode(node);
550 static bool IsInitialConstructor(const ir::AstNode *node)
552 if (!node->IsMethodDefinition() || !node->AsMethodDefinition()->IsConstructor()) {
556 const auto methodDef = node->AsMethodDefinition();
561 const auto funcBody = node->AsMethodDefinition()->Function()->Body()->AsBlockStatement();
988 void AssignAnalyzer::AnalyzeExpr(const ir::AstNode *node)
990 if (node != nullptr) {
991 AnalyzeNode(node);
1005 void AssignAnalyzer::AnalyzeCond(const ir::AstNode *node)
1007 ASSERT(node->IsExpression());
1008 const ir::Expression *expr = node->AsExpression();
1032 AnalyzeNode(node);
1076 static bool IsIdentOrThisDotIdent(const ir::AstNode *node)
1078 return node->IsIdentifier() ||
1079 (node->IsMemberExpression() && node->AsMemberExpression()->Object()->IsThisExpression());
1228 util::StringView AssignAnalyzer::GetVariableType(const ir::AstNode *node) const
1230 switch (node->Type()) {
1232 if (node->AsClassProperty()->Parent() == globalClass_) {
1244 util::StringView AssignAnalyzer::GetVariableName(const ir::AstNode *node) const
1246 switch (node->Type()) {
1248 return node->AsClassProperty()->Id()->Name();
1250 return node->AsVariableDeclarator()->Id()->AsIdentifier()->Name();
1256 const lexer::SourcePosition &AssignAnalyzer::GetVariablePosition(const ir::AstNode *node) const
1258 switch (node->Type()) {
1260 return node->AsClassProperty()->Key()->Start();
1263 return node->Start();
1267 NodeId AssignAnalyzer::GetNodeId(const ir::AstNode *node) const
1269 auto res = nodeIdMap_.find(node);
1276 bool AssignAnalyzer::Trackable(const ir::AstNode *node) const
1278 switch (node->Type()) {
1287 bool AssignAnalyzer::IsConstUninitializedField(const ir::AstNode *node) const
1289 return node->IsClassProperty() && node->IsConst();
1292 bool AssignAnalyzer::IsConstUninitializedStaticField(const ir::AstNode *node) const
1294 return IsConstUninitializedField(node) && node->IsStatic();
1297 void AssignAnalyzer::NewVar(const ir::AstNode *node)
1299 if (!Trackable(node)) {
1303 if (GetNodeId(node) != INVALID_ID) {
1307 nodeIdMap_[node] = nextAdr_;
1309 varDecls_.insert(varDecls_.begin() + nextAdr_, node);
1315 varbinder::Variable *AssignAnalyzer::GetBoundVariable(const ir::AstNode *node)
1319 if (node->IsClassProperty()) {
1320 ret = node->AsClassProperty()->Id()->Variable();
1321 } else if (node->IsVariableDeclarator()) {
1322 ret = node->AsVariableDeclarator()->Id()->AsIdentifier()->Variable();
1330 const ir::AstNode *AssignAnalyzer::GetDeclaringNode(const ir::AstNode *node)
1332 if (node->IsClassProperty() || node->IsVariableDeclarator()) {
1333 return node;
1338 if (node->IsMemberExpression()) {
1339 const ir::MemberExpression *membExpr = node->AsMemberExpression();
1345 } else if (node->IsIdentifier()) {
1346 const ir::Identifier *id = node->AsIdentifier();
1364 bool AssignAnalyzer::VariableHasDefaultValue(const ir::AstNode *node)
1366 ASSERT(node != nullptr);
1371 if (node->IsClassProperty()) {
1372 type = node->AsClassProperty()->TsType();
1373 isNonReadonlyField = !node->IsReadonly(); // NOTE(pantos) readonly is true, const is not set?
1374 } else if (node->IsVariableDeclarator()) {
1375 varbinder::Variable *variable = GetBoundVariable(node);
1389 void AssignAnalyzer::LetInit(const ir::AstNode *node)
1391 const ir::AstNode *declNode = GetDeclaringNode(node);
1402 if (node != declNode && declNode->IsConst()) {
1406 const lexer::SourcePosition &pos = GetVariablePosition(node);
1429 void AssignAnalyzer::CheckInit(const ir::AstNode *node)
1431 const ir::AstNode *declNode = GetDeclaringNode(node);
1472 const lexer::SourcePosition &pos = GetVariablePosition(node);
1475 if (node->IsClassProperty()) {