Skip to content

Commit 1b536a4

Browse files
committed
---
yaml --- r: 145143 b: refs/heads/try2 c: 250c3d4 h: refs/heads/master i: 145141: 8db20b7 145139: bd4bfcc 145135: 43b8782 v: v3
1 parent f0a022a commit 1b536a4

36 files changed

+2684
-184
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: a7515c87ae1352cb0009c4136f56092736012197
8+
refs/heads/try2: 250c3d47dfb56c0ef5581b8ff65958b226dc656a
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/Makefile.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,7 @@ CFG_LIBRUSTC_$(1) :=$(call CFG_LIB_NAME_$(1),rustc)
214214
CFG_LIBSYNTAX_$(1) :=$(call CFG_LIB_NAME_$(1),syntax)
215215
CFG_LIBRUSTPKG_$(1) :=$(call CFG_LIB_NAME_$(1),rustpkg)
216216
CFG_LIBRUSTDOC_$(1) :=$(call CFG_LIB_NAME_$(1),rustdoc)
217+
CFG_LIBRUSTDOCNG_$(1) :=$(call CFG_LIB_NAME_$(1),rustdoc_ng)
217218
CFG_LIBRUSTI_$(1) :=$(call CFG_LIB_NAME_$(1),rusti)
218219
CFG_LIBRUST_$(1) :=$(call CFG_LIB_NAME_$(1),rust)
219220

@@ -223,6 +224,7 @@ LIBRUSTC_GLOB_$(1) :=$(call CFG_LIB_GLOB_$(1),rustc)
223224
LIBSYNTAX_GLOB_$(1) :=$(call CFG_LIB_GLOB_$(1),syntax)
224225
LIBRUSTPKG_GLOB_$(1) :=$(call CFG_LIB_GLOB_$(1),rustpkg)
225226
LIBRUSTDOC_GLOB_$(1) :=$(call CFG_LIB_GLOB_$(1),rustdoc)
227+
LIBRUSTDOCNG_GLOB_$(1) :=$(call CFG_LIB_GLOB_$(1),rustdoc_ng)
226228
LIBRUSTI_GLOB_$(1) :=$(call CFG_LIB_GLOB_$(1),rusti)
227229
LIBRUST_GLOB_$(1) :=$(call CFG_LIB_GLOB_$(1),rust)
228230
EXTRALIB_DSYM_GLOB_$(1) :=$(call CFG_LIB_DSYM_GLOB_$(1),extra)
@@ -231,6 +233,7 @@ LIBRUSTC_DSYM_GLOB_$(1) :=$(call CFG_LIB_DSYM_GLOB_$(1),rustc)
231233
LIBSYNTAX_DSYM_GLOB_$(1) :=$(call CFG_LIB_DSYM_GLOB_$(1),syntax)
232234
LIBRUSTPKG_DSYM_GLOB_$(1) :=$(call CFG_LIB_DSYM_GLOB_$(1),rustpkg)
233235
LIBRUSTDOC_DSYM_GLOB_$(1) :=$(call CFG_LIB_DSYM_GLOB_$(1),rustdoc)
236+
LIBRUSTDOCNG_DSYM_GLOB_$(1) :=$(call CFG_LIB_DSYM_GLOB_$(1),rustdoc_ng)
234237
LIBRUSTI_DSYM_GLOB_$(1) :=$(call CFG_LIB_DSYM_GLOB_$(1),rusti)
235238
LIBRUST_DSYM_GLOB_$(1) :=$(call CFG_LIB_DSYM_GLOB_$(1),rust)
236239

@@ -443,6 +446,7 @@ CSREQ$(1)_T_$(2)_H_$(3) = \
443446
$$(HBIN$(1)_H_$(3))/rust$$(X_$(3)) \
444447
$$(HLIB$(1)_H_$(3))/$(CFG_LIBRUSTPKG_$(3)) \
445448
$$(HLIB$(1)_H_$(3))/$(CFG_LIBRUSTDOC_$(3)) \
449+
$$(HLIB$(1)_H_$(3))/$(CFG_LIBRUSTDOCNG_$(3)) \
446450
$$(HLIB$(1)_H_$(3))/$(CFG_LIBRUSTI_$(3)) \
447451
$$(HLIB$(1)_H_$(3))/$(CFG_LIBRUST_$(3)) \
448452
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_STDLIB_$(2)) \
@@ -451,6 +455,7 @@ CSREQ$(1)_T_$(2)_H_$(3) = \
451455
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTC_$(2)) \
452456
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTPKG_$(2)) \
453457
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTDOC_$(2)) \
458+
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTDOCNG_$(2)) \
454459
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTI_$(2)) \
455460
$$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUST_$(2))
456461

