Skip to content

Commit e8eb891

Browse files
committed
---
yaml --- r: 5255 b: refs/heads/master c: 577d6dd h: refs/heads/master i: 5253: 578018d 5251: 5247078 5247: aa3e89b v: v3
1 parent 5b3b0e9 commit e8eb891

File tree

2 files changed

+37
-40
lines changed

2 files changed

+37
-40
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: f72573cce824429cab75200b84229b2d239c7d60
2+
refs/heads/master: 577d6dd6022facc6507d8339cf59caa745964cd1

trunk/src/comp/syntax/parse/lexer.rs

Lines changed: 36 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ fn scan_dec_digits(rdr: reader) -> str {
195195

196196
fn scan_number(c: char, rdr: reader) -> token::token {
197197
let accum_int = 0;
198-
let dec_str: str = "";
198+
let num_str: str = "";
199199
let is_dec_integer: bool = false;
200200
let n = rdr.next();
201201
if c == '0' && n == 'x' {
@@ -216,8 +216,8 @@ fn scan_number(c: char, rdr: reader) -> token::token {
216216
rdr.bump();
217217
c = rdr.curr();
218218
}
219-
} else { dec_str = scan_dec_digits(rdr); is_dec_integer = true; }
220-
if is_dec_integer { accum_int = digits_to_string(dec_str); }
219+
} else { num_str = scan_dec_digits(rdr); is_dec_integer = true; }
220+
if is_dec_integer { accum_int = digits_to_string(num_str); }
221221
c = rdr.curr();
222222
n = rdr.next();
223223
if c == 'u' || c == 'i' {
@@ -256,53 +256,50 @@ fn scan_number(c: char, rdr: reader) -> token::token {
256256
ret token::LIT_INT(accum_int);
257257
} else {
258258
// FIXME: should cast in the target bit-width.
259-
260259
ret token::LIT_UINT(accum_int as uint);
261260
}
262261
}
263-
c = rdr.curr();
264-
if c == '.' {
265-
// Parse a floating-point number.
266-
262+
let is_float = false;
263+
if rdr.curr() == '.' {
264+
is_float = true;
267265
rdr.bump();
268266
let dec_part = scan_dec_digits(rdr);
269-
let float_str = dec_str + "." + dec_part;
270-
c = rdr.curr();
271-
let exponent_str = scan_exponent(rdr);
272-
alt exponent_str { some(s) { float_str += s; } none. { } }
267+
num_str += "." + dec_part;
268+
}
269+
alt scan_exponent(rdr) {
270+
some(s) {
271+
is_float = true;
272+
num_str += s;
273+
}
274+
none. {}
275+
}
276+
if rdr.curr() == 'f' {
277+
rdr.bump();
273278
c = rdr.curr();
274-
if c == 'f' {
279+
n = rdr.next();
280+
if c == '3' && n == '2' {
275281
rdr.bump();
276-
c = rdr.curr();
277-
n = rdr.next();
278-
if c == '3' && n == '2' {
279-
rdr.bump();
280-
rdr.bump();
281-
ret token::LIT_MACH_FLOAT(ast::ty_f32,
282-
intern(*rdr.get_interner(),
283-
float_str));
284-
} else if c == '6' && n == '4' {
285-
rdr.bump();
286-
rdr.bump();
287-
ret token::LIT_MACH_FLOAT(ast::ty_f64,
288-
intern(*rdr.get_interner(),
289-
float_str));
290-
/* FIXME: if this is out of range for either a 32-bit or
291-
64-bit float, it won't be noticed till the back-end */
292-
293-
}
282+
rdr.bump();
283+
ret token::LIT_MACH_FLOAT(ast::ty_f32,
284+
intern(*rdr.get_interner(),
285+
num_str));
286+
} else if c == '6' && n == '4' {
287+
rdr.bump();
288+
rdr.bump();
289+
ret token::LIT_MACH_FLOAT(ast::ty_f64,
290+
intern(*rdr.get_interner(),
291+
num_str));
292+
/* FIXME: if this is out of range for either a 32-bit or
293+
64-bit float, it won't be noticed till the back-end */
294294
} else {
295-
ret token::LIT_FLOAT(interner::intern::<str>(*rdr.get_interner(),
296-
float_str));
295+
is_float = true;
297296
}
298297
}
299-
let maybe_exponent = scan_exponent(rdr);
300-
alt maybe_exponent {
301-
some(s) {
298+
if is_float {
302299
ret token::LIT_FLOAT(interner::intern::<str>(*rdr.get_interner(),
303-
dec_str + s));
304-
}
305-
none. { ret token::LIT_INT(accum_int); }
300+
num_str));
301+
} else {
302+
ret token::LIT_INT(accum_int);
306303
}
307304
}
308305

0 commit comments

Comments
 (0)