Commit Graph

21693 Commits

Author SHA1 Message Date
Jordan Rose
ec23db6962 Push the TU's lookup cache down to SourceFile.
Also move print() and dump() from TranslationUnit to SourceFile.

Swift SVN r9645
2013-10-24 18:59:18 +00:00
Dmitri Hrybenko
f9382f8d01 Remove ModuleLoadListener, it is not used anymore
Swift SVN r9638
2013-10-24 04:50:31 +00:00
Dmitri Hrybenko
8d8b60f973 Code completion: implement result caching per-imported module across muptiple
ASTContexts

This introduces swift::ide::CodeCompletionCache, which is a persistent code
completion result cache.

Right now REPL happens to use it (try importing Cocoa and doing code
completion), and the difference is noticeable.  But completion in REPL is
still slow, because Cocoa goes through the AST Verifier on every completion
(for unknown reasons).

This commit does not implement cache invalidation yet, and it does not use
libcache to evict cache entries under memory pressure.

This commit also introduces two regressions:
- We get fewer Cocoa results that expected.  Module::isModuleVisible in Clang
does not incorrectly reports that that ObjectiveC.NSObject submodule is not
visible from Cocoa.

- We are not implementing the decl hiding rules correctly.  We used to rely on
visible decl lookup to do it for us, but now we have a different data structure
we have real decls from the current module and we have a text-only cache, so we
are forced to reimplement this part of name lookup in code completion.


Swift SVN r9633
2013-10-24 02:13:34 +00:00
Doug Gregor
fbdfc7b1ab Eliminate a few places where we were willfully faking the "full opened type".
Tighten up AST verification: all DeclRefExprs to non-protocol
functions have embedded (complete) substitutions now.



Swift SVN r9620
2013-10-23 15:06:00 +00:00
Doug Gregor
6f87c8c908 Eliminate SpecializeExpr for qualified references to free functions.
Start verifying that we don't have any non-directly-specialized
DeclRefExprs referring to free functions.


Swift SVN r9619
2013-10-23 14:26:14 +00:00
Doug Gregor
fcf9f91ae5 Add the value witness marker for generic builtins.
Swift SVN r9618
2013-10-23 14:23:15 +00:00
Dmitri Hrybenko
80d753d0ab Portability: use std::make_tuple instead of relying on a libc++ extension (an
implicit constructor in std::tuple)


Swift SVN r9615
2013-10-23 06:17:28 +00:00
Doug Gregor
905078a278 Open method references via the interface type rather than the polymorphic type.
Once we've opened method references via the interface type, we then
fold all levels of generic argument specialization into the
DeclRefExpr, rather than using SpecializeExpr. For reference, the call
to x.f in this example:

struct X<T> {
  func f<U>(u : U) { }
}

func honk(x: X<Int>) {
  x.f("hello")
}

