Skip to content

Commit fe9d07d

Browse files
committed
rustc: "as Trait" can now be written "as @trait".
There is also code for ~Trait and &Trait, but these are currently (incorrectly) synonyms for "as @trait" and "as &Trait".
1 parent fd0f616 commit fe9d07d

27 files changed

+125
-83
lines changed

src/fuzzer/fuzzer.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ fn check_variants_T<T: copy>(
264264
@as_str(|a|pprust::print_crate(
265265
codemap,
266266
// Assuming we're not generating any token_trees
267-
@syntax::util::interner::mk::<@~str>(
267+
syntax::util::interner::mk::<@~str>(
268268
|x| str::hash(*x), |x,y| str::eq(*x,*y)),
269269
diagnostic::mk_span_handler(handler, codemap),
270270
crate2,
@@ -427,7 +427,7 @@ fn parse_and_print(code: @~str) -> ~str {
427427
pprust::print_crate(
428428
sess.cm,
429429
// Assuming there are no token_trees
430-
@syntax::util::interner::mk::<@~str>(
430+
syntax::util::interner::mk::<@~str>(
431431
|x| str::hash(*x), |x,y| str::eq(*x,*y)),
432432
sess.span_diagnostic,
433433
crate,
@@ -576,7 +576,7 @@ fn check_variants(files: ~[~str], cx: context) {
576576
as_str(|a| pprust::print_crate(
577577
sess.cm,
578578
// Assuming no token_trees
579-
@syntax::util::interner::mk::<@~str>(
579+
syntax::util::interner::mk::<@~str>(
580580
|x| str::hash(*x), |x,y| str::eq(*x,*y)),
581581
sess.span_diagnostic,
582582
crate,

src/libsyntax/ext/tt/earley_parser.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,7 @@ fn parse(sess: parse_sess, cfg: ast::crate_cfg, rdr: reader, ms: ~[matcher])
284284
nts, next_eis.len()});
285285
} else if (bb_eis.len() == 0u && next_eis.len() == 0u) {
286286
return failure(sp, ~"No rules expected the token "
287-
+ to_str(*rdr.interner(), tok));
287+
+ to_str(rdr.interner(), tok));
288288
} else if (next_eis.len() > 0u) {
289289
/* Now process the next token */
290290
while(next_eis.len() > 0u) {
@@ -334,7 +334,7 @@ fn parse_nt(p: parser, name: ~str) -> nonterminal {
334334
~"ident" => match copy p.token {
335335
token::IDENT(sn,b) => { p.bump(); token::nt_ident(sn,b) }
336336
_ => p.fatal(~"expected ident, found "
337-
+ token::to_str(*p.reader.interner(), copy p.token))
337+
+ token::to_str(p.reader.interner(), copy p.token))
338338
},
339339
~"path" => token::nt_path(p.parse_path_with_tps(false)),
340340
~"tt" => {

src/libsyntax/ext/tt/transcribe.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ type tt_frame = @{
2525

2626
type tt_reader = @{
2727
sp_diag: span_handler,
28-
interner: @interner<@~str>,
28+
interner: interner<@~str>,
2929
mut cur: tt_frame,
3030
/* for MBE-style macro transcription */
3131
interpolations: std::map::hashmap<ident, @named_match>,
@@ -39,7 +39,7 @@ type tt_reader = @{
3939
/** This can do Macro-By-Example transcription. On the other hand, if
4040
* `src` contains no `tt_seq`s and `tt_nonterminal`s, `interp` can (and
4141
* should) be none. */
42-
fn new_tt_reader(sp_diag: span_handler, itr: @interner<@~str>,
42+
fn new_tt_reader(sp_diag: span_handler, itr: interner<@~str>,
4343
interp: option<std::map::hashmap<ident,@named_match>>,
4444
src: ~[ast::token_tree])
4545
-> tt_reader {
@@ -237,4 +237,4 @@ fn tt_next_token(&&r: tt_reader) -> {tok: token, sp: span} {
237237
}
238238
}
239239

240-
}
240+
}

src/libsyntax/parse.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ type parse_sess = @{
2424
cm: codemap::codemap,
2525
mut next_id: node_id,
2626
span_diagnostic: span_handler,
27-
interner: @interner::interner<@~str>,
27+
interner: interner::interner<@~str>,
2828
// these two must be kept up to date
2929
mut chpos: uint,
3030
mut byte_pos: uint
@@ -35,7 +35,7 @@ fn new_parse_sess(demitter: option<emitter>) -> parse_sess {
3535
return @{cm: cm,
3636
mut next_id: 1,
3737
span_diagnostic: mk_span_handler(mk_handler(demitter), cm),
38-
interner: @interner::mk::<@~str>(|x| str::hash(*x),
38+
interner: interner::mk::<@~str>(|x| str::hash(*x),
3939
|x,y| str::eq(*x, *y)),
4040
mut chpos: 0u, mut byte_pos: 0u};
4141
}
@@ -45,7 +45,7 @@ fn new_parse_sess_special_handler(sh: span_handler, cm: codemap::codemap)
4545
return @{cm: cm,
4646
mut next_id: 1,
4747
span_diagnostic: sh,
48-
interner: @interner::mk::<@~str>(|x| str::hash(*x),
48+
interner: interner::mk::<@~str>(|x| str::hash(*x),
4949
|x,y| str::eq(*x, *y)),
5050
mut chpos: 0u, mut byte_pos: 0u};
5151
}

src/libsyntax/parse/comments.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ fn gather_comments_and_literals(span_diagnostic: diagnostic::span_handler,
276276
srdr: io::Reader) ->
277277
{cmnts: ~[cmnt], lits: ~[lit]} {
278278
let src = @str::from_bytes(srdr.read_whole_stream());
279-
let itr = @interner::mk::<@~str>(
279+
let itr = interner::mk::<@~str>(
280280
|x| str::hash(*x),
281281
|x,y| str::eq(*x, *y)
282282
);
@@ -311,7 +311,7 @@ fn gather_comments_and_literals(span_diagnostic: diagnostic::span_handler,
311311
vec::push(literals, {lit: s, pos: sp.lo});
312312
log(debug, ~"tok lit: " + s);
313313
} else {
314-
log(debug, ~"tok: " + token::to_str(*rdr.interner, tok));
314+
log(debug, ~"tok: " + token::to_str(rdr.interner, tok));
315315
}
316316
first_read = false;
317317
}

src/libsyntax/parse/common.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ fn seq_sep_none() -> seq_sep {
1919
}
2020

2121
fn token_to_str(reader: reader, ++token: token::token) -> ~str {
22-
token::to_str(*reader.interner(), token)
22+
token::to_str(reader.interner(), token)
2323
}
2424

2525
trait parser_common {

src/libsyntax/parse/lexer.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ trait reader {
1414
fn next_token() -> {tok: token::token, sp: span};
1515
fn fatal(~str) -> !;
1616
fn span_diag() -> span_handler;
17-
pure fn interner() -> @interner<@~str>;
17+
pure fn interner() -> interner<@~str>;
1818
fn peek() -> {tok: token::token, sp: span};
1919
fn dup() -> reader;
2020
}
@@ -27,15 +27,15 @@ type string_reader = @{
2727
mut curr: char,
2828
mut chpos: uint,
2929
filemap: codemap::filemap,
30-
interner: @interner<@~str>,
30+
interner: interner<@~str>,
3131
/* cached: */
3232
mut peek_tok: token::token,
3333
mut peek_span: span
3434
};
3535

3636
fn new_string_reader(span_diagnostic: span_handler,
3737
filemap: codemap::filemap,
38-
itr: @interner<@~str>) -> string_reader {
38+
itr: interner<@~str>) -> string_reader {
3939
let r = new_low_level_string_reader(span_diagnostic, filemap, itr);
4040
string_advance_token(r); /* fill in peek_* */
4141
return r;
@@ -44,7 +44,7 @@ fn new_string_reader(span_diagnostic: span_handler,
4444
/* For comments.rs, which hackily pokes into 'pos' and 'curr' */
4545
fn new_low_level_string_reader(span_diagnostic: span_handler,
4646
filemap: codemap::filemap,
47-
itr: @interner<@~str>)
47+
itr: interner<@~str>)
4848
-> string_reader {
4949
let r = @{span_diagnostic: span_diagnostic, src: filemap.src,
5050
mut col: 0u, mut pos: 0u, mut curr: -1 as char,
@@ -79,7 +79,7 @@ impl string_reader: reader {
7979
self.span_diagnostic.span_fatal(copy self.peek_span, m)
8080
}
8181
fn span_diag() -> span_handler { self.span_diagnostic }
82-
pure fn interner() -> @interner<@~str> { self.interner }
82+
pure fn interner() -> interner<@~str> { self.interner }
8383
fn peek() -> {tok: token::token, sp: span} {
8484
{tok: self.peek_tok, sp: self.peek_span}
8585
}
@@ -101,7 +101,7 @@ impl tt_reader: reader {
101101
self.sp_diag.span_fatal(copy self.cur_span, m);
102102
}
103103
fn span_diag() -> span_handler { self.sp_diag }
104-
pure fn interner() -> @interner<@~str> { self.interner }
104+
pure fn interner() -> interner<@~str> { self.interner }
105105
fn peek() -> {tok: token::token, sp: span} {
106106
{ tok: self.cur_tok, sp: self.cur_span }
107107
}
@@ -219,7 +219,7 @@ fn consume_any_line_comment(rdr: string_reader)
219219
bump(rdr);
220220
}
221221
return some({
222-
tok: token::DOC_COMMENT((*rdr.interner).intern(@acc)),
222+
tok: token::DOC_COMMENT(rdr.interner.intern(@acc)),
223223
sp: ast_util::mk_sp(start_chpos, rdr.chpos)
224224
});
225225
} else {
@@ -264,7 +264,7 @@ fn consume_block_comment(rdr: string_reader)
264264
bump(rdr);
265265
bump(rdr);
266266
return some({
267-
tok: token::DOC_COMMENT((*rdr.interner).intern(@acc)),
267+
tok: token::DOC_COMMENT(rdr.interner.intern(@acc)),
268268
sp: ast_util::mk_sp(start_chpos, rdr.chpos)
269269
});
270270
}
@@ -398,12 +398,12 @@ fn scan_number(c: char, rdr: string_reader) -> token::token {
398398
if c == '3' && n == '2' {
399399
bump(rdr);
400400
bump(rdr);
401-
return token::LIT_FLOAT((*rdr.interner).intern(@num_str),
401+
return token::LIT_FLOAT(rdr.interner.intern(@num_str),
402402
ast::ty_f32);
403403
} else if c == '6' && n == '4' {
404404
bump(rdr);
405405
bump(rdr);
406-
return token::LIT_FLOAT((*rdr.interner).intern(@num_str),
406+
return token::LIT_FLOAT(rdr.interner.intern(@num_str),
407407
ast::ty_f64);
408408
/* FIXME (#2252): if this is out of range for either a
409409
32-bit or 64-bit float, it won't be noticed till the
@@ -413,7 +413,7 @@ fn scan_number(c: char, rdr: string_reader) -> token::token {
413413
}
414414
}
415415
if is_float {
416-
return token::LIT_FLOAT((*rdr.interner).intern(@num_str), ast::ty_f);
416+
return token::LIT_FLOAT(rdr.interner.intern(@num_str), ast::ty_f);
417417
} else {
418418
if str::len(num_str) == 0u {
419419
rdr.fatal(~"no valid digits found for number");
@@ -461,7 +461,7 @@ fn next_token_inner(rdr: string_reader) -> token::token {
461461
let is_mod_name = c == ':' && nextch(rdr) == ':';
462462

463463
// FIXME: perform NFKC normalization here. (Issue #2253)
464-
return token::IDENT((*rdr.interner).intern(@accum_str), is_mod_name);
464+
return token::IDENT(rdr.interner.intern(@accum_str), is_mod_name);
465465
}
466466
if is_dec_digit(c) {
467467
return scan_number(c, rdr);
@@ -630,7 +630,7 @@ fn next_token_inner(rdr: string_reader) -> token::token {
630630
}
631631
}
632632
bump(rdr);
633-
return token::LIT_STR((*rdr.interner).intern(@accum_str));
633+
return token::LIT_STR(rdr.interner.intern(@accum_str));
634634
}
635635
'-' => {
636636
if nextch(rdr) == '>' {

src/libsyntax/parse/parser.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,7 @@ class parser {
263263
self.sess.span_diagnostic.span_warn(copy self.span, m)
264264
}
265265
pure fn get_str(i: token::str_num) -> @~str {
266-
(*self.reader.interner()).get(i)
266+
self.reader.interner().get(i)
267267
}
268268
fn get_id() -> node_id { next_node_id(self.sess) }
269269

src/libsyntax/print/pprust.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import dvec::{DVec, dvec};
1111
import parse::classify::*;
1212
import util::interner;
1313

14-
type ident_interner = @interner::interner<@~str>;
14+
type ident_interner = interner::interner<@~str>;
1515

1616
// The ps is stored here to prevent recursive type.
1717
enum ann_node {
@@ -30,7 +30,7 @@ fn no_ann() -> pp_ann {
3030
type ps =
3131
@{s: pp::printer,
3232
cm: option<codemap>,
33-
intr: @interner::interner<@~str>,
33+
intr: interner::interner<@~str>,
3434
comments: option<~[comments::cmnt]>,
3535
literals: option<~[comments::lit]>,
3636
mut cur_cmnt: uint,
@@ -51,8 +51,8 @@ fn end(s: ps) {
5151
fn rust_printer(writer: io::Writer) -> ps {
5252
return @{s: pp::mk_printer(writer, default_columns),
5353
cm: none::<codemap>,
54-
intr: @interner::mk::<@~str>(|x| str::hash(*x),
55-
|x,y| str::eq(*x, *y)),
54+
intr: interner::mk::<@~str>(|x| str::hash(*x),
55+
|x,y| str::eq(*x, *y)),
5656
comments: none::<~[comments::cmnt]>,
5757
literals: none::<~[comments::lit]>,
5858
mut cur_cmnt: 0u,
@@ -81,7 +81,7 @@ const default_columns: uint = 78u;
8181
// Requires you to pass an input filename and reader so that
8282
// it can scan the input text for comments and literals to
8383
// copy forward.
84-
fn print_crate(cm: codemap, intr: @interner::interner<@~str>,
84+
fn print_crate(cm: codemap, intr: interner::interner<@~str>,
8585
span_diagnostic: diagnostic::span_handler,
8686
crate: @ast::crate, filename: ~str, in: io::Reader,
8787
out: io::Writer, ann: pp_ann, is_expanded: bool) {
@@ -690,14 +690,14 @@ fn print_tt(s: ps, tt: ast::token_tree) {
690690
}
691691
_ => { s.s.token_tree_last_was_ident = false; }
692692
}
693-
word(s.s, parse::token::to_str(*s.intr, tk));
693+
word(s.s, parse::token::to_str(s.intr, tk));
694694
}
695695
ast::tt_seq(_, tts, sep, zerok) => {
696696
word(s.s, ~"$(");
697697
for tts.each() |tt_elt| { print_tt(s, tt_elt); }
698698
word(s.s, ~")");
699699
match sep {
700-
some(tk) => word(s.s, parse::token::to_str(*s.intr, tk)),
700+
some(tk) => word(s.s, parse::token::to_str(s.intr, tk)),
701701
none => ()
702702
}
703703
word(s.s, if zerok { ~"*" } else { ~"+" });

src/rustc/metadata/tydecode.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,9 @@ fn parse_ty(st: @pstate, conv: conv_did) -> ty::t {
212212
assert next(st) == '[';
213213
let def = parse_def(st, conv);
214214
let substs = parse_substs(st, conv);
215+
let vstore = parse_vstore(st);
215216
assert next(st) == ']';
216-
return ty::mk_trait(st.tcx, def, substs);
217+
return ty::mk_trait(st.tcx, def, substs, vstore);
217218
}
218219
'p' => {
219220
let did = parse_def(st, conv);

src/rustc/metadata/tyencode.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,11 +227,12 @@ fn enc_sty(w: io::Writer, cx: @ctxt, st: ty::sty) {
227227
enc_substs(w, cx, substs);
228228
w.write_char(']');
229229
}
230-
ty::ty_trait(def, substs) => {
230+
ty::ty_trait(def, substs, vstore) => {
231231
w.write_str(&"x[");
232232
w.write_str(cx.ds(def));
233233
w.write_char('|');
234234
enc_substs(w, cx, substs);
235+
enc_vstore(w, cx, vstore);
235236
w.write_char(']');
236237
}
237238
ty::ty_tup(ts) => {

src/rustc/middle/kind.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -498,7 +498,7 @@ fn check_cast_for_escaping_regions(
498498
// worries.
499499
let target_ty = ty::expr_ty(cx.tcx, target);
500500
let target_substs = match ty::get(target_ty).struct {
501-
ty::ty_trait(_, substs) => {substs}
501+
ty::ty_trait(_, substs, _) => {substs}
502502
_ => { return; /* not a cast to a trait */ }
503503
};
504504

src/rustc/middle/trans/base.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -668,7 +668,7 @@ fn make_take_glue(bcx: block, v: ValueRef, t: ty::t) {
668668
ty::ty_fn(_) => {
669669
closure::make_fn_glue(bcx, v, t, take_ty)
670670
}
671-
ty::ty_trait(_, _) => {
671+
ty::ty_trait(_, _, _) => {
672672
let llbox = Load(bcx, GEPi(bcx, v, ~[0u, 1u]));
673673
incr_refcnt_of_boxed(bcx, llbox);
674674
bcx
@@ -819,7 +819,7 @@ fn make_drop_glue(bcx: block, v0: ValueRef, t: ty::t) {
819819
ty::ty_fn(_) => {
820820
closure::make_fn_glue(bcx, v0, t, drop_ty)
821821
}
822-
ty::ty_trait(_, _) => {
822+
ty::ty_trait(_, _, _) => {
823823
let llbox = Load(bcx, GEPi(bcx, v0, ~[0u, 1u]));
824824
decr_refcnt_maybe_free(bcx, llbox, ty::mk_opaque_box(ccx.tcx))
825825
}
@@ -2041,7 +2041,7 @@ fn normalize_for_monomorphization(tcx: ty::ctxt, ty: ty::t) -> option<ty::t> {
20412041
output: ty::mk_nil(tcx),
20422042
ret_style: ast::return_val}))
20432043
}
2044-
ty::ty_trait(_, _) => {
2044+
ty::ty_trait(_, _, _) => {
20452045
some(ty::mk_fn(tcx, {purity: ast::impure_fn,
20462046
proto: ty::proto_vstore(ty::vstore_box),
20472047
bounds: @~[],
@@ -2819,7 +2819,7 @@ fn trans_cast(cx: block, e: @ast::expr, id: ast::node_id,
28192819
let ccx = cx.ccx();
28202820
let t_out = node_id_type(cx, id);
28212821
match ty::get(t_out).struct {
2822-
ty::ty_trait(_, _) => return impl::trans_cast(cx, e, id, dest),
2822+
ty::ty_trait(_, _, _) => return impl::trans_cast(cx, e, id, dest),
28232823
_ => ()
28242824
}
28252825
let e_res = trans_temp_expr(cx, e);

src/rustc/middle/trans/reflect.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -268,7 +268,7 @@ impl reflector {
268268
}
269269

270270
// Miscallaneous extra types
271-
ty::ty_trait(_, _) => self.leaf(~"trait"),
271+
ty::ty_trait(_, _, _) => self.leaf(~"trait"),
272272
ty::ty_var(_) => self.leaf(~"var"),
273273
ty::ty_var_integral(_) => self.leaf(~"var_integral"),
274274
ty::ty_param(p) => self.visit(~"param", ~[self.c_uint(p.idx)]),

src/rustc/middle/trans/shape.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ fn shape_of(ccx: @crate_ctxt, t: ty::t) -> ~[u8] {
323323
add_substr(s, sub);
324324
s
325325
}
326-
ty::ty_trait(_, _) => ~[shape_box_fn],
326+
ty::ty_trait(_, _, _) => ~[shape_box_fn],
327327
ty::ty_class(did, ref substs) => {
328328
// same as records, unless there's a dtor
329329
let tps = substs.tps;

src/rustc/middle/trans/type_of.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ fn type_of(cx: @crate_ctxt, t: ty::t) -> TypeRef {
147147
T_struct(tys)
148148
}
149149
ty::ty_fn(_) => T_fn_pair(cx, type_of_fn_from_ty(cx, t)),
150-
ty::ty_trait(_, _) => T_opaque_trait(cx),
150+
ty::ty_trait(_, _, _) => T_opaque_trait(cx),
151151
ty::ty_type => T_ptr(cx.tydesc_type),
152152
ty::ty_tup(elts) => {
153153
let mut tys = ~[];

0 commit comments

Comments
 (0)