Commit Graph

12816 Commits

Author SHA1 Message Date
John McCall
28c7ba900b Hack the linkage and visibility of witnesses so that the REPL
doesn't die if the same witness is required on multiple lines.
The right solution here is to find some way to re-use the
previous functions.

Swift SVN r1994
2012-05-25 17:58:00 +00:00
John McCall
40d1591f89 Some minor tweaks to make our use of the allocation entrypoints
match the actual entrypoints vended by the runtime:
1) there is no swift_slowRawAlloc
2) swift_deallocObject takes two arguments
Also, make all calls to swift_allocObject go through a common
function so that we can easily use optimized entrypoints if the
runtime provides them.

Swift SVN r1993
2012-05-25 17:34:59 +00:00
John McCall
4b562e6b62 Use the actual raw-allocation APIs, including the optimized
allocation entrypoints.

Swift SVN r1976
2012-05-24 19:16:09 +00:00
John McCall
f3c30b7386 'noalias' needs to go on the return value, not on the function
operand.  While I'm at it, test all the side-allocation value witnesses.

Swift SVN r1974
2012-05-24 17:55:03 +00:00
John McCall
3bab069ed1 Fix a think-o where I was adding the callee-determined arguments
after the normal arguments instead of before.

Swift SVN r1970
2012-05-24 16:43:19 +00:00
John McCall
30244a2f0d Do all the dancing necessary to get method calls through
protocols working.

Swift SVN r1969
2012-05-24 12:16:51 +00:00
John McCall
6a16a5aae4 Prepare some abstractions for calling through an existential type.
Swift SVN r1968
2012-05-24 12:16:47 +00:00
John McCall
872cd45dae Stub out the less-important implementations of ExistentialMemberRefExpr.
Swift SVN r1967
2012-05-24 12:16:44 +00:00
John McCall
95a8c35a36 Implement IR-generation for instance method witnesses.
Swift SVN r1966
2012-05-24 12:16:40 +00:00
Doug Gregor
0062c84351 Introduce ExistentialMemberRefExpr for references to the members of
values of existential type, e.g.,

  var x : Printable
  x.print()