branches/try2/mk/clean.mk

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ clean$(1)_H_$(2):
7272
$(Q)rm -f $$(HBIN$(1)_H_$(2))/rust$(X_$(2))
7373
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(CFG_LIBRUSTPKG_$(2))
7474
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(CFG_LIBRUSTDOC_$(2))
75+
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(CFG_LIBRUSTDOCNG_$(2))
7576
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(CFG_RUNTIME_$(2))
7677
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(CFG_STDLIB_$(2))
7778
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(CFG_EXTRALIB_$(2))
@@ -85,6 +86,7 @@ clean$(1)_H_$(2):
8586
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(LIBSYNTAX_GLOB_$(2))
8687
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(LIBRUSTPKG_GLOB_$(2))
8788
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(LIBRUSTDOC_GLOB_$(2))
89+
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(LIBRUSTDOCNG_GLOB_$(2))
8890
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(LIBRUSTI_GLOB_$(2))
8991
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(LIBRUST_GLOB_$(2))
9092
$(Q)rm -f $$(HLIB$(1)_H_$(2))/$(CFG_RUSTLLVM_$(2))
@@ -107,6 +109,7 @@ clean$(1)_T_$(2)_H_$(3):
107109
$(Q)rm -f $$(TBIN$(1)_T_$(2)_H_$(3))/rust$(X_$(2))
108110
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTPKG_$(2))
109111
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTDOC_$(2))
112+
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_LIBRUSTDOCNG_$(2))
110113
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUNTIME_$(2))
111114
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_STDLIB_$(2))
112115
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_EXTRALIB_$(2))
@@ -120,6 +123,7 @@ clean$(1)_T_$(2)_H_$(3):
120123
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBSYNTAX_GLOB_$(2))
121124
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBRUSTPKG_GLOB_$(2))
122125
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBRUSTDOC_GLOB_$(2))
126+
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBRUSTDOCNG_GLOB_$(2))
123127
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBRUSTI_GLOB_$(2))
124128
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(LIBRUST_GLOB_$(2))
125129
$(Q)rm -f $$(TLIB$(1)_T_$(2)_H_$(3))/$(CFG_RUSTLLVM_$(2))

branches/try2/mk/install.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ install-target-$(1)-host-$(2): $$(CSREQ$$(ISTAGE)_T_$(1)_H_$(2))
104104
$$(Q)$$(call INSTALL_LIB,$$(LIBSYNTAX_GLOB_$(1)))
105105
$$(Q)$$(call INSTALL_LIB,$$(LIBRUSTPKG_GLOB_$(1)))
106106
$$(Q)$$(call INSTALL_LIB,$$(LIBRUSTDOC_GLOB_$(1)))
107+
$$(Q)$$(call INSTALL_LIB,$$(LIBRUSTDOCNG_GLOB_$(1)))
107108
$$(Q)$$(call INSTALL_LIB,$$(LIBRUSTI_GLOB_$(1)))
108109
$$(Q)$$(call INSTALL_LIB,$$(LIBRUST_GLOB_$(1)))
109110
$$(Q)$$(call INSTALL_LIB,libmorestack.a)
@@ -149,6 +150,7 @@ install-host: $(CSREQ$(ISTAGE)_T_$(CFG_BUILD_TRIPLE)_H_$(CFG_BUILD_TRIPLE))
149150
$(Q)$(call INSTALL_LIB,$(LIBRUST_GLOB_$(CFG_BUILD_TRIPLE)))
150151
$(Q)$(call INSTALL_LIB,$(LIBRUSTPKG_GLOB_$(CFG_BUILD_TRIPLE)))
151152
$(Q)$(call INSTALL_LIB,$(LIBRUSTDOC_GLOB_$(CFG_BUILD_TRIPLE)))
153+
$(Q)$(call INSTALL_LIB,$(LIBRUSTDOCNG_GLOB_$(CFG_BUILD_TRIPLE)))
152154
$(Q)$(call INSTALL,$(HL),$(PHL),$(CFG_RUNTIME_$(CFG_BUILD_TRIPLE)))
153155
$(Q)$(call INSTALL,$(HL),$(PHL),$(CFG_RUSTLLVM_$(CFG_BUILD_TRIPLE)))
154156
$(Q)$(call INSTALL,$(S)/man, $(PREFIX_ROOT)/share/man/man1,rust.1)

