@@ -35,18 +35,18 @@ type str_def = fn(str) -> ast.def_id;
35
35
36
36
type pstate = rec ( str rep, mutable uint pos, uint len) ;
37
37
38
- fn peek ( @pstate st ) -> char {
39
- if ( st. pos < st. len ) { ret st. rep . ( st. pos ) as char ; }
40
- else { ret ' ' ; }
38
+ fn peek ( @pstate st ) -> u8 {
39
+ if ( st. pos < st. len ) { ret st. rep . ( st. pos ) as u8 ; }
40
+ else { ret ' ' as u8 ; }
41
41
}
42
- impure fn next ( @pstate st ) -> char { // ?? somehow not recognized as impure
42
+ impure fn next ( @pstate st ) -> u8 { // ?? somehow not recognized as impure
43
43
if ( st. pos >= st. len ) { fail; }
44
44
auto ch = st. rep . ( st. pos ) ;
45
45
st. pos = st. pos + 1 u;
46
- ret ch as char ;
46
+ ret ch as u8 ;
47
47
}
48
48
49
- fn parse_ty_str ( str rep, str_def sd) -> @ty. t {
49
+ impure fn parse_ty_str ( str rep, str_def sd) -> @ty. t {
50
50
auto len = _str. byte_len ( rep) ;
51
51
auto st = @rec ( rep=rep, mutable pos=0 u, len=len) ;
52
52
auto result = parse_ty ( st, sd) ;
@@ -61,7 +61,7 @@ impure fn parse_ty(@pstate st, str_def sd) -> @ty.t {
61
61
62
62
impure fn parse_mt ( @pstate st , str_def sd) -> ty . mt {
63
63
auto mut;
64
- alt ( peek ( st) ) {
64
+ alt ( peek ( st) as char ) {
65
65
case ( 'm' ) { next ( st) ; mut = ast. mut ; }
66
66
case ( '?' ) { next ( st) ; mut = ast. maybe_mut ; }
67
67
case ( _) { mut=ast. imm ; }
@@ -70,13 +70,13 @@ impure fn parse_mt(@pstate st, str_def sd) -> ty.mt {
70
70
}
71
71
72
72
impure fn parse_sty ( @pstate st , str_def sd) -> ty. sty {
73
- alt ( next ( st) ) {
73
+ alt ( next ( st) as char ) {
74
74
case ( 'n' ) { ret ty. ty_nil ; }
75
75
case ( 'b' ) { ret ty. ty_bool ; }
76
76
case ( 'i' ) { ret ty. ty_int ; }
77
77
case ( 'u' ) { ret ty. ty_uint ; }
78
78
case ( 'M' ) {
79
- alt ( next ( st) ) {
79
+ alt ( next ( st) as char ) {
80
80
case ( 'b' ) { ret ty. ty_machine ( common. ty_u8 ) ; }
81
81
case ( 'w' ) { ret ty. ty_machine ( common. ty_u16 ) ; }
82
82
case ( 'l' ) { ret ty. ty_machine ( common. ty_u32 ) ; }
@@ -92,13 +92,15 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
92
92
case ( 'c' ) { ret ty. ty_char ; }
93
93
case ( 's' ) { ret ty. ty_str ; }
94
94
case ( 't' ) {
95
- check ( next ( st) == '[' ) ;
95
+ check ( next ( st) as char == '[' ) ;
96
96
auto def = "" ;
97
- while ( peek ( st) != '|' ) { def += _str. from_char ( next ( st) ) ; }
97
+ while ( peek ( st) as char != '|' ) {
98
+ def += _str. unsafe_from_byte ( next ( st) ) ;
99
+ }
98
100
st. pos = st. pos + 1 u;
99
101
let vec[ @ty. t] params = vec ( ) ;
100
- while ( peek ( st) != ']' ) {
101
- params = _vec . push [ @ty . t ] ( params , parse_ty ( st, sd) ) ;
102
+ while ( peek ( st) as char != ']' ) {
103
+ params += vec ( parse_ty ( st, sd) ) ;
102
104
}
103
105
st. pos = st. pos + 1 u;
104
106
ret ty. ty_tag ( sd ( def) , params) ;
@@ -108,23 +110,24 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
108
110
case ( 'P' ) { ret ty. ty_port ( parse_ty ( st, sd) ) ; }
109
111
case ( 'C' ) { ret ty. ty_chan ( parse_ty ( st, sd) ) ; }
110
112
case ( 'T' ) {
111
- check ( next ( st) == '[' ) ;
113
+ check ( next ( st) as char == '[' ) ;
112
114
let vec[ ty. mt ] params = vec ( ) ;
113
- while ( peek ( st) != ']' ) {
114
- params = _vec . push [ ty . mt ] ( params , parse_mt ( st, sd) ) ;
115
+ while ( peek ( st) as char != ']' ) {
116
+ params += vec ( parse_mt ( st, sd) ) ;
115
117
}
116
118
st. pos = st. pos + 1 u;
117
119
ret ty. ty_tup ( params) ;
118
120
}
119
121
case ( 'R' ) {
120
- check ( next ( st) == '[' ) ;
122
+ check ( next ( st) as char == '[' ) ;
121
123
let vec[ ty. field ] fields = vec ( ) ;
122
- while ( peek ( st) != ']' ) {
124
+ while ( peek ( st) as char != ']' ) {
123
125
auto name = "" ;
124
- while ( peek ( st) != '=' ) { name += _str. from_char ( next ( st) ) ; }
126
+ while ( peek ( st) as char != '=' ) {
127
+ name += _str. unsafe_from_byte ( next ( st) ) ;
128
+ }
125
129
st. pos = st. pos + 1 u;
126
- fields = _vec. push [ ty. field ]
127
- ( fields, rec ( ident=name, mt=parse_mt ( st, sd) ) ) ;
130
+ fields += vec ( rec ( ident=name, mt=parse_mt ( st, sd) ) ) ;
128
131
}
129
132
st. pos = st. pos + 1 u;
130
133
ret ty. ty_rec ( fields) ;
@@ -139,30 +142,31 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
139
142
}
140
143
case ( 'N' ) {
141
144
auto abi;
142
- alt ( next ( st) ) {
145
+ alt ( next ( st) as char ) {
143
146
case ( 'r' ) { abi = ast. native_abi_rust ; }
144
147
case ( 'c' ) { abi = ast. native_abi_cdecl ; }
145
148
}
146
149
auto func = parse_ty_fn ( st, sd) ;
147
150
ret ty. ty_native_fn ( abi, func. _0 , func. _1 ) ;
148
151
}
149
152
case ( 'O' ) {
150
- check ( next ( st) == '[' ) ;
153
+ check ( next ( st) as char == '[' ) ;
151
154
let vec[ ty. method ] methods = vec ( ) ;
152
- while ( peek ( st) != ']' ) {
155
+ while ( peek ( st) as char != ']' ) {
153
156
auto proto;
154
- alt ( next ( st) ) {
157
+ alt ( next ( st) as char ) {
155
158
case ( 'W' ) { proto = ast. proto_iter ; }
156
159
case ( 'F' ) { proto = ast. proto_fn ; }
157
160
}
158
161
auto name = "" ;
159
- while ( peek ( st) != '[' ) { name += _str. from_char ( next ( st) ) ; }
162
+ while ( peek ( st) as char != '[' ) {
163
+ name += _str. unsafe_from_byte ( next ( st) ) ;
164
+ }
160
165
auto func = parse_ty_fn ( st, sd) ;
161
- methods = _vec. push [ ty. method ]
162
- ( methods, rec ( proto=proto,
163
- ident=name,
164
- inputs=func. _0 ,
165
- output=func. _1 ) ) ;
166
+ methods += vec ( rec ( proto=proto,
167
+ ident=name,
168
+ inputs=func. _0 ,
169
+ output=func. _1 ) ) ;
166
170
}
167
171
ret ty. ty_obj ( methods) ;
168
172
}
@@ -174,7 +178,7 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
174
178
impure fn parse_int ( @pstate st ) -> int {
175
179
auto n = 0 ;
176
180
while ( true ) {
177
- auto cur = peek ( st) ;
181
+ auto cur = peek ( st) as char ;
178
182
if ( cur < '0' || cur > '9' ) { break ; }
179
183
st. pos = st. pos + 1 u;
180
184
n *= 10 ;
@@ -184,16 +188,15 @@ impure fn parse_int(@pstate st) -> int {
184
188
}
185
189
186
190
impure fn parse_ty_fn ( @pstate st , str_def sd) -> tup ( vec[ ty. arg ] , @ty. t ) {
187
- check ( next ( st) == '[' ) ;
191
+ check ( next ( st) as char == '[' ) ;
188
192
let vec[ ty. arg ] inputs = vec ( ) ;
189
- while ( peek ( st) != ']' ) {
193
+ while ( peek ( st) as char != ']' ) {
190
194
auto mode = ast. val ;
191
- if ( peek ( st) == '&' ) {
195
+ if ( peek ( st) as char == '&' ) {
192
196
mode = ast. alias ;
193
197
st. pos = st. pos + 1 u;
194
198
}
195
- inputs = _vec. push [ ty. arg ]
196
- ( inputs, rec ( mode=mode, ty=parse_ty ( st, sd) ) ) ;
199
+ inputs += vec ( rec ( mode=mode, ty=parse_ty ( st, sd) ) ) ;
197
200
}
198
201
st. pos = st. pos + 1 u;
199
202
ret tup( inputs, parse_ty ( st, sd) ) ;
0 commit comments