Commit Graph

141 Commits

Author SHA1 Message Date
John McCall
94e5d98ff7 Move 1700 lines of AST-synthesis code out of TypeCheckDecl.cpp.
It's only 6500 lines now!  So much better.

Swift SVN r23994
2014-12-17 23:42:36 +00:00
Devin Coughlin
3749a98763 Record the reason a declaration is potentially unavailable.
This commit adds tracking of the reason a declaration reference is potentially
unavailable to the UnavailableToOptionalExpr AST node and to OverloadChoice. We
will use this reason during SILGen to emit the appropriate run-time check and
during typechecking to provide more helpful diagnostics.

To keep OverloadChoice as small as possible, we encode the reason as an index
into a vector of reasons stored in a given instance of ConstraintSystem (this is
the same approach that Fix takes).

This commit adds Sema/OverloadChoice.cpp (for the parts of OverloadChoice that
now rely on ConstraintSystem) and AST/Availability.h (to bring in
availability-related structures without TypeRefinementContext).


Swift SVN r22377
2014-09-30 01:53:59 +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
Sean Callanan
3b95376949 Added a new AST transformation pass called the
"Playground Transform."  This is an
instrumentation pass that adds calls to a
function called playground_log at locations of
interest.  Roughly speaking, these locations are

- Initialization of variables
- Modification of variables
- Expressions returning values
- Application of mutating methods on objects

The playground transform currently only finds
modifications of variables, but the intent is to
make all of these cases work.

It is enabled by a frontend option, and can
also be invoked by calling

swift::performPlaygroundTransform(SF)

which is the way LLDB, its main client, will
use it.

The frontend option is intended for testing,
and indeed I will add tests for this
transformation in the coming week as I bring
more functionality online.


Swift SVN r14801
2014-03-07 22:59:19 +00:00
Joe Groff
8e6b353542 Derive conformances of Equatable and Hashable for simple enums.
If an enum has no cases with payloads, make it implicitly Equatable and Hashable, and derive default implementations of '==' and 'hashValue'. Insert the derived '==' into module context wrapped in a new DerivedFileUnit kind, and arrange for it to be codegenned with the deriving EnumDecl by adding a 'DerivedOperatorDecls' array to NominalTypeDecls that gets visited at SILGen time.

Swift SVN r14471
2014-02-27 20:28:38 +00:00
Doug Gregor
691111eaf9 Split constraint system solution ranking into a separate source file.
Swift SVN r11016
2013-12-09 14:18:59 +00:00
Doug Gregor
ee545e9f68 Rename TypeCheckConstraintsFoo.cpp to CSFoo.cpp.
It's more idiomatic and easier to type.


Swift SVN r11015
2013-12-09 14:09:54 +00:00
Doug Gregor
a6bd190b7c Split the core implementation of ConstraintSystem into its own file.
Swift SVN r11014
2013-12-09 14:05:35 +00:00
Doug Gregor
72c1e8c88e Split constraint simplification into its own source file.
Swift SVN r11013
2013-12-09 13:55:34 +00:00
Joe Groff
61f227c071 Refactor ArchetypeBuilder to work with abstract generic parameters.
Have ArchetypeBuilder key the archetypes it produces by the abstract {depth,index} position of generic parameters rather than by the identity of particular GenericTypeParamDecls. Tighten the signature of AbstractTypeParamDecl-taking methods to only take GenericTypeParamDecls; that's the only case that comes up anymore. Introduce 'addGenericParameter' and 'getArchetype' overloads that work with GenericTypeParamTypes and DependentMemberTypes in addition to those that work with GenericTypeParamDecls.
Move ArchetypeBuilder.cpp from 'Sema' to 'AST' to correspond to its header's location.

In this version of the patch, we handle the problem of invalid nested protocol decls by simply ignoring the parent generic context of ProtocolDecls in validateGenericTypeSignature, which allows for better recovery and avoids the crash problems with the ErrorType approach I tried in the previous patch.

Swift SVN r10983
2013-12-07 20:14:06 +00:00
Joe Groff
669295be29 Revert "Refactor ArchetypeBuilder to work with abstract generic parameters."
This reverts commit r10966. It breaks test/Parse/self_keyword_recovery.swift.

