Skip to content

Commit

Permalink
Merge pull request #6166 from WalterBright/refactor-arrayHas
Browse files Browse the repository at this point in the history
refactor arrayHasNonConstPointers() in init.d
  • Loading branch information
dnadlinger committed Oct 1, 2016
2 parents 45cf2e0 + cf2db76 commit 0735a4c
Showing 1 changed file with 15 additions and 16 deletions.
31 changes: 15 additions & 16 deletions src/init.d
Expand Up @@ -1040,29 +1040,39 @@ version (all)
{
extern (C++) bool hasNonConstPointers(Expression e)
{
static bool checkArray(Expressions* elems)
{
foreach (e; *elems)
{
if (e && hasNonConstPointers(e))
return true;
}
return false;
}

if (e.type.ty == Terror)
return false;
if (e.op == TOKnull)
return false;
if (e.op == TOKstructliteral)
{
StructLiteralExp se = cast(StructLiteralExp)e;
return arrayHasNonConstPointers(se.elements);
return checkArray(se.elements);
}
if (e.op == TOKarrayliteral)
{
if (!e.type.nextOf().hasPointers())
return false;
ArrayLiteralExp ae = cast(ArrayLiteralExp)e;
return arrayHasNonConstPointers(ae.elements);
return checkArray(ae.elements);
}
if (e.op == TOKassocarrayliteral)
{
AssocArrayLiteralExp ae = cast(AssocArrayLiteralExp)e;
if (ae.type.nextOf().hasPointers() && arrayHasNonConstPointers(ae.values))
if (ae.type.nextOf().hasPointers() && checkArray(ae.values))
return true;
if ((cast(TypeAArray)ae.type).index.hasPointers())
return arrayHasNonConstPointers(ae.keys);
return checkArray(ae.keys);
return false;
}
if (e.op == TOKaddress)
Expand All @@ -1075,7 +1085,7 @@ version (all)
{
int old = se.stageflags;
se.stageflags |= stageSearchPointers;
bool ret = arrayHasNonConstPointers(se.elements);
bool ret = checkArray(se.elements);
se.stageflags = old;
return ret;
}
Expand All @@ -1098,15 +1108,4 @@ version (all)
}
return false;
}

extern (C++) bool arrayHasNonConstPointers(Expressions* elems)
{
for (size_t i = 0; i < elems.dim; i++)
{
Expression e = (*elems)[i];
if (e && hasNonConstPointers(e))
return true;
}
return false;
}
}

0 comments on commit 0735a4c

Please sign in to comment.