Skip to content

Commit ea36a0d

Browse files
committed
libsyntax: add some more explicit copies
1 parent da7aedc commit ea36a0d

File tree

6 files changed

+160
-91
lines changed

6 files changed

+160
-91
lines changed

src/libsyntax/ext/deriving.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -838,7 +838,7 @@ fn expand_deriving_eq_struct_tuple_method(cx: ext_ctxt,
838838
let self_str = ~"self";
839839
let other_str = ~"__other";
840840
let type_path = build::mk_raw_path(span, ~[type_ident]);
841-
let fields = struct_def.fields;
841+
let fields = copy struct_def.fields;
842842

843843
// Create comparison expression, comparing each of the fields
844844
let mut match_body = None;

src/libsyntax/ext/trace_macros.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,11 @@ pub fn expand_trace_macros(cx: ext_ctxt, sp: span,
2929
vec::from_slice(tt)
3030
);
3131
let rdr = tt_rdr as reader;
32-
let rust_parser = Parser(sess, cfg, rdr.dup());
32+
let rust_parser = Parser(
33+
sess,
34+
copy cfg,
35+
rdr.dup()
36+
);
3337

3438
if rust_parser.is_keyword(&~"true") {
3539
cx.set_trace_macros(true);

src/libsyntax/ext/tt/macro_parser.rs

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -224,20 +224,25 @@ pub enum parse_result {
224224
error(codemap::span, ~str)
225225
}
226226
227-
pub fn parse_or_else(sess: @mut ParseSess, cfg: ast::crate_cfg, rdr: reader,
228-
ms: ~[matcher]) -> HashMap<ident, @named_match> {
227+
pub fn parse_or_else(
228+
sess: @mut ParseSess,
229+
+cfg: ast::crate_cfg,
230+
rdr: reader,
231+
ms: ~[matcher]
232+
) -> HashMap<ident, @named_match> {
229233
match parse(sess, cfg, rdr, ms) {
230234
success(m) => m,
231235
failure(sp, ref str) => sess.span_diagnostic.span_fatal(sp, (*str)),
232236
error(sp, ref str) => sess.span_diagnostic.span_fatal(sp, (*str))
233237
}
234238
}
235239
236-
pub fn parse(sess: @mut ParseSess,
237-
cfg: ast::crate_cfg,
238-
rdr: reader,
239-
ms: ~[matcher])
240-
-> parse_result {
240+
pub fn parse(
241+
sess: @mut ParseSess,
242+
cfg: ast::crate_cfg,
243+
rdr: reader,
244+
ms: ~[matcher]
245+
) -> parse_result {
241246
let mut cur_eis = ~[];
242247
cur_eis.push(initial_matcher_pos(copy ms, None, rdr.peek().sp.lo));
243248
@@ -387,7 +392,7 @@ pub fn parse(sess: @mut ParseSess,
387392
}
388393
rdr.next_token();
389394
} else /* bb_eis.len() == 1 */ {
390-
let rust_parser = Parser(sess, cfg, rdr.dup());
395+
let rust_parser = Parser(sess, copy cfg, rdr.dup());
391396
392397
let mut ei = bb_eis.pop();
393398
match ei.elts[ei.idx].node {

src/libsyntax/ext/tt/transcribe.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,9 +202,9 @@ pub fn tt_next_token(r: @mut TtReader) -> TokenAndSpan {
202202
loop { /* because it's easiest, this handles `tt_delim` not starting
203203
with a `tt_tok`, even though it won't happen */
204204
match r.cur.readme[r.cur.idx] {
205-
tt_delim(tts) => {
205+
tt_delim(copy tts) => {
206206
r.cur = @mut TtFrame {
207-
readme: @mut copy tts,
207+
readme: @mut tts,
208208
idx: 0u,
209209
dotdotdoted: false,
210210
sep: None,

src/libsyntax/parse/mod.rs

Lines changed: 138 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -81,78 +81,116 @@ pub fn new_parse_sess_special_handler(sh: span_handler, cm: @codemap::CodeMap)
8181

8282
// this appears to be the main entry point for rust parsing by
8383
// rustc and crate:
84-
pub fn parse_crate_from_file(input: &Path, cfg: ast::crate_cfg,
85-
sess: @mut ParseSess) -> @ast::crate {
86-
let p = new_parser_from_file(sess, cfg, input);
87-
p.parse_crate_mod(cfg)
84+
pub fn parse_crate_from_file(
85+
input: &Path,
86+
cfg: ast::crate_cfg,
87+
sess: @mut ParseSess
88+
) -> @ast::crate {
89+
let p = new_parser_from_file(sess, /*bad*/ copy cfg, input);
90+
p.parse_crate_mod(/*bad*/ copy cfg)
8891
// why is there no p.abort_if_errors here?
8992
}
9093

91-
pub fn parse_crate_from_source_str(name: ~str,
92-
source: @~str,
93-
cfg: ast::crate_cfg,
94-
sess: @mut ParseSess) -> @ast::crate {
95-
let p = new_parser_from_source_str(sess, cfg, /*bad*/ copy name,
96-
codemap::FssNone, source);
97-
let r = p.parse_crate_mod(cfg);
94+
pub fn parse_crate_from_source_str(
95+
name: ~str,
96+
source: @~str,
97+
cfg: ast::crate_cfg,
98+
sess: @mut ParseSess
99+
) -> @ast::crate {
100+
let p = new_parser_from_source_str(
101+
sess,
102+
/*bad*/ copy cfg,
103+
/*bad*/ copy name,
104+
codemap::FssNone,
105+
source
106+
);
107+
let r = p.parse_crate_mod(/*bad*/ copy cfg);
98108
p.abort_if_errors();
99-
return r;
109+
r
100110
}
101111

102-
pub fn parse_expr_from_source_str(name: ~str,
103-
source: @~str,
104-
cfg: ast::crate_cfg,
105-
sess: @mut ParseSess) -> @ast::expr {
106-
let p = new_parser_from_source_str(sess, cfg, /*bad*/ copy name,
107-
codemap::FssNone, source);
112+
pub fn parse_expr_from_source_str(
113+
name: ~str,
114+
source: @~str,
115+
+cfg: ast::crate_cfg,
116+
sess: @mut ParseSess
117+
) -> @ast::expr {
118+
let p = new_parser_from_source_str(
119+
sess,
120+
cfg,
121+
/*bad*/ copy name,
122+
codemap::FssNone,
123+
source
124+
);
108125
let r = p.parse_expr();
109126
p.abort_if_errors();
110-
return r;
127+
r
111128
}
112129

113-
pub fn parse_item_from_source_str(name: ~str,
114-
source: @~str,
115-
cfg: ast::crate_cfg,
116-
+attrs: ~[ast::attribute],
117-
sess: @mut ParseSess)
118-
-> Option<@ast::item> {
119-
let p = new_parser_from_source_str(sess, cfg, /*bad*/ copy name,
120-
codemap::FssNone, source);
130+
pub fn parse_item_from_source_str(
131+
name: ~str,
132+
source: @~str,
133+
+cfg: ast::crate_cfg,
134+
+attrs: ~[ast::attribute],
135+
sess: @mut ParseSess
136+
) -> Option<@ast::item> {
137+
let p = new_parser_from_source_str(
138+
sess,
139+
cfg,
140+
/*bad*/ copy name,
141+
codemap::FssNone,
142+
source
143+
);
121144
let r = p.parse_item(attrs);
122145
p.abort_if_errors();
123-
return r;
146+
r
124147
}
125148

126-
pub fn parse_stmt_from_source_str(name: ~str,
127-
source: @~str,
128-
cfg: ast::crate_cfg,
129-
+attrs: ~[ast::attribute],
130-
sess: @mut ParseSess) -> @ast::stmt {
131-
let p = new_parser_from_source_str(sess, cfg, /*bad*/ copy name,
132-
codemap::FssNone, source);
149+
pub fn parse_stmt_from_source_str(
150+
name: ~str,
151+
source: @~str,
152+
+cfg: ast::crate_cfg,
153+
+attrs: ~[ast::attribute],
154+
sess: @mut ParseSess
155+
) -> @ast::stmt {
156+
let p = new_parser_from_source_str(
157+
sess,
158+
cfg,
159+
/*bad*/ copy name,
160+
codemap::FssNone,
161+
source
162+
);
133163
let r = p.parse_stmt(attrs);
134164
p.abort_if_errors();
135-
return r;
165+
r
136166
}
137167

138-
pub fn parse_tts_from_source_str(name: ~str,
139-
source: @~str,
140-
cfg: ast::crate_cfg,
141-
sess: @mut ParseSess) -> ~[ast::token_tree] {
142-
let p = new_parser_from_source_str(sess, cfg, /*bad*/ copy name,
143-
codemap::FssNone, source);
168+
pub fn parse_tts_from_source_str(
169+
name: ~str,
170+
source: @~str,
171+
+cfg: ast::crate_cfg,
172+
sess: @mut ParseSess
173+
) -> ~[ast::token_tree] {
174+
let p = new_parser_from_source_str(
175+
sess,
176+
cfg,
177+
/*bad*/ copy name,
178+
codemap::FssNone,
179+
source
180+
);
144181
*p.quote_depth += 1u;
145182
let r = p.parse_all_token_trees();
146183
p.abort_if_errors();
147-
return r;
184+
r
148185
}
149186

150-
pub fn parse_from_source_str<T>(f: fn (p: Parser) -> T,
151-
name: ~str, ss: codemap::FileSubstr,
152-
source: @~str, cfg: ast::crate_cfg,
153-
sess: @mut ParseSess)
154-
-> T
155-
{
187+
pub fn parse_from_source_str<T>(
188+
f: fn (Parser) -> T,
189+
name: ~str, ss: codemap::FileSubstr,
190+
source: @~str,
191+
+cfg: ast::crate_cfg,
192+
sess: @mut ParseSess
193+
) -> T {
156194
let p = new_parser_from_source_str(
157195
sess,
158196
cfg,
@@ -176,40 +214,51 @@ pub fn next_node_id(sess: @mut ParseSess) -> node_id {
176214
return rv;
177215
}
178216

179-
pub fn new_parser_from_source_str(sess: @mut ParseSess, cfg: ast::crate_cfg,
180-
+name: ~str, +ss: codemap::FileSubstr,
181-
source: @~str) -> Parser {
217+
pub fn new_parser_from_source_str(
218+
sess: @mut ParseSess,
219+
+cfg: ast::crate_cfg,
220+
+name: ~str,
221+
+ss: codemap::FileSubstr,
222+
source: @~str
223+
) -> Parser {
182224
let filemap = sess.cm.new_filemap_w_substr(name, ss, source);
183-
let srdr = lexer::new_string_reader(copy sess.span_diagnostic,
184-
filemap,
185-
sess.interner);
186-
return Parser(sess, cfg, srdr as reader);
225+
let srdr = lexer::new_string_reader(
226+
copy sess.span_diagnostic,
227+
filemap,
228+
sess.interner
229+
);
230+
Parser(sess, cfg, srdr as reader)
187231
}
188232

189233
// Read the entire source file, return a parser
190234
// that draws from that string
191-
pub fn new_parser_result_from_file(sess: @mut ParseSess,
192-
cfg: ast::crate_cfg,
193-
path: &Path)
194-
-> Result<Parser, ~str> {
235+
pub fn new_parser_result_from_file(
236+
sess: @mut ParseSess,
237+
+cfg: ast::crate_cfg,
238+
path: &Path
239+
) -> Result<Parser, ~str> {
195240
match io::read_whole_file_str(path) {
196-
result::Ok(src) => {
197-
198-
let filemap = sess.cm.new_filemap(path.to_str(), @src);
199-
let srdr = lexer::new_string_reader(copy sess.span_diagnostic,
200-
filemap,
201-
sess.interner);
202-
Ok(Parser(sess, cfg, srdr as reader))
241+
Ok(src) => {
242+
let filemap = sess.cm.new_filemap(path.to_str(), @src);
243+
let srdr = lexer::new_string_reader(
244+
copy sess.span_diagnostic,
245+
filemap,
246+
sess.interner
247+
);
248+
Ok(Parser(sess, cfg, srdr as reader))
203249

204-
}
205-
result::Err(e) => Err(e)
250+
}
251+
Err(e) => Err(e)
206252
}
207253
}
208254

209255
/// Create a new parser for an entire crate, handling errors as appropriate
210256
/// if the file doesn't exist
211-
pub fn new_parser_from_file(sess: @mut ParseSess, cfg: ast::crate_cfg,
212-
path: &Path) -> Parser {
257+
pub fn new_parser_from_file(
258+
sess: @mut ParseSess,
259+
+cfg: ast::crate_cfg,
260+
path: &Path
261+
) -> Parser {
213262
match new_parser_result_from_file(sess, cfg, path) {
214263
Ok(parser) => parser,
215264
Err(e) => {
@@ -220,8 +269,12 @@ pub fn new_parser_from_file(sess: @mut ParseSess, cfg: ast::crate_cfg,
220269

221270
/// Create a new parser based on a span from an existing parser. Handles
222271
/// error messages correctly when the file does not exist.
223-
pub fn new_sub_parser_from_file(sess: @mut ParseSess, cfg: ast::crate_cfg,
224-
path: &Path, sp: span) -> Parser {
272+
pub fn new_sub_parser_from_file(
273+
sess: @mut ParseSess,
274+
+cfg: ast::crate_cfg,
275+
path: &Path,
276+
sp: span
277+
) -> Parser {
225278
match new_parser_result_from_file(sess, cfg, path) {
226279
Ok(parser) => parser,
227280
Err(e) => {
@@ -230,11 +283,18 @@ pub fn new_sub_parser_from_file(sess: @mut ParseSess, cfg: ast::crate_cfg,
230283
}
231284
}
232285

233-
pub fn new_parser_from_tts(sess: @mut ParseSess, cfg: ast::crate_cfg,
234-
+tts: ~[ast::token_tree]) -> Parser {
235-
let trdr = lexer::new_tt_reader(copy sess.span_diagnostic, sess.interner,
236-
None, tts);
237-
return Parser(sess, cfg, trdr as reader)
286+
pub fn new_parser_from_tts(
287+
sess: @mut ParseSess,
288+
+cfg: ast::crate_cfg,
289+
+tts: ~[ast::token_tree]
290+
) -> Parser {
291+
let trdr = lexer::new_tt_reader(
292+
copy sess.span_diagnostic,
293+
sess.interner,
294+
None,
295+
tts
296+
);
297+
Parser(sess, cfg, trdr as reader)
238298
}
239299

240300

src/libsyntax/parse/parser.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3492,7 +3492,7 @@ pub impl Parser {
34923492
};
34933493
let full_path = full_path.normalize();
34943494
let p0 =
3495-
new_sub_parser_from_file(self.sess, self.cfg,
3495+
new_sub_parser_from_file(self.sess, copy self.cfg,
34963496
&full_path, id_sp);
34973497
let (inner, next) = p0.parse_inner_attrs_and_next();
34983498
let mod_attrs = vec::append(

0 commit comments

Comments
 (0)