branches/try2/mk/rt.mk

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,15 +102,15 @@ else ifeq ($(OSTYPE_$(1)), apple-darwin)
102102
LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/libuv/libuv.a
103103
JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc/lib/libjemalloc_pic.a
104104
else ifeq ($(OSTYPE_$(1)), unknown-freebsd)
105-
LIBUV_OSTYPE_$(1)_$(2) := unix/freebsd
105+
LIBUV_OSTYPE_$(1)_$(2) := freebsd
106106
LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/libuv/libuv.a
107107
JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc/lib/libjemalloc_pic.a
108108
else ifeq ($(OSTYPE_$(1)), linux-androideabi)
109-
LIBUV_OSTYPE_$(1)_$(2) := unix/android
109+
LIBUV_OSTYPE_$(1)_$(2) := android
110110
LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/libuv/libuv.a
111111
JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc/lib/libjemalloc_pic.a
112112
else
113-
LIBUV_OSTYPE_$(1)_$(2) := unix/linux
113+
LIBUV_OSTYPE_$(1)_$(2) := linux
114114
LIBUV_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/libuv/libuv.a
115115
JEMALLOC_LIB_$(1)_$(2) := $$(RT_BUILD_DIR_$(1)_$(2))/jemalloc/lib/libjemalloc_pic.a
116116
endif
@@ -178,6 +178,7 @@ export PYTHONPATH := $(PYTHONPATH):$$(S)src/gyp/pylib
178178
$$(LIBUV_MAKEFILE_$(1)_$(2)): $$(LIBUV_DEPS)
179179
(cd $(S)src/libuv/ && \
180180
$$(CFG_PYTHON) ./gyp_uv -f make -Dtarget_arch=$$(LIBUV_ARCH_$(1)) -D ninja \
181+
-DOS=$$(LIBUV_OSTYPE_$(1)_$(2)) \
181182
-Goutput_dir=$$(@D) --generator-output $$(@D))
182183

183184
# XXX: Shouldn't need platform-specific conditions here