Existential member references reify the type of the implicit object
argument (implicitly, because we have no way of expressing this in the
type system), and replace the types of any other archetypes
with existential types that (don't, but will eventually) conform to
the protocols to which the archetypes conform.



Swift SVN r1963
2012-05-23 23:06:34 +00:00
Doug Gregor
9096497f0f Rename "dependent type" to "unresolved type" universally. We've been
using the term "unresolved" in expressions for a while, and it fits
for types better than "dependent type."

The term "dependent type" will likely come back at some point to mean
"involves an archetype".



Swift SVN r1962
2012-05-23 19:03:14 +00:00
Doug Gregor
74436a3120 Introduce the implicit 'This' type into protocols, which refers to the
type T that conforms to the given protocol. 'This' is modeled simply
as an associated type.



Swift SVN r1953
2012-05-23 14:45:55 +00:00
Doug Gregor
d37602629e Implement parsing, AST, and conformance checking for associated types
in protocols, e.g.,

  protocol Range {
    typealias Element
    func getAndAdvance() -> Element
  }



Swift SVN r1941
2012-05-22 21:45:58 +00:00
Doug Gregor
5f92d4a44d Make OpaqueValueExpr an unchecked expression; it does not persist in the AST.
Swift SVN r1933
2012-05-22 14:18:58 +00:00
Doug Gregor
a9906ad38f Introduce support for implicit user-defined conversions.
A user-defined conversion function is an instance method that accepts
an empty tuple and returns a value of the type we're converting to,
has the [conversion] attribute, and is named __conversion. The last of
these restrictions is a temporary hack to work around our inability to
perform a lookup across all extensions for "every function with the
conversion attribute", and shouldn't last too long.

As in C++, we only get one user-defined conversion function. Unlike in
C++, a constructor is not (and cannot) be a conversion function.

Introduce NSString <-> String conversion functions, but leave the
runtime implementations as stubs for Dave to fill in.



Swift SVN r1921
2012-05-21 23:36:16 +00:00
John McCall
3d5380045a Allocate space for function witnesses.
Swift SVN r1917
2012-05-21 20:01:39 +00:00
John McCall
a8e511d429 Expound a bit about the decisions we need to come to about protocol
resilience.

Swift SVN r1916
2012-05-21 20:01:38 +00:00
John McCall
d1ce608f17 Implement conversion to super-protocols.
Swift SVN r1915
2012-05-21 20:01:37 +00:00
John McCall
e231868a84 Add witnesses for base protocols. For now, these are always
out-of-line rather than prefixed.

Swift SVN r1914
2012-05-21 20:01:36 +00:00
John McCall
e98d38bb3c Set up the basic framework for building witness-table layouts in
both the abstract and concrete cases.

Swift SVN r1913
2012-05-21 20:01:34 +00:00
Dave Zarzycki
94e67cc4e9 Add fast/basic alloc/dealloc APIs
Swift SVN r1908
2012-05-21 17:08:54 +00:00
John McCall
72ebeee76f Try to optimize assignment a bit more, and fix assignment
of protocol types to correctly handle self-assignment.
This ends up creating such a large amount of code that it's
worth extracting into its own helper function.  Fortunately,
this can be the same helper function for every protocol type.

Swift SVN r1905
2012-05-19 06:46:05 +00:00
John McCall
06992eec7a Introduce helper templates to make it easier to define
type infos that can be efficiently scalarized.

Swift SVN r1904
2012-05-19 03:16:08 +00:00
John McCall
38bac7c706 Add Builtin.ObjCPointer with accompanying IR-gen support and
wrap it in an 'id' type in the standard library.

Also fix a bug noticed by inspection where initWithTake for
function types wasn't entering a cleanup for the taken value.
This probably doesn't matter for existing possibilities, but
it's potentially important under exceptions.

Swift SVN r1902
2012-05-18 23:40:17 +00:00
John McCall
7b2216216a Delete redundant file.
Swift SVN r1901
2012-05-18 18:27:41 +00:00
John McCall
90939b19c0 Provide a base class for implementing a single retainable object
pointer TypeInfo more conveniently.  Have this class return true for
isSingleRetainablePointer().  Further specialize the implementations
of the value witnesses so that we no longer ever require type-specific
witnesses for reference types.

Swift SVN r1900
2012-05-18 10:02:04 +00:00
John McCall
d461d72e85 Implement ErasureExpr in IR-gen, at least as far as generating
value witnesses goes.

There are three major remaining things to do to support protocols:
  - laying out the actual protocol members
  - emitting witnesse for the actual protocol members
  - detecting uses of the actual protocol members and funnelling
    them through the witnesses as appropriate
All this work was just to let us treat protocol types as
first-class values.

Swift SVN r1899
2012-05-18 10:02:01 +00:00
John McCall
450a722215 Add an IRBuilder::CreateBitCast variant which maps addresses.
Swift SVN r1898
2012-05-18 10:01:57 +00:00
John McCall
71c45f5212 Lion's libc++ headers do not support shared_ptr under -fno-rtti.
This is <rdar://problem/10217868>.  Apparently I'm using Lion's
libc++ headers somehow, which I should probably fix;  but since
the use of shared_ptr is just a hack until DenseMap supports
move-only types, I don't feel bad about changing it to a different
hack that avoids shared_map altogether.

Swift SVN r1897
2012-05-18 10:01:54 +00:00
John McCall
cf6a1fd284 Implement assignment on protocol types.
Swift SVN r1896
2012-05-18 10:01:50 +00:00
John McCall
85acda32bb Implement basic functionality for protocol types, with the
exception of assign.

Swift SVN r1895
2012-05-18 10:01:46 +00:00
John McCall
6b392f8479 Turn initializeWithCopy into a generic operation on TypeInfos
so we can optimize sub-operations properly.

Swift SVN r1894
2012-05-18 10:01:42 +00:00
John McCall
675ec2234c Teach IRGen how to emit a call or load directly as the initializer for
some hunk of memory.

Swift SVN r1893
2012-05-18 10:01:38 +00:00
Chris Lattner
065614c8ac Add support for working with IR intrinsics that return multiple values, like the
overflow stuff.


Swift SVN r1891
2012-05-17 20:42:38 +00:00
Chris Lattner
b2fb91fba6 rip out my previous hack for Builtin.trap() and put in general code that
allows access to any LLVM IR intrinsic that has types that can be mapped
to swift types.  Notably, this excludes vector stuff, but there is a lot
of other goodness that can now be poked at.



Swift SVN r1890
2012-05-17 20:31:17 +00:00
Eli Friedman
1341f19da8 IRGen for varargs tuples.
Swift SVN r1883
2012-05-17 03:22:49 +00:00
Eli Friedman
5e206bc10f Rename DistinctTypeDecl to NominalTypeDecl.
Swift SVN r1882
2012-05-17 01:54:15 +00:00
Eli Friedman
6e69e27975 Kill ScalarToTupleExpr, which is no longer in use.
Swift SVN r1881
2012-05-17 01:50:48 +00:00
Eli Friedman
b788bad8e6 A couple missing pieces for classes. Also, a few fixes for local types.
Swift SVN r1873
2012-05-16 19:21:07 +00:00
Doug Gregor
5f8d5efda2 Unbreak the CMake build, and add -momit-leaf-frame-pointer to the
runtime build for optimized builds.


Swift SVN r1871
2012-05-16 18:03:59 +00:00
Eli Friedman
33f20a14e0 Add NewReferenceExpr, for allocating class objects.
Swift SVN r1867
2012-05-16 01:36:03 +00:00
Eli Friedman
98933b8510 More work on ClassDecls; this is enough to get member access working.
Swift SVN r1863
2012-05-16 00:22:09 +00:00
Eli Friedman
ec77975642 Minor fix for mangling; I wasn't trying to change the mangling of oneofs with my last commit.
Swift SVN r1859
2012-05-15 21:55:46 +00:00
Eli Friedman
79c3276b07 AST representation for ClassDecls.
Swift SVN r1858
2012-05-15 21:53:38 +00:00
Chris Lattner
5163b40020 Hack in support for Builtin.trap(), resolving rdar://11442881. a more
general solution to get access to arbitrary intrinsics will follow.


Swift SVN r1857
2012-05-15 17:40:46 +00:00
Chris Lattner
f3c3ad086f Remove OverloadedBuiltinKind::Arithmetic, replacing it with OverloadedBuiltinKind::Special
and simplifying Builtins.def.


Swift SVN r1854
2012-05-15 04:29:47 +00:00
Chris Lattner
6faa726012 switch binops builtin irgen to the new world order.
Swift SVN r1852
2012-05-15 04:15:54 +00:00
Eli Friedman
6f045aad2f Throw the switch to use "var" syntax to declare members of structs. This also means we no longer build an implicit extension for every struct decl. Everything seems to be working, but please yell if this breaks anything.
Swift SVN r1851
2012-05-15 03:27:13 +00:00
Eli Friedman
907cc521ab Switch a couple booleans in Module over to an enum.
Swift SVN r1845
2012-05-15 00:20:01 +00:00
Doug Gregor
056ba286eb Implement subtyping rules that allow one to convert a function type to
another function type, so long as the source is a subtype of the
target. The subtyping relation is fairly obvious, allowing parameter
renaming, qualification conversions for lvalue types, and
protocol-conformance conversions (at the top level of function
types). It is a strict subset of the allowed type coercions.

The representation of FunctionConversionExpr is temporary. It will
need to account for the capture of the source of the conversion in the
trivial-trivial case.



Swift SVN r1839
2012-05-14 19:10:22 +00:00