goes from this double-specialized AST:

        (specialize_expr implicit type='(u: String) -> ()'
          (with U = String)
          (dot_syntax_call_expr type='<U> (u: U) -> ()'
            (specialize_expr implicit 
               type='(@inout X<Int>) -> <U> (u: U) -> ()'
              (with T = Int)
              (declref_expr type='<T> @inout X<T> -> <U> (u: U) -> ()'
        decl=t.X.f@t.swift:2:8 specialized=no))

to the cleaner, SpecalizeExpr-free:

        (dot_syntax_call_expr type='(u: String) -> ()'
          (declref_expr type='(@inout X<Int>) -> (u: String) -> ()'
            decl=t.X.f@t.swift:2:8 [with T=Int, U=String]
            specialized=no)

which handles substitutions at both levels together. The minor SILGen
tweak 

Note that there are numerous other places where we are still generated
SpecializeExprs.


Swift SVN r9614
2013-10-23 05:35:16 +00:00
Doug Gregor
d8b647398e Dump DeclRefExpr's ConcreteDeclRef appropriately.
Swift SVN r9604
2013-10-22 23:05:06 +00:00
Dmitri Hrybenko
aa337de4ef AST Dumper: ensure that all output goes to the given raw_ostream
Swift SVN r9602
2013-10-22 22:23:20 +00:00
Dmitri Hrybenko
c6f1bec10d Add an API ASTContext::getLoadedModule() to return the module only if it was
loaded already, without trying to load it.


Swift SVN r9601
2013-10-22 22:03:28 +00:00
Joe Groff
0644879533 Quell 'dump' deprecation warning in AST verifier.
Swift SVN r9592
2013-10-22 16:08:21 +00:00
Joe Groff
db5fe95abb AST: Add a Builtin.condfail function.
Lowered by SILGen into a cond_fail instruction.

Swift SVN r9591
2013-10-22 15:53:11 +00:00
Argyrios Kyrtzidis
549dfb882a [AST] Record and report the protocol requirement decls that a ValueDecl conforms to.
Swift SVN r9587
2013-10-22 15:47:37 +00:00
Argyrios Kyrtzidis
791d9b74f5 [ASTDumper] Centralize the ValueDecl-specific dumping to one function.
Swift SVN r9579
2013-10-22 05:44:10 +00:00
Doug Gregor
f2f38b930d Teach GenericTypeResolver to produce the type of a DeclContext.
When we're checking the signature of a generic function, we want
references to elements within an enclosing DeclContext (such as an
unspecialized reference to an enclosing generic class or a reference
to a typealias of a generic class) to involve generic parameters
rather than archetypes. Elsewhere, we want the
archetypes. GenericTypeResolver is responsible for handling this
distinction.


Swift SVN r9563
2013-10-21 22:22:37 +00:00
Dmitri Hrybenko
b0b500907d Lookup visible decls / code completion: correctly filter out non-NominalDecls
when looking for visible members


Swift SVN r9562
2013-10-21 22:19:01 +00:00
Dmitri Hrybenko
acdd5b120a Make type checker debug output redirectable
Introduce a replaceable TypeCheckerDebugConsumer for this.


Swift SVN r9555
2013-10-21 20:26:32 +00:00
Doug Gregor
cd0299f85a Push get/setInterfaceType() up to ValueDecl.
No functionality change here.


Swift SVN r9552
2013-10-21 19:05:02 +00:00
Doug Gregor
c9b30d191e Give the builtin generic functions proper interface types.
Swift SVN r9542
2013-10-21 16:11:02 +00:00
Doug Gregor
5269d99d0c Store substitutions within a DeclRefExpr.
Replace DeclRefExpr's stored ValueDecl* with a ConcreteDeclRef,
allowing it to store the complete set of substitutions applied to
the declaration. Start storing those substitutions (without using them
yet).


Swift SVN r9535
2013-10-21 14:36:23 +00:00
Joe Groff
1f7192f7f2 Add print/dump methods to Substitution.
Swift SVN r9512
2013-10-19 00:21:54 +00:00
Doug Gregor
0d7aae2b92 Fix dropped part of r9507.
Swift SVN r9510
2013-10-19 00:19:26 +00:00
Doug Gregor
d7a1d536b4 Introduce value witness markers into the generic set of requirements.
Value witness markers note the location within a generic function
type's list of requirements where the value witness table will be
placed when calling a generic function with that type. It allows one
to get the same effect from walking the requirements of a generic
function that one would get from walking all levels of a
GenericParamList, with all archetypes of each generic parameter list,
along with all of the protocols to which each archetype conforms,
which SILGen and IRGen both do.

AST verification ensures that the property above holds; we're not
making use of it just yet.


Swift SVN r9509
2013-10-19 00:19:01 +00:00
Doug Gregor
e3ebb03c28 Start opening GenericFunctionTypes for references to non-member functions.
When the type checker sees a reference to a generic non-member
function, open its interface type, which is expressed as a
GenericFunctionType, rather than its PolymorphicFunctionType. This is
a tiny step toward weaning the type checker off archetypes within the
interface.




Swift SVN r9504
2013-10-18 23:04:16 +00:00
Dmitri Hrybenko
ae03a13d54 Code completion: complete tuple memebrs
Swift SVN r9483
2013-10-18 17:49:34 +00:00
Joe Groff
5721bdda01 Don't pretend we can parse enum case refined types.
There's no way we'll be able to fully implement GADTs anytime soon.

Swift SVN r9477
2013-10-18 01:34:25 +00:00
Doug Gregor
1c826fb506 Synchronize a generic function type's requirements with archetype requirements.
The list of requirements within a generic function type is
functionally identical to the list of conformances in the list of "all
archetypes" that a given function carries. Synchronize these lists so
they have identical requirements in the same order, which allows us to
substitute the former for the latter.


Swift SVN r9472
2013-10-17 23:29:57 +00:00
Dmitri Hrybenko
a3bf2b477f Code completion: basic completion for qualified references to enum elements
Swift SVN r9453
2013-10-17 18:35:40 +00:00
Dmitri Hrybenko
b17f51262e AST Verifier: Check that non-static member functions have the correct type set
for the "self" parametr.


Swift SVN r9415
2013-10-16 18:33:40 +00:00
Doug Gregor
7d3472e9ec Separately convert each element in an array literal to the array element type.
Allows us to properly infer the type (Int, Int)[] from the array
literal [(1, 2)]. This is the last piece of functionality in
<rdar://problem/11293232>.


Swift SVN r9408
2013-10-16 14:32:49 +00:00
Anna Zaks
740fc0a9d9 Revert "Revert "Reimplement integer arithmetic overflow checking to use special, error on overflow builtins""
(This only fails under -DSWIFT_OPTIMIZED=NO; most likely due to an llvm bug.)

We've decided that it's best to specialize each arithmetic builtin that could overflow, instead of calling a separate generic "staticReport" builtin and passing it enough info to produce the message. The main advantage of this approach is that it would be possible for the compiler to customize the message and better link it to the builtin that overflows. For example, the constants that participated in the computation could be printed. In addition, less code will be generated and the compiler could, in the future, automatically emit the overflow diagnostics/trap at runtime.

This patch introduces new versions of op_with_overflow swift builtins. Which are lowered to llvm.op_with_overflow builtins in IRGen after the static diagnostics. If the last argument to the builtins evaluates to true, the overflow is unintentional. CCP uses the builtins to diagnose the overflow detectable at compile time. FixedPoint is changed to rely on these in implementation of primitive arithmetic operations.

Swift SVN r9328
2013-10-14 21:42:33 +00:00
Dmitri Hrybenko
158ed79f34 Adds overflow checking for floating point literals. The approach is the same
as for integer literals.


Swift SVN r9325
2013-10-14 19:47:38 +00:00
Mon Ping Wang
00467ba953 Reintroduce "Add support for Axle library." from 9292. Added an dependency to prevent building the
core and axle core at the same time.


Swift SVN r9309
2013-10-14 07:51:19 +00:00
Dmitri Hrybenko
f40ba621a8 Make integer literals 2048-bit. This covers the whole Float64 range.
Swift SVN r9308
2013-10-14 05:18:55 +00:00
Joe Groff
cf457d2210 Revert "Add support for Axle library." It breaks the build.
This reverts commit r9292.

Swift SVN r9296
2013-10-13 22:38:22 +00:00
Mon Ping Wang
41aca3e7e6 Add support for Axle library. Please note that AxeBuiltins.gyb will be
expanded soon for the other graphics builtins.


Swift SVN r9294
2013-10-13 19:54:01 +00:00
Argyrios Kyrtzidis
d9e0921a76 [ASTWalker] Walk the pattern of a ForEachStmt.
Swift SVN r9291
2013-10-13 18:50:50 +00:00
Argyrios Kyrtzidis
f995d2ac28 [ASTWalker] Walk the TypeRepr of a typealias.
Swift SVN r9290
2013-10-13 18:50:49 +00:00
Chris Lattner
d564b86916 fix the astprinter to print attributes in the right place, which should
fix IDE/print_ast_tc_decls.swift


Swift SVN r9286
2013-10-13 16:29:59 +00:00
Chris Lattner
6d6ad84831 switch ast printer to print attributes in the new syntax.
Swift SVN r9281
2013-10-13 14:56:54 +00:00
Dmitri Hrybenko
d585bf1a73 Fix tests after r9275
Swift SVN r9279
2013-10-13 06:56:43 +00:00
Chris Lattner
d3e998aed0 switch AttributedTypeRepr::printAttrs to use the new attribute syntax.
This code apparently isn't exercised by the testsuite.


Swift SVN r9274
2013-10-13 05:53:20 +00:00
Chris Lattner
a476f65471 Abolish the old attribute syntax for type attributes (and SIL type attrs)
- Change type attribute printing logic (in astprinter and the demangler) 
  to print in the new syntax
- Change the swift parser to only accept type attributes in the new syntax.
- Update canParseTypeTupleBody to lookahead over new-syntax type attributes.
- Update the testsuite to use the new syntax.



Swift SVN r9273
2013-10-13 05:39:46 +00:00
Chris Lattner
80aee75507 The weak/unowned attributes are overloaded to mean two things:
1) on decls, they say the decl is weak/unowned.
2) in sil mode, on types, they indicate that the type has weak/unowned storage.

Since these are different things, split the SIL type attributes out to new 
attributes (sil_weak/sil_unowned) to crystalize the relationship.


Swift SVN r9270
2013-10-13 04:38:11 +00:00
Chris Lattner
e341dd94e9 inout, localstorage and silself are type attributes, not decl attributes.
Swift SVN r9269
2013-10-13 04:14:03 +00:00
Chris Lattner
b75e7c135b cc, auto_closure, thin, and objc_block attributes are only valid on types, make them
specific to types.  While we're at it, improve the diagnostic for when a decl-specific
attribute is applied to a type, or a type-specific attribute is applied to a decl.


Swift SVN r9268
2013-10-13 04:05:45 +00:00
Chris Lattner
0dd0602b97 introduce a new (thinner) TypeAttributes class, which *just* holds
type attributes.  Use this when parsing type-annotations, and when
building TypeReprs.



Swift SVN r9266
2013-10-13 03:31:09 +00:00
Chris Lattner
09705dc7cd 1) Redesign DeclAttributes to be based around an array indexed by attribute, instead
of having a ton of ad-hoc bools in it.  This allows us to consolidate a ton of 
   boilerplate, eliminating 250 lines of code:

 17 files changed, 435 insertions(+), 662 deletions(-)

