@@ -229,13 +229,13 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result {
229
229
let l = args. len ( ) ;
230
230
let mut i = 0 ;
231
231
while i < l {
232
- let cur = args[ i] ;
232
+ let cur = copy args[ i] ;
233
233
let curlen = cur. len ( ) ;
234
234
if !is_arg ( cur) {
235
235
free. push ( cur) ;
236
236
} else if cur == ~"--" {
237
237
let mut j = i + 1;
238
- while j < l { free.push(args[j]); j += 1; }
238
+ while j < l { free.push(copy args[j]); j += 1; }
239
239
break;
240
240
} else {
241
241
let mut names;
@@ -248,8 +248,8 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result {
248
248
names = ~[Long(tail)];
249
249
} else {
250
250
names =
251
- ~[Long(tail_eq[0])];
252
- i_arg = Some(tail_eq[1]);
251
+ ~[Long(copy tail_eq[0])];
252
+ i_arg = Some(copy tail_eq[1]);
253
253
}
254
254
} else {
255
255
let mut j = 1;
@@ -266,7 +266,7 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result {
266
266
interpreted correctly
267
267
*/
268
268
269
- match find_opt(opts, opt) {
269
+ match find_opt(opts, copy opt) {
270
270
Some(id) => last_valid_opt_id = Some(id),
271
271
None => {
272
272
let arg_follows =
@@ -292,7 +292,7 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result {
292
292
let mut name_pos = 0;
293
293
for names.each() |nm| {
294
294
name_pos += 1;
295
- let optid = match find_opt(opts, *nm) {
295
+ let optid = match find_opt(opts, copy *nm) {
296
296
Some(id) => id,
297
297
None => return Err(UnrecognizedOption(name_str(nm)))
298
298
};
@@ -305,18 +305,18 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result {
305
305
}
306
306
Maybe => {
307
307
if !i_arg.is_none() {
308
- vals[optid].push(Val(i_arg.get()));
308
+ vals[optid].push(Val((copy i_arg) .get()));
309
309
} else if name_pos < names.len() ||
310
310
i + 1 == l || is_arg(args[i + 1]) {
311
311
vals[optid].push(Given);
312
- } else { i += 1; vals[optid].push(Val(args[i])); }
312
+ } else { i += 1; vals[optid].push(Val(copy args[i])); }
313
313
}
314
314
Yes => {
315
315
if !i_arg.is_none() {
316
- vals[optid].push(Val(i_arg.get()));
316
+ vals[optid].push(Val((copy i_arg) .get()));
317
317
} else if i + 1 == l {
318
318
return Err(ArgumentMissing(name_str(nm)));
319
- } else { i += 1; vals[optid].push(Val(args[i])); }
319
+ } else { i += 1; vals[optid].push(Val(copy args[i])); }
320
320
}
321
321
}
322
322
}
@@ -346,15 +346,15 @@ pub fn getopts(args: &[~str], opts: &[Opt]) -> Result {
346
346
347
347
fn opt_vals(mm: &Matches, nm: &str) -> ~[Optval] {
348
348
return match find_opt(mm.opts, mkname(nm)) {
349
- Some(id) => mm.vals[id],
349
+ Some(id) => copy mm.vals[id],
350
350
None => {
351
351
error!(" No option ' %s' defined", nm) ;
352
352
fail!( )
353
353
}
354
354
} ;
355
355
}
356
356
357
- fn opt_val( mm: & Matches , nm: & str ) -> Optval { return opt_vals ( mm, nm) [ 0 ] ; }
357
+ fn opt_val( mm: & Matches , nm: & str ) -> Optval { copy opt_vals ( mm, nm) [ 0 ] }
358
358
359
359
/// Returns true if an option was matched
360
360
pub fn opt_present ( mm : & Matches , nm : & str ) -> bool {
@@ -547,25 +547,29 @@ pub mod groups {
547
547
// translate OptGroup into Opt
548
548
// (both short and long names correspond to different Opts)
549
549
pub fn long_to_short( lopt : & OptGroup ) -> ~[ Opt ] {
550
- match ( ( * lopt) . short_name . len ( ) ,
551
- ( * lopt) . long_name . len ( ) ) {
550
+ let OptGroup { short_name : short_name,
551
+ long_name : long_name,
552
+ hasarg : hasarg,
553
+ occur : occur,
554
+ _} = copy * lopt;
552
555
556
+ match ( short_name. len ( ) , long_name. len ( ) ) {
553
557
( 0 , 0 ) => fail!( ~"this long-format option was given no name"),
554
558
555
- (0,_) => ~[Opt {name: Long(((*lopt). long_name)),
556
- hasarg: (*lopt). hasarg,
557
- occur: (*lopt). occur}],
559
+ (0,_) => ~[Opt {name: Long((long_name)),
560
+ hasarg: hasarg,
561
+ occur: occur}],
558
562
559
- (1,0) => ~[Opt {name: Short(str::char_at((*lopt). short_name, 0)),
560
- hasarg: (*lopt). hasarg,
561
- occur: (*lopt). occur}],
563
+ (1,0) => ~[Opt {name: Short(str::char_at(short_name, 0)),
564
+ hasarg: hasarg,
565
+ occur: occur}],
562
566
563
- (1,_) => ~[Opt {name: Short(str::char_at((*lopt). short_name, 0)),
564
- hasarg: (*lopt). hasarg,
565
- occur: (*lopt). occur},
566
- Opt {name: Long(((*lopt). long_name)),
567
- hasarg: (*lopt). hasarg,
568
- occur: (*lopt). occur}],
567
+ (1,_) => ~[Opt {name: Short(str::char_at(short_name, 0)),
568
+ hasarg: hasarg,
569
+ occur: occur},
570
+ Opt {name: Long((long_name)),
571
+ hasarg: hasarg,
572
+ occur: occur}],
569
573
570
574
(_,_) => fail!(~" something is wrong with the long-form opt")
571
575
}
@@ -586,11 +590,12 @@ pub mod groups {
586
590
let desc_sep = ~"\n " + str :: repeat( ~" ", 24);
587
591
588
592
let rows = vec::map(opts, |optref| {
589
- let short_name = (*optref).short_name;
590
- let long_name = (*optref).long_name;
591
- let hint = (*optref).hint;
592
- let desc = (*optref).desc;
593
- let hasarg = (*optref).hasarg;
593
+ let OptGroup{short_name: short_name,
594
+ long_name: long_name,
595
+ hint: hint,
596
+ desc: desc,
597
+ hasarg: hasarg,
598
+ _} = copy *optref;
594
599
595
600
let mut row = str::repeat(~" ", 4);
596
601
@@ -620,7 +625,7 @@ pub mod groups {
620
625
row += if rowlen < 24 {
621
626
str::repeat(~" ", 24 - rowlen)
622
627
} else {
623
- desc_sep
628
+ copy desc_sep
624
629
};
625
630
626
631
// Normalize desc to contain words separated by one space character
@@ -892,7 +897,7 @@ mod tests {
892
897
let rs = getopts(args, opts);
893
898
match rs {
894
899
Err(copy f) => {
895
- error!(fail_str(f));
900
+ error!(fail_str(copy f));
896
901
check_fail_type(f, UnexpectedArgument_);
897
902
}
898
903
_ => fail!()
0 commit comments