Commit Graph

2498 Commits

Author SHA1 Message Date
Dmitri Hrybenko
f90e0c153b Make 'override' a keyword
rdar://16462192

Swift SVN r16115
2014-04-09 14:19:50 +00:00
Joe Groff
8adaab0233 Fold ExtInfo::isThin and ::isBlock into a "Representation" enum.
These bits are orthogonal to each other, so combine them into one, and diagnose attempts to produce a type that's both. Spot-fix a bunch of places this revealed by inspection that we would have crashed in SILGen or IRGen if blocks were be handled.

Swift SVN r16088
2014-04-09 00:37:26 +00:00
Nadav Rotem
15233517ca Indent the line.
Swift SVN r16073
2014-04-08 20:31:57 +00:00
Nadav Rotem
5db3af6d38 Improve the diagnostics of immutable field access.
1.swift:7:18: error: cannot assign to 'x' in 'self'
  func Mod() { x = 1 }
               ~ ^



Swift SVN r16072
2014-04-08 20:27:32 +00:00
Doug Gregor
9e75a46c8c swift-ide-test: Add a -skip-unavailable option to skip unavailable declarations
Swift SVN r16056
2014-04-08 16:34:44 +00:00
Joe Pamer
00427c0dfd Canonicalize new SIL generation error message.
Swift SVN r16026
2014-04-07 22:00:40 +00:00
Joe Pamer
28d4b2a98c Add more tests and harden nested archetype lookup.
Swift SVN r16024
2014-04-07 21:31:53 +00:00
Joe Pamer
18f3bf67b0 More progress towards getting same-type constraints working correctly.
Swift SVN r16023
2014-04-07 21:31:52 +00:00
Joe Pamer
b9fdfe3063 Begin softening some restrictions on self-recursive constraints on associated types. This will prevent cases of infinite recursion while building archetypes.
Swift SVN r16022
2014-04-07 21:31:50 +00:00
Joe Pamer
1b50ad2d83 Protect against lookup failures on Foundation bridge types during SIL generation. (rdar://problem/16330675)
Swift SVN r16021
2014-04-07 21:31:48 +00:00
Dmitri Hrybenko
4315fdbbf8 @availability: implement serialization and AST printing
Swift SVN r16010
2014-04-07 14:07:28 +00:00
Dmitri Hrybenko
9a15e6bddd Attributes: hasAttribute() / getAttribute() returns only valid attributes by
default


Swift SVN r16008
2014-04-07 12:06:09 +00:00
Dmitri Hrybenko
67354b227f Update number of bits after I added the 'Invalid' bit
Swift SVN r16007
2014-04-07 11:25:42 +00:00
Dmitri Hrybenko
865a96a1a1 @noreturn: move to the new serialization scheme and add override checking
Swift SVN r16006
2014-04-07 11:22:59 +00:00
Dmitri Hrybenko
fb2a6499cd Move @class_protocol to use the new attribute infrastructure
... and fix a few other bugs:

* always set the inherited protocols on the ProtocolDecl in the type checker,
  so that we can remove a hack in ProtocolDecl::requiresClassSlow();

* diagnose DeclAttributes that are inverted when this is not allowed.


Swift SVN r15992
2014-04-06 01:24:08 +00:00
Nadav Rotem
276201c8ec Error message should start with a lower case letter.
Swift SVN r15987
2014-04-05 07:03:44 +00:00
Nadav Rotem
0d8729a9f6 Forbid the any kind of inheritance from @final classes.
Emit the following diagnostics:

  Inheritance from a final class 'ClassName'



Swift SVN r15986
2014-04-05 06:58:41 +00:00
Nadav Rotem
4b0e7737e1 Add support for the @final attribute on classes.
Swift SVN r15981
2014-04-05 05:52:40 +00:00
Doug Gregor
6da952e798 Parse the new function syntax.
Parse the new function syntax, which allows both the argument (API)
and parameter (internal) name to be specified prior to the colon
within each parameter. Don't re-use the existing pattern-parsing
logic. Rather, implement a new (far simpler) parser for this purpose,
then map from its simple data structures to ArgParams and BodyParams
as we're used to.

There are a number of caveats here:
  - We no longer have the ability to use patterns for parameters in
  function declarations. The only place this really has an impact is
  that it makes the ~> hack in the standard library even uglier.
  - This exposed some issues with code completion with generic
  parameters that need to be investigated.
  - There's still some work to be done to improve recovery when things
  parse poorly within a parameter list; there are some XFAILs to deal
  with that.

I'll address the last two issues with follow-up commits.

Swift SVN r15967
2014-04-05 00:21:06 +00:00
Dmitri Hrybenko
f661691962 Don't serialize @final twice and add tests for printing @final
Swift SVN r15962
2014-04-04 23:20:55 +00:00
Chris Lattner
d94d11ea6b reword a diagnostic to read more nicely.
Swift SVN r15941
2014-04-04 16:36:52 +00:00
Dmitri Hrybenko
f198c28d75 Serialize @required as a DeclAttribute
Also introduce an invalid bit on a DeclAttribute for use by semantic analysis.

This fixes AST printing for @required.


Swift SVN r15938
2014-04-04 15:24:47 +00:00
Dmitri Hrybenko
7a63906b15 Serialize @objc as a DeclAttribute
This allows us to consistently print the AST, no matter if it was just parsed
or deserialized.

Note that we still serialize the isObjC bit from Decl, because it can be set or
cleared by the typechecker.  It is possible to have isObjC=true when there is
not attribute (the ObjC'ness was inferred), and it is possible that
isObjC=false while there is an attribute (when the attribute does not pass the
semantic check).  While we can represent the former with an implicit attribute,
the latter is harder to represent (maybe with an invalid bit on the attribute?)


Swift SVN r15935
2014-04-04 12:42:52 +00:00
Ted Kremenek
ad2afaeb34 Start serializing out DeclAttribute objects using generalized serialization logic.
To generalize our serialization logic for more attributes, serialize
each DeclAttribute object in a separate bitcode record.

For simple declaration attributes (no arguments), all of this
serialization logic can be fully automatically generated, and is
done so in this patch.  This currently includes @final, but will
expand over time.

To illustrate the plumbing end-to-end, move the serialization logic
for asmnmame over to the new mechanism.

Swift SVN r15933
2014-04-04 08:52:32 +00:00
Doug Gregor
26c4620b35 Introduce a "descriptive declaration kind" for use in diagnostics, etc.
Provide a fine-grained classification of declarations that can be used
in diagnostics instead of ad hoc %select operations. For now, only cut
over the "overriding a final <whatever>" diagnostic.


Swift SVN r15932
2014-04-04 06:35:42 +00:00
Doug Gregor
d2f7f90586 Re-introduce the restriction I zapped in r15928. getters/setters can't separately be marked @final.
Swift SVN r15930
2014-04-04 05:43:06 +00:00
Doug Gregor
604ad33d06 Handle getter/setter overriding more cleanly.
Use recordOverride() for getter and setter overriding. This means that
@objc names get propagated correctly, so we can stop chasing overrides
to find @objc names.



Swift SVN r15928
2014-04-04 05:27:50 +00:00
Chris Lattner
25b8f01fef enforce that @final may only be applied to func/var/subscripts (@final classes someday),
and that it doesn't appear on accessors.


Swift SVN r15927
2014-04-04 05:19:28 +00:00
Chris Lattner
3830face44 Carve out a new TypeCheckAttr.cpp file, and sketch out a new structure for doing
attribute checking on a per attribute basis.  It makes a lot more sense for a 
given attribute to think about all of the decl kinds it may or may not apply to
rather than all decl kinds thinking about the cross products of attributes they 
may apply to.

Start by adding a new check to reject @final in structs and enums.


Swift SVN r15925
2014-04-04 05:08:23 +00:00
Jordan Rose
aa6aa72ba1 Add lazy conformances to nominals and extensions.
...and deserialize conformances lazily.

No intended user-visible change.

Swift SVN r15911
2014-04-04 01:17:54 +00:00
Jordan Rose
22645d7f97 Add a wrapper type for the union of ArrayRef and LazyMemberLoader+context.
This requires some careful handling since the base of an ArrayRef and the
lazy loading "context data" both have no free bits, but it now works.
(It's essentially a TwoPointerUnion type, just specialized for a particular
pair of two-pointer types.)

No functionality change, except that NominalTypeDecl and ExtensionDecl
are two words smaller.

Swift SVN r15910
2014-04-04 01:17:54 +00:00
Doug Gregor
9ca6a394d4 Diagnose attempts to override a 'final' declaration.
Swift SVN r15905
2014-04-03 23:53:18 +00:00
Doug Gregor
6b71d48a97 When overriding a declaration, complain if the @objc names don't match.
Swift SVN r15901
2014-04-03 22:57:15 +00:00
Doug Gregor
be3ec6359a Make DeclAttributes visitable via an AST visitor.
Swift SVN r15900
2014-04-03 22:57:15 +00:00
Doug Gregor
fe6160f455 Include SimpleDeclAttr to provide subclasses for simple declaration attributes.
The new "final" attribute didn't have a DeclAttribute subclass. While
that sounds like a nice simplification, it makes visitors awkward to
use.

Swift SVN r15899
2014-04-03 22:57:13 +00:00
Chris Lattner
d491f5121e Add parsing and SILGen support for @final methods and properties.
This is missing almost all semantic analysis and is missing various
optimization opportunities (e.g. final methods that are not overrides
don't need vtable entries), but this is enough to devirtualize class
stuff, which is important for our performance efforts.  I'll add this
to release notes when it is more fully fleshed out.



Swift SVN r15885
2014-04-03 17:53:52 +00:00
Dmitri Hrybenko
c68fe1a5d7 Comment parsing / PrintAsObjC: translate Swift comments to Doxygen syntax when
printing a header file


Swift SVN r15871
2014-04-03 16:06:01 +00:00
Doug Gregor
53914c42a2 Remove the prohibition on "tuple-style" @objc methods.
Swift SVN r15847
2014-04-02 23:35:02 +00:00
Doug Gregor
527b147ba7 Revert "Allow the first name of a selector-style function declaration to be separated."
This reverts r15140.

Conflicts:
	include/swift/Serialization/ModuleFormat.h
	lib/Parse/ParsePattern.cpp

Swift SVN r15846
2014-04-02 23:27:52 +00:00
Doug Gregor
37a4ce2227 Produce an error with Fix-Its for the "separated" call syntax.
We are removing this syntax. To stage the move, first error with
Fix-Its to rewrite to the keyword-argument syntax. In a week or so,
we'll remove all of the code supporting the "separated" call syntax.

Swift SVN r15833
2014-04-02 21:34:27 +00:00
Jordan Rose
0324b9e027 Don't walk into an as-of-yet-unsynthesized function body.
...and don't dump it, and don't force it just to see if an accessor is present.

Swift SVN r15830
2014-04-02 21:00:48 +00:00
Jordan Rose
107eeefd77 Allow AbstractFunctionDecls to have their bodies "synthesized" on demand.
...then use this functionality for derived conformances for RawRepresentable.

No functionality change because these bodies are always forced right now.

Swift SVN r15828
2014-04-02 21:00:42 +00:00
Argyrios Kyrtzidis
41dbe5384b [AST] Add ClangNode::getLocation(), that returns the clang SourceLocation.
Swift SVN r15808
2014-04-02 17:39:08 +00:00
Joe Pamer
31bab38eb4 When attempting to obtain the context type of a type extension, we were never taking into account the fact that the extended type could be potentially be unbound.
(This could occur, for instance, via a forward reference to a member defined in an extension to a generic type.)  This problem has been popping up a lot lately, and
was making some of the recent runtime work difficult.  (rdar://problem/16481483)

Swift SVN r15805
2014-04-02 16:48:14 +00:00
Dmitri Hrybenko
78e354b2b9 AST printing: make PrintDefaultParameterPlaceholder the default (since we are
not going to implement expression printing any time soon), and fix a bug in its
implementation: when used with deserialized modules, "= default" was not
printed.


Swift SVN r15798
2014-04-02 13:56:54 +00:00
John McCall
2fdee0f608 Allow a method to be overridden with (unsafe, unchecked)
laxity about optional types.

Same caveat as my previous commit.

Swift SVN r15779
2014-04-02 07:04:22 +00:00
John McCall
25464e9202 Add a convenience method for constructing an optional
type from an OptionalTypeKind.

Swift SVN r15773
2014-04-02 04:01:16 +00:00
Joe Groff
8f1c2d1e79 Sema: Implement type-checking for inout writeback conversion.
Add a third branch to the constraint system for '&x' expressions that allows conversion from an lvalue to a type via an additional writeback step:

- Add an LValueConversionExpr node that converts from @lvalue T to @lvalue U, given a pair of functions that convert T -> U and U -> T, to represent the writeback temporary.
- Allow conversion in an inout expression from @lvalue T to a type U that has the following members:

  static func __writeback_conversion(Builtin.RawPointer, T.Type) -> U
  static func __writeback_conversion_get(T) -> V
  static func __writeback_conversion_set(V) -> T

which builds a solution that produces an LValueConversion from the get/set pair before passing the pointer to the writeback temporary off to the conversion function.

Swift SVN r15764
2014-04-02 00:17:51 +00:00
Doug Gregor
9189145cc5 Change DeclName over to basename(arg1:arg2:...argN:).
Swift will use the basename + argument names formulation for
names. Update the DeclName interfaces, printing, and __FUNCTION__ to
use the method syntax.

We'll still need to rework the "x.foo:bar:wibble:" syntax; that will
come (significantly) later.

Swift SVN r15763
2014-04-02 00:00:03 +00:00
Dmitri Hrybenko
e42a3e5762 AST printer: undo the damage of r15737, while retaining the whitespace handling
refactoring, allowing ASTPrinter callbacks to be called exactly when a first
non-whitespace character of the declaration is printed, ignoring the
indentation and leading blank lines.


Swift SVN r15743
2014-04-01 20:07:41 +00:00