@@ -84,6 +84,15 @@ impure fn parse_mt(@pstate st, str_def sd) -> ty.mt {
84
84
ret rec( ty=parse_ty ( st, sd) , mut=mut) ;
85
85
}
86
86
87
+ impure fn parse_def ( @pstate st , str_def sd) -> ast. def_id {
88
+ auto def = "" ;
89
+ while ( peek ( st) as char != '|' ) {
90
+ def += _str. unsafe_from_byte ( next ( st) ) ;
91
+ }
92
+ st. pos = st. pos + 1 u;
93
+ ret sd( def) ;
94
+ }
95
+
87
96
impure fn parse_sty ( @pstate st , str_def sd) -> ty. sty {
88
97
alt ( next ( st) as char ) {
89
98
case ( 'n' ) { ret ty. ty_nil ; }
@@ -109,18 +118,15 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
109
118
case ( 's' ) { ret ty. ty_str ; }
110
119
case ( 't' ) {
111
120
check ( next ( st) as char == '[' ) ;
112
- auto def = "" ;
113
- while ( peek ( st) as char != '|' ) {
114
- def += _str. unsafe_from_byte ( next ( st) ) ;
115
- }
116
- st. pos = st. pos + 1 u;
121
+ auto def = parse_def ( st, sd) ;
117
122
let vec[ @ty. t] params = vec ( ) ;
118
123
while ( peek ( st) as char != ']' ) {
119
124
params += vec ( parse_ty ( st, sd) ) ;
120
125
}
121
126
st. pos = st. pos + 1 u;
122
- ret ty. ty_tag ( sd ( def) , params) ;
127
+ ret ty. ty_tag ( def, params) ;
123
128
}
129
+ case ( 'p' ) { ret ty. ty_param ( parse_def ( st, sd) ) ; }
124
130
case ( '@' ) { ret ty. ty_box ( parse_mt ( st, sd) ) ; }
125
131
case ( 'V' ) { ret ty. ty_vec ( parse_mt ( st, sd) ) ; }
126
132
case ( 'P' ) { ret ty. ty_port ( parse_ty ( st, sd) ) ; }
0 commit comments