Why on earth does CannotHaveAttrs throw an exception on setPos but not pos_=, while throwing an exception on tpe_= but not setType? Why does tpe_= allow for NoType, but setPos doesn''t allow for NoPosition? I'd have a better chance at predicting keno numbers than I would at working out this logic.

Is there some occasion where you will be glad to have called setPos on emptyValDef and brought about an exception? If there isn't, why does every call site have to guard against emptyValDef?