Skip to content

Commit

Permalink
Merge pull request #5128 from WalterBright/inlineScanRef
Browse files Browse the repository at this point in the history
refactor: use ref instead of pointer
  • Loading branch information
yebblies committed Sep 28, 2015
2 parents 983b184 + 7673462 commit 767efb7
Showing 1 changed file with 78 additions and 66 deletions.
144 changes: 78 additions & 66 deletions src/inline.d
Original file line number Diff line number Diff line change
Expand Up @@ -1205,7 +1205,7 @@ public:
}
if (s.exp)
{
inlineScan(&s.exp); // inline as an expression
inlineScan(s.exp); // inline as an expression
/* If there's a TOKcall at the top, then it failed to inline
* as an Expression. Try to inline as a Statement instead.
* Note that inline scanning of s.exp.e1 and s.exp.arguments was already done.
Expand All @@ -1219,77 +1219,77 @@ public:
{
for (size_t i = 0; i < s.statements.dim; i++)
{
inlineScan(&(*s.statements)[i]);
inlineScan((*s.statements)[i]);
}
}

override void visit(UnrolledLoopStatement s)
{
for (size_t i = 0; i < s.statements.dim; i++)
{
inlineScan(&(*s.statements)[i]);
inlineScan((*s.statements)[i]);
}
}

override void visit(ScopeStatement s)
{
inlineScan(&s.statement);
inlineScan(s.statement);
}

override void visit(WhileStatement s)
{
inlineScan(&s.condition);
inlineScan(&s._body);
inlineScan(s.condition);
inlineScan(s._body);
}

override void visit(DoStatement s)
{
inlineScan(&s._body);
inlineScan(&s.condition);
inlineScan(s._body);
inlineScan(s.condition);
}

override void visit(ForStatement s)
{
inlineScan(&s._init);
inlineScan(&s.condition);
inlineScan(&s.increment);
inlineScan(&s._body);
inlineScan(s._init);
inlineScan(s.condition);
inlineScan(s.increment);
inlineScan(s._body);
}

override void visit(ForeachStatement s)
{
inlineScan(&s.aggr);
inlineScan(&s._body);
inlineScan(s.aggr);
inlineScan(s._body);
}

override void visit(ForeachRangeStatement s)
{
inlineScan(&s.lwr);
inlineScan(&s.upr);
inlineScan(&s._body);
inlineScan(s.lwr);
inlineScan(s.upr);
inlineScan(s._body);
}

override void visit(IfStatement s)
{
inlineScan(&s.condition);
inlineScan(&s.ifbody);
inlineScan(&s.elsebody);
inlineScan(s.condition);
inlineScan(s.ifbody);
inlineScan(s.elsebody);
}

override void visit(SwitchStatement s)
{
//printf("SwitchStatement::inlineScan()\n");
inlineScan(&s.condition);
inlineScan(&s._body);
inlineScan(s.condition);
inlineScan(s._body);
Statement sdefault = s.sdefault;
inlineScan(&sdefault);
inlineScan(sdefault);
s.sdefault = cast(DefaultStatement)sdefault;
if (s.cases)
{
for (size_t i = 0; i < s.cases.dim; i++)
{
Statement scase = (*s.cases)[i];
inlineScan(&scase);
inlineScan(scase);
(*s.cases)[i] = cast(CaseStatement)scase;
}
}
Expand All @@ -1298,71 +1298,77 @@ public:
override void visit(CaseStatement s)
{
//printf("CaseStatement::inlineScan()\n");
inlineScan(&s.exp);
inlineScan(&s.statement);
inlineScan(s.exp);
inlineScan(s.statement);
}

override void visit(DefaultStatement s)
{
inlineScan(&s.statement);
inlineScan(s.statement);
}

override void visit(ReturnStatement s)
{
//printf("ReturnStatement::inlineScan()\n");
inlineScan(&s.exp);
inlineScan(s.exp);
}

override void visit(SynchronizedStatement s)
{
inlineScan(&s.exp);
inlineScan(&s._body);
inlineScan(s.exp);
inlineScan(s._body);
}

override void visit(WithStatement s)
{
inlineScan(&s.exp);
inlineScan(&s._body);
inlineScan(s.exp);
inlineScan(s._body);
}

override void visit(TryCatchStatement s)
{
inlineScan(&s._body);
inlineScan(s._body);
if (s.catches)
{
for (size_t i = 0; i < s.catches.dim; i++)
{
Catch c = (*s.catches)[i];
inlineScan(&c.handler);
inlineScan(c.handler);
}
}
}

override void visit(TryFinallyStatement s)
{
inlineScan(&s._body);
inlineScan(&s.finalbody);
inlineScan(s._body);
inlineScan(s.finalbody);
}

override void visit(ThrowStatement s)
{
inlineScan(&s.exp);
inlineScan(s.exp);
}

override void visit(LabelStatement s)
{
inlineScan(&s.statement);
inlineScan(s.statement);
}

void inlineScan(Statement* s)
/********************************
* Scan Statement s for inlining opportunities,
* and if found replace s with an inlined one.
* Params:
* s = Statement to be scanned and updated
*/
void inlineScan(ref Statement s)
{
if (!*s)
if (!s)
return;
assert(sresult is null);
(*s).accept(this);
s.accept(this);
if (sresult)
{
*s = sresult;
s = sresult;
sresult = null;
}
}
Expand All @@ -1374,7 +1380,7 @@ public:
{
for (size_t i = 0; i < arguments.dim; i++)
{
inlineScan(&(*arguments)[i]);
inlineScan((*arguments)[i]);
}
}
}
Expand Down Expand Up @@ -1403,7 +1409,7 @@ public:
{
if (ExpInitializer ie = vd._init.isExpInitializer())
{
inlineScan(&ie.exp);
inlineScan(ie.exp);
}
}
}
Expand All @@ -1421,19 +1427,19 @@ public:

