@@ -219,7 +219,7 @@ fn expect_gt(p: parser) {
219
219
}
220
220
}
221
221
222
- fn spanned < T > ( lo : uint , hi : uint , node : T ) -> spanned < T > {
222
+ fn spanned < copy T > ( lo : uint , hi : uint , node : T ) -> spanned < T > {
223
223
ret { node : node, span : ast_util:: mk_sp ( lo, hi) } ;
224
224
}
225
225
@@ -394,8 +394,8 @@ fn parse_constr_in_type(p: parser) -> @ast::ty_constr {
394
394
}
395
395
396
396
397
- fn parse_constrs < T > ( pser : block ( parser ) -> @ast:: constr_general < T > ,
398
- p : parser ) ->
397
+ fn parse_constrs < copy T > ( pser : block ( parser ) -> @ast:: constr_general < T > ,
398
+ p : parser ) ->
399
399
[ @ast:: constr_general < T > ] {
400
400
let constrs: [ @ast:: constr_general < T > ] = [ ] ;
401
401
while true {
@@ -595,9 +595,9 @@ fn parse_fn_block_arg(p: parser) -> ast::arg {
595
595
ret { mode : m, ty : t, ident : i, id : p. get_id ( ) } ;
596
596
}
597
597
598
- fn parse_seq_to_before_gt < T > ( sep : option:: t < token:: token > ,
599
- f : block ( parser ) -> T ,
600
- p : parser ) -> [ T ] {
598
+ fn parse_seq_to_before_gt < copy T > ( sep : option:: t < token:: token > ,
599
+ f : block ( parser ) -> T ,
600
+ p : parser ) -> [ T ] {
601
601
let first = true ;
602
602
let v = [ ] ;
603
603
while p. peek ( ) != token:: GT && p. peek ( ) != token:: BINOP ( token:: LSR ) &&
@@ -612,16 +612,17 @@ fn parse_seq_to_before_gt<T>(sep: option::t<token::token>,
612
612
ret v;
613
613
}
614
614
615
- fn parse_seq_to_gt < T > ( sep : option:: t < token:: token > , f : block ( parser ) -> T ,
616
- p : parser ) -> [ T ] {
615
+ fn parse_seq_to_gt < copy T > ( sep : option:: t < token:: token > ,
616
+ f : block ( parser ) -> T , p : parser ) -> [ T ] {
617
617
let v = parse_seq_to_before_gt ( sep, f, p) ;
618
618
expect_gt ( p) ;
619
619
620
620
ret v;
621
621
}
622
622
623
- fn parse_seq_lt_gt < T > ( sep : option:: t < token:: token > , f : block ( parser ) -> T ,
624
- p : parser ) -> spanned < [ T ] > {
623
+ fn parse_seq_lt_gt < copy T > ( sep : option:: t < token:: token > ,
624
+ f : block ( parser ) -> T ,
625
+ p : parser ) -> spanned < [ T ] > {
625
626
let lo = p. get_lo_pos ( ) ;
626
627
expect ( p, token:: LT ) ;
627
628
let result = parse_seq_to_before_gt :: < T > ( sep, f, p) ;
@@ -630,16 +631,16 @@ fn parse_seq_lt_gt<T>(sep: option::t<token::token>, f: block(parser) -> T,
630
631
ret spanned( lo, hi, result) ;
631
632
}
632
633
633
- fn parse_seq_to_end < T > ( ket : token:: token , sep : option:: t < token:: token > ,
634
- f : block ( parser ) -> T , p : parser ) -> [ T ] {
634
+ fn parse_seq_to_end < copy T > ( ket : token:: token , sep : option:: t < token:: token > ,
635
+ f : block ( parser ) -> T , p : parser ) -> [ T ] {
635
636
let val = parse_seq_to_before_end ( ket, sep, f, p) ;
636
637
p. bump ( ) ;
637
638
ret val;
638
639
}
639
640
640
- fn parse_seq_to_before_end < T > ( ket : token:: token ,
641
- sep : option:: t < token:: token > ,
642
- f : block ( parser ) -> T , p : parser ) -> [ T ] {
641
+ fn parse_seq_to_before_end < copy T > ( ket : token:: token ,
642
+ sep : option:: t < token:: token > ,
643
+ f : block ( parser ) -> T , p : parser ) -> [ T ] {
643
644
let first: bool = true ;
644
645
let v: [ T ] = [ ] ;
645
646
while p. peek ( ) != ket {
@@ -653,9 +654,9 @@ fn parse_seq_to_before_end<T>(ket: token::token,
653
654
}
654
655
655
656
656
- fn parse_seq < T > ( bra : token:: token , ket : token:: token ,
657
- sep : option:: t < token:: token > , f : block ( parser ) -> T ,
658
- p : parser ) -> spanned < [ T ] > {
657
+ fn parse_seq < copy T > ( bra : token:: token , ket : token:: token ,
658
+ sep : option:: t < token:: token > , f : block ( parser ) -> T ,
659
+ p : parser ) -> spanned < [ T ] > {
659
660
let lo = p. get_lo_pos ( ) ;
660
661
expect ( p, bra) ;
661
662
let result = parse_seq_to_before_end :: < T > ( ket, sep, f, p) ;
@@ -1741,24 +1742,18 @@ fn parse_block_tail(p: parser, lo: uint, s: ast::blk_check_mode) -> ast::blk {
1741
1742
ret spanned( lo, hi, bloc) ;
1742
1743
}
1743
1744
1744
- fn parse_ty_param ( p : parser , def : ast:: kind ) -> ast:: ty_param {
1745
- // Accept both old and new kind names for now. FIXME remove this
1746
- let k = if eat_word ( p, "send" ) | eat_word ( p, "uniq" )
1747
- { ast:: explicit ( ast:: kind_sendable) }
1748
- else if eat_word ( p, "copy" ) | eat_word ( p, "shar" )
1749
- { ast:: explicit ( ast:: kind_copyable) }
1750
- else if eat_word ( p, "nocopy" ) | eat_word ( p, "pin" )
1751
- { ast:: explicit ( ast:: kind_noncopyable) }
1752
- else { ast:: implicit ( def) } ;
1745
+ fn parse_ty_param ( p : parser ) -> ast:: ty_param {
1746
+ let k = if eat_word ( p, "send" ) { ast:: kind_sendable }
1747
+ else if eat_word ( p, "copy" ) { ast:: kind_copyable }
1748
+ else { ast:: kind_noncopyable } ;
1753
1749
ret { ident : parse_ident ( p) , kind : k} ;
1754
1750
}
1755
1751
1756
- fn parse_ty_params ( p : parser , def : ast :: kind ) -> [ ast:: ty_param ] {
1752
+ fn parse_ty_params ( p : parser ) -> [ ast:: ty_param ] {
1757
1753
let ty_params: [ ast:: ty_param ] = [ ] ;
1758
1754
if p. peek ( ) == token:: LT {
1759
1755
p. bump ( ) ;
1760
- ty_params = parse_seq_to_gt ( some ( token:: COMMA ) ,
1761
- { |p| parse_ty_param ( p, def) } , p) ;
1756
+ ty_params = parse_seq_to_gt ( some ( token:: COMMA ) , parse_ty_param, p) ;
1762
1757
}
1763
1758
ret ty_params;
1764
1759
}
@@ -1811,7 +1806,7 @@ fn parse_fn(p: parser, proto: ast::proto, purity: ast::purity,
1811
1806
1812
1807
fn parse_fn_header ( p : parser ) -> { ident: ast:: ident, tps: [ ast:: ty_param] } {
1813
1808
let id = parse_value_ident ( p) ;
1814
- let ty_params = parse_ty_params ( p, ast :: kind_copyable ) ;
1809
+ let ty_params = parse_ty_params ( p) ;
1815
1810
ret { ident : id, tps : ty_params} ;
1816
1811
}
1817
1812
@@ -1864,7 +1859,7 @@ fn parse_method(p: parser) -> @ast::method {
1864
1859
fn parse_item_obj ( p : parser , attrs : [ ast:: attribute ] ) -> @ast:: item {
1865
1860
let lo = p. get_last_lo_pos ( ) ;
1866
1861
let ident = parse_value_ident ( p) ;
1867
- let ty_params = parse_ty_params ( p, ast :: kind_copyable ) ;
1862
+ let ty_params = parse_ty_params ( p) ;
1868
1863
let fields: ast:: spanned < [ ast:: obj_field ] > =
1869
1864
parse_seq ( token:: LPAREN , token:: RPAREN , some ( token:: COMMA ) ,
1870
1865
parse_obj_field, p) ;
@@ -1881,7 +1876,7 @@ fn parse_item_obj(p: parser, attrs: [ast::attribute]) -> @ast::item {
1881
1876
fn parse_item_res ( p : parser , attrs : [ ast:: attribute ] ) -> @ast:: item {
1882
1877
let lo = p. get_last_lo_pos ( ) ;
1883
1878
let ident = parse_value_ident ( p) ;
1884
- let ty_params = parse_ty_params ( p, ast :: kind_noncopyable ) ;
1879
+ let ty_params = parse_ty_params ( p) ;
1885
1880
expect ( p, token:: LPAREN ) ;
1886
1881
let arg_ident = parse_value_ident ( p) ;
1887
1882
expect ( p, token:: COLON ) ;
@@ -2045,7 +2040,7 @@ fn parse_type_decl(p: parser) -> {lo: uint, ident: ast::ident} {
2045
2040
2046
2041
fn parse_item_type ( p : parser , attrs : [ ast:: attribute ] ) -> @ast:: item {
2047
2042
let t = parse_type_decl ( p) ;
2048
- let tps = parse_ty_params ( p, ast :: kind_noncopyable ) ;
2043
+ let tps = parse_ty_params ( p) ;
2049
2044
expect ( p, token:: EQ ) ;
2050
2045
let ty = parse_ty ( p, false ) ;
2051
2046
let hi = p. get_hi_pos ( ) ;
@@ -2056,7 +2051,7 @@ fn parse_item_type(p: parser, attrs: [ast::attribute]) -> @ast::item {
2056
2051
fn parse_item_tag ( p : parser , attrs : [ ast:: attribute ] ) -> @ast:: item {
2057
2052
let lo = p. get_last_lo_pos ( ) ;
2058
2053
let id = parse_ident ( p) ;
2059
- let ty_params = parse_ty_params ( p, ast :: kind_noncopyable ) ;
2054
+ let ty_params = parse_ty_params ( p) ;
2060
2055
let variants: [ ast:: variant ] = [ ] ;
2061
2056
// Newtype syntax
2062
2057
if p. peek ( ) == token:: EQ {
0 commit comments