Commit Graph

21693 Commits

Author SHA1 Message Date
Doug Gregor
0dcca3aeda Eliminate CoerceExpr entirely.
Swift SVN r7876
2013-09-03 22:58:22 +00:00
Doug Gregor
a22911a0d0 Limit dynamic lookup to [objc] methods/properties/subscripts.
Also turn DynamicLookup into an [objc] protocol.


Swift SVN r7866
2013-09-03 21:29:59 +00:00
Doug Gregor
0554c944a2 Fold GenericSubscriptExpr into SubscriptExpr.
Swift SVN r7845
2013-09-03 16:25:07 +00:00
Doug Gregor
786f9d299b Fold GenericMemberRefExpr into MemberRefExpr.
MemberRefExpr now uses ConcreteDeclRef to refer to its member, which
includes the substitutions and obviates the need for
GenericMemberRefExpr.


Swift SVN r7842
2013-09-03 15:49:19 +00:00
Doug Gregor
fc5d0b9ad3 Use ValueDecl::dumpRef() for dumping references.
Swift SVN r7841
2013-09-03 15:23:02 +00:00
Doug Gregor
967072f4b3 Allow dynamic lookup to find a generic member.
The new ConcreteDeclRef class provides a possibly-speciaized reference
to a declaration, which allows DynamicMemberRefExpr to refer to both
generic and non-generic members. without having to split the AST node.


Swift SVN r7839
2013-09-03 14:55:31 +00:00
Dmitri Hrybenko
3ed1303b91 Parser: improve recovery when the extension name is a keyword
Swift SVN r7827
2013-08-31 02:09:39 +00:00
Doug Gregor
04d157427d Make sure that the dynamic lookup table has the right set of members.
Clean up the "can be accessed by dynamic lookup" predicate so that it
checks for a generic context. We no longer need to do the checking in
name lookup, since this means that the dynamic lookup table won't have
anything we can't use (thanks Jordan!). Drop the [objc] allowance for
members of a generic context: it still leaves us with a very weird
case of messaging something when we can't even figure out the type
that we think the object has.

Extend the walk searching for members to include inner classes within
structs, so we get all of the members globally.



Swift SVN r7799
2013-08-30 20:43:34 +00:00
Jordan Rose
a09343e519 Lock down on exports from TranslationUnit modules.
Previously, export control (via [exported]) only applied to modules that
had been serialized -- anything imported in a TranslationUnit was
automatically considered exported. This was done to make life easier when
dealing with the main source file, but it turns out we're going to want to
load other source files as imports, and export control should work there too.

Now, the module iteration methods (Module::forAllVisibleModules,
namelookup::lookupInModule, etc.) can consider the module being passed as
"top-level", meaning its private imports are visible as well. Otherwise,
proper export control is observed even for imported TranslationUnits.

This required a number of test changes involving Swift adapter modules that
forgot to re-export their Clang modules.

Swift SVN r7783
2013-08-30 17:05:32 +00:00
Jordan Rose
7f20dfd304 Include inner class members in dynamic lookup results.
Per discussion with Doug, there's no reason why this should not work:

  class Outer {
    class Inner {
      func extract() { ... }
    }
  }

  var obj : DynamicLookup = ...
  obj.extract!()

Swift SVN r7763
2013-08-29 23:09:33 +00:00
Doug Gregor
91010d102e Dynamic lookup can never find a member of a generic class.
If we allowed dynamic lookup to find a member of a generic class, we
would then have to figure out the generic arguments. Technically, it's
possible that we could deduce the generic arguments from the signature
of the function we found... but it feels unlikely that we'd get the
right answer often enough to make it useful. So don't do that.



Swift SVN r7758
2013-08-29 22:38:53 +00:00
Jordan Rose
cc53e1a7e7 Remove Type parameter from ValueDecl constructor.
We only know the type of functions and vars at the time we create them,
and sometimes not even those. Just use setType() in those constructors
and make all other ValueDecls simpler.

Swift SVN r7756
2013-08-29 22:23:07 +00:00
Doug Gregor
9efa20e4eb Improve overload resolution for dynamic lookups.
Unlike normal overload resolution, where we always want the
most-specialized, overriding result, overload resolution for dynamic
lookups favors results in superclasses to those in subclasses, because
we want to put the least requirements on the object
type. Additionally, we don't allow overload resolution to select among
results that come from different classes or protocols.



Swift SVN r7743
2013-08-29 21:07:07 +00:00
John McCall
83767b8032 Fix a dumb infinite loop.
Swift SVN r7726
2013-08-29 18:41:18 +00:00
John McCall
d767e0d4ed Treat _getBool as a library intrinsic as well.
Swift SVN r7719
2013-08-29 06:47:12 +00:00
John McCall
ce08a05021 Change _doesOptionalHaveValue to take its argument [byref].
Swift SVN r7718
2013-08-29 06:47:10 +00:00
John McCall
a911ef834f Make ASTContext::getProtocol use lookupInSwiftModule as well.
Swift SVN r7717
2013-08-29 06:47:08 +00:00
John McCall
f6cfe63c56 Check for Optional<T> and a set of four "intrinsic"
functions whenever we build a reference to a [weak]
variable in the AST.

