Brian Anderson
451e8c1c61
Convert most code to new inner attribute syntax.
...
Closes #2569
2014-03-28 17:12:21 -07:00
Daniel Micay
3829ac2a52
use TotalEq for HashMap
...
Closes #5283
2014-03-23 01:59:11 -04:00
Eduard Burtescu
75d7d5210a
Implement vtable support for autoderef.
...
Closes #13042 .
2014-03-22 23:31:42 +02:00
Alex Crichton
3fb1ed0e04
rustc: Remove all usage of manual deref()
...
Favor using '*' instead
2014-03-22 08:48:34 -07:00
Alex Crichton
0dbb909bf7
rustc: Fix fallout of removing get()
2014-03-22 08:48:20 -07:00
Alex Crichton
da3625161d
Removing imports of std::vec_ng::Vec
...
It's now in the prelude.
2014-03-20 09:30:14 -07:00
Daniel Micay
14f656d1a7
rename std::vec_ng -> std::vec
...
Closes #12771
2014-03-20 04:25:32 -04:00
Eduard Burtescu
871e570810
De-@ codemap and diagnostic.
2014-03-17 09:53:08 +02:00
Eduard Burtescu
0bb6de3076
De-@ move maps and rework parts of trans.
2014-03-17 09:53:08 +02:00
Eduard Burtescu
6c42ef31dc
De-@ trans contexts.
2014-03-17 09:53:07 +02:00
Eduard Burtescu
9b1fee898f
De-@ ty::ctxt usage.
2014-03-17 09:53:06 +02:00
Eduard Burtescu
4fae06824c
De-@ Session usage.
2014-03-17 09:53:06 +02:00
Alex Crichton
a07149b138
rustc: Prevent collisions in names of closures
...
This commit goes back to using `gensym` to generate unique tokens to put into
the names of closures, allowing closures to be able to get demangled in
backtraces.
Closes #12400
2014-03-13 16:24:46 -07:00
Eduard Burtescu
feedd37653
Apply @nikomatsakis' nits and comments patch.
2014-03-13 14:21:45 +02:00
Eduard Burtescu
20b4e159ed
Implement automatic overloaded dereference.
...
Closes #7141 .
2014-03-13 14:21:45 +02:00
Felix S. Klock II
43c07244b3
librustc: Fix up fallout from the automatic conversion.
2014-03-08 21:41:32 +01:00
Patrick Walton
3b6e9d4a7a
librustc: Automatically change uses of ~[T]
to Vec<T>
in rustc.
2014-03-08 21:24:27 +01:00
Alex Crichton
bec7b766fb
rustc: Move to FNV hashing for node/def ids
...
This leverages the new hashing framework and hashmap implementation to provide a
much speedier hashing algorithm for node ids and def ids. The hash algorithm
used is currentl FNV hashing, but it's quite easy to swap out.
I originally implemented hashing as the identity function, but this actually
ended up in slowing down rustc compiling libstd from 8s to 13s. I would suspect
that this is a result of a large number of collisions.
With FNV hashing, we get these timings (compiling with --no-trans, in seconds):
| | before | after |
|-----------|---------:|--------:|
| libstd | 8.324 | 6.703 |
| stdtest | 47.674 | 46.857 |
| libsyntax | 9.918 | 8.400 |
2014-03-06 17:45:48 -08:00
Palmer Cox
a9798c25df
Rename struct fields with uppercase characters in their names to use lowercase
2014-03-04 21:23:37 -05:00
Palmer Cox
6d9bdf975a
Rename all variables that have uppercase characters in their names to use only lowercase characters
2014-03-04 21:23:36 -05:00
Steven Fackler
4c2353adee
Make visible types public in rustc
2014-03-02 15:26:39 -08:00
Eduard Burtescu
05e4d944a9
Replace callee_id with information stored in method_map.
2014-02-26 16:06:45 +02:00
Erick Tryzelaar
f12ff1964b
std: minor whitespace cleanup
2014-02-24 19:52:29 -08:00
Huon Wilson
efaf4db24c
Transition to new Hash
, removing IterBytes and std::to_bytes.
2014-02-24 07:44:10 +11:00
Alex Crichton
2a14e084cf
Move std::{trie, hashmap} to libcollections
...
These two containers are indeed collections, so their place is in
libcollections, not in libstd. There will always be a hash map as part of the
standard distribution of Rust, but by moving it out of the standard library it
makes libstd that much more portable to more platforms and environments.
This conveniently also removes the stuttering of 'std::hashmap::HashMap',
although 'collections::HashMap' is only one character shorter.
2014-02-23 00:35:11 -08:00
mr.Shu
70319f7b25
Changed NonCamelCaseTypes lint to warn by default
...
Added allow(non_camel_case_types) to librustc where necesary
Tried to fix problems with non_camel_case_types outside rustc
fixed failing tests
Docs updated
Moved #[allow(non_camel_case_types)] a level higher.
markdown.rs reverted
Fixed timer that was failing tests
Fixed another timer
2014-02-21 08:11:52 +01:00
Huon Wilson
dcee327c35
rustc: remove some unnecessary transmute
s.
...
These can all be done by implicit or explicit &T -> *T casts, which are
more restricted and so are safer.
2014-02-20 01:31:39 +11:00
Eduard Burtescu
a02b10a062
Refactored ast_map and friends, mainly to have Paths without storing them.
2014-02-14 08:43:29 +02:00
Eduard Burtescu
54760b9f27
Removed ty_type (previously used to represent *tydesc).
2014-02-12 14:17:06 +02:00
mr.Shu
ee3fa68fed
Fixed error starting with uppercase
...
Error messages cleaned in librustc/middle
Error messages cleaned in libsyntax
Error messages cleaned in libsyntax more agressively
Error messages cleaned in librustc more aggressively
Fixed affected tests
Fixed other failing tests
Last failing tests fixed
2014-02-08 20:59:38 +01:00
Daniel Micay
eced501226
allow generating drop glue without the TyDesc
...
Reflection is now the only user of type descriptors. Uses of drop glue
no longer cause a type descriptor to be generated.
2014-02-07 21:20:43 -05:00
Huon Wilson
ec4b456b26
rustc: Remove the vstore handling of @str and @[].
2014-02-02 02:59:04 +11:00
Patrick Walton
21f86855dd
librustc: De-@str
ident()
and str_of()
2014-02-02 01:44:49 +11:00
Patrick Walton
8e52b85d5a
libsyntax: De-@str
literal strings in the AST
2014-02-02 01:44:48 +11:00
Niko Matsakis
81d8328517
Introduce marker types for indicating variance and for opting out
...
of builtin bounds.
Fixes #10834 .
Fixes #11385 .
cc #5922 .
2014-01-31 21:18:48 -05:00
David Manescu
4d0d3da9e4
extra: move arena to libarena
...
In line with the dissolution of libextra - #8784 - moves arena to its own library libarena.
Changes based on PR #11787 . Updates .gitignore to ignore doc/arena.
2014-01-29 13:54:38 +11:00
Eduard Burtescu
e81ab4198c
Removed take_glue from tydesc, inlining the equivalent refcount increment code instead.
2014-01-27 22:32:30 +02:00
Eduard Burtescu
15ba0c310a
Demote self to an (almost) regular argument and remove the env param.
...
Fixes #10667 and closes #10259 .
2014-01-27 14:31:24 +02:00
Niko Matsakis
5e7657fafb
Distinguish zero-size types from those that we return as void
2014-01-16 19:10:17 -05:00
Niko Matsakis
4b52d899ff
Further refine treatment of voidish arrays
2014-01-16 16:29:52 -05:00
Niko Matsakis
14b0abfd82
Consider all zero-sized data structures to be voidish, bypassing some "quirky" parts of LLVM (see e.g. LLVM bug 9900) but also generating better code
2014-01-16 15:11:22 -05:00
Niko Matsakis
419ac4a1b8
Issue #3511 - Rationalize temporary lifetimes.
...
Major changes:
- Define temporary scopes in a syntax-based way that basically defaults
to the innermost statement or conditional block, except for in
a `let` initializer, where we default to the innermost block. Rules
are documented in the code, but not in the manual (yet).
See new test run-pass/cleanup-value-scopes.rs for examples.
- Refactors Datum to better define cleanup roles.
- Refactor cleanup scopes to not be tied to basic blocks, permitting
us to have a very large number of scopes (one per AST node).
- Introduce nascent documentation in trans/doc.rs covering datums and
cleanup in a more comprehensive way.
2014-01-15 18:34:38 -05:00
Daniel Micay
6809b172e0
remove borrow_offset
as ~ is now free of headers
2014-01-14 22:01:44 -05:00
Daniel Micay
0e885e42b1
remove reference counting headers from ~
...
Unique pointers and vectors currently contain a reference counting
header when containing a managed pointer.
This `{ ref_count, type_desc, prev, next }` header is not necessary and
not a sensible foundation for tracing. It adds needless complexity to
library code and is responsible for breakage in places where the branch
has been left out.
The `borrow_offset` field can now be removed from `TyDesc` along with
the associated handling in the compiler.
Closes #9510
Closes #11533
2014-01-14 22:01:40 -05:00
Eduard Burtescu
08ac616d37
Use the right type for self in methods and remove obsoleted items.
...
Fixes #7411 , #10615 .
2014-01-11 16:40:23 +02:00
Eduard Burtescu
7a305f9e83
Removed free_glue from tydesc (the code is still generated, but inlined in drop_glue).
2014-01-11 16:40:23 +02:00
Eduard Burtescu
5ad2a7825b
Removed obsolete 'e' prefix on ty_evec and ty_estr.
2014-01-11 16:40:23 +02:00
Eduard Burtescu
6b221768cf
libsyntax: Renamed types, traits and enum variants to CamelCase.
2014-01-09 22:25:28 +02:00
Patrick Walton
5e637a890c
librustc: Move block contexts into per-function arenas, and
...
stack-allocate function contexts.
2014-01-07 17:00:47 -08:00
Patrick Walton
88281290ff
librustc: Remove @mut
support from the typechecker and borrow checker
2014-01-03 14:02:01 -08:00
Patrick Walton
cc0584731a
librustc: De-@mut
the def map.
...
This is the last `@mut` in `librustc` that does not depend on libsyntax.
2013-12-26 15:54:37 -08:00
Patrick Walton
9f6706975b
librustc: De-@mut
fn_stats
in the stats
2013-12-26 15:54:36 -08:00
Patrick Walton
e84f79feb1
librustc: De-@mut
llvm_insns
in the stats
2013-12-26 15:54:35 -08:00
Patrick Walton
8c3a552ac5
librustc: Remove the unused llvm_insn_ctxt
from the stats
2013-12-26 15:54:35 -08:00
Patrick Walton
97ceac7377
librustc: De-@mut
n_llvm_insns
in the stats
2013-12-26 15:54:35 -08:00
Patrick Walton
21e4e410a9
librustc: De-@mut
n_closures
in the stats
2013-12-26 15:54:35 -08:00
Patrick Walton
c010d08cd5
librustc: De-@mut
n_inlines
in the stats
2013-12-26 15:54:35 -08:00
Patrick Walton
8c7804ffac
librustc: De-@mut
n_monos
in the stats
2013-12-26 15:54:35 -08:00
Patrick Walton
38572f4981
librustc: De-@mut
n_fns
in the stats
2013-12-26 15:54:35 -08:00
Patrick Walton
16828bb1dc
librustc: De-@mut
n_real_glues
2013-12-26 15:54:35 -08:00
Patrick Walton
75efa0725d
librustc: De-@mut
n_null_glues
in the stats
2013-12-26 15:54:35 -08:00
Patrick Walton
26d1394767
librustc: De-@mut
n_glues_created
in the stats
2013-12-26 15:54:35 -08:00
Patrick Walton
091bfa9cc3
librustc: De-@mut
n_static_tydescs
in the stats
2013-12-26 15:54:35 -08:00
Patrick Walton
e9b9c828b1
librustc: De-@mut
the various glues in the type descriptor info
2013-12-26 15:54:32 -08:00
Patrick Walton
abbee6decd
librustc: De-@mut
ScopeInfo
2013-12-26 15:54:32 -08:00
Patrick Walton
8728b09e78
librustc: De-@mut
ScopeInfo::landing_pad
2013-12-26 15:54:32 -08:00
Patrick Walton
7acaa73377
librustc: De-@mut
ScopeInfo::cleanup_paths
2013-12-26 15:54:32 -08:00
Patrick Walton
89a85e45c5
librustc: De-@mut
ScopeInfo::cleanups
2013-12-26 15:54:32 -08:00
Patrick Walton
8ae01fc0ae
librustc: De-@mut
the translation FunctionContext
2013-12-26 15:54:30 -08:00
Patrick Walton
7437a56f3b
librustc: De-@mut
FunctionContext::entry_bcx
2013-12-26 15:54:30 -08:00
Patrick Walton
05e57db348
librustc: De-@mut
FunctionContext::personality
2013-12-26 15:54:30 -08:00
Patrick Walton
cd5168b7cd
librustc: De-@mut
FunctionContext::llself
2013-12-26 15:54:30 -08:00
Patrick Walton
bd6a2236e1
librustc: De-@mut
FunctionContext::llreturn
2013-12-26 15:54:29 -08:00
Patrick Walton
a07cee26a4
librustc: De-@mut
FunctionContext::alloca_insert_pt
2013-12-26 15:54:29 -08:00
Patrick Walton
5b0401f0e8
librustc: De-@mut
FunctionContext::llretptr
2013-12-26 15:54:29 -08:00
Patrick Walton
d7392bd3ae
librustc: De-@mut
FunctionContext::llenv
2013-12-26 15:54:29 -08:00
Patrick Walton
82f5a380a4
librustc: De-@mut
llargs
and lllocals
in the function context
2013-12-26 15:54:28 -08:00
Patrick Walton
7ffba5c3e1
librustc: De-@mut
llupvars
in the translation crate context
2013-12-26 13:01:29 -08:00
Patrick Walton
4fe1cb1aff
librustc: De-@mut
the vtable map
2013-12-26 13:01:28 -08:00
Patrick Walton
b941677ea3
librustc: De-@mut
the crate context
2013-12-26 13:01:26 -08:00
Patrick Walton
2418cc0212
librustc: De-@mut
the crate context's do_not_commit_warning_issued
2013-12-26 13:01:26 -08:00
Patrick Walton
0e2041c54b
librustc: De-@mut
CrateContext::const_cstr_cache
.
2013-12-26 13:01:23 -08:00
Patrick Walton
c9432327c4
librustc: Change @mut Block
to @Block
.
2013-12-26 13:01:21 -08:00
Huon Wilson
17ac2aa523
std::str: replace .as_imm_buf with .as_ptr.
2013-12-19 10:18:02 +11:00
Huon Wilson
4c79b22ef2
std::vec: remove .as_imm_buf, replaced by .as_ptr & .len.
...
There's no need for the restrictions of a closure with the above methods.
2013-12-19 09:26:13 +11:00
Huon Wilson
164f7a290e
std::vec: convert to(_mut)_ptr to as_... methods on &[] and &mut [].
2013-12-15 23:37:41 +11:00
Alex Crichton
ab387a6838
Register new snapshots
2013-11-28 20:27:56 -08:00
Patrick Walton
8ceb374ab7
librustc: Remove non-procedure uses of do
from librustc, librustdoc,
...
and librustpkg.
2013-11-26 08:25:00 -08:00
Patrick Walton
7e3f20133a
librustc: Change most uses of &fn()
to ||
.
2013-11-19 13:22:03 -08:00
Jed Davis
fcfbfde0b7
Adjust reflection for the possibility of discriminants larger than int.
...
Not only can discriminants be smaller than int now, but they can be
larger than int on 32-bit targets. This has obvious implications for the
reflection interface. Without this change, things fail with LLVM
assertions when we try to "extend" i64 to i32.
2013-10-29 09:09:20 -07:00
Daniel Micay
1e4986ce56
make the bottom type immediate
...
Before:
define void @_ZN3bar19h9d9b965357abc043af4v0.0E({}* noalias nocapture readnone sret, { i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone)
After:
define void @_ZN3bar19h9d9b965357abc043af4v0.0E({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone)
2013-10-27 16:48:48 -04:00
Alex Crichton
daf5f5a4d1
Drop the '2' suffix from logging macros
...
Who doesn't like a massive renaming?
2013-10-22 08:09:56 -07:00
Alex Crichton
273784e9bf
Optimize include_bin! for large inputs
...
Previously an ExprLit was created *per byte* causing a huge increase in memory
bloat. This adds a new `lit_binary` to contain a literal of binary data, which
is currently only used by the include_bin! syntax extension. This massively
speeds up compilation times of the shootout-k-nucleotide-pipes test
before:
time: 469s
memory: 6GB
assertion failure in LLVM (section too large)
after:
time: 2.50s
memory: 124MB
Closes #2598
2013-10-18 09:20:08 -07:00
Luqman Aden
e88064d18f
librustc: Combine C_struct and C_packed_struct.
2013-10-12 23:19:22 -04:00
Daniel Micay
6a90e80b62
option: rewrite the API to use composition
2013-10-09 09:17:29 -04:00
Daniel Micay
ac1faba4df
make small ty_struct immediate
...
Closes #9651
2013-10-08 07:11:08 -04:00
Daniel Micay
f504461a40
make C-like enums immediate
...
This fixes two existing bugs along the way:
* The `transmute` intrinsic did not correctly handle casts of immediate
aggregates like newtype structs and tuples.
* The code for calling foreign functions used the wrong type to create
an `alloca` temporary
enum Foo { A, B }
fn foo() -> Foo { A }
Before:
; Function Attrs: nounwind uwtable
define void @_ZN3foo18hbedc642d5d9cf5aag4v0.0E(%enum.Foo* noalias nocapture sret, { i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 {
"function top level":
%2 = getelementptr inbounds %enum.Foo* %0, i64 0, i32 0
store i64 0, i64* %2, align 8
ret void
}
After:
; Function Attrs: nounwind readnone uwtable
define %enum.Foo @_ZN3foo18hbedc642d5d9cf5aag4v0.0E({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 {
"function top level":
ret %enum.Foo zeroinitializer
}
2013-10-03 06:27:00 -04:00
Daniel Micay
249b356fb3
make unit structs immediate
...
struct Foo;
fn foo() -> Foo { Foo }
Before:
; Function Attrs: nounwind readnone uwtable
define void @_ZN3foo18he8ca29755dedebbaf4v0.0E(%struct.Foo* noalias nocapture sret, { i64, %tydesc*, i8*, i8*, i8 }* nocapture) #0 {
"function top level":
ret void
}
After:
; Function Attrs: nounwind readnone uwtable
define %struct.Foo @_ZN3foo18he8ca29755dedebbaf4v0.0E({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 {
"function top level":
ret %struct.Foo undef
}
2013-10-03 03:59:58 -04:00
Daniel Micay
f2932e4661
make small (<= size_of::<int>()) enums immediate
...
C-like enums are excluded from this for now, because the code paths
specific to them need to be changed.
fn foo() -> Option<~int> { Some(~5) }
Before:
; Function Attrs: uwtable
define void @_ZN3foo18hdec6e36682b87eeaf4v0.0E(%"enum.std::option::Option<~int>[#1 ]"* noalias nocapture sret, { i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 {
"function top level":
%2 = tail call %"enum.std::libc::types::common::c95::c_void[#1 ]"* @"_ZN2rt11global_heap10malloc_raw17h56c543b77f9b78aY11v0.9$x2dpreE"({ i64, %tydesc*, i8*, i8*, i8 }* undef, i64 8)
%3 = bitcast %"enum.std::libc::types::common::c95::c_void[#1 ]"* %2 to i64*
store i64 5, i64* %3, align 8
%4 = getelementptr inbounds %"enum.std::option::Option<~int>[#1 ]"* %0, i64 0, i32 0
store i64* %3, i64** %4, align 8
ret void
}
After:
; Function Attrs: uwtable
define %"enum.std::option::Option<~int>[#1 ]" @_ZN3foo18h2cbf6557a3143edah4v0.0E({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 {
"function top level":
%1 = tail call %"enum.std::libc::types::common::c95::c_void[#1 ]"* @"_ZN2rt11global_heap10malloc_raw18hb1e9dd1beab35edau11v0.9$x2dpreE"({ i64, %tydesc*, i8*, i8*, i8 }* undef, i64 8)
%2 = bitcast %"enum.std::libc::types::common::c95::c_void[#1 ]"* %1 to i64*
store i64 5, i64* %2, align 8
%oldret = insertvalue %"enum.std::option::Option<~int>[#1 ]" undef, i64* %2, 0
ret %"enum.std::option::Option<~int>[#1 ]" %oldret
}
2013-10-02 10:02:52 -04:00
bors
33a5928b46
auto merge of #9656 : thestinger/rust/immediate, r=alexcrichton
...
fn foo() -> (u32, u8, u8, u8, u8) {
(4, 5, 6, 7, 8)
}
Before:
; Function Attrs: nounwind uwtable
define void @_ZN3foo18hbb616262f874f8daf4v0.0E({ i32, i8, i8, i8, i8 }* noalias nocapture sret, { i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 {
"function top level":
%2 = getelementptr inbounds { i32, i8, i8, i8, i8 }* %0, i64 0, i32 0
store i32 4, i32* %2, align 4
%3 = getelementptr inbounds { i32, i8, i8, i8, i8 }* %0, i64 0, i32 1
store i8 5, i8* %3, align 4
%4 = getelementptr inbounds { i32, i8, i8, i8, i8 }* %0, i64 0, i32 2
store i8 6, i8* %4, align 1
%5 = getelementptr inbounds { i32, i8, i8, i8, i8 }* %0, i64 0, i32 3
store i8 7, i8* %5, align 2
%6 = getelementptr inbounds { i32, i8, i8, i8, i8 }* %0, i64 0, i32 4
store i8 8, i8* %6, align 1
ret void
}
After:
; Function Attrs: nounwind readnone uwtable
define { i32, i8, i8, i8, i8 } @_ZN3foo18hbb616262f874f8daf4v0.0E({ i64, %tydesc*, i8*, i8*, i8 }* nocapture readnone) #0 {
"function top level":
ret { i32, i8, i8, i8, i8 } { i32 4, i8 5, i8 6, i8 7, i8 8 }
}
2013-10-01 21:56:27 -07:00