summaryrefslogtreecommitdiffstats
path: root/clang/include/clang
diff options
context:
space:
mode:
Diffstat (limited to 'clang/include/clang')
-rw-r--r--clang/include/clang/Basic/Attr.td9
-rw-r--r--clang/include/clang/Basic/DiagnosticParseKinds.td7
-rw-r--r--clang/include/clang/Parse/Parser.h5
-rw-r--r--clang/include/clang/Sema/AttributeList.h48
4 files changed, 69 insertions, 0 deletions
diff --git a/clang/include/clang/Basic/Attr.td b/clang/include/clang/Basic/Attr.td
index 2268fa64789..bf5e5d67260 100644
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -615,6 +615,15 @@ def ObjCBridgeMutable : InheritableAttr {
let Args = [IdentifierArgument<"BridgedType">];
}
+def ObjCBridgeRelated : InheritableAttr {
+ let Spellings = [GNU<"objc_bridge_related">];
+ let Subjects = SubjectList<[Record], ErrorDiag>;
+ let Args = [IdentifierArgument<"RelatedClass">,
+ IdentifierArgument<"ClassMethod">,
+ IdentifierArgument<"InstanceMethod">];
+ let HasCustomParsing = 1;
+}
+
def NSReturnsRetained : InheritableAttr {
let Spellings = [GNU<"ns_returns_retained">];
// let Subjects = SubjectList<[ObjCMethod, ObjCProperty, Function]>;
diff --git a/clang/include/clang/Basic/DiagnosticParseKinds.td b/clang/include/clang/Basic/DiagnosticParseKinds.td
index 3415a0078c8..22a9d64ca82 100644
--- a/clang/include/clang/Basic/DiagnosticParseKinds.td
+++ b/clang/include/clang/Basic/DiagnosticParseKinds.td
@@ -753,6 +753,13 @@ def err_zero_version : Error<
"version number must have non-zero major, minor, or sub-minor version">;
def err_availability_expected_platform : Error<
"expected a platform name, e.g., 'macosx'">;
+
+// objc_bridge_related attribute
+def err_objcbridge_related_expected_related_class : Error<
+ "expected a related ObjectiveC class name, e.g., 'NSColor'">;
+def err_objcbridge_related_selector_name : Error<
+ "expected a class method selector with single argument, e.g., 'colorWithCGColor:'">;
+
def err_availability_expected_change : Error<
"expected 'introduced', 'deprecated', or 'obsoleted'">;
def err_availability_unknown_change : Error<
diff --git a/clang/include/clang/Parse/Parser.h b/clang/include/clang/Parse/Parser.h
index f23d4fb8a53..52d57a96ba4 100644
--- a/clang/include/clang/Parse/Parser.h
+++ b/clang/include/clang/Parse/Parser.h
@@ -2003,6 +2003,11 @@ private:
SourceLocation AvailabilityLoc,
ParsedAttributes &attrs,
SourceLocation *endLoc);
+
+ void ParseObjCBridgeRelatedAttribute(IdentifierInfo &ObjCBridgeRelated,
+ SourceLocation ObjCBridgeRelatedLoc,
+ ParsedAttributes &attrs,
+ SourceLocation *endLoc);
bool IsThreadSafetyAttribute(StringRef AttrName);
void ParseThreadSafetyAttribute(IdentifierInfo &AttrName,
diff --git a/clang/include/clang/Sema/AttributeList.h b/clang/include/clang/Sema/AttributeList.h
index 96a9efee91c..a0059b5e833 100644
--- a/clang/include/clang/Sema/AttributeList.h
+++ b/clang/include/clang/Sema/AttributeList.h
@@ -245,6 +245,26 @@ private:
AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
}
+ /// Constructor for objc_bridge_related attributes.
+ AttributeList(IdentifierInfo *attrName, SourceRange attrRange,
+ IdentifierInfo *scopeName, SourceLocation scopeLoc,
+ IdentifierLoc *Parm1,
+ IdentifierLoc *Parm2,
+ IdentifierLoc *Parm3,
+ Syntax syntaxUsed)
+ : AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
+ ScopeLoc(scopeLoc), EllipsisLoc(), NumArgs(3), SyntaxUsed(syntaxUsed),
+ Invalid(false), UsedAsTypeAttr(false), IsAvailability(false),
+ IsTypeTagForDatatype(false), IsProperty(false), HasParsedType(false),
+ NextInPosition(0), NextInPool(0) {
+ ArgsVector Args;
+ Args.push_back(Parm1);
+ Args.push_back(Parm2);
+ Args.push_back(Parm3);
+ memcpy(getArgsBuffer(), &Args[0], 3 * sizeof(ArgsUnion));
+ AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
+ }
+
/// Constructor for type_tag_for_datatype attribute.
AttributeList(IdentifierInfo *attrName, SourceRange attrRange,
IdentifierInfo *scopeName, SourceLocation scopeLoc,
@@ -609,6 +629,20 @@ public:
syntax));
}
+ AttributeList *create(IdentifierInfo *attrName, SourceRange attrRange,
+ IdentifierInfo *scopeName, SourceLocation scopeLoc,
+ IdentifierLoc *Param1,
+ IdentifierLoc *Param2,
+ IdentifierLoc *Param3,
+ AttributeList::Syntax syntax) {
+ size_t size = sizeof(AttributeList) + 3 * sizeof(ArgsUnion);
+ void *memory = allocate(size);
+ return add(new (memory) AttributeList(attrName, attrRange,
+ scopeName, scopeLoc,
+ Param1, Param2, Param3,
+ syntax));
+ }
+
AttributeList *createIntegerAttribute(ASTContext &C, IdentifierInfo *Name,
SourceLocation TokLoc, int Arg);
@@ -769,6 +803,20 @@ public:
return attr;
}
+ /// Add objc_bridge_related attribute.
+ AttributeList *addNew(IdentifierInfo *attrName, SourceRange attrRange,
+ IdentifierInfo *scopeName, SourceLocation scopeLoc,
+ IdentifierLoc *Param1,
+ IdentifierLoc *Param2,
+ IdentifierLoc *Param3,
+ AttributeList::Syntax syntax) {
+ AttributeList *attr =
+ pool.create(attrName, attrRange, scopeName, scopeLoc,
+ Param1, Param2, Param3, syntax);
+ add(attr);
+ return attr;
+ }
+
/// Add type_tag_for_datatype attribute.
AttributeList *addNewTypeTagForDatatype(
IdentifierInfo *attrName, SourceRange attrRange,
OpenPOWER on IntegriCloud