Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
aad1f3cb
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,发现更多精彩内容 >>
提交
aad1f3cb
编写于
8月 18, 2016
作者:
J
Jeffrey Seyfried
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
item_like_imports: Allow glob imports to be shadowed by items and single imports.
上级
efc0bea6
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
55 addition
and
7 deletion
+55
-7
src/librustc_resolve/resolve_imports.rs
src/librustc_resolve/resolve_imports.rs
+13
-7
src/test/run-pass/imports.rs
src/test/run-pass/imports.rs
+42
-0
未找到文件。
src/librustc_resolve/resolve_imports.rs
浏览文件 @
aad1f3cb
...
...
@@ -690,15 +690,21 @@ fn finalize_resolutions_in(&mut self, module: Module<'b>) {
};
// Report conflicts
for
duplicate_glob
in
resolution
.duplicate_globs
.iter
()
{
// FIXME #31337: We currently allow items to shadow glob-imported re-exports.
if
!
binding
.is_import
()
{
if
let
NameBindingKind
::
Import
{
binding
,
..
}
=
duplicate_glob
.kind
{
if
binding
.is_import
()
{
continue
}
if
!
self
.new_import_semantics
{
for
duplicate_glob
in
resolution
.duplicate_globs
.iter
()
{
// FIXME #31337: We currently allow items to shadow glob-imported re-exports.
if
!
binding
.is_import
()
{
if
let
NameBindingKind
::
Import
{
binding
,
..
}
=
duplicate_glob
.kind
{
if
binding
.is_import
()
{
continue
}
}
}
}
self
.report_conflict
(
module
,
name
,
ns
,
duplicate_glob
,
binding
);
self
.report_conflict
(
module
,
name
,
ns
,
duplicate_glob
,
binding
);
}
}
else
if
binding
.is_glob_import
()
{
for
duplicate_glob
in
resolution
.duplicate_globs
.iter
()
{
self
.report_conflict
(
module
,
name
,
ns
,
duplicate_glob
,
binding
);
}
}
if
binding
.vis
==
ty
::
Visibility
::
Public
&&
...
...
src/test/run-pass/imports.rs
浏览文件 @
aad1f3cb
...
...
@@ -21,4 +21,46 @@ mod b {
}
}
mod
foo
{
pub
fn
f
()
{}
}
mod
bar
{
pub
fn
f
()
{}
}
pub
fn
f
()
->
bool
{
true
}
// Items and explicit imports shadow globs.
fn
g
()
{
use
foo
::
*
;
use
bar
::
*
;
fn
f
()
->
bool
{
true
}
let
_
:
bool
=
f
();
}
fn
h
()
{
use
foo
::
*
;
use
bar
::
*
;
use
f
;
let
_
:
bool
=
f
();
}
// Here, there appears to be shadowing but isn't because of namespaces.
mod
b
{
use
foo
::
*
;
// This imports `f` in the value namespace.
use
super
::
b
as
f
;
// This imports `f` only in the type namespace,
fn
test
()
{
self
::
f
();
}
// so the glob isn't shadowed.
}
// Here, there is shadowing in one namespace, but not the other.
mod
c
{
mod
test
{
pub
fn
f
()
{}
pub
mod
f
{}
}
use
self
::
test
::
*
;
// This glob-imports `f` in both namespaces.
mod
f
{
pub
fn
f
()
{}
}
// This shadows the glob only in the value namespace.
fn
test
()
{
self
::
f
();
// Check that the glob-imported value isn't shadowed.
self
::
f
::
f
();
// Check that the glob-imported module is shadowed.
}
}
fn
main
()
{}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录