Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
609552e1
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,发现更多精彩内容 >>
提交
609552e1
编写于
6月 13, 2014
作者:
K
Keegan McAllister
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Run lint passes using the Option dance instead of RefCells
上级
c1898b9a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
14 addition
and
8 deletion
+14
-8
src/librustc/lint/context.rs
src/librustc/lint/context.rs
+14
-8
未找到文件。
src/librustc/lint/context.rs
浏览文件 @
609552e1
...
...
@@ -56,7 +56,9 @@ pub struct LintStore {
lints
:
Vec
<
(
&
'static
Lint
,
bool
)
>
,
/// Trait objects for each lint pass.
passes
:
Vec
<
RefCell
<
LintPassObject
>>
,
/// This is only `None` while iterating over the objects. See the definition
/// of run_lints.
passes
:
Option
<
Vec
<
LintPassObject
>>
,
/// Lints indexed by name.
by_name
:
HashMap
<&
'static
str
,
LintId
>
,
...
...
@@ -84,7 +86,7 @@ fn set_level(&mut self, lint: LintId, lvlsrc: LevelSource) {
pub
fn
new
()
->
LintStore
{
LintStore
{
lints
:
vec!
(),
passes
:
vec!
(
),
passes
:
Some
(
vec!
()
),
by_name
:
HashMap
::
new
(),
levels
:
HashMap
::
new
(),
}
...
...
@@ -117,7 +119,7 @@ pub fn register_pass(&mut self, sess: Option<&Session>,
self
.levels
.insert
(
id
,
(
lint
.default_level
,
Default
));
}
}
self
.passes
.
push
(
RefCell
::
new
(
pass
)
);
self
.passes
.
get_mut_ref
()
.push
(
pass
);
}
pub
fn
register_builtin
(
&
mut
self
,
sess
:
Option
<&
Session
>
)
{
...
...
@@ -181,11 +183,15 @@ pub struct Context<'a> {
}
/// Convenience macro for calling a `LintPass` method on every pass in the context.
macro_rules!
run_lints
(
(
$cx:expr
,
$f:ident
,
$
(
$args:expr
),
*
)
=>
(
for
obj
in
$cx
.lints.passes
.iter
()
{
obj
.borrow_mut
()
.
$f
(
$cx
,
$
(
$args
),
*
);
}
))
macro_rules!
run_lints
(
(
$cx:expr
,
$f:ident
,
$
(
$args:expr
),
*
)
=>
({
// Move the vector of passes out of `$cx` so that we can
// iterate over it mutably while passing `$cx` to the methods.
let
mut
passes
=
$cx
.lints.passes
.take_unwrap
();
for
obj
in
passes
.mut_iter
()
{
obj
.
$f
(
$cx
,
$
(
$args
),
*
);
}
$cx
.lints.passes
=
Some
(
passes
);
}))
/// Emit a lint as a warning or an error (or not at all)
/// according to `level`.
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录