Skip to content

Commit b0721c1

Browse files
committed
---
yaml --- r: 79801 b: refs/heads/try c: 2c31053 h: refs/heads/master i: 79799: ced2a5a v: v3
1 parent 01004cd commit b0721c1

File tree

28 files changed

+610
-500
lines changed

28 files changed

+610
-500
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
refs/heads/master: ba9fa89bfb4aae53db93e9ecac31807af96356fc
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
44
refs/heads/snap-stage3: 54ae2800ffb30513f89ce13d27ac3c8d095d98ac
5-
refs/heads/try: d36612d65b67e18c7f8d247055f83b28a602e875
5+
refs/heads/try: 2c31053d20ba8f4bd9120d2025d8eb226b94179a
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
88
refs/heads/try2: 147ecfdd8221e4a4d4e090486829a06da1e0ca3c

branches/try/src/librustc/back/link.rs

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ use syntax::ast_map::{path, path_mod, path_name, path_pretty_name};
3939
use syntax::attr;
4040
use syntax::attr::{AttrMetaMethods};
4141
use syntax::print::pprust;
42+
use syntax::parse::token;
4243

4344
#[deriving(Clone, Eq)]
4445
pub enum output_type {
@@ -677,8 +678,8 @@ pub fn symbol_hash(tcx: ty::ctxt,
677678
write_string(symbol_hasher, "-");
678679
write_string(symbol_hasher, encoder::encoded_ty(tcx, t));
679680
let mut hash = truncated_hash_result(symbol_hasher);
680-
// Prefix with 'h' so that it never blends into adjacent digits
681-
hash.unshift_char('h');
681+
// Prefix with _ so that it never blends into adjacent digits
682+
hash.unshift_char('_');
682683
// tjc: allocation is unfortunate; need to change std::hash
683684
hash.to_managed()
684685
}
@@ -721,7 +722,7 @@ pub fn sanitize(s: &str) -> ~str {
721722
'a' .. 'z'
722723
| 'A' .. 'Z'
723724
| '0' .. '9'
724-
| '_' | '.' | '$' => result.push_char(c),
725+
| '_' | '.' => result.push_char(c),
725726

726727
_ => {
727728
let mut tstr = ~"";
@@ -846,25 +847,28 @@ pub fn mangle_internal_name_by_type_and_seq(ccx: &mut CrateContext,
846847
name: &str) -> ~str {
847848
let s = ppaux::ty_to_str(ccx.tcx, t);
848849
let hash = get_symbol_hash(ccx, t);
849-
let (_, name) = gensym_name(name);
850850
return mangle(ccx.sess,
851-
~[path_name(ccx.sess.ident_of(s)), name],
851+
~[path_name(ccx.sess.ident_of(s)),
852+
path_name(gensym_name(name))],
852853
Some(hash.as_slice()),
853854
None);
854855
}
855856

856857
pub fn mangle_internal_name_by_path_and_seq(ccx: &mut CrateContext,
857858
mut path: path,
858859
flav: &str) -> ~str {
859-
let (_, name) = gensym_name(flav);
860-
path.push(name);
860+
path.push(path_name(gensym_name(flav)));
861861
mangle(ccx.sess, path, None, None)
862862
}
863863

864864
pub fn mangle_internal_name_by_path(ccx: &mut CrateContext, path: path) -> ~str {
865865
mangle(ccx.sess, path, None, None)
866866
}
867867

868+
pub fn mangle_internal_name_by_seq(_ccx: &mut CrateContext, flav: &str) -> ~str {
869+
return fmt!("%s_%u", flav, token::gensym(flav));
870+
}
871+
868872

869873
pub fn output_dll_filename(os: session::Os, lm: LinkMeta) -> ~str {
870874
let (dll_prefix, dll_suffix) = match os {

branches/try/src/librustc/metadata/encoder.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1063,13 +1063,12 @@ fn encode_info_for_item(ecx: &EncodeContext,
10631063
let impl_vtables = ty::lookup_impl_vtables(tcx, def_id);
10641064
encode_impl_vtables(ebml_w, ecx, &impl_vtables);
10651065
}
1066-
let elt = ast_map::impl_pretty_name(opt_trait, ty, item.ident);
1067-
encode_path(ecx, ebml_w, path, elt);
1066+
encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident));
10681067
ebml_w.end_tag();
10691068

10701069
// >:-<
10711070
let mut impl_path = vec::append(~[], path);
1072-
impl_path.push(elt);
1071+
impl_path.push(ast_map::path_name(item.ident));
10731072

10741073
// Iterate down the methods, emitting them. We rely on the
10751074
// assumption that all of the actually implemented methods

branches/try/src/librustc/middle/trans/common.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,15 @@ use std::hashmap::{HashMap};
3939
use std::libc::{c_uint, c_longlong, c_ulonglong, c_char};
4040
use std::vec;
4141
use syntax::ast::Ident;
42-
use syntax::ast_map::{path, path_elt, path_pretty_name};
42+
use syntax::ast_map::{path, path_elt};
4343
use syntax::codemap::Span;
4444
use syntax::parse::token;
4545
use syntax::{ast, ast_map};
4646

4747
pub use middle::trans::context::CrateContext;
4848

49-
pub fn gensym_name(name: &str) -> (Ident, path_elt) {
50-
let name = token::gensym(name);
51-
let ident = Ident::new(name);
52-
(ident, path_pretty_name(ident, name as u64))
49+
pub fn gensym_name(name: &str) -> Ident {
50+
token::str_to_ident(fmt!("%s_%u", name, token::gensym(name)))
5351
}
5452

5553
pub struct tydesc_info {

branches/try/src/librustc/middle/trans/debuginfo.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,6 @@ use std::ptr;
6969
use std::vec;
7070
use syntax::codemap::Span;
7171
use syntax::{ast, codemap, ast_util, ast_map, opt_vec};
72-
use syntax::parse::token;
7372
use syntax::parse::token::special_idents;
7473

7574
static DW_LANG_RUST: c_uint = 0x9000;
@@ -514,8 +513,7 @@ pub fn create_function_debug_context(cx: &mut CrateContext,
514513
ast_map::node_expr(ref expr) => {
515514
match expr.node {
516515
ast::ExprFnBlock(ref fn_decl, ref top_level_block) => {
517-
let name = fmt!("fn%u", token::gensym("fn"));
518-
let name = token::str_to_ident(name);
516+
let name = gensym_name("fn");
519517
(name, fn_decl,
520518
// This is not quite right. It should actually inherit the generics of the
521519
// enclosing function.
@@ -2064,7 +2062,7 @@ fn populate_scope_map(cx: &mut CrateContext,
20642062
}
20652063
}
20662064

2067-
ast::ExprForLoop(_, _, _, _) => {
2065+
ast::ExprForLoop(_, _, _) => {
20682066
cx.sess.span_bug(exp.span, "debuginfo::populate_scope_map() - \
20692067
Found unexpanded for-loop.");
20702068
}

branches/try/src/librustc/middle/trans/meth.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ use std::vec;
3737
use syntax::ast_map::{path, path_mod, path_name, path_pretty_name};
3838
use syntax::ast_util;
3939
use syntax::{ast, ast_map};
40-
use syntax::parse::token;
4140
use syntax::visit;
4241

4342
/**
@@ -569,8 +568,8 @@ pub fn make_vtable(ccx: &mut CrateContext,
569568
}
570569

571570
let tbl = C_struct(components);
572-
let sym = token::gensym("vtable");
573-
let vt_gvar = do fmt!("vtable%u", sym).with_c_str |buf| {
571+
let vtable = ccx.sess.str_of(gensym_name("vtable"));
572+
let vt_gvar = do vtable.with_c_str |buf| {
574573
llvm::LLVMAddGlobal(ccx.llmod, val_ty(tbl).to_ref(), buf)
575574
};
576575
llvm::LLVMSetInitializer(vt_gvar, tbl);

branches/try/src/librustc/middle/trans/monomorphize.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ use util::ppaux::{Repr,ty_to_str};
3131

3232
use syntax::ast;
3333
use syntax::ast_map;
34+
use syntax::ast_map::path_name;
3435
use syntax::ast_util::local_def;
3536

3637
pub fn monomorphic_fn(ccx: @mut CrateContext,
@@ -193,7 +194,7 @@ pub fn monomorphic_fn(ccx: @mut CrateContext,
193194
}
194195
ccx.monomorphizing.insert(fn_id, depth + 1);
195196

196-
let (_, elt) = gensym_name(ccx.sess.str_of(name));
197+
let elt = path_name(gensym_name(ccx.sess.str_of(name)));
197198
let mut pt = (*pt).clone();
198199
pt.push(elt);
199200
let s = mangle_exported_name(ccx, pt.clone(), mono_ty);

branches/try/src/libstd/num/i16.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010

1111
//! Operations and constants for `i16`
1212
13-
use num::BitCount;
13+
use num::{BitCount, CheckedAdd, CheckedSub, CheckedMul};
14+
use option::{Option, Some, None};
1415
use unstable::intrinsics;
1516

1617
pub use self::generated::*;
@@ -30,3 +31,33 @@ impl BitCount for i16 {
3031
#[inline]
3132
fn trailing_zeros(&self) -> i16 { unsafe { intrinsics::cttz16(*self) } }
3233
}
34+
35+
impl CheckedAdd for i16 {
36+
#[inline]
37+
fn checked_add(&self, v: &i16) -> Option<i16> {
38+
unsafe {
39+
let (x, y) = intrinsics::i16_add_with_overflow(*self, *v);
40+
if y { None } else { Some(x) }
41+
}
42+
}
43+
}
44+
45+
impl CheckedSub for i16 {
46+
#[inline]
47+
fn checked_sub(&self, v: &i16) -> Option<i16> {
48+
unsafe {
49+
let (x, y) = intrinsics::i16_sub_with_overflow(*self, *v);
50+
if y { None } else { Some(x) }
51+
}
52+
}
53+
}
54+
55+
impl CheckedMul for i16 {
56+
#[inline]
57+
fn checked_mul(&self, v: &i16) -> Option<i16> {
58+
unsafe {
59+
let (x, y) = intrinsics::i16_mul_with_overflow(*self, *v);
60+
if y { None } else { Some(x) }
61+
}
62+
}
63+
}

branches/try/src/libstd/num/i32.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010

1111
//! Operations and constants for `i32`
1212
13-
use num::BitCount;
13+
use num::{BitCount, CheckedAdd, CheckedSub, CheckedMul};
14+
use option::{Option, Some, None};
1415
use unstable::intrinsics;
1516

1617
pub use self::generated::*;
@@ -30,3 +31,33 @@ impl BitCount for i32 {
3031
#[inline]
3132
fn trailing_zeros(&self) -> i32 { unsafe { intrinsics::cttz32(*self) } }
3233
}
34+
35+
impl CheckedAdd for i32 {
36+
#[inline]
37+
fn checked_add(&self, v: &i32) -> Option<i32> {
38+
unsafe {
39+
let (x, y) = intrinsics::i32_add_with_overflow(*self, *v);
40+
if y { None } else { Some(x) }
41+
}
42+
}
43+
}
44+
45+
impl CheckedSub for i32 {
46+
#[inline]
47+
fn checked_sub(&self, v: &i32) -> Option<i32> {
48+
unsafe {
49+
let (x, y) = intrinsics::i32_sub_with_overflow(*self, *v);
50+
if y { None } else { Some(x) }
51+
}
52+
}
53+
}
54+
55+
impl CheckedMul for i32 {
56+
#[inline]
57+
fn checked_mul(&self, v: &i32) -> Option<i32> {
58+
unsafe {
59+
let (x, y) = intrinsics::i32_mul_with_overflow(*self, *v);
60+
if y { None } else { Some(x) }
61+
}
62+
}
63+
}

branches/try/src/libstd/num/i64.rs

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@
1010

1111
//! Operations and constants for `i64`
1212
13-
use num::BitCount;
13+
use num::{BitCount, CheckedAdd, CheckedSub};
14+
#[cfg(target_word_size = "64")]
15+
use num::CheckedMul;
16+
use option::{Option, Some, None};
1417
use unstable::intrinsics;
1518

1619
pub use self::generated::*;
@@ -30,3 +33,35 @@ impl BitCount for i64 {
3033
#[inline]
3134
fn trailing_zeros(&self) -> i64 { unsafe { intrinsics::cttz64(*self) } }
3235
}
36+
37+
impl CheckedAdd for i64 {
38+
#[inline]
39+
fn checked_add(&self, v: &i64) -> Option<i64> {
40+
unsafe {
41+
let (x, y) = intrinsics::i64_add_with_overflow(*self, *v);
42+
if y { None } else { Some(x) }
43+
}
44+
}
45+
}
46+
47+
impl CheckedSub for i64 {
48+
#[inline]
49+
fn checked_sub(&self, v: &i64) -> Option<i64> {
50+
unsafe {
51+
let (x, y) = intrinsics::i64_sub_with_overflow(*self, *v);
52+
if y { None } else { Some(x) }
53+
}
54+
}
55+
}
56+
57+
// FIXME: #8449: should not be disabled on 32-bit
58+
#[cfg(target_word_size = "64")]
59+
impl CheckedMul for i64 {
60+
#[inline]
61+
fn checked_mul(&self, v: &i64) -> Option<i64> {
62+
unsafe {
63+
let (x, y) = intrinsics::i64_mul_with_overflow(*self, *v);
64+
if y { None } else { Some(x) }
65+
}
66+
}
67+
}

branches/try/src/libstd/num/i8.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@
1010

1111
//! Operations and constants for `i8`
1212
13-
use num::BitCount;
13+
use num::{BitCount, CheckedAdd, CheckedSub, CheckedMul};
14+
use option::{Option, Some, None};
1415
use unstable::intrinsics;
1516

1617
pub use self::generated::*;
@@ -30,3 +31,33 @@ impl BitCount for i8 {
3031
#[inline]
3132
fn trailing_zeros(&self) -> i8 { unsafe { intrinsics::cttz8(*self) } }
3233
}
34+
35+
impl CheckedAdd for i8 {
36+
#[inline]
37+
fn checked_add(&self, v: &i8) -> Option<i8> {
38+
unsafe {
39+
let (x, y) = intrinsics::i8_add_with_overflow(*self, *v);
40+
if y { None } else { Some(x) }
41+
}
42+
}
43+
}
44+
45+
impl CheckedSub for i8 {
46+
#[inline]
47+
fn checked_sub(&self, v: &i8) -> Option<i8> {
48+
unsafe {
49+
let (x, y) = intrinsics::i8_sub_with_overflow(*self, *v);
50+
if y { None } else { Some(x) }
51+
}
52+
}
53+
}
54+
55+
impl CheckedMul for i8 {
56+
#[inline]
57+
fn checked_mul(&self, v: &i8) -> Option<i8> {
58+
unsafe {
59+
let (x, y) = intrinsics::i8_mul_with_overflow(*self, *v);
60+
if y { None } else { Some(x) }
61+
}
62+
}
63+
}

0 commit comments

Comments
 (0)