Commit Graph

12816 Commits

Author SHA1 Message Date
John McCall
c1f55327a8 Add missing file to CMakeLists.
Swift SVN r3105
2012-11-03 00:26:57 +00:00
John McCall
7c277001a4 Implement basic objc_msgSend capabilities.
Swift SVN r3104
2012-11-03 00:26:56 +00:00
Joe Groff
6449655e21 Implement selector-style function definition syntax.
rdar://12315571
Allow a function to be defined with this syntax:

  func doThing(a:Thing) withItem(b:Item) -> Result { ... }

This allows the keyword names in the function type (in this case
`(_:Thing, withItem:Item) -> Result`) to differ from the names bound in the
function body (in this case `(a:Thing, b:Item) -> Result`, which allows
for Cocoa-style `verbingNoun` keyword idioms to be used without requiring
those keywords to also be used as awkward variable names. In addition
to modifying the parser, this patch extends the FuncExpr type by replacing
the former `getParamPatterns` accessor with separate `getArgParamPatterns`
and `getBodyParamPatterns`, which retrieve the argument name patterns and
body parameter binding patterns respectively.



Swift SVN r3098
2012-11-01 21:53:15 +00:00
John McCall
ce7ddef710 Change value witnesses to take the metatype as 'self'.
The motivations here are that (1) the parametric types
that actually need the 'self' argument don't necessarily
all want to do what tuples do and put the VWT relative
to the metatype at some definable offset and (2)
recovering type parameters from the metatype is much
better defined than also hopping some relationship back.
Plus this allows VWTs to be shared across instances of
generic types.  Also, I'm going to need to add a VW
that takes a metatype, and consistency seems right here.

If keeping two values live is actually punishing, I
might have to reconsider this.  But the VWT is at least
always recoverable from the metatype, so....

I ended up abstracting the thing that GenHeap was doing
in order to save archetypes for arrays, because I
needed it to save metatypes instead of VWTs and because
it really needed abstractin'.

Swift SVN r3096
2012-10-31 08:09:33 +00:00
John McCall
310268c4fd Fix several bugs in the emission of metatype references.
In particular, fix a bug where DREs that refer to types were
always given trivial reps because we were trying to emit the
metatype's metatype.  This in turn exposes a number of bugs,
including a typechecker bug (where GetMetatypeExpr bases
weren't converted to r-values) and a bug where MREs that
refer to types were always assumed to produce trivial reps.

Swift SVN r3095
2012-10-31 08:09:28 +00:00
John McCall
7a95ef9a5f Add code to generate the globals behind selectors.
Untestable so far.

Swift SVN r3090
2012-10-30 00:21:16 +00:00
John McCall
07482e6de1 If the root class in a hierarchy is marked with [objc], we
have to use objc_retain/release.

Swift SVN r3089
2012-10-30 00:20:40 +00:00
John McCall
84f3b7f884 Unify the ObjC and Swift heap pointer TypeInfos.
Swift SVN r3088
2012-10-30 00:19:33 +00:00
Doug Gregor
b10920d65d Cope with DataLayout::getIntPtrType() change on mainline.
Swift SVN r3073
2012-10-28 03:30:24 +00:00
John McCall
24d819e133 Split BoundGenericType into BoundGeneric{Class,OneOf,Struct}Type.
We'll want a superclass pointer on ClassType and BoundGenericClassType,
and this also makes it easier to detect both kinds of class type.

Swift SVN r3061
2012-10-25 21:44:44 +00:00
John McCall
c8f53e3535 Add a MetatypeConversionExpr for doing derived-to-base
conversions on metatypes;  at runtime it has no effect,
since those conversions are always trivial.  Fix a number
of bugs involving the conversion of metatypes, in both
typecheckers.

Swift SVN r3055
2012-10-25 10:21:44 +00:00
John McCall
2f8f05615e Rename TypeOfExpr / TypeOfInst to MetatypeExpr / MetatypeInst.
Introduce a '.metatype' form in the syntax and do some basic
type-checking that I probably haven't done right.  Change
IR-generation for that and GetMetatypeExpr to use code that
actually honors the dynamic type of an expression.

Swift SVN r3053
2012-10-24 07:54:23 +00:00
John McCall
8999ff03db Remember the metatype for This in a method on a generic
struct so that we can re-use it in the function body,
e.g. if we call another method on the type.

Swift SVN r3048
2012-10-23 23:30:25 +00:00
John McCall
0548cc7cff Cache local metadata in the scope in which we compute it,
to avoid some obvious redundancies.  This also gives us a
more general framework with which to exploit other ways
in which metadata is known.

Swift SVN r3047
2012-10-23 23:30:23 +00:00
John McCall
e8d5f08e94 Fix/suppress some warnings arising in newer clangs
as reported by Chris.

Swift SVN r3044
2012-10-23 08:12:08 +00:00
John McCall
85490080c2 Make protocol thunks expect a metatype pointer (for This) as
their last argument.  Pass it down correctly.

Swift SVN r3042
2012-10-23 07:59:35 +00:00
John McCall
3e0957af8f When emitting a polymorphic signature like <T,U> A<T,U>& -> (),
pass A<T,U>.metatype instead of breaking apart the type.
This is a WIP commit, because it breaks existentials quite
badly.

Swift SVN r3041
2012-10-23 07:59:30 +00:00
Eli Friedman
a9f685d94b Fix my crazy swift.swift inlining hack so it doesn't pull in llvm.global_ctors. <rdar://problem/12539597>.
Swift SVN r3032
2012-10-20 00:01:26 +00:00
Chris Lattner
4494a988f4 implement support for default arguments and varargs in ScalarToTupleExpr lowering.
There is an apparent case where sema isn't computing the varargs injection function when it should (example 'd'), I'll look at that next.


Swift SVN r3028
2012-10-19 22:42:27 +00:00
John McCall
36b4ebb9c6 Change the representation of existential types to always store
a type pointer;  in the case of protocol<>, this replaces the
mandatory trivial witness table, and in all other cases it simply
grows the representation by a pointer.  We've discussed shrinking
the representation by making the witness-table lookup a (cached)
lookup from the type metadata;  this needs more investigation.

Swift SVN r3018
2012-10-18 06:08:06 +00:00
Chris Lattner
e475986dbc adapt to mainline llvm API changes.
Swift SVN r3006
2012-10-16 17:54:16 +00:00
John McCall
2353465f3f Add an API for reemitting as a substituted type and change
protocol witnesses over to the new API.  There's some badness
that we're papering over here involving generic types, but
this is a necessary first step.

Swift SVN r3003
2012-10-14 07:36:22 +00:00
Chris Lattner
acde227dc6 Now that CFGNodes.def is straightened out, add a BBArgument class to represent
basic block arguments.  Nothing generates them yet though.


Swift SVN r3000
2012-10-12 22:32:56 +00:00
Eli Friedman
6a34b36e67 Attempt to handle empty global variables correctly. <rdar://problem/12490628>
Swift SVN r2999
2012-10-12 22:18:42 +00:00
Dave Zarzycki
89bf1a0fc9 Fix unused variable warnings with asserts disabled
Swift SVN r2996
2012-10-12 21:52:09 +00:00
John McCall
e298448e7d Compensate for a trunk LLVM change.
Swift SVN r2983
2012-10-11 20:14:08 +00:00
John McCall
261731a8aa Make a function for reemitting an unsubstituted explosion
as a substituted one, which is critical for thunk emission.

Swift SVN r2976
2012-10-11 04:29:32 +00:00
John McCall
64c8346afc Promote reemitUnderSubstitutions to API and give it a better
name that makes the direction of substitution clear.

Swift SVN r2975
2012-10-11 04:29:29 +00:00
John McCall
17944ddefe Rename emitRValueUnderSubstitutions to make clear the
direction of substitution.

Swift SVN r2974
2012-10-11 04:29:24 +00:00
John McCall
f4dd62dee7 Metatypes for class types have non-trivial representation.
Swift SVN r2971
2012-10-11 00:36:05 +00:00
John McCall
98aa71f424 Move EmptyTypeInfo into GenType.cpp
Swift SVN r2970
2012-10-11 00:36:04 +00:00
Chris Lattner
4135441203 update to build with mainline API changes.
Swift SVN r2968
2012-10-10 22:22:06 +00:00
John McCall
ae978371ac Make calls to non-static methods on classes use virtual
dispatch.  Currently there is no possibility of override.

This was really not as difficult as I managed to make it
the first time through.

Swift SVN r2960
2012-10-10 01:31:47 +00:00
Eli Friedman
dd299a35af Fix for LLVM TargetData -> DataLayout rename.
Swift SVN r2959
2012-10-09 23:18:24 +00:00
John McCall
37d024bd38 bindGenericArchetypes is now just how we emit polymorphic
functions on class types, so we can kill all that special code.

Swift SVN r2943
2012-10-05 01:54:52 +00:00
Chris Lattner
b9279c7239 Remove some dead code from emitCondition: unlike clang, it is impossible
for Swift's IRGen (or CFGGen) to get a constant folded condition when 
emitting a branch: this is because all constants are obfuscated behind
function calls.  This is verified to never trigger on the testsuite.


Swift SVN r2940
2012-10-05 01:01:54 +00:00
John McCall
6e9a2aab8b Fix a conceptual bug in class metadata: the parent pointer
of a class is part of the class members section and is not
global to the entire class metadata.  This is crucial for
correct operation of functions expecting a base-class
metadata object.

That gives us the correct foundation to implement an
optimization under which generic arguments that can be
inferred from the 'this' pointer need not actually be
separately passed.  This has the important result of
making all class member functions with the same signature
up to abstraction actually have the same physical
signature.

Swift SVN r2936
2012-10-04 23:44:31 +00:00
John McCall
526e2d7c54 Flesh out some code to decide when we can avoid passing
metadata and witness tables separately to polymorphic
functions.

Swift SVN r2935
2012-10-04 23:44:24 +00:00
John McCall
1f5b775bc7 Use metatype pointers as generic type arguments. Movements
towards optimizing generic calls to derive things from the
'this' pointer, which is actually crucial for virtual
dispatch (to get all methods to agree about how the
implicit arguments are passed).  Fix a number of assorted
bugs in metadata emission.  Lots of assorted enhancements.

This was proving surprisingly difficult to actually tease
apart into smaller patches.

Swift SVN r2927
2012-10-03 08:57:40 +00:00
John McCall
179e260ea3 Add an abstraction to encapsulate a Decl + explosion level +
uncurrying level, which is something I find myself passing around
quite a bit.  Make sure that it can propagate getter/setter
references in the same way.

Swift SVN r2902
2012-09-28 05:21:24 +00:00
John McCall
3467e63516 Emit pointers to final overriders of member functions into
the metadata objects for classes.  This is currently only
done for methods defined in the main class body, and it's
(naturally) totally fragile, and it's screwed up in a
couple known ways w.r.t. generic classes:  there's no
thunking when the overrider differs by abstraction from
the overridden method, and methods on classes currently
expect to get all the type arguments passed directly
and thus will disagree in signature from members of
non-generic classes.  Also, of course, we're not using
any of this in the call infrastructure.  But it's progress.

Swift SVN r2901
2012-09-27 06:17:46 +00:00
John McCall
a07ecb14f5 IR-gen version of previous commit.
Swift SVN r2900
2012-09-27 06:17:43 +00:00
John McCall
ee012c0903 Make IR-gen use canonical types as the basic type currency.
This is kindof a pain in a few places where the type system
doesn't propagate canonicality.  Also, member initializations
are always direct-initializations and so are allowed to use
explicit constructors, which is a hole in our canonicality
tracking.  But overall I like the idea of always working
with canonical types.

Swift SVN r2893
2012-09-21 07:53:08 +00:00
John McCall
32cc48dc84 More restructuring and start emitting struct metadata.
Swift SVN r2892
2012-09-21 07:53:02 +00:00
John McCall
2d03d842f5 Move class metadata emission into GenMeta.cpp. The main
motivation for this is to re-use code involving generic nominal
types.

Swift SVN r2891
2012-09-21 07:52:58 +00:00
John McCall
fe97523a2a Extract out a header for doing class metadata layout.
Also rename a bunch of things to say 'Class' in them in
preparation for other refactoring.

Swift SVN r2890
2012-09-21 07:52:54 +00:00
Eli Friedman
d8b84d6cd0 Add ScalarToTupleExpr to represent an implicit conversion from a scalar to a tuple. Part of <rdar://problem/12337042>.
Swift SVN r2887
2012-09-21 00:45:33 +00:00
Eli Friedman
919f63cf0e Zap extra semicolons (which some versions of clang warn about).
Swift SVN r2885
2012-09-20 23:26:08 +00:00
John McCall
a695354dc1 Make heap metadata use the metadata scheme.
Swift SVN r2871
2012-09-19 06:33:41 +00:00
John McCall
34da6d1650 Implement grabbing an external value witness table. I
described this mangling in a previous commit, and the runtime
is already using it for some standard tables.

Swift SVN r2870
2012-09-19 06:33:36 +00:00