override void visit(UnaExp e)
{
inlineScan(&e.e1);
inlineScan(e.e1);
}

override void visit(AssertExp e)
{
inlineScan(&e.e1);
inlineScan(&e.msg);
inlineScan(e.e1);
inlineScan(e.msg);
}

override void visit(BinExp e)
{
inlineScan(&e.e1);
inlineScan(&e.e2);
inlineScan(e.e1);
inlineScan(e.e2);
}

override void visit(AssignExp e)
Expand All @@ -1459,9 +1465,9 @@ public:
/* Inlining:
* this.field = foo(); // inside constructor
*/
inlineScan(&e.e1);
inlineScan(e.e1);
}
inlineScan(&ce.e1);
inlineScan(ce.e1);
arrayInlineScan(ce.arguments);
visitCallExp(ce, e.e1, false);
if (eresult)
Expand All @@ -1477,7 +1483,7 @@ public:

override void visit(CallExp e)
{
inlineScan(&e.e1);
inlineScan(e.e1);
arrayInlineScan(e.arguments);
visitCallExp(e, null, false);
}
Expand Down Expand Up @@ -1542,22 +1548,22 @@ public:

override void visit(SliceExp e)
{
inlineScan(&e.e1);
inlineScan(&e.lwr);
inlineScan(&e.upr);
inlineScan(e.e1);
inlineScan(e.lwr);
inlineScan(e.upr);
}

override void visit(TupleExp e)
{
//printf("TupleExp::inlineScan()\n");
inlineScan(&e.e0);
inlineScan(e.e0);
arrayInlineScan(e.exps);
}

override void visit(ArrayLiteralExp e)
{
//printf("ArrayLiteralExp::inlineScan()\n");
inlineScan(&e.basis);
inlineScan(e.basis);
arrayInlineScan(e.elements);
}

Expand All @@ -1582,26 +1588,32 @@ public:
override void visit(ArrayExp e)
{
//printf("ArrayExp::inlineScan()\n");
inlineScan(&e.e1);
inlineScan(e.e1);
arrayInlineScan(e.arguments);
}

override void visit(CondExp e)
{
inlineScan(&e.econd);
inlineScan(&e.e1);
inlineScan(&e.e2);
inlineScan(e.econd);
inlineScan(e.e1);
inlineScan(e.e2);
}

void inlineScan(Expression* e)
/********************************
* Scan Expression e for inlining opportunities,
* and if found replace e with an inlined one.
* Params:
* e = Expression to be scanned and updated
*/
void inlineScan(ref Expression e)
{
if (!*e)
if (!e)
return;
assert(eresult is null);
(*e).accept(this);
e.accept(this);
if (eresult)
{
*e = eresult;
e = eresult;
eresult = null;
}
}
Expand Down Expand Up @@ -1633,7 +1645,7 @@ public:
again = false;
fd.inlineNest++;
fd.flags |= FUNCFLAGinlineScanned;
inlineScan(&fd.fbody);
inlineScan(fd.fbody);
fd.inlineNest--;
}
while (again);
Expand Down

0 comments on commit 767efb7

Please sign in to comment.