Swift SVN r10974
2013-12-07 03:03:43 +00:00
Joe Groff
155a4aec7c Refactor ArchetypeBuilder to work with abstract generic parameters.
Have ArchetypeBuilder key the archetypes it produces by the abstract {depth,index} position of generic parameters rather than by the identity of particular GenericTypeParamDecls. Tighten the signature of AbstractTypeParamDecl-taking methods to only take GenericTypeParamDecls; that's the only case that comes up anymore. Introduce 'addGenericParameter' and 'getArchetype' overloads that work with GenericTypeParamTypes and DependentMemberTypes in addition to those that work with GenericTypeParamDecls.
Move ArchetypeBuilder.cpp from 'Sema' to 'AST' to correspond to its header's location.

When we parse something like 'protocol P { protocol Q {} }', eagerly give the erroneous nested protocol Q an ErrorType to suppress type-checking of the declaration. Otherwise, the nested implicit 'Self' parameters, which are fixed depth 0 index 0 in the generic parameter space, will collide in the ArchetypeBuilder.

Swift SVN r10966
2013-12-07 01:29:34 +00:00
Doug Gregor
ccf01377cc Introduce a constraint graph to track relationships among type variables.
We're not using this for anything other than debugging at the moment.


Swift SVN r10661
2013-11-22 18:25:14 +00:00
Dmitri Hrybenko
61c067fe5f Implement a check in Sema to find self-assignment
rdar://14151649 suggests that it should be a warning, but I don’t see a reason
why it should not be an error.  We have no legacy code that relies on this.


Swift SVN r9976
2013-11-05 23:43:54 +00:00
Doug Gregor
2d215d68d3 Split Constraint and ConstraintLocator into their own headers.
No functionality change.


Swift SVN r9204
2013-10-11 17:24:46 +00:00
Joe Groff
fb7fb33be6 Sema: Synthesize raw type methods for enums.
If an enum has a valid raw type, synthesize a RawType associated type along with fromRaw and toRaw methods.

An implicit conformance to RawRepresentable is not yet set up. This synthesis may need to be done earlier in order for the names to be available during type-checking of definitions in the enum too.

Swift SVN r8890
2013-10-03 21:55:53 +00:00
Chris Lattner
8956e856c6 remove the old AST capture analysis pass completely. The primary IR
gen pass has had it disabled for some time, so snip the last few uses
in the REPL and zap it.

Goodbye old friend, you were a very useful stopgap.


Swift SVN r6885
2013-08-05 14:14:17 +00:00
Doug Gregor
8af1635397 Remove the old type checker.
This eliminates all of the coercion and overloading code, which is the
main part of the old type checker. There are some residual expression
nodes (such as overloaded subscript/member expressions) as well as
residual goop in the type system ("unresolved" types at various
levels) that will still need to be removed.



Swift SVN r5409
2013-05-30 06:50:35 +00:00
Doug Gregor
759ed9ba5c Move still-useful routines out of TypeCheckOverload.cpp.
Swift SVN r5404
2013-05-30 05:29:05 +00:00
Jordan Rose
ccae995f61 Use a list of module loaders instead of a single Clang importer.
This paves the way for having a Swift module importer. The eventual goal
here is to eliminate all explicit uses of the Clang module loader, but
I'm not going to push too hard on that for now.

Swift SVN r5092
2013-05-08 18:09:33 +00:00
Doug Gregor
e6cade2c47 Make the definition of implicit default constructors lazy.
Tie the laziness into name lookup, so any attempt to look for the
constructors in a struct will ensure that the implicit default
constructor gets generated and added to the lookup set.

Laziness here is not about performance. Rather, it is a step toward
defining the implicit default constructor only when all instance
variables have implicit default constructors. Because Swift allows
struct definitions to come in any order, we need to wait until we've
done the first round of type-checking on declarations, then resolve
implicit default constructors as-needed, finalizing them all before
moving on to check function bodies.



Swift SVN r4888
2013-04-24 18:56:35 +00:00
Doug Gregor
be66b4546f Split the constraint-based type checker into five parts.
The five parts are:
  - Support code and high-level entry points
  - Constraint generation
  - Constraint solving
  - Constraint application
  - Diagnostics

No functionality change.


Swift SVN r4447
2013-03-19 16:04:31 +00:00
Jordan Rose
ac5abd95d0 [CMake] Automagically add private headers in Xcode as well as public headers.
Swift SVN r3167
2012-11-13 19:05:17 +00:00
Doug Gregor
0d7afbe5e0 Introduce an almost completely untested implementation of constraint
generation from an expression that has not been type-checked. One can
see the constraints introduced by an expression by using

  :dump_constraints <expression>