2) This eliminates the special case for weak and unowned attributes, which previously
   didn't show up in Attr.def.

3) While we're at it, keep track of proper source locations for each attribute, and
   use these to emit diagnostics pointing at the attribute in question instead of at
   a funcdecl or the @ sign.

4) Fix axle attributes, which had vertex and fragment swapped.



Swift SVN r9263
2013-10-13 01:25:50 +00:00
Dmitri Hrybenko
011284e9c9 Make minus sign part of IntegerLiteralExpr and make integers literals 136-bits
wide

Currently integer literals are 64-bit.  In order to allow checking for overflow
while converting an integer literal to swift.UInt/Int* types we need at least
65 bits.  But floating point numbers (Float32, Float64, Float80) are
BuiltinIntegerLiteralConvertible.  In order to allow spelling large floating
point constants, we allow 136-bit literals.

Rationale: 128 bits are enough to represent the absolute value of min/max IEEE
Binary32, and we need 1 bit to represent the sign.  136 is 129 rounded to the
next 8 bits.

The plan is to have builtins that do the overflow check and convert 136-bit
numbers to the required width.  We need these builtins for both integers and
floating point numbers to ensure that 136-bit numbers are folded into sane
constants in SIL and don’t escape to LLVM IR.


Swift SVN r9253
2013-10-12 04:52:11 +00:00