Skip to content

Commit

Permalink
Merge pull request #1887 from tanadeau/sr-1052-add-attr
Browse files Browse the repository at this point in the history
[WIP][Parser][SR-1052] Added @discardableResult attribute parsing.
  • Loading branch information
lattner committed Apr 3, 2016
2 parents c767b9f + 3b5a8cd commit 679853d
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 2 deletions.
3 changes: 3 additions & 0 deletions include/swift/AST/Attr.def
Expand Up @@ -259,6 +259,9 @@ SIMPLE_DECL_ATTR(_versioned, Versioned,
LongAttribute | UserInaccessible,
64)

SIMPLE_DECL_ATTR(discardableResult, DiscardableResult,
OnFunc | OnConstructor | LongAttribute, 65)

#undef TYPE_ATTR
#undef DECL_ATTR_ALIAS
#undef SIMPLE_DECL_ATTR
Expand Down
1 change: 1 addition & 0 deletions include/swift/AST/PrintOptions.h
Expand Up @@ -347,6 +347,7 @@ struct PrintOptions {
result.SkipUnderscoredStdlibProtocols = true;
result.SkipDeinit = true;
result.ExcludeAttrList.push_back(DAK_WarnUnusedResult);
result.ExcludeAttrList.push_back(DAK_DiscardableResult);
result.EmptyLineBetweenMembers = true;
result.ElevateDocCommentFromConformance = true;
return result;
Expand Down
2 changes: 2 additions & 0 deletions lib/Sema/TypeCheckAttr.cpp
Expand Up @@ -82,6 +82,7 @@ class AttributeEarlyChecker : public AttributeVisitor<AttributeEarlyChecker> {
IGNORED_ATTR(Versioned)
IGNORED_ATTR(WarnUnusedResult)
IGNORED_ATTR(ShowInInterface)
IGNORED_ATTR(DiscardableResult)
#undef IGNORED_ATTR

void visitAlignmentAttr(AlignmentAttr *attr) {
Expand Down Expand Up @@ -653,6 +654,7 @@ class AttributeChecker : public AttributeVisitor<AttributeChecker> {
IGNORED_ATTR(Testable)
IGNORED_ATTR(WarnUnqualifiedAccess)
IGNORED_ATTR(ShowInInterface)
IGNORED_ATTR(DiscardableResult)

// FIXME: We actually do have things to enforce for versioned API.
IGNORED_ATTR(Versioned)
Expand Down
1 change: 1 addition & 0 deletions lib/Sema/TypeCheckDecl.cpp
Expand Up @@ -5123,6 +5123,7 @@ class DeclChecker : public DeclVisitor<DeclChecker> {

UNINTERESTING_ATTR(WarnUnusedResult)
UNINTERESTING_ATTR(WarnUnqualifiedAccess)
UNINTERESTING_ATTR(DiscardableResult)

#undef UNINTERESTING_ATTR

Expand Down
6 changes: 4 additions & 2 deletions test/IDE/complete_decl_attribute.swift
Expand Up @@ -43,7 +43,7 @@ func method(@#^KEYWORD1^#) {}
@#^KEYWORD2^#
func method(){}

// KEYWORD2: Begin completions, 10 items
// KEYWORD2: Begin completions, 11 items
// KEYWORD2-NEXT: Keyword/None: available[#Func Attribute#]; name=available{{$}}
// KEYWORD2-NEXT: Keyword/None: objc[#Func Attribute#]; name=objc{{$}}
// KEYWORD2-NEXT: Keyword/None: swift3_migration[#Func Attribute#]; name=swift3_migration{{$}}
Expand All @@ -54,6 +54,7 @@ func method(){}
// KEYWORD2-NEXT: Keyword/None: nonobjc[#Func Attribute#]; name=nonobjc{{$}}
// KEYWORD2-NEXT: Keyword/None: warn_unused_result[#Func Attribute#]; name=warn_unused_result{{$}}
// KEYWORD2-NEXT: Keyword/None: warn_unqualified_access[#Func Attribute#]; name=warn_unqualified_access{{$}}
// KEYWORD2-NEXT: Keyword/None: discardableResult[#Func Attribute#]; name=discardableResult
// KEYWORD2-NEXT: End completions

@#^KEYWORD3^#
Expand Down Expand Up @@ -89,7 +90,7 @@ struct S{}

@#^KEYWORD_LAST^#

// KEYWORD_LAST: Begin completions, 20 items
// KEYWORD_LAST: Begin completions, 21 items
// KEYWORD_LAST-NEXT: Keyword/None: available[#Declaration Attribute#]; name=available{{$}}
// KEYWORD_LAST-NEXT: Keyword/None: objc[#Declaration Attribute#]; name=objc{{$}}
// KEYWORD_LAST-NEXT: Keyword/None: swift3_migration[#Declaration Attribute#]; name=swift3_migration{{$}}
Expand All @@ -110,4 +111,5 @@ struct S{}
// KEYWORD_LAST-NEXT: Keyword/None: objc_non_lazy_realization[#Declaration Attribute#]; name=objc_non_lazy_realization{{$}}
// KEYWORD_LAST-NEXT: Keyword/None: warn_unused_result[#Declaration Attribute#]; name=warn_unused_result
// KEYWORD_LAST-NEXT: Keyword/None: warn_unqualified_access[#Declaration Attribute#]; name=warn_unqualified_access
// KEYWORD_LAST-NEXT: Keyword/None: discardableResult[#Declaration Attribute#]; name=discardableResult
// KEYWORD_LAST-NEXT: End completions
13 changes: 13 additions & 0 deletions test/IDE/print_ast_tc_decls.swift
Expand Up @@ -1311,6 +1311,19 @@ public struct ArrayThingy {
public func mineCopper() -> Int { return 0 }
}

// @discardableResult attribute
public struct DiscardableThingy {
// PASS_PRINT_AST: @discardableResult
// PASS_PRINT_AST-NEXT: public init()
@discardableResult
public init() {}

// PASS_PRINT_AST: @discardableResult
// PASS_PRINT_AST-NEXT: public func useless() -> Int
@discardableResult
public func useless() -> Int { return 0 }
}


// Parameter Attributes.

Expand Down
17 changes: 17 additions & 0 deletions test/attr/attr_discardableResult.swift
@@ -0,0 +1,17 @@
// RUN: %target-parse-verify-swift

// ---------------------------------------------------------------------------
// Mark function's return value as discardable and silence warning
// ---------------------------------------------------------------------------
@discardableResult func f1() -> [Int] { }

class C1 {
@discardableResult init() { }

@discardableResult
func f1() -> Int { }
}

struct Inits1 {
@discardableResult init() { }
}

0 comments on commit 679853d

Please sign in to comment.