Skip to content

Commit cdcae39

Browse files
committed
syntax: Remove some more implicit copies
1 parent fd85239 commit cdcae39

File tree

2 files changed

+23
-25
lines changed

2 files changed

+23
-25
lines changed

src/libsyntax/ext/source_util.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,9 @@ fn expand_col(cx: ext_ctxt, sp: span, arg: ast::mac_arg,
3434
fn expand_file(cx: ext_ctxt, sp: span, arg: ast::mac_arg,
3535
_body: ast::mac_body) -> @ast::expr {
3636
get_mac_args(cx, sp, arg, 0u, option::some(0u), "file");
37-
let loc = codemap::lookup_char_pos(cx.codemap(), sp.lo);
38-
ret make_new_lit(cx, sp, ast::lit_str(loc.file.name));
37+
let { file: @{ name: filename, _ }, _ } =
38+
codemap::lookup_char_pos(cx.codemap(), sp.lo);
39+
ret make_new_lit(cx, sp, ast::lit_str(filename));
3940
}
4041

4142
fn expand_stringify(cx: ext_ctxt, sp: span, arg: ast::mac_arg,
@@ -66,12 +67,15 @@ fn expand_include_str(cx: ext_ctxt, sp: codemap::span, arg: ast::mac_arg,
6667

6768
let file = expr_to_str(cx, args[0], "#include_str requires a string");
6869

69-
alt io::read_whole_file_str(res_rel_file(cx, sp, file)) {
70-
result::ok(src) { ret make_new_lit(cx, sp, ast::lit_str(src)); }
70+
let res = io::read_whole_file_str(res_rel_file(cx, sp, file));
71+
alt res {
72+
result::ok(_) { /* Continue. */ }
7173
result::err(e) {
72-
cx.parse_sess().span_diagnostic.handler().fatal(e)
74+
cx.parse_sess().span_diagnostic.handler().fatal(e);
7375
}
7476
}
77+
78+
ret make_new_lit(cx, sp, ast::lit_str(result::unwrap(res)));
7579
}
7680

7781
fn expand_include_bin(cx: ext_ctxt, sp: codemap::span, arg: ast::mac_arg,
@@ -93,7 +97,7 @@ fn expand_include_bin(cx: ext_ctxt, sp: codemap::span, arg: ast::mac_arg,
9397
}
9498
}
9599

96-
fn res_rel_file(cx: ext_ctxt, sp: codemap::span, arg: path) -> path {
100+
fn res_rel_file(cx: ext_ctxt, sp: codemap::span, +arg: path) -> path {
97101
// NB: relative paths are resolved relative to the compilation unit
98102
if !path::path_is_absolute(arg) {
99103
let cu = codemap::span_to_filename(sp, cx.codemap());

src/libsyntax/parse.rs

Lines changed: 13 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,11 @@ fn parse_crate_from_crate_file(input: str, cfg: ast::crate_cfg,
4646
let lo = p.span.lo;
4747
let prefix = path::dirname(p.reader.filemap.name);
4848
let leading_attrs = p.parse_inner_attrs_and_next();
49-
let crate_attrs = leading_attrs.inner;
50-
let first_cdir_attr = leading_attrs.next;
49+
let { inner: crate_attrs, next: first_cdir_attr } = leading_attrs;
5150
let cdirs = p.parse_crate_directives(token::EOF, first_cdir_attr);
5251
sess.chpos = p.reader.chpos;
5352
sess.byte_pos = sess.byte_pos + p.reader.pos;
54-
let cx =
55-
@{sess: sess,
56-
cfg: p.cfg};
53+
let cx = @{sess: sess, cfg: /* FIXME: bad */ copy p.cfg};
5754
let (companionmod, _) = path::splitext(path::basename(input));
5855
let (m, attrs) = eval::eval_crate_directives_to_mod(
5956
cx, cdirs, prefix, option::some(companionmod));
@@ -63,7 +60,7 @@ fn parse_crate_from_crate_file(input: str, cfg: ast::crate_cfg,
6360
{directives: cdirs,
6461
module: m,
6562
attrs: crate_attrs + attrs,
66-
config: p.cfg});
63+
config: /* FIXME: bad */ copy p.cfg});
6764
}
6865

6966
fn parse_crate_from_source_file(input: str, cfg: ast::crate_cfg,
@@ -131,7 +128,7 @@ fn next_node_id(sess: parse_sess) -> node_id {
131128
}
132129

133130
fn new_parser_from_source_str(sess: parse_sess, cfg: ast::crate_cfg,
134-
name: str, ss: codemap::file_substr,
131+
+name: str, +ss: codemap::file_substr,
135132
source: @str) -> parser {
136133
let ftype = parser::SOURCE_FILE;
137134
let filemap = codemap::new_filemap_w_substr
@@ -143,20 +140,17 @@ fn new_parser_from_source_str(sess: parse_sess, cfg: ast::crate_cfg,
143140
ret parser(sess, cfg, rdr, ftype);
144141
}
145142

146-
fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg, path: str,
143+
fn new_parser_from_file(sess: parse_sess, cfg: ast::crate_cfg, +path: str,
147144
ftype: parser::file_type) ->
148145
parser {
149-
let src = alt io::read_whole_file_str(path) {
150-
result::ok(src) {
151-
// FIXME: This copy is unfortunate (#2319)
152-
@src
153-
}
154-
result::err(e) {
155-
sess.span_diagnostic.handler().fatal(e)
156-
}
157-
};
158-
let filemap = codemap::new_filemap(path, src,
159-
sess.chpos, sess.byte_pos);
146+
let res = io::read_whole_file_str(path);
147+
alt res {
148+
result::ok(_) { /* Continue. */ }
149+
result::err(e) { sess.span_diagnostic.handler().fatal(e); }
150+
}
151+
// FIXME: This copy is unfortunate (#2319).
152+
let src = @copy result::unwrap(res);
153+
let filemap = codemap::new_filemap(path, src, sess.chpos, sess.byte_pos);
160154
sess.cm.files.push(filemap);
161155
let itr = @interner::mk(str::hash, str::eq);
162156
let rdr = lexer::new_reader(sess.span_diagnostic, filemap, itr);

0 commit comments

Comments
 (0)