We're going to consume this during SIL-gen, so the
assumption here is that we never do SIL-gen of an Expr
that we didn't run through the type-checker.

Swift SVN r7716
2013-08-29 06:47:06 +00:00
Dmitri Hrybenko
d3d16755cf Simplify handling of ErrorType
The typechecker is not creating (LValueType (ErrorType)) anymore.


Swift SVN r7703
2013-08-28 23:57:48 +00:00
Doug Gregor
508e02df19 All classes implicitly conform to the DynamicLookup protocol.
Swift SVN r7700
2013-08-28 22:57:24 +00:00
Doug Gregor
f82f001518 Migrate TypeChecker::getProtocol() over to ASTContext.
All of the known protocols are part of the Swift standard library
anyway, so look there for these special protocols.


Swift SVN r7694
2013-08-28 22:37:38 +00:00
Doug Gregor
b06e65c3b3 Add the DynamicLookup protocol for lookup across all classes and protocols.
When performing member lookup into an existential that involves the
DynamicLookup protocol, look into all classes and protocols for that
member. References to anything found via this lookup mechanism are
returned as instances of Optional.

This introduces the basic lookup mechanics into the type
checker. There are still numerous issues to work through:
  - Subscripting isn't supported yet
  - There's no SILGen or IRGen support
  - The ASTs probably aren't good enough for the above anyway
  - References to generics will be broken
  - Ambiguity resolution or non-resolution

Thanks to Jordan for the patch wiring up DynamicLookup.


Swift SVN r7689
2013-08-28 21:38:50 +00:00
Sean Callanan
6fd2cd3686 Added the option to TranslationUnit::dump() to
have the output go to a provided ostream.  This
allows it to be used for logging in LLDB.


Swift SVN r7681
2013-08-28 19:57:38 +00:00
Argyrios Kyrtzidis
6d57b49e02 Have the ASTWalker walk protocol declarations.
Also make the implicit AssociatedTypeDecl, created for a protocol, to have the
location of its protocol, otherwise the verifier will complain that a decl has no
source range.

Swift SVN r7673
2013-08-28 18:22:06 +00:00
Dmitri Hrybenko
1593632d7b More 'this' -> 'self' replacements
Swift SVN r7659
2013-08-28 03:08:07 +00:00
Dmitri Hrybenko
d9035426ed Rename RebindThisInConstructorExpr -> RebindSelfInConstructorExpr
Swift SVN r7658
2013-08-28 03:02:30 +00:00
Dmitri Hrybenko
69cfa73640 More 'this' -> 'self' replacements
Swift SVN r7657
2013-08-28 02:57:21 +00:00
Ted Kremenek
8f5b8ccb02 Rename "This" to "Self" and "this" to "self".
This was not likely an error-free change.  Where you see problems
please correct them.  This went through a fairly tedious audit
before committing, but comments might have been changed incorrectly,
not changed at all, etc.

Swift SVN r7631
2013-08-27 21:58:27 +00:00
Doug Gregor
330f5fe1e7 For nested archetypes, track the corresponding associated type.
Each nested archetype X.Y corresponds to an associated type named 'Y'
within one of the protocols to which X conforms. Record the associated
type within the archetype itself. When performing type substitutions,
use that associated type to extract the corresponding type witness
rather than looking for the type itself. This is technically more
correct (since we used the type witness for type checking), and a step
toward pulling type substitutions into the AST.



Swift SVN r7624
2013-08-27 17:05:11 +00:00
Jordan Rose
eef39ff914 Add a :print_module directive to the REPL.
This is basically the same as doing a :print_decl on every decl in the module,
except that it does not print extensions that come from other modules, and
/does/ print extensions and operators that come from this module.

Does not yet work for Clang modules or the Builtin module.

Swift SVN r7601
2013-08-26 23:07:51 +00:00
Doug Gregor
2852e461e8 Teach AST to lazily fill in the T[] and T? implementation types.
We previously relied on the type checker to fill in the implementation
types (swift.Slice<T> and swift.Optional<T>, respectively), which
limited our ability to perform type transformations in the AST. Now,
the AST knows how to form these implementation types on demand.



Swift SVN r7587
2013-08-26 19:08:39 +00:00
Jordan Rose
22912bc3b3 Add a -l flag to Swift and use it to provide autolinking information.
The spelling of the flag can certainly be changed; I just wanted to get
something up and running.

Swift SVN r7582
2013-08-26 18:57:48 +00:00
Doug Gregor
4d97f46f76 Make TypeLoc::isError() return true when... there is an error.
It was backwards, and it's one caller was inverting the result, so two
wrongs made right behavior from a misleading interface.


