Commit Graph

22474 Commits

Author SHA1 Message Date
Chris Lattner
854880b04d simplify some code by using the new implicit TupleTypeElt ctor.
Swift SVN r3620
2012-12-30 10:24:57 +00:00
Chris Lattner
db63db1c6b expose the llvm atomicrmw instruction through the builtin module to swift code,
wrapping up rdar://12939282.


Swift SVN r3619
2012-12-30 09:53:41 +00:00
Chris Lattner
53baaafffb implement support for generating the fence instruction through
Builtin.fence_*, part of rdar://12939282


Swift SVN r3618
2012-12-30 09:36:08 +00:00
Chris Lattner
fd2a4490fa expose the llvm cmpxchg instruction featureset through to the swift Builtin module,
first part of rdar://12939282.


Swift SVN r3617
2012-12-30 09:21:26 +00:00
Chris Lattner
13269140fb allow a default identifier when constructing tuple elements. Many are anonymous, and having to specify Identifier() explicitly is a nuisance.
Swift SVN r3616
2012-12-30 08:37:16 +00:00
Chris Lattner
1fd5d9c1da clean up Builtins.def:
- Don't require "OverloadedBuiltinKind::" to be in the invocation
   of a bunch of builtins for their specification of overload info.
   Eliminating this makes the file fit in 80 columns.
 - Eliminate a bunch of classifications that only classify one thing,
   in favor of a "BUILTIN_MISC_OPERATION" dumping ground for all the
   custom stuff.  This eliminates a bunch of boilerplate.

No functionality change.


Swift SVN r3615
2012-12-30 08:03:14 +00:00
Chris Lattner
41433f2e89 Improve diagnostic for use of unknown protocol member, make the base case
diagnostic strip of lvalue wrappers, make the base diagnostic mention the
member name, and add a radar number for a really terrible diagnostic that
needs to be solved in another way (12939553)


Swift SVN r3614
2012-12-30 07:43:19 +00:00
Chris Lattner
c532e2487f improve diagnostic on use of a type field when referencing the metatype.
Swift SVN r3613
2012-12-30 07:27:16 +00:00
Chris Lattner
3cf9b8f34e improve diagnostic for use of invalid tuple element.
Swift SVN r3612
2012-12-30 07:19:55 +00:00
Chris Lattner
01440c488d improve another shameful diagnostic from:
base type 'X.metatype' has no valid '.' expression for this field
to:
  metatype 'X' has no member named 'z'



Swift SVN r3611
2012-12-30 07:11:29 +00:00
Chris Lattner
a2150beb9e improve a diagnostic from:
base type 'module<swift>' has no valid '.' expression for this field var error = swift.nonexistent_member" 
to:
  module 'swift' has no member named 'nonexistent_member'



Swift SVN r3610
2012-12-30 07:06:01 +00:00
Joe Groff
554b8f4d12 AST: Fix up ASTVisitor's argument support.
Missed a few places where the extra args needed to be forwarded.

Swift SVN r3578
2012-12-21 21:16:34 +00:00
Joe Groff
6378e4312d AST: Allow ASTVisitors to add visit() args.
Allow an ASTVisitor subtype to have additional arguments to visit(T *, Args...) forwarded down to its instance methods.

Swift SVN r3569
2012-12-21 02:37:08 +00:00
Doug Gregor
2b2b2cfc31 Replace the constructor 'alllocates_this' attribute with an 'allocate-this' expression.
By splitting out the expression used to allocate 'this' (which exists
in the AST but cannot be written in the Swift language proper), we
make it possible to emit non-allocating constructors for imported
Objective-C classes, which are the only classes that have an
allocate-this expression.


Swift SVN r3558
2012-12-20 15:28:37 +00:00
Joe Groff
699d3e79b9 AST: typo in comment
Swift SVN r3550
2012-12-19 21:51:37 +00:00
Doug Gregor
3f19098a7e Emit importer-generated thunks as linkonce_odr hidden into every translation unit that imports the corresponding module.
Swift SVN r3547
2012-12-19 21:50:55 +00:00
Doug Gregor
59ab9d1954 Split superclass-to-archetype downcasts into their own expression node.
Swift SVN r3537
2012-12-18 23:48:19 +00:00
Doug Gregor
75c8591487 When lookup finds a generic parameter, treat it like a local declaration, not a member declaration.
Swift SVN r3534
2012-12-18 22:50:49 +00:00
Dave Zarzycki
c825debf2f Cleanup Enumeration
I tried to transform getEnumeratorType() into a VarDecl, but IRGen hasn't implement this feature yet.

Swift SVN r3527
2012-12-18 02:12:19 +00:00
Doug Gregor
71a7408d13 Teach name lookup to remove overridden methods in extensions from its results.
While we haven't worked out the details of whether methods in
extensions can be overridden in Swift, it's something that does happen
in Objective-C, so we need to deal with it.

With this change, note that our demo application can both allocate
Objective-C objects with "new" (which John recently fixed) and also
subscript mutable arrays to both read and write.


