super(AttrType.WHERE.find(attributes), type);
this.attributes = Util.asList(attributes);
Expr oneof = ExprUnary.Op.ONEOF.make(null, this);
ExprVar v = ExprVar.make(null, "this", oneof.type);
this.decl = new Decl(null, null, null, Util.asList(v), oneof);
Pos isAbstract=null, isLone=null, isOne=null, isSome=null, isSubsig=null, isSubset=null, isPrivate=null, isMeta=null, isEnum=null;
for(Attr a: attributes) if (a!=null) switch(a.type) {
case ABSTRACT: isAbstract = a.pos.merge(isAbstract); break;
case ENUM: isEnum = a.pos.merge(isEnum); break;
case LONE: isLone = a.pos.merge(isLone); break;
case META: isMeta = a.pos.merge(isMeta); break;