Statement *CompoundStatement::doInlineStatement(InlineDoState *ids) { //printf("CompoundStatement::doInlineStatement() %d\n", statements->dim); Statements *as = new Statements(); as->reserve(statements->dim); for (size_t i = 0; i < statements->dim; i++) { Statement *s = (*statements)[i]; if (s) { as->push(s->doInlineStatement(ids)); if (s->isReturnStatement()) break; /* Check for: * if (condition) * return exp1; * else * return exp2; */ IfStatement *ifs = s->isIfStatement(); if (ifs && ifs->elsebody && ifs->ifbody && ifs->ifbody->isReturnStatement() && ifs->elsebody->isReturnStatement() ) break; } else as->push(NULL); } return new CompoundStatement(loc, as); }
Statement *UnrolledLoopStatement::doInlineStatement(InlineDoState *ids) { //printf("UnrolledLoopStatement::doInlineStatement() %d\n", statements->dim); Statements *as = new Statements(); as->reserve(statements->dim); for (size_t i = 0; i < statements->dim; i++) { Statement *s = (*statements)[i]; if (s) { as->push(s->doInlineStatement(ids)); if (ids->foundReturn) break; } else as->push(NULL); } return new UnrolledLoopStatement(loc, as); }