- 22 7月, 2013 17 次提交
-
-
由 bors 提交于
Continuation of https://github.com/mozilla/rust/pull/7826. AST spanned<T> refactoring, AST type renamings: `crate => Crate` `local => Local` `blk => Block` `crate_num => CrateNum` `crate_cfg => CrateConfig` `field => Field` Also, Crate, Field and Local are not wrapped in spanned<T> anymore.
-
由 Michael Woerister 提交于
-
由 Michael Woerister 提交于
`crate => Crate` `local => Local` `blk => Block` `crate_num => CrateNum` `crate_cfg => CrateConfig` Also, Crate and Local are not wrapped in spanned<T> anymore.
-
由 bors 提交于
These changes remove unnecessary basic blocks and the associated branches from the LLVM IR that we emit. Together, they reduce the time for unoptimized builds in stage2 by about 10% on my box.
-
由 bors 提交于
When loading a module the parser will look for either foo.rs or foo/mod.rs and generate an error when both are found.
-
由 bors 提交于
The new snapshot now enables this.
-
由 Alex Crichton 提交于
-
由 bors 提交于
-
由 Daniel Micay 提交于
Re-enabling these when the ephemeral failures are fixed is filed as issue #7956.
-
由 Daniel Micay 提交于
-
由 bors 提交于
-
由 Daniel Micay 提交于
rm obsolete no-op lints
-
由 Brian Anderson 提交于
When loading a module the parser will look for either foo.rs or foo/mod.rs and generate an error when both are found.
-
由 bors 提交于
~str and @str need separate implementations for use in generic functions, where it will not automatically use the impl on &str. fixes issue #7900
-
由 bors 提交于
Closes #5275, #4547
-
由 bors 提交于
Made the `iter` and `mut_iter` methods on SmallIntMap and SmallIntSet return double-ended-iterators. These iterators now implement `size_hint`. Also the iterator tests only tested dense maps/sets, which aren't very useful. So they were changed to iterate over sparse maps/sets. Fixes #7721
-
由 Björn Steinbrink 提交于
These blocks were required because previously we could only insert instructions at the end of blocks, but we wanted to have all allocas in one place, so they can be collapse. But now we have "direct" access the the LLVM IR builder and can position it freely. This allows us to use the same trick that clang uses, which means that we insert a dummy "marker" instruction to identify the spot at which we want to insert allocas. We can then later position the IR builder at that spot and insert the alloca instruction, without any dedicated block. The block for loading the closure environment can now also go away, because the function context now provides the toplevel block, and the translation of the loading happens first, so that's good enough. Makes the LLVM IR a bit more readable, saving a bunch of branches in the unoptimized code, which benefits unoptimized builds.
-
- 21 7月, 2013 21 次提交
-
-
由 Björn Steinbrink 提交于
Currently, the helper functions in the "build" module can only append at the end of a block. For certain things we'll want to be able to insert code at arbitrary locations inside a block though. Although can we do that by directly calling the LLVM functions, that is rather ugly and means that somethings need to be implemented twice. Once in terms of the helper functions and once in terms of low level LLVM functions. Instead of doing that, we should provide a Builder type that provides low level access to the builder, and which can be used by both, the helper functions in the "build" module, as well larger units of abstractions that combine several LLVM instructions.
-
由 Björn Steinbrink 提交于
The nested with_cond calls each introduce a "next" block, with the inner one just jumping to the outer one.
-
由 Björn Steinbrink 提交于
Currently, all closures have an llenv block to load values from the captured environment, but for closure that don't actually capture anything, that block is useless and can be skipped.
-
由 Jyun-Yan You 提交于
-
由 bors 提交于
-
由 bors 提交于
This adds new #[bench] benchmarks for extra::smallintmap, treemap, sha1, sha256 and 512, and base64. Also fixes a bunch of warnings in bitv.
-
由 bors 提交于
This does a number of things, but especially dramatically reduce the number of allocations performed for operations involving attributes/ meta items: - Converts ast::meta_item & ast::attribute and other associated enums to CamelCase. - Converts several standalone functions in syntax::attr into methods, defined on two traits AttrMetaMethods & AttributeMethods. The former is common to both MetaItem and Attribute since the latter is a thin wrapper around the former. - Deletes functions that are unnecessary due to iterators. - Converts other standalone functions to use iterators and the generic AttrMetaMethods rather than allocating a lot of new vectors (e.g. the old code would have to allocate a new vector to use functions that operated on &[meta_item] on &[attribute].) - Moves the core algorithm of the #[cfg] matching to syntax::attr, similar to find_inline_attr and find_linkage_metas. This doesn't have much of an effect on the speed of #[cfg] stripping, despite hugely reducing the number of allocations performed; presumably most of the time is spent in the ast folder rather than doing attribute checks. Also fixes the Eq instance of MetaItem_ to correctly ignore spans, so that `rustc --cfg 'foo(bar)'` now works.
-
由 bors 提交于
r? @nikomatsakis
-
由 Patrick Walton 提交于
Place `pub` or `priv` on individual items instead.
-
由 Daniel Micay 提交于
-
由 bors 提交于
Implement method .cycle() that repeats an iterator endlessly Implement Clone for simple iterators (without closures), including VecIterator. > The theory is simple, the immutable iterators simply hold state > variables (indicies or pointers) into frozen containers. We can freely > clone these iterators, just like we can clone borrowed pointers.
-
由 bors 提交于
-
由 bors 提交于
-
由 blake2-ppc 提交于
-
由 blake2-ppc 提交于
The theory is simple, the immutable iterators simply hold state variables (indicies or pointers) into frozen containers. We can freely clone these iterators, just like we can clone borrowed pointers. VecIterator needs a manual impl to handle the lifetime struct member.
-
由 blake2-ppc 提交于
-
由 blake2-ppc 提交于
-
由 blake2-ppc 提交于
-
由 bors 提交于
r? @brson
-
由 blake2-ppc 提交于
~str and @str need separate implementations for use in generic functions, where it will not automatically use the impl on &str.
-
由 bors 提交于
This pull request includes various improvements: + Composite types (structs, tuples, boxes, etc) are now handled more cleanly by debuginfo generation. Most notably, field offsets are now extracted directly from LLVM types, as opposed to trying to reconstruct them. This leads to more stable handling of edge cases (e.g. packed structs or structs implementing drop). + `debuginfo.rs` in general has seen a major cleanup. This includes better formatting, more readable variable and function names, removal of dead code, and better factoring of functionality. + Handling of `VariantInfo` in `ty.rs` has been improved. That is, the `type VariantInfo = @VariantInfo_` typedef has been replaced with explicit uses of @VariantInfo, and the duplicated logic for creating VariantInfo instances in `ty::enum_variants()` and `typeck::check::mod::check_enum_variants()` has been unified into a single constructor function. Both function now look nicer too :) + Debug info generation for enum types is now mostly supported. This includes: + Good support for C-style enums. Both DWARF and `gdb` know how to handle them. + Proper description of tuple- and struct-style enum variants as unions of structs. + Proper handling of univariant enums without discriminator field. + Unfortunately `gdb` always prints all possible interpretations of a union, so debug output of enums is verbose and unintuitive. Neither `LLVM` nor `gdb` support DWARF's `DW_TAG_variant` which allows to properly describe tagged unions. Adding support for this to `LLVM` seems doable. `gdb` however is another story. In the future we might be able to use `gdb`'s Python scripting support to alleviate this problem. In agreement with @jdm this is not a high priority for now. + The debuginfo test suite has been extended with 14 test files including tests for packed structs (with Drop), boxed structs, boxed vecs, vec slices, c-style enums (standalone and embedded), empty enums, tuple- and struct-style enums, and various pointer types to the above. ~~What is not yet included is DI support for some enum edge-cases represented as described in `trans::adt::NullablePointer`.~~ Cheers, Michael PS: closes #7819, fixes #7712
-
- 20 7月, 2013 2 次提交
-
-
由 bors 提交于
This does a bunch of cleanup on the data structures for the trait system. (Unfortunately it doesn't remove `provided_method_sources`. Maybe later.) It also changes how cross crate methods are handled, so that information about them is exported in metadata, instead of having the methods regenerated by every crate that imports an impl. r? @nikomatsakis, maybe?
-
由 bors 提交于
r? @graydon
-