Commit Graph

15975 Commits

Author SHA1 Message Date
bors 194c27bcd1 auto merge of #5183 : jld/rust/adt-renovation, r=brson
This series of changes moves the representation details of algebraic datatypes (enums, and special cases like structs and tuples and (until they're fully removed) records) from various places around rustc::middle::trans into a single module, to enable future improvements in this area.

r?(@nikomatsakis), and the core developers in general; this seems like a “super-review” kind of change.
2013-03-06 20:57:37 -08:00
Jed Davis a69ec175f8 GC now-unused imports 2013-03-06 20:41:58 -08:00
Jed Davis 1f9bc64bae adt.rs renaming: "field" rather than "element"; set_discr -> start_init.
This way "field" refers to the abstraction and "element" (as in get_elt,
"get element pointer", etc.) refers to the low-level LLVM operations.
2013-03-06 20:41:58 -08:00
Jed Davis e13111fc5a Even more comments for ADT-related interfaces 2013-03-06 20:41:58 -08:00
Jed Davis 6840b48074 trans_cast_to_int is hard to explain; make it trans_get_discr instead. 2013-03-06 20:41:58 -08:00
Jed Davis 8dca7be1df A little more cosmetic cleanup 2013-03-06 20:41:58 -08:00
Jed Davis d6acb96c9c Add lots of comments to adt.rs, and some minor cleanup. 2013-03-06 20:41:58 -08:00
Jed Davis a9026c7f19 Memoize trans::adt::represent_type 2013-03-06 20:41:58 -08:00
Jed Davis a8237a46f1 Bonus Fix: typarams are no longer inhabited 2013-03-06 20:41:58 -08:00
Jed Davis 8105da8067 GC the now-unused old layout helpers 2013-03-06 20:41:58 -08:00
Jed Davis b6bcf1a81f Finish removing struct layout dependencies from glue. 2013-03-06 20:41:58 -08:00
Jed Davis 71b6e945c1 glue::trans_struct_drop -> adt 2013-03-06 20:41:58 -08:00
Jed Davis 5ca4fdfc98 Convert trans_tuple_struct to trans::adt.
Surely this cannot be the best way to get the type.
2013-03-06 20:41:57 -08:00
Jed Davis 29d0430c56 Convert iter_structural_ty to trans::adt 2013-03-06 20:41:57 -08:00
Jed Davis c0f6909f7e base::iter_structural_ty: structs and records 2013-03-06 20:41:57 -08:00
Jed Davis 68b3f0d8a4 base::iter_structural_ty: tuples 2013-03-06 20:41:57 -08:00
Jed Davis ca450e345f Move trans_enum_variant to trans::adt.
As a result, trans_enum_variant no longer cares what kind of enum it's
dealing with, so the "degen" parameter goes away in a bunch of places.
2013-03-06 20:41:57 -08:00
Jed Davis 6bb6baba2c Renovate cast-to-int 2013-03-06 20:41:57 -08:00
Jed Davis 075affa50d Convert const field extraction to trans::adt 2013-03-06 20:41:57 -08:00
Jed Davis 59daf76a8d Make functional-update struct consts not an ICE 2013-03-06 20:41:57 -08:00
Jed Davis f0c6a8ebe9 Test for struct-like variants in consts 2013-03-06 20:41:57 -08:00
Jed Davis bb689c09f5 Convert const ADT construction to trans::adt.
Also converts const cast-from-enum, because it used the same routine to
get the discriminant as what's renovated to construct the enums.

Also fixes ICE on struct-like variants as consts, and provides a slightly
less bad ICE for functional-update-like struct expressions in consts.
2013-03-06 20:41:57 -08:00
Jed Davis 2a028c5ab8 Convert newtype "dereference" to trans::adt.
Note that in the ByValue case (which can't happen? yet?) we're still
effectively bitcasting, I think.  So this change adds a way to assert
that that's safe.

Note also, for future reference, that LLVM's instcombine pass will turn
a bitcast into a GEP(0, 0, ...) if possible.
2013-03-06 20:41:57 -08:00
Jed Davis 80844f993d Add regression tests for a subtle aspect of expr_struct translation.
The first is reduced from a case in rustdoc (originally involving an
ARC); the other is related.  No committed version has gotten these
wrong, but when I broke them it showed up only in rustdoc; there was
nothing in the test suite (or the compiler!) that failed.

The general issue is that the statics and trans have to agree on order
of evaluation, or else you get use-after-move-out-of errors at runtime.
2013-03-06 20:41:57 -08:00
Jed Davis c7325c4172 Convert the rest of the adt GEPi's in _match 2013-03-06 20:41:57 -08:00
Jed Davis 3a4714d92e Renovate field projection expressions 2013-03-06 20:41:57 -08:00
Jed Davis 40313fb6b0 Renovate nullary variant construction 2013-03-06 20:41:57 -08:00
Jed Davis fdd28451f6 Convert expr_struct to use adt, and try to share code with tuples. 2013-03-06 20:41:57 -08:00
Jed Davis 5cbc2571c1 Renovate expr_tup translation 2013-03-06 20:41:57 -08:00
Jed Davis b673b26f03 Factor out discriminant loading more, for use in casts. 2013-03-06 20:41:57 -08:00
Jed Davis a5030e7615 Wrap const structs in as many LLVM structs as the non-const case.
This, like the previous change for unit-like enums, is only necessary
until everything is fully converted to use trans::adt.
2013-03-06 20:40:42 -08:00
Jed Davis e09a843973 Handle unit-like types specially.
This change remains separate from the addition of adt.rs, even though
it's necessary for compatibility with pre-trans::adt representation,
to serve as an example of a change to the representation logic.
2013-03-06 20:37:59 -08:00
Jed Davis 7b2b4faba8 Add a test for enum discriminant range overflow.
It causes an LLVM assertion for every host/target word-size combination
on incoming at the time of this writing.
2013-03-06 20:37:28 -08:00
Jed Davis 04ecab909a Re-add discriminant range annotations 2013-03-06 20:37:28 -08:00
Jed Davis 8a1706610b Avoid unnecessary casts in struct_GEP 2013-03-06 20:37:28 -08:00
Jed Davis 5e2302a56f Convert type_of to use trans::adt. 2013-03-06 20:37:28 -08:00
Jed Davis c4682dcabe Convert match on enums to use trans::adt. 2013-03-06 20:37:28 -08:00
Jed Davis 626ad484fe Unified algebraic datatype representation implementation, initial version.
Later changes on this branch adapt the rest of rustc::middle::trans
to use this module instead of scattered hard-coded knowledge of
representations; a few of them also have improvements or cleanup for
adt.rs (and many added comments) that weren't drastic enough to justify
changing history to move them into this commit.
2013-03-06 20:37:23 -08:00
bors c3c018f8ab auto merge of #5256 : thestinger/rust/bool, r=brson 2013-03-06 19:12:40 -08:00
bors b269ce2782 auto merge of #5255 : jbclements/rust/remove-parse-value-ident, r=graydon
After the removal of the "restricted keyword" feature in 0c82c00dc4 , there's no longer any difference between parse_ident() and parse_value_ident(), and therefore no difference between parse parse_path_without_tps() and parse_value_path().  I've collapsed all of these, removing the redundant functions and eliminating the need for two higher-order arguments.
2013-03-06 17:48:39 -08:00
bors 95c07479dd auto merge of #5182 : youknowone/rust/enum-cast, r=brson
Fix #4926
2013-03-06 16:51:47 -08:00
bors 8c3728f839 auto merge of #5125 : nikomatsakis/rust/issue-4846-lifetime-defaults, r=nikomatsakis
Work towards #4846.

- Institute new region defaults where all omitted regions get a fresh lifetime.
- Require explicit region names except in functions.
- Fix a bug in region parameterization inference.  I've been putting this off because it will not be important when we remove RP inference in favor of explicit declarations, but then it was blocking this patch.

r? @pcwalton
2013-03-06 13:45:51 -08:00
Niko Matsakis 078fd23a07 fix test to not use fn expr 2013-03-06 16:19:21 -05:00
Niko Matsakis 9792002c6a Cheat and temporarily work around a pretty-printer bug
that will go away with the new region syntax.
2013-03-06 16:18:46 -05:00
Niko Matsakis 7e4ed28fa5 patch up pretty printing of things with both lifetime and type parameters 2013-03-06 15:12:58 -05:00
Niko Matsakis 3280e5a33d Improve error messages when illegal lifetimes are used 2013-03-06 15:12:58 -05:00
Niko Matsakis d26f6eddfd Convert region parameterization to change defaults and handle
methods correctly
2013-03-06 15:12:58 -05:00
Niko Matsakis 824b9e7dbf convert FnCtxt methods from @mut self to &self 2013-03-06 15:12:57 -05:00
Niko Matsakis 4077d7b8b7 Permit either foo/&self or foo<'self> 2013-03-06 15:12:57 -05:00
Niko Matsakis 3168fe06ff Add manual &self/ and &static/ and /&self declarations that
are currently inferred.  New rules are coming that will require
them to be explicit.  All add some explicit self declarations.
2013-03-06 15:12:57 -05:00