static A ccopyFields_withConverter_pcall(Concept x, A y, S... fields) { if (x == null || y == null) ret y; if (empty(fields)) { // assume we should copy all fields for (S field : conceptFields(x)) pcall cSmartSetField_withConverter(y, field, cget(x, field)); } else for (S field : fields) { O o = cget(x, field); if (o != null) pcall cSmartSetField_withConverter(y, field, o); } ret y; }