MCPcopy Create free account
hub / github.com/GaijinEntertainment/daScript / exprReturns

Function exprReturns

src/ast/ast_lint.cpp:48–85  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

46 }
47
48 bool exprReturns ( ExpressionPtr expr ) {
49 if ( expr->rtti_isReturn() ) {
50 return true;
51 } else if ( expr->rtti_isBlock() ) {
52 auto block = static_cast<ExprBlock*>(expr);
53 if ( hasLabels(block) ) {
54 // NOTE: block with labels assumed to always return for now. real world analysis is hard
55 return true;
56 } else {
57 for ( auto & be : block->list ) {
58 if ( be->rtti_isBreak() || be->rtti_isContinue() || be->rtti_isGoto() ) {
59 break;
60 }
61 if ( exprReturns(be) ) {
62 return true;
63 }
64 }
65 }
66 } else if ( expr->rtti_isIfThenElse() ) {
67 auto ite = static_cast<ExprIfThenElse*>(expr);
68 if ( ite->if_false ) {
69 return exprReturns(ite->if_true) && exprReturns(ite->if_false);
70 }
71 } else if ( expr->rtti_isWith() ) {
72 auto wth = static_cast<ExprWith*>(expr);
73 return exprReturns(wth->body);
74 } else if ( expr->rtti_isWhile() ) {
75 auto wh = static_cast<ExprWhile*>(expr);
76 return exprReturns(wh->body);
77 } else if ( expr->rtti_isFor() ) {
78 auto fr = static_cast<ExprFor*>(expr);
79 return exprReturns(fr->body);
80 } else if ( expr->rtti_isUnsafe() ) {
81 auto us = static_cast<ExprUnsafe*>(expr);
82 return exprReturns(us->body);
83 }
84 return false;
85 }
86
87 bool exprReturnsOrBreaks ( ExpressionPtr expr ) {
88 if ( expr->rtti_isReturn() ) {

Callers 2

exprReturnsOrBreaksFunction · 0.85
preVisitMethod · 0.85

Calls 1

hasLabelsFunction · 0.85

Tested by

no test coverage detected