Support '{} assignment pattern on arrays, bug355.

This commit is contained in:
Wilson Snyder
2014-03-30 20:41:20 -04:00
parent 6e3e8318d0
commit 446b0e4e5e
7 changed files with 132 additions and 14 deletions
+16
View File
@@ -408,6 +408,22 @@ class SliceVisitor : public AstNVisitor {
virtual void visit(AstNodeAssign* nodep, AstNUser*) {
if (!nodep->user1()) {
// Cleanup initArrays
if (AstInitArray* initp = nodep->rhsp()->castInitArray()) {
//if (debug()>=9) nodep->dumpTree(cout, "-InitArrayIn: ");
AstNode* newp = NULL;
int index = 0;
while (AstNode* subp=initp->initsp()) {
AstNode* lhsp = new AstArraySel(nodep->fileline(),
nodep->lhsp()->cloneTree(false),
index++);
newp = newp->addNext(nodep->cloneType(lhsp, subp->unlinkFrBack()));
}
//if (debug()>=9) newp->dumpTreeAndNext(cout, "-InitArrayOut: ");
nodep->replaceWith(newp);
pushDeletep(nodep); nodep=NULL;
return; // WIll iterate in a moment
}
// Hasn't been searched for implicit slices yet
findImplicit(nodep);
}