Skip to content

Commit 626bdaa

Browse files
committed
rustc: Parse parameter IDs in external crate metadata. Un-XFAIL lib-bitv.rs.
1 parent c67eb1a commit 626bdaa

File tree

3 files changed

+13
-8
lines changed

3 files changed

+13
-8
lines changed

src/comp/front/creader.rs

+12-6
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,15 @@ impure fn parse_mt(@pstate st, str_def sd) -> ty.mt {
8484
ret rec(ty=parse_ty(st, sd), mut=mut);
8585
}
8686

87+
impure fn parse_def(@pstate st, str_def sd) -> ast.def_id {
88+
auto def = "";
89+
while (peek(st) as char != '|') {
90+
def += _str.unsafe_from_byte(next(st));
91+
}
92+
st.pos = st.pos + 1u;
93+
ret sd(def);
94+
}
95+
8796
impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
8897
alt (next(st) as char) {
8998
case ('n') {ret ty.ty_nil;}
@@ -109,18 +118,15 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
109118
case ('s') {ret ty.ty_str;}
110119
case ('t') {
111120
check(next(st) as char == '[');
112-
auto def = "";
113-
while (peek(st) as char != '|') {
114-
def += _str.unsafe_from_byte(next(st));
115-
}
116-
st.pos = st.pos + 1u;
121+
auto def = parse_def(st, sd);
117122
let vec[@ty.t] params = vec();
118123
while (peek(st) as char != ']') {
119124
params += vec(parse_ty(st, sd));
120125
}
121126
st.pos = st.pos + 1u;
122-
ret ty.ty_tag(sd(def), params);
127+
ret ty.ty_tag(def, params);
123128
}
129+
case ('p') {ret ty.ty_param(parse_def(st, sd));}
124130
case ('@') {ret ty.ty_box(parse_mt(st, sd));}
125131
case ('V') {ret ty.ty_vec(parse_mt(st, sd));}
126132
case ('P') {ret ty.ty_port(parse_ty(st, sd));}

src/comp/middle/metadata.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ fn sty_str(ty.sty st, def_str ds) -> str {
123123
}
124124
case (ty.ty_var(?id)) {ret "X" + common.istr(id);}
125125
case (ty.ty_native) {ret "E";}
126-
case (ty.ty_param(?def)) {ret "p" + ds(def);}
126+
case (ty.ty_param(?def)) {ret "p" + ds(def) + "|";}
127127
case (ty.ty_type) {ret "Y";}
128128
}
129129
}

src/test/run-pass/lib-bitv.rs

-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
// xfail-stage0
21
use std;
32
import std._vec;
43
import std.bitv;

0 commit comments

Comments
 (0)