Commits

Ted Kremenek committed 04095fb5aa3
*Start* importing more availability information from the SDK. This is a WIP. This patch includes: - Adds version tuple information for 'introduced', 'deprecated', and 'obsoleted' to the 'availability' attribute. - Add Clang importer support to import __attribute__((availability)) version tuples into Swift as pieces of the 'availability' attribute. - Add serialization support for the 'availability' attribute with this extra information. This is not tested other than the tests currently passing. This is not expected to be really exercised (with interesting versions) until parsing support is added for the version tuples. However, existing @availability attributes in the test suite are being serialized, which should just include "empty" version information. What's not in this patch: - Parsing support in Swift for 'deprecated', 'introduced', or 'obsoleted'. All of this information is currently being pulled in from the Clang Importer. - Warning support for using deprecated declarations based on the availability information and the minimum deployment target. - Some harmony reconciling the 'IsUnavailable' field in AvailabilityAttr, which attempts to eagerly compute if something is unavailable so we don't have to replicate the checking logic elsewhere. The idea is that when we either import availability information or lazily deserialize it we can compute whether or not something is conditionally unavailable or deprecated right there, and not have to have all clients within the frontend of the availability information need to pass the minimum deployment target. Right now 'IsUnavailable' is also used to encode if the attribute represents unconditional unavailability, e.g. @availability(*, unavailable). This patch, however, should contain enough information to start looking at implementing weak linking support. NOTE: the serialization of the attribute is a bit ugly. I wasn't certain if Jordan's serialization meta-programming supported serializing values that decomposed into multiple values in a record, so this ugly macro-based implementation is in place which compacts all the version tuple information for an availability attribute into a single record. Swift SVN r19487