Skip to content

Commit fc4a1cc

Browse files
committed
Merge pull request #3 from SimonSapin/rust-20130807
Update to today’s Rust
2 parents d9d4f7d + d6ddc0d commit fc4a1cc

File tree

6 files changed

+24
-115
lines changed

6 files changed

+24
-115
lines changed

ast.rs

+6
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
* License, v. 2.0. If a copy of the MPL was not distributed with this
33
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
44

5+
use std::str::ToStr;
6+
57

68
#[deriving(Eq)]
79
pub struct NumericValue {
@@ -108,3 +110,7 @@ pub enum ErrorReason {
108110
ErrInvalidBangImportantSyntax,
109111
// This is meant to be extended
110112
}
113+
114+
impl ToStr for ErrorReason {
115+
fn to_str(&self) -> ~str { fmt!("%?", self) }
116+
}

color.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::libc::c_float;
2+
use std::ascii::to_ascii_lower;
3+
24
use ast::*;
3-
use super::to_ascii_lower;
45
use self::color_data::{COLOR_KEYWORDS, COLOR_VALUES};
56

67
mod color_data;

cssparser.rc

-91
Original file line numberDiff line numberDiff line change
@@ -14,94 +14,3 @@ pub mod color;
1414

1515
#[cfg(test)]
1616
mod tests;
17-
18-
19-
#[cfg(not(test))]
20-
static CFG_TEST: bool = false;
21-
22-
#[cfg(test)]
23-
static CFG_TEST: bool = true;
24-
25-
26-
/// Return whether `string` is an ASCII case-insensitive match for `reference`,
27-
/// where `reference` is already in ASCII lower-case.
28-
pub fn eq_ascii_lower(string: &str, reference: &str) -> bool {
29-
#[inline]
30-
fn eq(string: &str, reference: &str) -> bool {
31-
for std::uint::range(0, string.len()) |i| {
32-
if ASCII_LOWER_MAP[string[i]] != reference[i] {
33-
return false
34-
}
35-
}
36-
true
37-
}
38-
39-
if CFG_TEST {
40-
assert!(eq(reference, reference), ~"Reference must be ASCII lower case.");
41-
}
42-
string.len() == reference.len() && eq(string, reference)
43-
}
44-
45-
46-
/// Return an ASCII lower-case copy of `string`:
47-
/// A-Z is replaced by a-z, non-ASCII letters are unchanged.
48-
pub fn to_ascii_lower(string: &str) -> ~str {
49-
let mut lower = string.to_owned();
50-
for std::uint::range(0, lower.len()) |i| {
51-
lower[i] = ASCII_LOWER_MAP[lower[i]];
52-
}
53-
lower
54-
}
55-
56-
57-
#[test]
58-
fn test_ascii_lower() {
59-
assert!(eq_ascii_lower("url()URL()uRl()Ürl", "url()url()url()Ürl"));
60-
assert!(to_ascii_lower("url()URL()uRl()Ürl") == ~"url()url()url()Ürl");
61-
// Dotted capital I, Kelvin sign, Sharp S.
62-
assert!(eq_ascii_lower("HİKß", "hİKß"));
63-
assert!(to_ascii_lower("HİKß") == ~"hİKß");
64-
65-
for std::uint::range(0, 128) |i| {
66-
let c = i as char;
67-
let lower = if 'A' <= c && c <= 'Z' { c + 'a' - 'A' } else { c };
68-
assert!(ASCII_LOWER_MAP[i] as char == lower)
69-
}
70-
}
71-
72-
73-
// This is UTF8-safe because only bytes in the ASCII range are affected.
74-
static ASCII_LOWER_MAP: &'static [u8] = &[
75-
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
76-
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
77-
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
78-
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
79-
0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
80-
0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
81-
0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
82-
0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
83-
0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
84-
0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
85-
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
86-
0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
87-
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
88-
0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
89-
0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
90-
0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
91-
0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
92-
0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
93-
0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
94-
0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
95-
0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
96-
0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
97-
0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
98-
0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
99-
0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
100-
0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
101-
0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
102-
0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
103-
0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
104-
0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
105-
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
106-
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff,
107-
];

parser.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,16 @@
1212

1313
use std::iterator::Iterator;
1414
use std::vec;
15+
use std::ascii::eq_ignore_ascii_case;
1516

1617
use ast::*;
1718
use tokenizer::*;
18-
use super::eq_ascii_lower;
1919

2020

2121
// TODO: Use a trait?
2222
enum ComponentValueIterator {
2323
ParserIter(~Parser),
24-
VectorIter(vec::VecConsumeIterator<(ComponentValue, SourceLocation)>),
24+
VectorIter(vec::ConsumeIterator<(ComponentValue, SourceLocation)>),
2525
}
2626

2727

