Skip to content

Commit f72cb2d

Browse files
committed
---
yaml --- r: 1758 b: refs/heads/master c: 3dec5b5 h: refs/heads/master v: v3
1 parent 1d0b4c4 commit f72cb2d

File tree

2 files changed

+41
-38
lines changed

2 files changed

+41
-38
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 84c0d8638ebf766cc4f6e442bbd4f01c5810795a
2+
refs/heads/master: 3dec5b5e5096c33e9790d133372bcd9bc2ee8889

trunk/src/comp/front/creader.rs

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,18 @@ type str_def = fn(str) -> ast.def_id;
3535

3636
type pstate = rec(str rep, mutable uint pos, uint len);
3737

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;}
4141
}
42-
impure fn next(@pstate st) -> char { // ?? somehow not recognized as impure
42+
impure fn next(@pstate st) -> u8 { // ?? somehow not recognized as impure
4343
if (st.pos >= st.len) {fail;}
4444
auto ch = st.rep.(st.pos);
4545
st.pos = st.pos + 1u;
46-
ret ch as char;
46+
ret ch as u8;
4747
}
4848

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 {
5050
auto len = _str.byte_len(rep);
5151
auto st = @rec(rep=rep, mutable pos=0u, len=len);
5252
auto result = parse_ty(st, sd);
@@ -61,7 +61,7 @@ impure fn parse_ty(@pstate st, str_def sd) -> @ty.t {
6161

6262
impure fn parse_mt(@pstate st, str_def sd) -> ty.mt {
6363
auto mut;
64-
alt (peek(st)) {
64+
alt (peek(st) as char) {
6565
case ('m') {next(st); mut = ast.mut;}
6666
case ('?') {next(st); mut = ast.maybe_mut;}
6767
case (_) {mut=ast.imm;}
@@ -70,13 +70,13 @@ impure fn parse_mt(@pstate st, str_def sd) -> ty.mt {
7070
}
7171

7272
impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
73-
alt (next(st)) {
73+
alt (next(st) as char) {
7474
case ('n') {ret ty.ty_nil;}
7575
case ('b') {ret ty.ty_bool;}
7676
case ('i') {ret ty.ty_int;}
7777
case ('u') {ret ty.ty_uint;}
7878
case ('M') {
79-
alt (next(st)) {
79+
alt (next(st) as char) {
8080
case ('b') {ret ty.ty_machine(common.ty_u8);}
8181
case ('w') {ret ty.ty_machine(common.ty_u16);}
8282
case ('l') {ret ty.ty_machine(common.ty_u32);}
@@ -92,13 +92,15 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
9292
case ('c') {ret ty.ty_char;}
9393
case ('s') {ret ty.ty_str;}
9494
case ('t') {
95-
check(next(st) == '[');
95+
check(next(st) as char == '[');
9696
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+
}
98100
st.pos = st.pos + 1u;
99101
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));
102104
}
103105
st.pos = st.pos + 1u;
104106
ret ty.ty_tag(sd(def), params);
@@ -108,23 +110,24 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
108110
case ('P') {ret ty.ty_port(parse_ty(st, sd));}
109111
case ('C') {ret ty.ty_chan(parse_ty(st, sd));}
110112
case ('T') {
111-
check(next(st) == '[');
113+
check(next(st) as char == '[');
112114
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));
115117
}
116118
st.pos = st.pos + 1u;
117119
ret ty.ty_tup(params);
118120
}
119121
case ('R') {
120-
check(next(st) == '[');
122+
check(next(st) as char == '[');
121123
let vec[ty.field] fields = vec();
122-
while (peek(st) != ']') {
124+
while (peek(st) as char != ']') {
123125
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+
}
125129
st.pos = st.pos + 1u;
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)));
128131
}
129132
st.pos = st.pos + 1u;
130133
ret ty.ty_rec(fields);
@@ -139,30 +142,31 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
139142
}
140143
case ('N') {
141144
auto abi;
142-
alt (next(st)) {
145+
alt (next(st) as char) {
143146
case ('r') {abi = ast.native_abi_rust;}
144147
case ('c') {abi = ast.native_abi_cdecl;}
145148
}
146149
auto func = parse_ty_fn(st, sd);
147150
ret ty.ty_native_fn(abi,func._0,func._1);
148151
}
149152
case ('O') {
150-
check(next(st) == '[');
153+
check(next(st) as char == '[');
151154
let vec[ty.method] methods = vec();
152-
while (peek(st) != ']') {
155+
while (peek(st) as char != ']') {
153156
auto proto;
154-
alt (next(st)) {
157+
alt (next(st) as char) {
155158
case ('W') {proto = ast.proto_iter;}
156159
case ('F') {proto = ast.proto_fn;}
157160
}
158161
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+
}
160165
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));
166170
}
167171
ret ty.ty_obj(methods);
168172
}
@@ -174,7 +178,7 @@ impure fn parse_sty(@pstate st, str_def sd) -> ty.sty {
174178
impure fn parse_int(@pstate st) -> int {
175179
auto n = 0;
176180
while (true) {
177-
auto cur = peek(st);
181+
auto cur = peek(st) as char;
178182
if (cur < '0' || cur > '9') {break;}
179183
st.pos = st.pos + 1u;
180184
n *= 10;
@@ -184,16 +188,15 @@ impure fn parse_int(@pstate st) -> int {
184188
}
185189

186190
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 == '[');
188192
let vec[ty.arg] inputs = vec();
189-
while (peek(st) != ']') {
193+
while (peek(st) as char != ']') {
190194
auto mode = ast.val;
191-
if (peek(st) == '&') {
195+
if (peek(st) as char == '&') {
192196
mode = ast.alias;
193197
st.pos = st.pos + 1u;
194198
}
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)));
197200
}
198201
st.pos = st.pos + 1u;
199202
ret tup(inputs, parse_ty(st, sd));

0 commit comments

Comments
 (0)