         }
         if (cls != null)
             attr.unshift(cls);
-        return new constructors[tag](tag,attr);
+        return new constructors[tag](tag,attr,copyIfStack());
     }
 
     function parseNamedAttrs(s) {

        if (s.if_) fieldname += "!if!" + s.if_;
        if (s.ifdef) fieldname += "!ifdef!" + s.ifdef;
        if (s.ifndef) fieldname += "!ifndef!" + s.ifndef;
        if (isVariableLength(s)) {
            // FIXME: It would be good to loosen the following restriction up; it 
            // would be sufficient to decree that only one of the arrays can be 

    const ifdef;
    const ifndef;
    const if_;
    const cond;

    var fullClassPrefix=""; // for nested classes
    var out = new Printer(1);
