sO cgetOrCall(O c, S name) { c = derefRef(c); O o; if (hasMethod(c, name)) o = ccall(c, name); else o = getOpt(c, name); ret derefRef(o); } sO mapMethodLike cgetOrCall(S name, O c) { ret cgetOrCall(c, name); }