Swift SVN r3485
2012-12-13 23:19:37 +00:00
John McCall
894bceeff9 Add a visitor for the members of a nominal type.
This really just conveniently filters out all the kinds of
declarations that can't appear in such scopes.

Swift SVN r3473
2012-12-13 10:28:13 +00:00
Doug Gregor
96583a726b Introduce ArchetypeToSuperExpr for implicit archetype-to-superclass conversions.
The IR generation for this conversion is different from
derived-to-base conversions, because converting from an archetype to
its superclass type means projecting the buffer and then performing
the conversion.


Swift SVN r3462
2012-12-13 00:16:05 +00:00
Doug Gregor
be915b9c04 Implement semantic analysis for inherits-from constraints.
This change enables inheritance constraints such as "T : NSObject",
which specifies that the type parameter T must inherit (directly or
indirectly) from NSObject. One can then implicit convert from T to
NSObject and perform (checked) downcasts from an NSObject to a T. With
this, we can type-

IR generation still needs to be updated to handle these implicit
conversions and downcasts. New AST nodes may follow.


Swift SVN r3459
2012-12-12 23:28:19 +00:00
Joe Groff
e43761c199 AST: add print() and dump() methods to Pattern.
Expose the PrintPattern visitor implementation in AST/Decl.cpp through methods on Pattern, as is done with the other AST node types.

Swift SVN r3448
2012-12-12 17:42:15 +00:00
Doug Gregor
263cf27548 Use the pretty-printer to render imported declarations for diagnostics.
Note: this is an experiment.

When we're asked to render a diagnostic for a declaration that does
not have source information, pretty-print the declaration into a
buffer and synthesize a location pointing into that buffer. This gives
the illusion of Clang-style diagnostics where we have all of the
source headers, but without actually requiring that source location
information. It may prove useful or infuriating, but at the very least
it might help us understand how the importer works. Example:

cfuncs_diags.swift:14:7: error: no candidates found for call
  exit(5)
  ~~~~^~~
cfuncs_diags.swift:6:6: note: found this candidate
func exit(_ : Float) {}
     ^
cfuncs.exit:1:6: note: found this candidate
func exit(_ : CInt)
     ^



Swift SVN r3434
2012-12-11 00:21:20 +00:00
Doug Gregor
f3857df469 Implement an AST pretty-printer for declarations, under -print-ast.
Swift SVN r3431
2012-12-10 23:21:49 +00:00
John McCall
59d4677b35 Implement metatype references to ObjC classes.
The interesting thing here is that we need runtime support in
order to generate references to metatypes for classes, mostly
because normal ObjC classes don't have all the information we want
in a metatype (which for now just means the VWT pointer).
We'll need to be able to reverse this mapping when finding a
class pointer to hand off to, say, an Objective-C class method,
of course.

Swift SVN r3424
2012-12-10 08:17:57 +00:00
Jordan Rose
427be94945 Add the [iboutlet] and [ibaction] attributes.
Currently only used for parsing. The immediate intent of these attributes is
to have them behave like [objc] for the purpose of emitting method
implementations; however, they are semantically distinct and should only be
used to expose outlets and actions to Interface Builder.

