Commit Graph

172 Commits

Author SHA1 Message Date
Joe Groff
ab09922966 Runtime/IRGen: Replace the _SwiftNativeNS*Base +load hack with a compiler hack.
Rather than swizzle the superclass of these bridging classes at +load time, have the compiler set their ObjC runtime base classes, using a "@_swift_native_objc_runtime_base" attribute that tells the compiler to use a different implicit base class from SwiftObject. This lets the runtime shed its last lingering +loads, and should overall be more robust, since it doesn't rely on static initialization order or deprecated ObjC runtime calls.

Swift SVN r28219
2015-05-06 22:00:59 +00:00
Slava Pestov
58f0b46335 Implement @nonobjc attribute
The following declaration kinds can be marked with this attribute:
- method
- property
- property accessor
- subscript
- constructor

Use cases include resolving circularity for bridging methods in an @objc
class, and allowing overloading methods and constructors in an @objc class
by signature by marking some of them @nonobjc.

It is an error to override an @objc method with a @nonobjc method. The
converse, where we override a @nonobjc method with a @objc method, is
explicitly supported.

It is also an error to put a @nonobjc attribute on a method which is
inferred as @objc due to being part of an @objc protocol conformance.

Fixes <rdar://problem/16763754>.

Swift SVN r28126
2015-05-04 19:26:23 +00:00
Doug Gregor
de635a8cd9 Implement the 'warn_unused_result' attribute.
@warn_unused_result can be attached to function declarations to
produce a warning if the function is called but its result is not
used. It has two optional parameters that can be placed in
parentheses:

  message="some message": a message to include with the warning.

  mutable_variant="somedecl": the name of the mutable variant of the
  method that should be suggested when the subject method is called on
  a mutable value.

The specific use we're implementing this for now is for the mutating
and in-place operations. For example:

  @warn_unused_result(mutable_variant="sortInPlace") func sort() -> [Generator.Element] { ... }
  mutating func sortInPlace() { ... }

Translate Clang's __attribute__((warn_unused_result)) into
@warn_unused_result.

Implements rdar://problem/18165189.

Swift SVN r28019
2015-05-01 04:10:40 +00:00
Joe Groff
40b0fcfe72 Remove the @cc attribute.
We never exposed this to Swift users, and it's now unused by SIL, so we can remove it.

Swift SVN r27613
2015-04-22 23:16:26 +00:00
Nadav Rotem
32211041d2 Rename @semantics -> @_semantics.
Swift SVN r27533
2015-04-21 17:10:06 +00:00
John McCall
3d3f1a7d7e Parsing/AST/Sema support for rethrows, and fix bugs with
throws/rethrows override and conformance checking.

Swift SVN r27508
2015-04-20 23:39:12 +00:00
Joe Groff
e4e0f35aed IRGen: Implement an @_alignment attribute.
This is an internal-only affordance for the numerics team to be able to work on SIMD-compatible types. For now, it can only increase alignment of fixed-layout structs and enums; dynamic layout, classes, and other obvious extensions are left to another day when we can design a proper layout control design.

Swift SVN r27323
2015-04-15 17:23:30 +00:00
Joe Groff
b03795e5f7 Add a '@convention(xxx)' attribute for specifying function conventions.
This is new attribute we're using to coalesce @thin, @objc_block, and @cc, and to extend to new uses like C function pointer types. Parse the new attribute, but preserve support for the old attributes, and print with the old attributes for now to separate out test changes. Migration fixits and test updates to come. I did take the opportunity here to kill off the '@cc(cdecl)' hack for AST-level function pointer types, which are now only spelt with @convention(c).

Swift SVN r27247
2015-04-13 04:27:02 +00:00
Joe Groff
ad0d20c07a Fold "AbstractCC" into SILFunctionType::Representation.
These aren't really orthogonal concerns--you'll never have a @thick @cc(objc_method), or an @objc_block @cc(witness_method)--and we have gross decision trees all over the codebase that try to hopscotch between the subset of combinations that make sense. Stop the madness by eliminating AbstractCC and folding its states into SILFunctionTypeRepresentation. This cleans up a ton of code across the compiler.

