Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
245a0c55
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,发现更多精彩内容 >>
提交
245a0c55
编写于
8月 20, 2016
作者:
J
Jeffrey Seyfried
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
item_like_imports: Make all visible items glob importable.
上级
097b6d62
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
18 addition
and
3 deletion
+18
-3
src/librustc_resolve/lib.rs
src/librustc_resolve/lib.rs
+4
-0
src/librustc_resolve/resolve_imports.rs
src/librustc_resolve/resolve_imports.rs
+7
-3
src/test/compile-fail/imports/reexports.rs
src/test/compile-fail/imports/reexports.rs
+7
-0
未找到文件。
src/librustc_resolve/lib.rs
浏览文件 @
245a0c55
...
...
@@ -3255,6 +3255,10 @@ fn is_accessible(&self, vis: ty::Visibility) -> bool {
vis
.is_accessible_from
(
self
.current_module.normal_ancestor_id
,
self
)
}
fn
is_accessible_from
(
&
self
,
vis
:
ty
::
Visibility
,
module
:
Module
<
'a
>
)
->
bool
{
vis
.is_accessible_from
(
module
.normal_ancestor_id
,
self
)
}
fn
report_privacy_errors
(
&
self
)
{
if
self
.privacy_errors
.len
()
==
0
{
return
}
let
mut
reported_spans
=
FnvHashSet
();
...
...
src/librustc_resolve/resolve_imports.rs
浏览文件 @
245a0c55
...
...
@@ -356,8 +356,11 @@ fn update_resolution<T, F>(&mut self, module: Module<'a>, name: Name, ns: Namesp
};
// Define `binding` in `module`s glob importers.
if
binding
.vis
==
ty
::
Visibility
::
Public
{
for
directive
in
module
.glob_importers
.borrow_mut
()
.iter
()
{
for
directive
in
module
.glob_importers
.borrow_mut
()
.iter
()
{
if
match
self
.new_import_semantics
{
true
=>
self
.is_accessible_from
(
binding
.vis
,
directive
.parent
),
false
=>
binding
.vis
==
ty
::
Visibility
::
Public
,
}
{
let
imported_binding
=
self
.import
(
binding
,
directive
);
let
_
=
self
.try_define
(
directive
.parent
,
name
,
ns
,
imported_binding
);
}
...
...
@@ -708,7 +711,8 @@ fn resolve_glob_import(&mut self, directive: &'b ImportDirective<'b>) {
resolution
.borrow
()
.binding
()
.map
(|
binding
|
(
*
name
,
binding
))
})
.collect
::
<
Vec
<
_
>>
();
for
((
name
,
ns
),
binding
)
in
bindings
{
if
binding
.pseudo_vis
()
==
ty
::
Visibility
::
Public
{
if
binding
.pseudo_vis
()
==
ty
::
Visibility
::
Public
||
self
.new_import_semantics
&&
self
.is_accessible
(
binding
.vis
)
{
let
imported_binding
=
self
.import
(
binding
,
directive
);
let
_
=
self
.try_define
(
directive
.parent
,
name
,
ns
,
imported_binding
);
}
...
...
src/test/compile-fail/imports/reexports.rs
浏览文件 @
245a0c55
...
...
@@ -16,6 +16,7 @@ mod foo {}
mod
a
{
pub
use
super
::
foo
;
//~ ERROR cannot be reexported
pub
use
super
::
*
;
//~ ERROR must import something with the glob's visibility
}
}
...
...
@@ -27,11 +28,17 @@ pub mod a {
pub
use
super
::
foo
;
// This is OK since the value `foo` is visible enough.
fn
f
(
_
:
foo
::
S
)
{}
// `foo` is imported in the type namespace (but not `pub` reexported).
}
pub
mod
b
{
pub
use
super
::
*
;
// This is also OK since the value `foo` is visible enough.
fn
f
(
_
:
foo
::
S
)
{}
// Again, the module `foo` is imported (but not `pub` reexported).
}
}
mod
c
{
// Test that `foo` is not reexported.
use
b
::
a
::
foo
::
S
;
//~ ERROR `foo`
use
b
::
b
::
foo
::
S
as
T
;
//~ ERROR `foo`
}
fn
main
()
{}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录