Preconditions.checkArgument(pname.isIdentifier());
String pnameAsString = pname.getLeftmostName();
JSType reqObjType =
pickReqObjType(obj).withLoose().withProperty(pname, type);
LValueResultFwd lvalue = analyzeLValueFwd(obj, inEnv, reqObjType, true);
TypeEnv lvalueEnv = lvalue.env;
JSType lvalueType = lvalue.type;
if (!lvalueType.isSubtypeOf(JSType.TOP_OBJECT)) {
warnPropAccessOnNonobject(obj, pnameAsString, lvalueType);
return new LValueResultFwd(lvalueEnv, type, null, null);
}