I couldn't quite eliminate AbstractCC's information from AST function types, since SIL type lowering transiently created AnyFunctionTypes with AbstractCCs set, even though these never occur at the source level. To accommodate type lowering, allow AnyFunctionType::ExtInfo to carry a SILFunctionTypeRepresentation, and arrange for the overlapping representations to share raw values.

In order to avoid disturbing test output, AST and SILFunctionTypes are still printed and parsed using the existing @thin/@thick/@objc_block and @cc() attributes, which is kind of gross, but lets me stage in the real source-breaking change separately.

Swift SVN r27095
2015-04-07 21:59:39 +00:00
John McCall
35b7db3ae1 Parsing support for error results from SILFunctionType.
Swift SVN r26566
2015-03-26 00:01:32 +00:00
Doug Gregor
dc27688eca Generalize the importer-only RawOptionSet attribute to a SynthesizedProtocol attribute.
This lets us tag imported declarations with arbitrary synthesized
protocols. Use it to handle imported raw option sets as well as the
RawRepresentable conformances of enums that come in as structs.

Swift SVN r26298
2015-03-19 06:35:25 +00:00
Jordan Rose
e6c2131bda Check that "@testable import Foo" is only used to import testable modules.
(i.e. modules compiled with -enable-testing)

Part of testability (rdar://problem/17732115)

Swift SVN r26293
2015-03-19 02:20:41 +00:00
Michael Gottesman
3c2216b115 [+0 self] Add the deallocating parameter convention.
The deallocating parameter convention is a new convention put on a
non-trivial parameter if the caller function guarantees to the callee
that the parameter has the deallocating bit set in its object header.

This means that retains and releases do not need to be emitted on these
parameters even though they are non-trivial. This helps to solve a bug
in +0 self and makes it trivial for the optimizer to perform
optimizations based on this property.

It is not emitted yet by SILGen and will only be put on the self
argument of Deallocator functions.

Swift SVN r26179
2015-03-16 07:51:11 +00:00
Doug Gregor
746141dc64 Introduce a __raw_option_set attribute that the Clang importer adds for option sets.
Effectively NFC; this is part of teaching the new conformance registry
about all synthesized conformances.

Swift SVN r26113
2015-03-13 23:37:12 +00:00
Joe Groff
e1eaac1409 Revert "Add an @__error_protocol attribute."
This reverts commit r25911. Doug points out that a known protocol is sufficient for ErrorType, and we should have a general mechanism for validating known protocols instead of burning an attribute.

Swift SVN r25935
2015-03-10 17:31:38 +00:00
Joe Groff
8f2e328bbf Add an @__error_protocol attribute.
We'll use this to recognize the ErrorType protocol and give it a special optimized representation. Since it will need to box value types in order to be pointer-sized, require that it not contain any mutating methods so that value semantics are preserved.

Swift SVN r25911
2015-03-10 03:59:35 +00:00
Xi Ge
a0f694127d Marking LLDBDebuggerFunction as
UserInaccessible so that no code completion on this attribute.

Swift SVN r25821
2015-03-06 23:42:31 +00:00
Xi Ge
b253483662 Marking LLDBDebuggerFunction as RejectByParser causes compilation failures.
Since lldb uses this attribute for the function it compiles to implement
expression evaluation, this change needs to reverse.

Swift SVN r25811
2015-03-06 23:29:51 +00:00
Xi Ge
039674b492 Remove most user-inaccessbile attributes from the
code completion strings.

Swift SVN r25790
2015-03-05 23:12:24 +00:00
Devin Coughlin
3fc110e0b8 [Sema]Allow @availability attributes on extensions
This commit allows @availability attributes on extensions.

Unlike other declarations, extensions can be used without referring to them
by name (they don't have one) in the source. For this reason, when checking
the available version range of a declaration we also need to check to see if it is
immediately contained in an extension and use the extension's availability if
the declaration does not have an explicit @availability attribute itself.

This commit also moves building the primary file type refinement context hierarchy
in performTypeChecking() to before we resolve extensions.  Resolving extensions checks for
availability of the extended declaration, so the TRC for the extension must be constructed
before then.

Swift SVN r25589
2015-02-27 02:42:42 +00:00
Chris Lattner
99aa4352b2 remove upgrading support for the old @class_protocol attribute.
Swift SVN r25526
2015-02-25 02:04:06 +00:00
Chris Lattner
635d46d909 Fix <rdar://problem/19821633> only allow autoclosure on parameters, not on properties and globals
Disallow autoclosure on anything but paramdecls, and provide better QoI when you use them in enums.



Swift SVN r25262
2015-02-13 01:55:56 +00:00
Doug Gregor
954b4e4d83 Implement @autoclosure(escaping).
Addresses rdar://problem/19499207.

Swift SVN r25249
2015-02-12 21:09:47 +00:00
Devin Coughlin
c48e1bc588 Sema: Allow availability attributes on enum elements.
With this commit, availability attributes can now be placed on enum elements. We
emit an error (protected by the -enable-experimental-availability-checking flag) for
references to potentially unavailable enum cases. We do *not* emit an error when the
programmer pattern matches (i.e., with switch) on a potentially unavailable case.

This commit does not import availability attributes from clang. I will add support for
this in a later commit.

Swift SVN r24929
2015-02-03 23:48:14 +00:00
Jordan Rose
fc847e5686 Allow @IBDesignable on class extensions as well.
Per discussion with the IB team, a class can retroactively be marked as
designable via an extension (or if not retroactively, at least from elsewhere
in the module). This matches the documentation for Objective-C.

(The attribute still has no semantics in Swift itself. The only restriction
is that it must appear on a class or an extension of a class.)

rdar://problem/19654163

Swift SVN r24837
2015-01-30 03:44:02 +00:00
Denis Vnukov
170cbc106b Fix for rdar://problem/19533915, Fuzzing Swift: parseNewDeclAttribute(…) crashes
Attributes @__objc_bridged, @__raw_doc_comment and @__accessibility are not supposed to be
coming from input file and actually crash parseNewDeclAttribute(…) when they are. 



Swift SVN r24697
2015-01-24 00:21:37 +00:00
Chris Lattner
3e41339cb2 rename @__noescape to @noescape, now that it is a generally visible feature,
wrapping up rdar://16323038.  Pieces still remaining are a Clang attribute+
importer support for it, plus adoption in the stdlib (tracked by other radars).


Swift SVN r24223
2015-01-06 22:54:25 +00:00
Chris Lattner
1d74ed7485 teach the compiler how to handle @__noescape in SIL files, allowing SIL to roundtrip it
correctly.  This should fix validation/parser/parse_stdlib.sil


Swift SVN r24220
2015-01-06 22:10:13 +00:00
Chris Lattner
21a7a6c89a Doug twisted my arm and convinced me that noescape was a better match for the semantics we’ll have here. NoCapture would be confusable with "this closure doesn’t have any captures, thus should be compatible with thin function types"
The attribute itself remains __'ized.



Swift SVN r24113
2014-12-23 17:52:10 +00:00
Chris Lattner
e349ee3a60 Start the implementation of a "nocapture" attribute, which is only valid on paramdecls.
This is part of rdar://16323038.  Because this hasn't been fully design reviewed and
implemented, I'm naming it as __nocapture for now.  It is blocking finishing off the
"improved let model" work.




Swift SVN r24079
2014-12-22 21:34:30 +00:00
Chris Lattner
407bad1445 remove @autoclosure as a type attribute. Recognize it in a parameter
list and produce a nice fixit, so that people using it have an obvious
upgrade path.


Swift SVN r24075
2014-12-22 20:14:56 +00:00
Chris Lattner
a6d07f98f6 start implementation of a new @autoclosure decl attribute. It doesn't do
everything the type attribute does (notably, doesn't work on parameters), 
but this includes the infrastructure to apply it in all the sordid places 
that need to be touched for type-adjusting declattributes on variables.



Swift SVN r24044
2014-12-19 23:01:59 +00:00
Chris Lattner
5d8613c7c9 Introduce a new "Indirect_In_Guaranteed" SIL parameter convention. This
isn't used yet, but will be for modeling the self argument passed to an 
address-only witness implementation.   NFC since all this code is dead :-)



Swift SVN r23857
2014-12-11 01:41:29 +00:00
Joe Groff
0330e3bdfc Sema: Allow '@objc' on ObjC-compatible enums.
They must declare an integer raw type and be non-generic. PrintAsObjC, Clang importer, and IRGen support to follow.

Swift SVN r23421
2014-11-19 04:03:02 +00:00
Joe Groff
af0121f8e6 IRGen: Don't nonlazily realize classes (unless they ask).
We lazily realize classes when we access their metadata now, so there's no need to force the ObjC runtime to do this greedily anymore, except for classes that the runtime statically references. For those cases, add an @objc_non_lazy_realization class attribute that will put that class reference in the nlclslist section.

Swift SVN r23105
2014-11-05 00:19:37 +00:00
Joe Groff
949e0b0741 Drop the @sil_self attribute.
We no longer need to abuse Self archetypes to represent values inside existential containers.

Swift SVN r22487
2014-10-03 03:09:45 +00:00
Doug Gregor
d42563291e Switch DictionaryLiteralConvertible over to an initializer requirement.
Swift SVN r22033
2014-09-17 19:42:31 +00:00
Devin Coughlin
1b8ed882d3 Move AvailabilityAttr::PlatformKind into its own file
Swift SVN r21728
2014-09-04 23:34:19 +00:00
Joe Groff
d7c98dcff4 Add an @NSApplicationMain attribute.
This behaves like @UIApplicationMain, except for AppKit. Attach it to your NSApplicationDelegate, and an artificial "main" will be generated that invokes NSApplicationMain() for you. Implements rdar://problem/16904667.

Swift SVN r21697
2014-09-04 05:52:26 +00:00
Doug Gregor
17716524c5 Handle CF <-> Objective-C toll-free-bridged conversions in the type checker.
Introduce an attribute that describes when a given CF type is
toll-free-bridged to an Objective-C class, and which class that
is. Use that information in the type checker to provide the CF <->
Objective-C toll-free-bridged conversions directly, rather than using
the user-defined conversion machinery.

Swift SVN r21376
2014-08-21 21:36:05 +00:00
Nadav Rotem
8dd52d63cd Add the @effects(readonly/readnone/readwrite) attribute.
Swift SVN r21070
2014-08-06 18:48:20 +00:00
Doug Gregor
63304b57b4 Introduce AvailabilityAttr::prettyPlatformName() to improve diagnostics.
Swift SVN r20958
2014-08-02 21:06:30 +00:00
Jordan Rose
1a65ce0c16 Print @availability and @asmname on their own line.
These attributes are too long and would mess up the flow of the line if
placed directly before the decl introducer.

Swift SVN r20840
2014-07-31 18:58:13 +00:00
Chris Lattner
1436c35eb4 now that Beta 5 has branched, we can remove some migration stuff from
what will become beta 6.  This resolves:

<rdar://problem/17662823> Beta 6: remove "operator infix" -> "infix operator" rewrite
<rdar://problem/17670579> Remove @assignment fixit upgrade logic
<rdar://problem/17747208> remove auto_closure upgrade logic after Beta 5 branches



Swift SVN r20629
2014-07-28 16:38:31 +00:00
Doug Gregor
5fc8ac7fd1 Require the 'override' keyword for initializers that override designated initializers.
Swift SVN r20490
2014-07-24 15:38:33 +00:00
Michael Gottesman
d07dfe8647 Allow @inline to be attached to constructors.
I am trying to enable a new ARC optimizer feature that is forcing me to
debug a test case that is affected by inlining of initializers. Plus, being
able to selectively disable inlining of the initializers is a useful
feature in general.

Swift SVN r20427
2014-07-23 21:32:10 +00:00
Chris Lattner
bc481f0fe1 implement <rdar://problem/16859927> remove the underscore in "auto_closure"
autoclosure is one work, not two.



Swift SVN r20253
2014-07-21 15:23:50 +00:00
Argyrios Kyrtzidis
21ead19f7e [ASTPrinter] Check the isMutating bit for printing 'mutating' for a function; revert the change that serialized the attribute.
Swift SVN r20236
2014-07-21 01:24:13 +00:00
Chris Lattner
62ed200368 add a flag that allows us to reject SIL-only decl attributes, and use it to reject @sil_stored in
.swift files.



Swift SVN r20233
2014-07-20 21:03:25 +00:00
Chris Lattner
f9f31fe289 renumber declattributes to be more dense.
Swift SVN r20218
2014-07-20 04:40:28 +00:00