Skip to content

Commit 7e601c1

Browse files
committed
---
yaml --- r: 146911 b: refs/heads/try2 c: 42ea44b h: refs/heads/master i: 146909: 63b5bf4 146907: 5841369 146903: baed18e 146895: ef8aaa2 146879: 729a23e v: v3
1 parent 2578ca7 commit 7e601c1

32 files changed

+2111
-1141
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ refs/heads/snap-stage3: 78a7676898d9f80ab540c6df5d4c9ce35bb50463
55
refs/heads/try: 519addf6277dbafccbb4159db4b710c37eaa2ec5
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105
77
refs/heads/ndm: f3868061cd7988080c30d6d5bf352a5a5fe2460b
8-
refs/heads/try2: 79ed898f64f45cdcca6eadad3a5ad378fc8ff635
8+
refs/heads/try2: 42ea44ba27cf16a9e534dbcbe663e0e16c5f03ce
99
refs/heads/dist-snap: ba4081a5a8573875fed17545846f6f6902c8ba8d
1010
refs/tags/release-0.2: c870d2dffb391e14efb05aa27898f1f6333a9596
1111
refs/tags/release-0.3: b5f0d0f648d9a6153664837026ba1be43d3e2503

branches/try2/doc/rust.md

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -153,17 +153,19 @@ Some productions are defined by exclusion of particular Unicode characters:
153153
~~~~ {.ebnf .gram}
154154
comment : block_comment | line_comment ;
155155
block_comment : "/*" block_comment_body * '*' + '/' ;
156-
block_comment_body : non_star * | '*' + non_slash_or_star ;
156+
block_comment_body : (block_comment | character) * ;
157157
line_comment : "//" non_eol * ;
158158
~~~~
159159

160160
Comments in Rust code follow the general C++ style of line and block-comment forms,
161161
with no nesting of block-comment delimiters.
162162