Swift SVN r7569
2013-08-26 16:07:47 +00:00
Doug Gregor
484ab259de Switch a few more clients over to Type::findIf().
Swift SVN r7536
2013-08-23 22:28:02 +00:00
Doug Gregor
78319bb0d2 Switch to non-capturing lambdas and update comment.
Swift SVN r7533
2013-08-23 22:04:32 +00:00
Doug Gregor
2bffdb79a1 Introduce Type::findIf() to find a type that corresponds to some predicate.
Rather than abusing Type::transform()s short-circuit nature when
looking for types with a specific property somewhere in the type
(e.g., the presence of a generic type parameter type), introduce a
separate Type::findIf() to search for child types with some
property. As a bonus, we don't need an ASTContext for such queries.


Swift SVN r7531
2013-08-23 21:59:25 +00:00
Jordan Rose
c33b32531e Fix type printing harder.
(Specifically, harder than Stephen's commit in r7510.)

The type grammar has a notion of "type-simple", which is roughly "any type
that can be put in an array without parens". Some types are normally not
printed in a type-simple-compatible way (e.g. functions "Int -> Int"), so
we fix this by adding parens when printing them as part of a larger type.

Swift SVN r7528
2013-08-23 21:39:08 +00:00
Doug Gregor
fe131be5b9 Switch TypeBase::isDependentType() over to Type::transform().
Swift SVN r7527
2013-08-23 21:30:22 +00:00
Doug Gregor
93a0c8e8da Introduce Type::transform() to transform a type via some function object.
This AST-level transformation will eventually subsume
TypeChecker::transformType(). For now, use it for getting unlabeled
types and types without default arguments.


Swift SVN r7526
2013-08-23 21:21:26 +00:00
Stephen Lin
06c92f0eef Correctly print function types when input is an unnamed function type (i.e. not wrapped in a tuple type)
Swift SVN r7512
2013-08-23 18:41:12 +00:00
Doug Gregor
7e5e154f87 Traversal: turn missing visit*Stmt methods into link-time errors.
Swift SVN r7508
2013-08-23 18:16:22 +00:00
Doug Gregor
7634cd292e Traversal: turn missing visit*Pattern methods into link-time errors.
Swift SVN r7506
2013-08-23 18:08:56 +00:00
Doug Gregor
d93056080e Traversal: turn missing visit*TypeRepr() methods into link errors.
Swift SVN r7505
2013-08-23 18:06:22 +00:00
Doug Gregor
b3064a0675 ASTWalker: Walk OptionalTypeReprs, and add TypeRepr::walk().
Swift SVN r7503
2013-08-23 17:52:58 +00:00
Doug Gregor
7d3aac74be Make TypeBase::isDependentType() recursive, rather than shallow.
Swift SVN r7502
2013-08-23 17:52:08 +00:00
Jordan Rose
7d6d336983 Add autolinking infrastructure to Module and ClangImporter.
...and use it to load frameworks and libraries in immediate modes (-i and
the REPL), replacing a walk of visible modules that checked if any imported
modules were Clang modules.

Swift SVN r7488
2013-08-22 23:20:23 +00:00
Jordan Rose
f1bc7801f4 Rework getReexportedModules to optionally find all imported modules.
...instead of just those that are re-exported. This will be used for
autolinking (and probably few other places).

As part of this, we get two name changes:
  (1) Module::getReexportedModules -> getImportedModules
  (2) TranslationUnit::getImportedModules -> getImports

The latter doesn't just get modules-plus-access-paths; it also includes
whether or not the import is re-exported. Mainly, though, it just didn't
seem like a good idea to overload this name when the two functions aren't
really related.

No tests yet, will come with autolinking.

Swift SVN r7487
2013-08-22 23:20:18 +00:00
John McCall
ffeea0c229 Move getTypeOfRValue into Sema as well.
Swift SVN r7479
2013-08-22 21:36:39 +00:00
John McCall
1ea82afa8e Split ReferenceStorageType into {Weak,Unowned}StorageType.
Swift SVN r7478
2013-08-22 21:36:36 +00:00
Doug Gregor
7c84fd5926 Start detangling archetypes from the interface of generic functions.
This breaks the type-canonicalization link between a generic parameter
type and the archetype to which it maps. Generic type parameter types
are now separate entities (that can eventually be canonicalized) from
archetypes (rather than just being sugar).

Most of the front end still traffics in archetypes. As a step away
from this, allow us to type-check the generic parameter list's types
prior to wiring the generic type parameter declarations to archetypes,
using the new "dependent" member type to describe assocaited
types. The archetype builder understands dependent member types and
uses them to map down to associated types when building archetypes.

Once we have assigned archetypes, we revert the dependent identifier
types within the generic parameter list to an un-type-checked state
and do the type checking again in the presence of archetypes, so that
nothing beyond the generic-parameter-list checking code has to deal
with dependent types. We'll creep support out to other dependent types
elsewhere over time.



Swift SVN r7462
2013-08-22 18:07:40 +00:00