Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
5a3d26f2
R
Rust
项目概览
int
/
Rust
大约 1 年 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
Rust
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
5a3d26f2
编写于
1月 08, 2013
作者:
G
Graydon Hoare
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
core: replace unicode match exprs with bsearch in const arrays, minor perf win.
上级
14b7277c
变更
4
展开全部
隐藏空白更改
内联
并排
Showing
4 changed file
with
2622 addition
and
4626 deletion
+2622
-4626
src/etc/unicode.py
src/etc/unicode.py
+44
-1
src/libcore/unicode.rs
src/libcore/unicode.rs
+2533
-4580
src/libcore/vec.rs
src/libcore/vec.rs
+43
-43
src/libsyntax/parse/lexer.rs
src/libsyntax/parse/lexer.rs
+2
-2
未找到文件。
src/etc/unicode.py
浏览文件 @
5a3d26f2
...
...
@@ -112,7 +112,49 @@ def escape_char(c):
return
"'
\\
u%4.4x'"
%
c
return
"'
\\
U%8.8x'"
%
c
def
ch_prefix
(
ix
):
if
ix
==
0
:
return
" "
if
ix
%
2
==
0
:
return
",
\n
"
else
:
return
", "
def
emit_bsearch_range_table
(
f
):
f
.
write
(
"""
pure fn bsearch_range_table(c: char, r: &[(char,char)]) -> bool {
use cmp::{EQ, LT, GT};
use vec::bsearch;
use option::None;
(do bsearch(r) |&(lo,hi)| {
if lo <= c && c <= hi { EQ }
else if hi < c { LT }
else { GT }
}) != None
}
\n\n
"""
);
def
emit_property_module
(
f
,
mod
,
tbl
):
f
.
write
(
"pub mod %s {
\n
"
%
mod
)
keys
=
tbl
.
keys
()
keys
.
sort
()
emit_bsearch_range_table
(
f
);
for
cat
in
keys
:
f
.
write
(
" const %s_table : &[(char,char)] = &[
\n
"
%
cat
)
ix
=
0
for
pair
in
tbl
[
cat
]:
f
.
write
(
ch_prefix
(
ix
))
f
.
write
(
"(%s, %s)"
%
(
escape_char
(
pair
[
0
]),
escape_char
(
pair
[
1
])))
ix
+=
1
f
.
write
(
"
\n
];
\n\n
"
)
f
.
write
(
" pub pure fn %s(c: char) -> bool {
\n
"
%
cat
)
f
.
write
(
" bsearch_range_table(c, %s_table)
\n
"
%
cat
)
f
.
write
(
" }
\n\n
"
)
f
.
write
(
"}
\n
"
)
def
emit_property_module_old
(
f
,
mod
,
tbl
):
f
.
write
(
"mod %s {
\n
"
%
mod
)
keys
=
tbl
.
keys
()
keys
.
sort
()
...
...
@@ -193,8 +235,9 @@ for i in [r]:
rf
=
open
(
r
,
"w"
)
(
canon_decomp
,
compat_decomp
,
gencats
)
=
load_unicode_data
(
"UnicodeData.txt"
)
emit_decomp_module
(
rf
,
canon_decomp
,
compat_decomp
)
emit_property_module
(
rf
,
"general_category"
,
gencats
)
#emit_decomp_module(rf, canon_decomp, compat_decomp)
derived
=
load_derived_core_properties
(
"DerivedCoreProperties.txt"
)
emit_property_module
(
rf
,
"derived_property"
,
derived
)
src/libcore/unicode.rs
浏览文件 @
5a3d26f2
此差异已折叠。
点击以展开。
src/libcore/vec.rs
浏览文件 @
5a3d26f2
...
...
@@ -1235,7 +1235,7 @@ pub fn rposition_between<T>(v: &[T], start: uint, end: uint,
* Returns the index where the comparator returned `Equal`, or `None` if
* not found.
*/
pub
pure
fn
bsearch
<
T
>
(
v
:
&
[
T
],
f
:
&
fn
(
&
T
)
->
Ordering
)
->
Option
<
uint
>
{
pub
fn
bsearch
<
T
>
(
v
:
&
[
T
],
f
:
&
fn
(
&
T
)
->
Ordering
)
->
Option
<
uint
>
{
let
mut
base
:
uint
=
0
;
let
mut
lim
:
uint
=
v
.len
();
...
...
@@ -1259,7 +1259,7 @@ pub fn rposition_between<T>(v: &[T], start: uint, end: uint,
*
* Returns the index of the element or None if not found.
*/
pub
pure
fn
bsearch_elem
<
T
:
TotalOrd
>
(
v
:
&
[
T
],
x
:
&
T
)
->
Option
<
uint
>
{
pub
fn
bsearch_elem
<
T
:
TotalOrd
>
(
v
:
&
[
T
],
x
:
&
T
)
->
Option
<
uint
>
{
bsearch
(
v
,
|
p
|
p
.cmp
(
x
))
}
...
...
@@ -3752,47 +3752,47 @@ fn test_rfind_between() {
#[test]
fn
test_bsearch_elem
()
{
fail_unless
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
5
)
==
Some
(
4
));
fail_unless
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
4
)
==
Some
(
3
));
fail_unless
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
3
)
==
Some
(
2
));
fail_unless
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
2
)
==
Some
(
1
));
fail_unless
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
1
)
==
Some
(
0
));
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
,
8
,
10
],
&
1
)
==
None
);
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
,
8
,
10
],
&
5
)
==
None
);
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
,
8
,
10
],
&
4
)
==
Some
(
1
));
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
,
8
,
10
],
&
10
)
==
Some
(
4
));
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
,
8
],
&
1
)
==
None
);
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
,
8
],
&
5
)
==
None
);
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
,
8
],
&
4
)
==
Some
(
1
));
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
,
8
],
&
8
)
==
Some
(
3
));
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
],
&
1
)
==
None
);
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
],
&
5
)
==
None
);
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
],
&
4
)
==
Some
(
1
));
fail_unless
!
(
bsearch_elem
([
2
,
4
,
6
],
&
6
)
==
Some
(
2
));
fail_unless
!
(
bsearch_elem
([
2
,
4
],
&
1
)
==
None
);
fail_unless
!
(
bsearch_elem
([
2
,
4
],
&
5
)
==
None
);
fail_unless
!
(
bsearch_elem
([
2
,
4
],
&
2
)
==
Some
(
0
));
fail_unless
!
(
bsearch_elem
([
2
,
4
],
&
4
)
==
Some
(
1
));
fail_unless
!
(
bsearch_elem
([
2
],
&
1
)
==
None
);
fail_unless
!
(
bsearch_elem
([
2
],
&
5
)
==
None
);
fail_unless
!
(
bsearch_elem
([
2
],
&
2
)
==
Some
(
0
));
fail_unless
!
(
bsearch_elem
([],
&
1
)
==
None
);
fail_unless
!
(
bsearch_elem
([],
&
5
)
==
None
);
fail_unless
!
(
bsearch_elem
([
1
,
1
,
1
,
1
,
1
],
&
1
)
!=
None
);
fail_unless
!
(
bsearch_elem
([
1
,
1
,
1
,
1
,
2
],
&
1
)
!=
None
);
fail_unless
!
(
bsearch_elem
([
1
,
1
,
1
,
2
,
2
],
&
1
)
!=
None
);
fail_unless
!
(
bsearch_elem
([
1
,
1
,
2
,
2
,
2
],
&
1
)
!=
None
);
fail_unless
!
(
bsearch_elem
([
1
,
2
,
2
,
2
,
2
],
&
1
)
==
Some
(
0
));
fail_unless
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
6
)
==
None
);
fail_unless
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
0
)
==
None
);
assert
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
5
)
==
Some
(
4
));
assert
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
4
)
==
Some
(
3
));
assert
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
3
)
==
Some
(
2
));
assert
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
2
)
==
Some
(
1
));
assert
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
1
)
==
Some
(
0
));
assert
!
(
bsearch_elem
([
2
,
4
,
6
,
8
,
10
],
&
1
)
==
None
);
assert
!
(
bsearch_elem
([
2
,
4
,
6
,
8
,
10
],
&
5
)
==
None
);
assert
!
(
bsearch_elem
([
2
,
4
,
6
,
8
,
10
],
&
4
)
==
Some
(
1
));
assert
!
(
bsearch_elem
([
2
,
4
,
6
,
8
,
10
],
&
10
)
==
Some
(
4
));
assert
!
(
bsearch_elem
([
2
,
4
,
6
,
8
],
&
1
)
==
None
);
assert
!
(
bsearch_elem
([
2
,
4
,
6
,
8
],
&
5
)
==
None
);
assert
!
(
bsearch_elem
([
2
,
4
,
6
,
8
],
&
4
)
==
Some
(
1
));
assert
!
(
bsearch_elem
([
2
,
4
,
6
,
8
],
&
8
)
==
Some
(
3
));
assert
!
(
bsearch_elem
([
2
,
4
,
6
],
&
1
)
==
None
);
assert
!
(
bsearch_elem
([
2
,
4
,
6
],
&
5
)
==
None
);
assert
!
(
bsearch_elem
([
2
,
4
,
6
],
&
4
)
==
Some
(
1
));
assert
!
(
bsearch_elem
([
2
,
4
,
6
],
&
6
)
==
Some
(
2
));
assert
!
(
bsearch_elem
([
2
,
4
],
&
1
)
==
None
);
assert
!
(
bsearch_elem
([
2
,
4
],
&
5
)
==
None
);
assert
!
(
bsearch_elem
([
2
,
4
],
&
2
)
==
Some
(
0
));
assert
!
(
bsearch_elem
([
2
,
4
],
&
4
)
==
Some
(
1
));
assert
!
(
bsearch_elem
([
2
],
&
1
)
==
None
);
assert
!
(
bsearch_elem
([
2
],
&
5
)
==
None
);
assert
!
(
bsearch_elem
([
2
],
&
2
)
==
Some
(
0
));
assert
!
(
bsearch_elem
([],
&
1
)
==
None
);
assert
!
(
bsearch_elem
([],
&
5
)
==
None
);
assert
!
(
bsearch_elem
([
1
,
1
,
1
,
1
,
1
],
&
1
)
!=
None
);
assert
!
(
bsearch_elem
([
1
,
1
,
1
,
1
,
2
],
&
1
)
!=
None
);
assert
!
(
bsearch_elem
([
1
,
1
,
1
,
2
,
2
],
&
1
)
!=
None
);
assert
!
(
bsearch_elem
([
1
,
1
,
2
,
2
,
2
],
&
1
)
!=
None
);
assert
!
(
bsearch_elem
([
1
,
2
,
2
,
2
,
2
],
&
1
)
==
Some
(
0
));
assert
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
6
)
==
None
);
assert
!
(
bsearch_elem
([
1
,
2
,
3
,
4
,
5
],
&
0
)
==
None
);
}
#[test]
...
...
src/libsyntax/parse/lexer.rs
浏览文件 @
5a3d26f2
...
...
@@ -535,7 +535,7 @@ fn ident_start(c: char) -> bool {
(
c
>=
'a'
&&
c
<=
'z'
)
||
(
c
>=
'A'
&&
c
<=
'Z'
)
||
c
==
'_'
||
(
c
>
'
z
'
&&
char
::
is_XID_start
(
c
))
||
(
c
>
'
\x7f
'
&&
char
::
is_XID_start
(
c
))
}
fn
ident_continue
(
c
:
char
)
->
bool
{
...
...
@@ -543,7 +543,7 @@ fn ident_continue(c: char) -> bool {
||
(
c
>=
'A'
&&
c
<=
'Z'
)
||
(
c
>=
'0'
&&
c
<=
'9'
)
||
c
==
'_'
||
(
c
>
'
z
'
&&
char
::
is_XID_continue
(
c
))
||
(
c
>
'
\x7f
'
&&
char
::
is_XID_continue
(
c
))
}
// return the next token from the string
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录