@@ -43,7 +43,7 @@ impl ComponentValueIterator {
4343

4444
#[inline]
4545
pub fn next_non_whitespace(&mut self) -> Option<(ComponentValue, SourceLocation)> {
46-
for self.advance |(component_value, location)| {
46+
for (component_value, location) in *self {
4747
if component_value != WhiteSpace { return Some((component_value, location)) }
4848
}
4949
None
@@ -127,7 +127,7 @@ pub fn parse_declaration_or_at_rule(iter: &mut ComponentValueIterator)
127127
Ok(declaration) => Ok(Declaration(declaration)),
128128
Err(reason) => {
129129
// Find the end of the declaration
130-
for iter.advance |(v, _)| { if v == Semicolon { break } }
130+
for (v, _) in *iter { if v == Semicolon { break } }
131131
Err(reason)
132132
}
133133
}),
@@ -234,7 +234,7 @@ fn parse_declaration_important(iter: &mut ComponentValueIterator) -> bool {
234234
Some((Ident(value), _)) => value,
235235
_ => return false,
236236
};
237-
if !eq_ascii_lower(ident_value, "important") { return false }
237+
if !eq_ignore_ascii_case(ident_value, "important") { return false }
238238
match iter.next_non_whitespace() {
239239
Some((Semicolon, _)) => true,
240240
None => true,

tests.rs

+4-4
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ fn almost_equals(a: &json::Json, b: &json::Json) -> bool {
3636
3737
fn assert_json_eq(results: json::Json, expected: json::Json, message: ~str) {
3838
if !almost_equals(&results, &expected) {
39-
let temp = tempfile::mkdtemp(&os::tmpdir(), "rust-cssparser-tests").get();
40-
let temp_ = copy temp;
39+
let temp = tempfile::mkdtemp(&os::tmpdir(), "rust-cssparser-tests").unwrap();
40+
let temp_ = temp.clone();
4141
let results = json::to_pretty_str(&results) + "\n";
4242
let expected = json::to_pretty_str(&expected) + "\n";
4343
do task::try {
@@ -62,11 +62,11 @@ fn run_json_tests(json_data: &str, parse: &fn (input: ~str) -> json::Json) {
6262
};
6363
assert!(items.len() % 2 == 0);
6464
let mut input: Option<~str> = None;
65-
for items.consume_iter().advance |item| {
65+
for item in items.consume_iter() {
6666
match (&input, item) {
6767
(&None, json::String(string)) => input = Some(string),
6868
(&Some(_), expected) => {
69-
let input = input.swap_unwrap();
69+
let input = input.take_unwrap();
7070
let result = parse(input.to_owned());
7171
assert_json_eq(result, expected, input);
7272
},

tokenizer.rs

+7-14
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
// http://dev.w3.org/csswg/css3-syntax/#tokenization
66

77
use std::{str, u32, i64, f64};
8+
use std::ascii::eq_ignore_ascii_case;
89

910
use ast::*;
10-
use super::eq_ascii_lower;
1111

1212

1313
struct Parser {
@@ -43,7 +43,7 @@ macro_rules! is_match(
4343
pub fn next_component_value(parser: &mut Parser) -> Option<(ComponentValue, SourceLocation)> {
4444
consume_comments(parser);
4545
if parser.is_eof() {
46-
if CFG_TEST {
46+
if cfg!(test) {
4747
assert!(parser.line == parser.input.split_iter('\n').len_(),
4848
"The tokenizer is missing a parser.new_line() call somewhere.")
4949
}
@@ -197,13 +197,6 @@ pub fn next_component_value(parser: &mut Parser) -> Option<(ComponentValue, Sour
197197
// *********** End of public API ***********
198198

199199

200-
#[cfg(not(test))]
201-
static CFG_TEST: bool = false;
202-
203-
#[cfg(test)]
204-
static CFG_TEST: bool = true;
205-
206-
207200
#[inline]
208201
fn preprocess(input: &str) -> ~str {
209202
// TODO: Is this faster if done in one pass?
@@ -246,7 +239,7 @@ impl Parser {
246239

247240
#[inline]
248241
fn new_line(&mut self) {
249-
if CFG_TEST {
242+
if cfg!(test) {
250243
assert!(self.input.char_at(self.position - 1) == '\n')
251244
}
252245
self.line += 1;
@@ -347,7 +340,7 @@ fn is_ident_start(parser: &mut Parser) -> bool {
347340
fn consume_ident_like(parser: &mut Parser) -> ComponentValue {
348341
let value = consume_name(parser);
349342
if !parser.is_eof() && parser.current_char() == '(' {
350-
if eq_ascii_lower(value, "url") { consume_url(parser) }
343+
if eq_ignore_ascii_case(value, "url") { consume_url(parser) }
351344
else { Function(value, consume_block(parser, CloseParenthesis)) }
352345
} else {
353346
Ident(value)
@@ -429,9 +422,9 @@ fn consume_numeric(parser: &mut Parser) -> ComponentValue {
429422
i64::from_str(representation)
430423
} else {
431424
i64::from_str(representation.slice_from(1))
432-
}.get()
425+
}.unwrap()
433426
)} else { None },
434-
value: f64::from_str(representation).get(),
427+
value: f64::from_str(representation).unwrap(),
435428
representation: representation,
436429
};
437430
if !parser.is_eof() && parser.current_char() == '%' {
@@ -599,5 +592,5 @@ fn consume_escape(parser: &mut Parser) -> char {
599592

600593
#[inline]
601594
fn char_from_hex(hex: &str) -> char {
602-
u32::from_str_radix(hex, 16).get() as char
595+
u32::from_str_radix(hex, 16).unwrap() as char
603596
}

0 commit comments

Comments
 (0)