Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
d9bb78ef
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,发现更多精彩内容 >>
提交
d9bb78ef
编写于
8月 20, 2013
作者:
P
Patrick Walton
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
librustc: Stop calling `each_path` in coherence.
10% win or so for small crates.
上级
4f32a2d8
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
77 addition
and
18 deletion
+77
-18
src/librustc/metadata/common.rs
src/librustc/metadata/common.rs
+3
-0
src/librustc/metadata/csearch.rs
src/librustc/metadata/csearch.rs
+8
-0
src/librustc/metadata/decoder.rs
src/librustc/metadata/decoder.rs
+10
-0
src/librustc/metadata/encoder.rs
src/librustc/metadata/encoder.rs
+48
-1
src/librustc/middle/typeck/coherence.rs
src/librustc/middle/typeck/coherence.rs
+5
-14
src/libstd/rt/borrowck.rs
src/libstd/rt/borrowck.rs
+2
-2
src/libstd/rt/sched.rs
src/libstd/rt/sched.rs
+1
-1
未找到文件。
src/librustc/metadata/common.rs
浏览文件 @
d9bb78ef
...
...
@@ -182,6 +182,9 @@ pub fn from_uint(value : uint) -> Option<astencode_tag> {
pub
static
tag_item_method_provided_source
:
uint
=
0x81
;
pub
static
tag_item_impl_vtables
:
uint
=
0x82
;
pub
static
tag_impls
:
uint
=
0x83
;
pub
static
tag_impls_impl
:
uint
=
0x84
;
pub
struct
LinkMeta
{
name
:
@
str
,
vers
:
@
str
,
...
...
src/librustc/metadata/csearch.rs
浏览文件 @
d9bb78ef
...
...
@@ -246,3 +246,11 @@ pub fn get_link_args_for_crate(cstore: @mut cstore::CStore,
let
cdata
=
cstore
::
get_crate_data
(
cstore
,
crate_num
);
decoder
::
get_link_args_for_crate
(
cdata
)
}
pub
fn
each_impl
(
cstore
:
@
mut
cstore
::
CStore
,
crate_num
:
ast
::
CrateNum
,
callback
:
&
fn
(
ast
::
def_id
))
{
let
cdata
=
cstore
::
get_crate_data
(
cstore
,
crate_num
);
decoder
::
each_impl
(
cdata
,
callback
)
}
src/librustc/metadata/decoder.rs
浏览文件 @
d9bb78ef
...
...
@@ -1316,3 +1316,13 @@ pub fn get_link_args_for_crate(cdata: cmd) -> ~[~str] {
};
result
}
pub
fn
each_impl
(
cdata
:
cmd
,
callback
:
&
fn
(
ast
::
def_id
))
{
let
impls_doc
=
reader
::
get_doc
(
reader
::
Doc
(
cdata
.data
),
tag_impls
);
let
_
=
do
reader
::
tagged_docs
(
impls_doc
,
tag_impls_impl
)
|
impl_doc
|
{
callback
(
item_def_id
(
impl_doc
,
cdata
));
true
};
}
src/librustc/metadata/encoder.rs
浏览文件 @
d9bb78ef
...
...
@@ -39,6 +39,7 @@
use
syntax
::
diagnostic
::
span_handler
;
use
syntax
::
parse
::
token
::
special_idents
;
use
syntax
::
ast_util
;
use
syntax
::
visit
::
Visitor
;
use
syntax
::
visit
;
use
syntax
::
parse
::
token
;
use
syntax
;
...
...
@@ -72,6 +73,7 @@ struct Stats {
dep_bytes
:
uint
,
lang_item_bytes
:
uint
,
link_args_bytes
:
uint
,
impl_bytes
:
uint
,
misc_bytes
:
uint
,
item_bytes
:
uint
,
index_bytes
:
uint
,
...
...
@@ -1221,7 +1223,10 @@ struct EncodeVisitor {
}
impl
visit
::
Visitor
<
()
>
for
EncodeVisitor
{
fn
visit_expr
(
&
mut
self
,
ex
:
@
expr
,
_
:())
{
my_visit_expr
(
ex
);
}
fn
visit_expr
(
&
mut
self
,
ex
:
@
expr
,
_
:())
{
visit
::
walk_expr
(
self
,
ex
,
());
my_visit_expr
(
ex
);
}
fn
visit_item
(
&
mut
self
,
i
:
@
item
,
_
:())
{
visit
::
walk_item
(
self
,
i
,
());
my_visit_item
(
i
,
...
...
@@ -1510,6 +1515,41 @@ fn encode_link_args(ecx: &EncodeContext, ebml_w: &mut writer::Encoder) {
ebml_w
.end_tag
();
}
struct
ImplVisitor
<
'self
>
{
ecx
:
&
'self
EncodeContext
<
'self
>
,
ebml_w
:
&
'self
mut
writer
::
Encoder
,
}
impl
<
'self
>
Visitor
<
()
>
for
ImplVisitor
<
'self
>
{
fn
visit_item
(
&
mut
self
,
item
:
@
item
,
_
:
())
{
match
item
.node
{
item_impl
(
*
)
=>
{
self
.ebml_w
.start_tag
(
tag_impls_impl
);
encode_def_id
(
self
.ebml_w
,
local_def
(
item
.id
));
self
.ebml_w
.end_tag
();
}
_
=>
{}
}
visit
::
walk_item
(
self
,
item
,
());
}
}
fn
encode_impls
(
ecx
:
&
EncodeContext
,
crate
:
&
Crate
,
ebml_w
:
&
mut
writer
::
Encoder
)
{
ebml_w
.start_tag
(
tag_impls
);
{
let
mut
visitor
=
ImplVisitor
{
ecx
:
ecx
,
ebml_w
:
ebml_w
,
};
visit
::
walk_crate
(
&
mut
visitor
,
crate
,
());
}
ebml_w
.end_tag
();
}
fn
encode_misc_info
(
ecx
:
&
EncodeContext
,
crate
:
&
Crate
,
ebml_w
:
&
mut
writer
::
Encoder
)
{
...
...
@@ -1574,6 +1614,7 @@ pub fn encode_metadata(parms: EncodeParams, crate: &Crate) -> ~[u8] {
dep_bytes
:
0
,
lang_item_bytes
:
0
,
link_args_bytes
:
0
,
impl_bytes
:
0
,
misc_bytes
:
0
,
item_bytes
:
0
,
index_bytes
:
0
,
...
...
@@ -1632,6 +1673,11 @@ pub fn encode_metadata(parms: EncodeParams, crate: &Crate) -> ~[u8] {
encode_link_args
(
&
ecx
,
&
mut
ebml_w
);
ecx
.stats.link_args_bytes
=
*
wr
.pos
-
i
;
// Encode the def IDs of impls, for coherence checking.
i
=
*
wr
.pos
;
encode_impls
(
&
ecx
,
crate
,
&
mut
ebml_w
);
ecx
.stats.impl_bytes
=
*
wr
.pos
-
i
;
// Encode miscellaneous info.
i
=
*
wr
.pos
;
encode_misc_info
(
&
ecx
,
crate
,
&
mut
ebml_w
);
...
...
@@ -1664,6 +1710,7 @@ pub fn encode_metadata(parms: EncodeParams, crate: &Crate) -> ~[u8] {
printfln!
(
" dep bytes: %u"
,
ecx
.stats.dep_bytes
);
printfln!
(
" lang item bytes: %u"
,
ecx
.stats.lang_item_bytes
);
printfln!
(
" link args bytes: %u"
,
ecx
.stats.link_args_bytes
);
printfln!
(
" impl bytes: %u"
,
ecx
.stats.impl_bytes
);
printfln!
(
" misc bytes: %u"
,
ecx
.stats.misc_bytes
);
printfln!
(
" item bytes: %u"
,
ecx
.stats.item_bytes
);
printfln!
(
" index bytes: %u"
,
ecx
.stats.index_bytes
);
...
...
src/librustc/middle/typeck/coherence.rs
浏览文件 @
d9bb78ef
...
...
@@ -15,10 +15,9 @@
// each trait in the system to its implementations.
use
metadata
::
csearch
::{
each_
path
,
get_impl_trait
};
use
metadata
::
csearch
::{
each_
impl
,
get_impl_trait
};
use
metadata
::
csearch
;
use
metadata
::
cstore
::
iter_crate_data
;
use
metadata
::
decoder
::{
dl_def
,
dl_field
,
dl_impl
};
use
middle
::
ty
::
get
;
use
middle
::
ty
::{
lookup_item_type
,
subst
};
use
middle
::
ty
::{
substs
,
t
,
ty_bool
,
ty_bot
,
ty_box
,
ty_enum
,
ty_err
};
...
...
@@ -680,9 +679,6 @@ pub fn add_external_impl(&self,
let
tcx
=
self
.crate_context.tcx
;
let
implementation
=
@
csearch
::
get_impl
(
tcx
,
impl_def_id
);
debug!
(
"coherence: adding impl from external crate: %s"
,
ty
::
item_path_str
(
tcx
,
implementation
.did
));
// Make sure we don't visit the same implementation multiple times.
if
!
impls_seen
.insert
(
implementation
.did
)
{
// Skip this one.
...
...
@@ -752,15 +748,10 @@ pub fn add_external_crates(&self) {
let
crate_store
=
self
.crate_context.tcx.sess.cstore
;
do
iter_crate_data
(
crate_store
)
|
crate_number
,
_
crate_metadata
|
{
do
each_path
(
crate_store
,
crate_number
)
|
_
,
def_like
,
_
|
{
match
def_like
{
dl_impl
(
def_id
)
=>
{
self
.add_external_impl
(
&
mut
impls_seen
,
def_id
)
}
dl_def
(
_
)
|
dl_field
=>
(),
// Skip this.
}
true
};
do
each_impl
(
crate_store
,
crate_number
)
|
def_id
|
{
assert_eq!
(
crate_number
,
def_id
.crate
);
self
.add_external_impl
(
&
mut
impls_seen
,
def_id
)
}
}
}
...
...
src/libstd/rt/borrowck.rs
浏览文件 @
d9bb78ef
...
...
@@ -38,7 +38,7 @@ pub struct BorrowRecord {
}
fn
try_take_task_borrow_list
()
->
Option
<~
[
BorrowRecord
]
>
{
do
Local
::
borrow
::
<
Task
,
Option
<~
[
BorrowRecord
]
>>
|
t
ask
|
{
do
Local
::
borrow
|
task
:
&
mut
T
ask
|
{
task
.borrow_list
.take
()
}
}
...
...
@@ -50,7 +50,7 @@ fn swap_task_borrow_list(f: &fn(~[BorrowRecord]) -> ~[BorrowRecord]) {
};
let
borrows
=
f
(
borrows
);
let
borrows
=
Cell
::
new
(
borrows
);
do
Local
::
borrow
::
<
Task
,
()
>
|
t
ask
|
{
do
Local
::
borrow
|
task
:
&
mut
T
ask
|
{
task
.borrow_list
=
Some
(
borrows
.take
());
}
}
...
...
src/libstd/rt/sched.rs
浏览文件 @
d9bb78ef
...
...
@@ -555,7 +555,7 @@ pub fn change_task_context(~self,
let
current_task
:
&
mut
Task
=
match
sched
.cleanup_job
{
Some
(
CleanupJob
{
task
:
ref
task
,
_
})
=>
{
let
task_ptr
:
*~
Task
=
task
;
transmute_mut_region
(
*
transmute_mut_unsafe
(
task
))
transmute_mut_region
(
*
transmute_mut_unsafe
(
task
_ptr
))
}
None
=>
{
rtabort!
(
"no cleanup job"
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录