Swift SVN r3416
2012-12-08 00:16:03 +00:00
Joe Groff
e0b9794941 Fix some comments.
Swift SVN r3415
2012-12-07 23:24:19 +00:00
Doug Gregor
319a100189 Allow diagnostics to accept declarations in lieu of source locations.
Swift's diagnostic system is built on the quaint notion that every
declaration known to the front end has a valid source location to
which diagnostics mentioning that declaration (say, in a "here is a
candidate" note) can point. However, with a real module system, the
source corresponding to a declaration in a module does not need to be
present, so we can't rely on source locations.

Instead of source locations, allow diagnostics to be anchored at a
declaration. If that declaration has source-location information, it
is used. Otherwise, we just drop source-location information for
now. In the future, we'll find a better way to render this information
so it feels natural for the programmer.


Swift SVN r3413
2012-12-07 22:51:11 +00:00
Doug Gregor
d3f6890299 Promote the clonePattern() static to Pattern::clone(), since this is common.
Swift SVN r3381
2012-12-06 18:14:53 +00:00
Doug Gregor
ba4abb20df Improve tracking of which external definitions have been type-checked and IRgen'd.
Swift SVN r3380
2012-12-06 17:42:49 +00:00
Doug Gregor
1f45f28837 Emit the constructors synthesized by the Clang importer for ObjC init/new methods.
Note that the constructors we emit don't function yet, since they rely
on the not-yet-implemented class message sends to Objective-C
methods.


Swift SVN r3370
2012-12-05 22:01:38 +00:00
Doug Gregor
9904844727 Move 'external definitions' vector into the Clang module; it only makes sense there.
Swift SVN r3367
2012-12-05 18:35:33 +00:00
Doug Gregor
85f690d086 Type-check the constructors synthesized for Objective-C init/new methods.
Swift SVN r3366
2012-12-05 18:15:48 +00:00
Joe Groff
ac40cb59ff AST: Dump getter/setter link for FuncDecls.
Swift SVN r3363
2012-12-05 17:59:01 +00:00
Doug Gregor
a221a6986b Rename the "allocating" attribute to "allocates_this".
Swift SVN r3353
2012-12-04 20:20:58 +00:00
Doug Gregor
d04db691ec Retain the first selector piece when importing init/new methods as constructors.
This is the conservative solution that we can revisit later.


Swift SVN r3352
2012-12-04 20:00:01 +00:00
Doug Gregor
08c9b5c7b2 Allocating constructors are expected to allocate and assign 'this' on their own.
This implementation is very lame, because we don't currently have a
way to detect (in Sema or SIL) where 'this' gets uniquely assigned,
and turn that assignment into initialization.

Also, I'm starting to hate the name 'allocating' constructor, because
it's the opposite of the Itanium C++'s notion of the allocating
constructor. Will think up a better name.




Swift SVN r3347
2012-12-04 01:06:30 +00:00
Joe Groff
93b91e9cb4 Fix another typo in diagnostic message.
Swift SVN r3337
2012-12-03 23:18:48 +00:00
Joe Groff
de122ee89a Fix typo in diagnostic messages
Swift SVN r3335
2012-12-03 20:38:12 +00:00
Doug Gregor
dc7dcc7fc5 Implement explicit (unchecked!) downcasting for class types.
This introduces support for the syntax

  Derived(baseObj)

to downcast from a class type to one of its subclasses. This still
needs more language design and implementation work, including:
  - This overloads the X(y) syntax again, which already means either
  "coerce y to type X, performing implicit conversions if necessary"
  or "construct a value of type X from y". It's no actually ambiguous,
  because the first case won't apply for downcasts and the second case
  is limited to value types, but it makes me wonder whether we want a
  different syntax for the first case.

  - We need this to be a checked cast, but don't have the runtime
    infrastructure to do so yet. I've left this as a FIXME.

However, the Objective-C importer is fairly useless because everything
that creates an object returns an "id", "id" maps to "NSObject", and
then the type system doesn't let you get from NSObject back to the
type you care about. So, this lets you explicitly do the cast.



Swift SVN r3279
2012-11-28 16:59:27 +00:00
Doug Gregor
b632ef6ba0 Introduce an abstract ExplicitCastExpr, for explicit type casts.
No functionality change: the only subclass is CoerceExpr, for cases
where the user has forced an expression to a given type, e.g., Int32(17).


Swift SVN r3278
2012-11-28 15:44:14 +00:00
Doug Gregor
8b22cb0ff8 Don't reference ClangModule in the general ModuleLoader
Swift SVN r3261
2012-11-27 21:10:09 +00:00
Doug Gregor
83f2874ba1 Implement support for calling imported C functions from Swift.
There is no protection whatsoever if the Clang-to-Swift type
conversion produces something that Swift doesn't lower in an
ABI-compatible way. That will be dealt with later.


Swift SVN r3249
2012-11-27 00:34:48 +00:00
Doug Gregor
f5eae6a60f Import Objective-C class methods into Swift.
Swift SVN r3244
2012-11-26 18:00:37 +00:00
Doug Gregor
7a565361a7 Actually compute NumValueDeclBits correctly.
Swift SVN r3243
2012-11-26 17:54:02 +00:00
Doug Gregor
26a23c8f3d Zap an unused member of swift::Module
Swift SVN r3201
2012-11-16 18:27:39 +00:00
Doug Gregor
bb26f52585 Initial support for loading Clang modules into Swift.
From a user's perspective, one imports Clang modules using the normal
Swift syntax for module imports, e.g.,

  import Cocoa

However, to enable importing Clang modules, one needs to point Swift
at a particular SDK with the -sdk= argument, e.g.,

  swift -sdk=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9M.sdk

and, of course, that SDK needs to provide support for modules.

There are a number of moving parts here. The major pieces are:

CMake support for linking Clang into Swift: CMake users will now need
to set the SWIFT_PATH_TO_CLANG_SOURCE and SWIFT_PATH_TO_CLANG_BUILD
to the locations of the Clang source tree (which defaults to
tools/clang under your LLVM source tree) and the Clang build tree.

Makefile support for linking Clang into Swift: Makefile users will
need to have Clang located in tools/clang and Swift located in
tools/swift, and builds should just work.

Module loader abstraction: similar to Clang's module loader,
a module loader is responsible for resolving a module name to an
actual module, loading that module in the process. It will also be
responsible for performing name lookup into that module.

Clang importer: the only implementation of the module loader
abstraction, the importer creates a Clang compiler instance capable of
building and loading Clang modules. The approach we take here is to
parse a dummy .m file in Objective-C ARC mode with modules enabled,
but never tear down that compilation unit. Then, when we get a request
to import a Clang module, we turn that into a module-load request to
Clang's module loader, which will build an appropriate module
on-the-fly or used a cached module file.

Note that name lookup into Clang modules is not yet
implemented. That's the next major step.



Swift SVN r3199
2012-11-16 18:17:05 +00:00
John McCall
2568c1b043 getSelector -> getObjCSelector per Doug's review.
Swift SVN r3186
2012-11-14 19:30:22 +00:00