within the REPL. We're still missing several major pieces of
constraint generation:
  - We don't yet "open up" references to polymorphic types
  - We don't print out the child constraint systems in the dump, so
  it's not at all obvious what happens within overloading (and I'm not
  convinced I like my representation anyway)
  - There are no tests whatsoever
  - Member constraints are still very, very weird



Swift SVN r2624
2012-08-13 22:59:41 +00:00
Doug Gregor
5e13507a9d Introduce the archetype builder, which collects the requirements
placed on generic parameters and associated types within the generic
parameter clause, expands those requirements out to form the complete
set of requirements, then assigns archetypes for each of the generic
parameters and their nested types (recursively).


Swift SVN r2379
2012-07-19 23:36:15 +00:00
Doug Gregor
1dc9b1597a Unbreak CMake build
Swift SVN r2104
2012-05-31 23:39:07 +00:00
Eli Friedman
40156c1d70 Update CMake.
Swift SVN r2100
2012-05-31 22:27:55 +00:00
Doug Gregor
3e7b52d025 Implement support for coercing a value of a given type T to a protocol
P, so long as T conforms to the protocol P.



Swift SVN r1797
2012-05-10 18:55:30 +00:00
Doug Gregor
88b214d020 Revert r1792; it's missing a file :(
Swift SVN r1795
2012-05-10 17:13:44 +00:00
Doug Gregor
f4f2f9f570 Implement support for coercing a value of a given type T to a protocol
P, so long as T conforms to the protocol P.


Swift SVN r1794
2012-05-10 16:15:34 +00:00
Doug Gregor
79ed496d87 Implement filtering of overload sets based on argument and destination
types. Use this simple overload resolution scheme in both type
checking and type coercion, simplifying both code paths a bit.

There is one significant semantic change here: we allow overload
resolution to operate on (structured) dependent arguments, which
allows for more overload filtering before we come in with the type
coercion hammer. For example, we can now properly type-check

  var x : int32;
  x + 0;



Swift SVN r1310
2012-04-02 23:22:01 +00:00
Doug Gregor
f697dfc62c Unbreak CMake build
Swift SVN r1290
2012-03-29 13:55:07 +00:00
Doug Gregor
8f8ae8a77c Unbreak CMake build.
Swift SVN r1280
2012-03-28 16:49:40 +00:00
Chris Lattner
f986dbaf95 Add a new file to handle name lookup tasks, implement a bunch of
stuff that will eventually be centralized "dot" lookup mechanics.


Swift SVN r1227
2012-03-18 01:17:32 +00:00
John McCall
16f8b2e656 Revise the language design for function argument clause syntax.
A function argument clause is now one or more patterns (which
must be parenthesized and explicitly type all positions) not
separated by arrows;  the first arrow then separates off the
return type.

Revisions to language reference forthcoming.



Swift SVN r1099
2012-01-26 01:25:26 +00:00
Doug Gregor
dc8d4d7df9 Teach CMake about the various header files in the lib subdirectories, so they show up in the project.
Swift SVN r849
2011-11-09 18:02:12 +00:00
Chris Lattner
55fa35662c rename TypeChecking -> TypeChecker to match the name of the class.
Swift SVN r786
2011-10-26 23:42:08 +00:00
Chris Lattner
e0ce01906e split type validation out to its own .cpp file.
Swift SVN r628
2011-08-26 00:11:24 +00:00
Chris Lattner
63cd4a9566 sketch out the new type checking organization.
Swift SVN r586
2011-08-23 19:20:22 +00:00
Chris Lattner
33f774f9b7 Rearrange a bunch of code for better layering: instead of Parser depending on Sema,
just move the Sema code into the Parser library.  There is no way to use one without
the other.  The library formerly known as Sema will get renamed.


Swift SVN r542
2011-08-13 21:06:10 +00:00
Doug Gregor
86ab76d624 Introduce a CMake build system for Swift.
This CMake-based build system is based on the one in Clang, simplified
and tweaked slightly to better support building a smaller Xcode
project that links against an existing LLVM (rather than importing all
of LLVM into this project).



Swift SVN r403
2011-07-14 17:58:33 +00:00