branches/try2/mk/tools.mk

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ RUSTPKG_INPUTS := $(wildcard $(S)src/librustpkg/*.rs)
2323
RUSTDOC_LIB := $(S)src/librustdoc/rustdoc.rs
2424
RUSTDOC_INPUTS := $(wildcard $(S)src/librustdoc/*.rs)
2525

26+
# rustdoc_ng, the next generation documentation tool
27+
28+
RUSTDOCNG_LIB := $(S)src/rustdoc_ng/lib.rs
29+
RUSTDOCNG_INPUTS := $(wildcard $(S)src/rustdoc_ng/*.rs)
30+
2631
# Rusti, the JIT REPL
2732
RUSTI_LIB := $(S)src/librusti/rusti.rs
2833
RUSTI_INPUTS := $(wildcard $(S)src/librusti/*.rs)
@@ -78,6 +83,24 @@ $$(TBIN$(1)_T_$(4)_H_$(3))/rustdoc$$(X_$(4)): \
7883
@$$(call E, compile_and_link: $$@)
7984
$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rustdoc -o $$@ $$<
8085

86+
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOCNG_$(4)): \
87+
$$(RUSTDOCNG_LIB) $$(RUSTDOCNG_INPUTS) \
88+
$$(SREQ$(1)_T_$(4)_H_$(3)) \
89+
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4)) \
90+
| $$(TLIB$(1)_T_$(4)_H_$(3))/
91+
@$$(call E, compile_and_link: $$@)
92+
$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOCNG_GLOB_$(4)),$$(notdir $$@))
93+
$$(STAGE$(1)_T_$(4)_H_$(3)) --out-dir $$(@D) $$< && touch $$@
94+
$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOCNG_GLOB_$(4)),$$(notdir $$@))
95+
96+
$$(TBIN$(1)_T_$(4)_H_$(3))/rustdoc_ng$$(X_$(4)): \
97+
$$(DRIVER_CRATE) \
98+
$$(TSREQ$(1)_T_$(4)_H_$(3)) \
99+
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOCNG_$(4)) \
100+
| $$(TBIN$(1)_T_$(4)_H_$(3))/
101+
@$$(call E, compile_and_link: $$@)
102+
$$(STAGE$(1)_T_$(4)_H_$(3)) --cfg rustdoc_ng -o $$@ $$<
103+
81104
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTI_$(4)): \
82105
$$(RUSTI_LIB) $$(RUSTI_INPUTS) \
83106
$$(SREQ$(1)_T_$(4)_H_$(3)) \
@@ -102,6 +125,7 @@ $$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUST_$(4)): \
102125
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTPKG_$(4)) \
103126
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTI_$(4)) \
104127
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOC_$(4)) \
128+
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOCNG_$(4)) \
105129
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTC_$(4)) \
106130
| $$(TLIB$(1)_T_$(4)_H_$(3))/
107131
@$$(call E, compile_and_link: $$@)
@@ -171,6 +195,19 @@ $$(HBIN$(2)_H_$(4))/rustdoc$$(X_$(4)): \
171195
@$$(call E, cp: $$@)
172196
$$(Q)cp $$< $$@
173197

198+
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTDOCNG_$(4)): \
199+
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTDOCNG_$(4)) \
200+
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)) \
201+
$$(HSREQ$(2)_H_$(4)) \
202+
| $$(HLIB$(2)_H_$(4))/
203+
@$$(call E, cp: $$@)
204+
$$(call REMOVE_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOCNG_GLOB_$(4)),$$(notdir $$@))
205+
$$(Q)cp $$< $$@
206+
$$(call LIST_ALL_OLD_GLOB_MATCHES_EXCEPT,$$(dir $$@),$(LIBRUSTDOCNG_GLOB_$(4)),$$(notdir $$@))
207+
$$(Q)cp -R $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTDOCNG_GLOB_$(4)) \
208+
$$(wildcard $$(TLIB$(1)_T_$(4)_H_$(3))/$(LIBRUSTDOCNG_DSYM_GLOB_$(4))) \
209+
$$(HLIB$(2)_H_$(4))
210+
174211
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTI_$(4)): \
175212
$$(TLIB$(1)_T_$(4)_H_$(3))/$(CFG_LIBRUSTI_$(4)) \
176213
$$(HLIB$(2)_H_$(4))/$(CFG_LIBRUSTC_$(4)) \

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -905,7 +905,8 @@ fn encode_info_for_item(ecx: &EncodeContext,
905905
encode_type(ecx, ebml_w, node_id_to_type(tcx, item.id));
906906
encode_symbol(ecx, ebml_w, item.id);
907907
encode_name(ecx, ebml_w, item.ident);
908-
encode_path(ecx, ebml_w, path, ast_map::path_name(item.ident));
908+
let elt = ast_map::path_pretty_name(item.ident, item.id as u64);
909+
encode_path(ecx, ebml_w, path, elt);
909910
(ecx.encode_inlined_item)(ecx, ebml_w, path, ii_item(item));
910911
ebml_w.end_tag();
911912
}

branches/try2/src/librustc/middle/trans/base.rs

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ use syntax::parse::token;
8686
use syntax::parse::token::{special_idents};
8787
use syntax::print::pprust::stmt_to_str;
8888
use syntax::{ast, ast_util, codemap, ast_map};
89-
use syntax::abi::{X86, X86_64, Arm, Mips};
89+
use syntax::abi::{X86, X86_64, Arm, Mips, Rust, RustIntrinsic};
9090
use syntax::visit;
9191
use syntax::visit::Visitor;
9292

@@ -813,15 +813,28 @@ pub fn trans_external_path(ccx: &mut CrateContext, did: ast::DefId, t: ty::t)
813813
-> ValueRef {
814814
let name = csearch::get_symbol(ccx.sess.cstore, did);
815815
match ty::get(t).sty {
816-
ty::ty_bare_fn(_) | ty::ty_closure(_) => {
817-
let llty = type_of_fn_from_ty(ccx, t);
818-
return get_extern_fn(&mut ccx.externs, ccx.llmod, name,
819-
lib::llvm::CCallConv, llty);
820-
}
821-
_ => {
822-
let llty = type_of(ccx, t);
823-
return get_extern_const(&mut ccx.externs, ccx.llmod, name, llty);
824-
}
816+
ty::ty_bare_fn(ref fn_ty) => {
817+
// Currently llvm_calling_convention triggers unimpl/bug on
818+
// Rust/RustIntrinsic, so those two are handled specially here.
819+
let cconv = match fn_ty.abis.for_arch(ccx.sess.targ_cfg.arch) {
820+
Some(Rust) | Some(RustIntrinsic) => lib::llvm::CCallConv,
821+
Some(*) | None => {
822+
let c = foreign::llvm_calling_convention(ccx, fn_ty.abis);
823+
c.unwrap_or(lib::llvm::CCallConv)
824+
}
825+
};
826+
let llty = type_of_fn_from_ty(ccx, t);
827+
return get_extern_fn(&mut ccx.externs, ccx.llmod, name, cconv, llty);
828+
}
829+
ty::ty_closure(_) => {
830+
let llty = type_of_fn_from_ty(ccx, t);
831+
return get_extern_fn(&mut ccx.externs, ccx.llmod, name,
832+
lib::llvm::CCallConv, llty);
833+
}
834+
_ => {
835+
let llty = type_of(ccx, t);
836+
return get_extern_const(&mut ccx.externs, ccx.llmod, name, llty);
837+
}
825838
};
826839
}
827840
@@ -2475,7 +2488,8 @@ pub fn get_item_val(ccx: @mut CrateContext, id: ast::NodeId) -> ValueRef {
24752488
let val = match item {
24762489
ast_map::node_item(i, pth) => {
24772490

2478-
let my_path = vec::append((*pth).clone(), [path_name(i.ident)]);
2491+
let elt = path_pretty_name(i.ident, id as u64);
2492+
let my_path = vec::append_one((*pth).clone(), elt);
24792493
let ty = ty::node_id_to_type(ccx.tcx, i.id);
24802494
let sym = exported_name(ccx, my_path, ty, i.attrs);
24812495

branches/try2/src/librustc/middle/trans/foreign.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,8 @@ struct LlvmSignature {
7474
///////////////////////////////////////////////////////////////////////////
7575
// Calls to external functions
7676

77-
fn llvm_calling_convention(ccx: @mut CrateContext,
78-
abis: AbiSet)
79-
-> Option<CallConv> {
77+
pub fn llvm_calling_convention(ccx: &mut CrateContext,
78+
abis: AbiSet) -> Option<CallConv> {
8079
let arch = ccx.sess.targ_cfg.arch;
8180
abis.for_arch(arch).map(|abi| {
8281
match *abi {

branches/try2/src/libstd/c_str.rs

Lines changed: 74 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ use ops::Drop;
1515
use option::{Option, Some, None};
1616
use ptr::RawPtr;
1717
use ptr;
18+
use str;
1819
use str::StrSlice;
1920
use vec::{ImmutableVector, CopyableVector};
2021
use container::Container;
@@ -97,15 +98,25 @@ impl CString {
9798
/// # Failure
9899
///
99100
/// Fails if the CString is null.
101+
#[inline]
100102
pub fn as_bytes<'a>(&'a self) -> &'a [u8] {
101-
#[fixed_stack_segment]; #[inline(never)];
102103
if self.buf.is_null() { fail!("CString is null!"); }
103104
unsafe {
104-
let len = libc::strlen(self.buf) as uint;
105+
let len = ptr::position(self.buf, |c| *c == 0);
105106
cast::transmute((self.buf, len + 1))
106107
}
107108
}
108109

110+
/// Converts the CString into a `&str` without copying.
111+
/// Returns None if the CString is not UTF-8 or is null.
112+
#[inline]
113+
pub fn as_str<'a>(&'a self) -> Option<&'a str> {
114+
if self.buf.is_null() { return None; }
115+
let buf = self.as_bytes();
116+
let buf = buf.slice_to(buf.len()-1); // chop off the trailing NUL
117+
str::from_utf8_slice_opt(buf)
118+
}
119+
109120
/// Return a CString iterator.
110121
pub fn iter<'a>(&'a self) -> CStringIterator<'a> {
111122
CStringIterator {
@@ -238,7 +249,7 @@ mod tests {
238249
use option::{Some, None};
239250

240251
#[test]
241-
fn test_to_c_str() {
252+
fn test_str_to_c_str() {
242253
do "".to_c_str().with_ref |buf| {
243254
unsafe {
244255
assert_eq!(*ptr::offset(buf, 0), 0);
@@ -257,6 +268,37 @@ mod tests {
257268
}
258269
}
259270

271+
#[test]
272+
fn test_vec_to_c_str() {
273+
let b: &[u8] = [];
274+
do b.to_c_str().with_ref |buf| {
275+
unsafe {
276+
assert_eq!(*ptr::offset(buf, 0), 0);
277+
}
278+
}
279+
280+
do bytes!("hello").to_c_str().with_ref |buf| {
281+
unsafe {
282+
assert_eq!(*ptr::offset(buf, 0), 'h' as libc::c_char);
283+
assert_eq!(*ptr::offset(buf, 1), 'e' as libc::c_char);
284+
assert_eq!(*ptr::offset(buf, 2), 'l' as libc::c_char);
285+
assert_eq!(*ptr::offset(buf, 3), 'l' as libc::c_char);
286+
assert_eq!(*ptr::offset(buf, 4), 'o' as libc::c_char);
287+
assert_eq!(*ptr::offset(buf, 5), 0);
288+
}
289+
}
290+
291+
do bytes!("foo", 0xff).to_c_str().with_ref |buf| {
292+
unsafe {
293+
assert_eq!(*ptr::offset(buf, 0), 'f' as libc::c_char);
294+
assert_eq!(*ptr::offset(buf, 1), 'o' as libc::c_char);
295+
assert_eq!(*ptr::offset(buf, 2), 'o' as libc::c_char);
296+
assert_eq!(*ptr::offset(buf, 3), 0xff);
297+
assert_eq!(*ptr::offset(buf, 4), 0);
298+
}
299+
}
300+
}
301+
260302
#[test]
261303
fn test_is_null() {
262304
let c_str = unsafe { CString::new(ptr::null(), false) };
@@ -349,4 +391,33 @@ mod tests {
349391
}
350392
}
351393
}
394+
395+
#[test]
396+
fn test_as_bytes() {
397+
let c_str = "hello".to_c_str();
398+
assert_eq!(c_str.as_bytes(), bytes!("hello", 0));
399+
let c_str = "".to_c_str();
400+
assert_eq!(c_str.as_bytes(), bytes!(0));
401+
let c_str = bytes!("foo", 0xff).to_c_str();
402+
assert_eq!(c_str.as_bytes(), bytes!("foo", 0xff, 0));
403+
}
404+
405+
#[test]
406+
#[should_fail]
407+
fn test_as_bytes_fail() {
408+
let c_str = unsafe { CString::new(ptr::null(), false) };
409+
c_str.as_bytes();
410+
}
411+
412+
#[test]
413+
fn test_as_str() {
414+
let c_str = "hello".to_c_str();
415+
assert_eq!(c_str.as_str(), Some("hello"));
416+
let c_str = "".to_c_str();
417+
assert_eq!(c_str.as_str(), Some(""));
418+
let c_str = bytes!("foo", 0xff).to_c_str();
419+
assert_eq!(c_str.as_str(), None);
420+
let c_str = unsafe { CString::new(ptr::null(), false) };
421+
assert_eq!(c_str.as_str(), None);
422+
}
352423
}

0 commit comments

Comments
 (0)