163-
Line comments beginning with _three_ slashes (`///`),
164-
and block comments beginning with a repeated asterisk in the block-open sequence (`/**`),
165-
are interpreted as a special syntax for `doc` [attributes](#attributes).
166-
That is, they are equivalent to writing `#[doc "..."]` around the comment's text.
163+
Line comments beginning with exactly _three_ slashes (`///`), and block
164+
comments beginning with a exactly one repeated asterisk in the block-open
165+
sequence (`/**`), are interpreted as a special syntax for `doc`
166+
[attributes](#attributes). That is, they are equivalent to writing
167+
`#[doc="..."]` around the body of the comment (this includes the comment
168+
characters themselves, ie `/// Foo` turns into `#[doc="/// Foo"]`).
167169

168170
Non-doc comments are interpreted as a form of whitespace.
169171

branches/try2/src/etc/unicode.py

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
# code covering the core properties. Since this is a pretty rare event we
66
# just store this out-of-line and check the unicode.rs file into git.
77
#
8-
# The emitted code is "the minimum we think is necessary for libcore", that
8+
# The emitted code is "the minimum we think is necessary for libstd", that
99
# is, to support basic operations of the compiler and "most nontrivial rust
1010
# programs". It is not meant to be a complete implementation of unicode.
1111
# For that we recommend you use a proper binding to libicu.
@@ -41,7 +41,7 @@ def load_unicode_data(f):
4141
continue
4242
[code, name, gencat, combine, bidi,
4343
decomp, deci, digit, num, mirror,
44-
old, iso, upcase, lowcsae, titlecase ] = fields
44+
old, iso, upcase, lowcase, titlecase ] = fields
4545

4646
code = int(code, 16)
4747

@@ -89,11 +89,9 @@ def load_unicode_data(f):
8989

9090
return (canon_decomp, compat_decomp, gencats, combines)
9191

92-
93-
def load_derived_core_properties(f):
92+
def load_properties(f, interestingprops):
9493
fetch(f)
95-
derivedprops = {}
96-
interestingprops = ["XID_Start", "XID_Continue", "Alphabetic"]
94+
props = {}
9795
re1 = re.compile("^([0-9A-F]+) +; (\w+)")
9896
re2 = re.compile("^([0-9A-F]+)\.\.([0-9A-F]+) +; (\w+)")
9997

@@ -118,10 +116,10 @@ def load_derived_core_properties(f):
118116
continue
119117
d_lo = int(d_lo, 16)
120118
d_hi = int(d_hi, 16)
121-
if prop not in derivedprops:
122-
derivedprops[prop] = []
123-
derivedprops[prop].append((d_lo, d_hi))
124-
return derivedprops
119+
if prop not in props:
120+
props[prop] = []
121+
props[prop].append((d_lo, d_hi))
122+
return props
125123

126124
def escape_char(c):
127125
if c <= 0xff:
@@ -144,7 +142,7 @@ def emit_bsearch_range_table(f):
144142
use cmp::{Equal, Less, Greater};
145143
use vec::ImmutableVector;
146144
use option::None;
147-
(do r.bsearch |&(lo,hi)| {
145+
r.bsearch(|&(lo,hi)| {
148146
if lo <= c && c <= hi { Equal }
149147
else if hi < c { Less }
150148
else { Greater }
@@ -302,14 +300,14 @@ def emit_decomp_module(f, canon, compat, combine):
302300
ix += 1
303301
f.write("\n ];\n")
304302

305-
f.write(" pub fn canonical(c: char, i: &fn(char)) "
303+
f.write(" pub fn canonical(c: char, i: |char|) "
306304
+ "{ d(c, i, false); }\n\n")
307-
f.write(" pub fn compatibility(c: char, i: &fn(char)) "
305+
f.write(" pub fn compatibility(c: char, i: |char|) "
308306
+"{ d(c, i, true); }\n\n")
309307
f.write(" pub fn canonical_combining_class(c: char) -> u8 {\n"
310308
+ " bsearch_range_value_table(c, combining_class_table)\n"
311309
+ " }\n\n")
312-
f.write(" fn d(c: char, i: &fn(char), k: bool) {\n")
310+
f.write(" fn d(c: char, i: |char|, k: bool) {\n")
313311
f.write(" use iter::Iterator;\n");
314312

315313
f.write(" if c <= '\\x7f' { i(c); return; }\n")
@@ -376,5 +374,9 @@ def emit_decomp_module(f, canon, compat, combine):
376374

377375
emit_decomp_module(rf, canon_decomp, compat_decomp, combines)
378376

379-
derived = load_derived_core_properties("DerivedCoreProperties.txt")
377+
derived = load_properties("DerivedCoreProperties.txt",
378+
["XID_Start", "XID_Continue", "Alphabetic", "Lowercase", "Uppercase"])
380379
emit_property_module(rf, "derived_property", derived)
380+
381+
props = load_properties("PropList.txt", ["White_Space"])
382+
emit_property_module(rf, "property", props)

branches/try2/src/etc/vim/syntax/rust.vim

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,8 @@ syn match rustCharacter /'\([^'\\]\|\\\([nrt0\\'"]\|x\x\{2}\|u\x\{4}\|U\x\{8
187187

188188
syn region rustCommentML start="/\*" end="\*/" contains=rustTodo
189189
syn region rustComment start="//" end="$" contains=rustTodo keepend
190-
syn region rustCommentMLDoc start="/\*\%(!\|\*/\@!\)" end="\*/" contains=rustTodo
191-
syn region rustCommentDoc start="//[/!]" end="$" contains=rustTodo keepend
190+
syn region rustCommentMLDoc start="/\*\%(!\|\*[*/]\@!\)" end="\*/" contains=rustTodo
191+
syn region rustCommentDoc start="//\%(//\@!\|!\)" end="$" contains=rustTodo keepend
192192

193193
syn keyword rustTodo contained TODO FIXME XXX NB NOTE
194194

branches/try2/src/librustc/front/feature_gate.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
//! Features are enabled in programs via the crate-level attributes of
1919
//! #[feature(...)] with a comma-separated list of features.
2020
21+
use middle::lint;
22+
2123
use syntax::ast;
2224
use syntax::attr::AttrMetaMethods;
2325
use syntax::codemap::Span;
@@ -209,7 +211,10 @@ pub fn check_crate(sess: Session, crate: &ast::Crate) {
209211
directive not necessary");
210212
}
211213
None => {
212-
sess.span_err(mi.span, "unknown feature");
214+
sess.add_lint(lint::unknown_features,
215+
ast::CRATE_NODE_ID,
216+
mi.span,
217+
~"unknown feature");
213218
}
214219
}
215220
}

branches/try2/src/librustc/lib/llvm.rs

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,22 +128,62 @@ pub enum RealPredicate {
128128

129129
// The LLVM TypeKind type - must stay in sync with the def of
130130
// LLVMTypeKind in llvm/include/llvm-c/Core.h
131+
#[cfg(not(stage0))]
132+
#[deriving(Eq)]
133+
#[repr(C)]
134+
pub enum TypeKind {
135+
Void = 0,
136+
Half = 1,
137+
Float = 2,
138+
Double = 3,
139+
X86_FP80 = 4,
140+
FP128 = 5,
141+
PPC_FP128 = 6,
142+
Label = 7,
143+
Integer = 8,
144+
Function = 9,
145+
Struct = 10,
146+
Array = 11,
147+
Pointer = 12,
148+
Vector = 13,
149+
Metadata = 14,
150+
X86_MMX = 15,
151+
}
152+
153+
// NOTE remove these after snapshot. (See also #10308.)
154+
#[cfg(stage0)]
131155
pub type TypeKind = u32;
156+
#[cfg(stage0)]
132157
pub static Void: TypeKind = 0;
158+
#[cfg(stage0)]
133159
pub static Half: TypeKind = 1;
160+
#[cfg(stage0)]
134161
pub static Float: TypeKind = 2;
162+
#[cfg(stage0)]
135163
pub static Double: TypeKind = 3;
164+
#[cfg(stage0)]
136165
pub static X86_FP80: TypeKind = 4;
166+
#[cfg(stage0)]
137167
pub static FP128: TypeKind = 5;
168+
#[cfg(stage0)]
138169
pub static PPC_FP128: TypeKind = 6;
170+
#[cfg(stage0)]
139171
pub static Label: TypeKind = 7;
172+
#[cfg(stage0)]
140173
pub static Integer: TypeKind = 8;
174+
#[cfg(stage0)]
141175
pub static Function: TypeKind = 9;
176+
#[cfg(stage0)]
142177
pub static Struct: TypeKind = 10;
178+
#[cfg(stage0)]
143179
pub static Array: TypeKind = 11;
180+
#[cfg(stage0)]
144181
pub static Pointer: TypeKind = 12;
182+
#[cfg(stage0)]
145183
pub static Vector: TypeKind = 13;
184+
#[cfg(stage0)]
146185
pub static Metadata: TypeKind = 14;
186+
#[cfg(stage0)]
147187
pub static X86_MMX: TypeKind = 15;
148188

149189
#[repr(C)]

branches/try2/src/librustc/middle/lint.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ use syntax::codemap::Span;
5959
use syntax::codemap;
6060
use syntax::parse::token;
6161
use syntax::{ast, ast_util, visit};
62+
use syntax::ast_util::IdVisitingOperation;
6263
use syntax::visit::Visitor;
6364

6465
#[deriving(Clone, Eq)]
@@ -77,6 +78,7 @@ pub enum lint {
7778
unused_unsafe,
7879
unsafe_block,
7980
attribute_usage,
81+
unknown_features,
8082

8183
managed_heap_memory,
8284
owned_heap_memory,
@@ -321,6 +323,13 @@ static lint_table: &'static [(&'static str, LintSpec)] = &[
321323
desc: "mass-change the level for lints which produce warnings",
322324
default: warn
323325
}),
326+
327+
("unknown_features",
328+
LintSpec {
329+
lint: unknown_features,
330+
desc: "unknown features found in create-level #[feature] directives",
331+
default: deny,
332+
}),
324333
];
325334

326335
/*
@@ -1320,7 +1329,7 @@ impl<'self> Visitor<()> for Context<'self> {
13201329
}
13211330
}
13221331

1323-
impl<'self> ast_util::IdVisitingOperation for Context<'self> {
1332+
impl<'self> IdVisitingOperation for Context<'self> {
13241333
fn visit_id(&self, id: ast::NodeId) {
13251334
match self.tcx.sess.lints.pop(&id) {
13261335
None => {}
@@ -1356,6 +1365,7 @@ pub fn check_crate(tcx: ty::ctxt,
13561365
cx.set_level(lint, level, CommandLine);
13571366
}
13581367
cx.with_lint_attrs(crate.attrs, |cx| {
1368+
cx.visit_id(ast::CRATE_NODE_ID);
13591369
cx.visit_ids(|v| {
13601370
v.visited_outermost = true;
13611371
visit::walk_crate(v, crate, ());

branches/try2/src/libstd/ascii.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ impl Ascii {
6767
/// Check if the character is a number (0-9)
6868
#[inline]
6969
pub fn is_digit(&self) -> bool {
70-
self.chr >= 0x31 && self.chr <= 0x39
70+
self.chr >= 0x30 && self.chr <= 0x39
7171
}
7272

7373
/// Check if the character is a letter or number
@@ -85,7 +85,7 @@ impl Ascii {
8585
/// Check if the character is a control character
8686
#[inline]
8787
pub fn is_control(&self) -> bool {
88-
self.chr <= 0x20 || self.chr == 0x7F
88+
self.chr < 0x20 || self.chr == 0x7F
8989
}
9090

9191
/// Checks if the character is printable (except space)
@@ -498,6 +498,15 @@ mod tests {
498498
assert_eq!('`'.to_ascii().to_upper().to_char(), '`');
499499
assert_eq!('{'.to_ascii().to_upper().to_char(), '{');
500500

501+
assert!('0'.to_ascii().is_digit());
502+
assert!('9'.to_ascii().is_digit());
503+
assert!(!'/'.to_ascii().is_digit());
504+
assert!(!':'.to_ascii().is_digit());
505+
506+
assert!((0x1fu8).to_ascii().is_control());
507+
assert!(!' '.to_ascii().is_control());
508+
assert!((0x7fu8).to_ascii().is_control());
509+
501510
assert!("banana".chars().all(|c| c.is_ascii()));
502511
assert!(!"ประเทศไทย中华Việt Nam".chars().all(|c| c.is_ascii()));
503512
}

branches/try2/src/libstd/char.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use cast::transmute;
1414
use option::{None, Option, Some};
1515
use iter::{Iterator, range_step};
1616
use str::StrSlice;
17-
use unicode::{derived_property, general_category, decompose};
17+
use unicode::{derived_property, property, general_category, decompose};
1818
use to_str::ToStr;
1919
use str;
2020

@@ -89,30 +89,28 @@ pub fn is_XID_continue(c: char) -> bool { derived_property::XID_Continue(c) }
8989

9090
///
9191
/// Indicates whether a character is in lower case, defined
92-
/// in terms of the Unicode General Category 'Ll'
92+
/// in terms of the Unicode Derived Core Property 'Lowercase'.
9393
///
9494
#[inline]
95-
pub fn is_lowercase(c: char) -> bool { general_category::Ll(c) }
95+
pub fn is_lowercase(c: char) -> bool { derived_property::Lowercase(c) }
9696

9797
///
9898
/// Indicates whether a character is in upper case, defined
99-
/// in terms of the Unicode General Category 'Lu'.
99+
/// in terms of the Unicode Derived Core Property 'Uppercase'.
100100
///
101101
#[inline]
102-
pub fn is_uppercase(c: char) -> bool { general_category::Lu(c) }
102+
pub fn is_uppercase(c: char) -> bool { derived_property::Uppercase(c) }
103103

104104
///
105105
/// Indicates whether a character is whitespace. Whitespace is defined in
106-
/// terms of the Unicode General Categories 'Zs', 'Zl', 'Zp'
107-
/// additional 'Cc'-category control codes in the range [0x09, 0x0d]
106+
/// terms of the Unicode Property 'White_Space'.
108107
///
109108
#[inline]
110109
pub fn is_whitespace(c: char) -> bool {
110+
// As an optimization ASCII whitespace characters are checked separately
111111
c == ' '
112112
|| ('\x09' <= c && c <= '\x0d')
113-
|| general_category::Zs(c)
114-
|| general_category::Zl(c)
115-
|| general_category::Zp(c)
113+
|| property::White_Space(c)
116114
}
117115

118116
///

0 commit comments

Comments
 (0)