Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
05cfb3f5
R
Rust
项目概览
int
/
Rust
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
05cfb3f5
编写于
8月 22, 2018
作者:
V
varkor
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Rename Def::{Param, Foreign} to Def::{TyParam, TyForeign}
上级
08f3685a
变更
17
隐藏空白更改
内联
并排
Showing
17 changed file
with
38 addition
and
38 deletion
+38
-38
src/librustc/hir/def.rs
src/librustc/hir/def.rs
+6
-6
src/librustc/hir/lowering.rs
src/librustc/hir/lowering.rs
+2
-2
src/librustc/hir/map/mod.rs
src/librustc/hir/map/mod.rs
+2
-2
src/librustc/ich/impls_hir.rs
src/librustc/ich/impls_hir.rs
+2
-2
src/librustc/middle/resolve_lifetime.rs
src/librustc/middle/resolve_lifetime.rs
+1
-1
src/librustc_lint/builtin.rs
src/librustc_lint/builtin.rs
+1
-1
src/librustc_metadata/decoder.rs
src/librustc_metadata/decoder.rs
+1
-1
src/librustc_resolve/build_reduced_graph.rs
src/librustc_resolve/build_reduced_graph.rs
+2
-2
src/librustc_resolve/lib.rs
src/librustc_resolve/lib.rs
+6
-6
src/librustc_save_analysis/lib.rs
src/librustc_save_analysis/lib.rs
+2
-2
src/librustc_typeck/astconv.rs
src/librustc_typeck/astconv.rs
+3
-3
src/librustc_typeck/check/compare_method.rs
src/librustc_typeck/check/compare_method.rs
+1
-1
src/librustc_typeck/collect.rs
src/librustc_typeck/collect.rs
+1
-1
src/librustdoc/clean/inline.rs
src/librustdoc/clean/inline.rs
+1
-1
src/librustdoc/clean/mod.rs
src/librustdoc/clean/mod.rs
+5
-5
src/librustdoc/core.rs
src/librustdoc/core.rs
+1
-1
src/librustdoc/visit_ast.rs
src/librustdoc/visit_ast.rs
+1
-1
未找到文件。
src/librustc/hir/def.rs
浏览文件 @
05cfb3f5
...
...
@@ -53,13 +53,13 @@ pub enum Def {
Existential
(
DefId
),
/// `type Foo = Bar;`
TyAlias
(
DefId
),
Foreign
(
DefId
),
Ty
Foreign
(
DefId
),
TraitAlias
(
DefId
),
AssociatedTy
(
DefId
),
/// `existential type Foo: Bar;`
AssociatedExistential
(
DefId
),
PrimTy
(
hir
::
PrimTy
),
Param
(
DefId
),
Ty
Param
(
DefId
),
SelfTy
(
Option
<
DefId
>
/* trait */
,
Option
<
DefId
>
/* impl */
),
ToolMod
,
// e.g. `rustfmt` in `#[rustfmt::skip]`
...
...
@@ -269,10 +269,10 @@ pub fn def_id(&self) -> DefId {
Def
::
Fn
(
id
)
|
Def
::
Mod
(
id
)
|
Def
::
Static
(
id
,
_
)
|
Def
::
Variant
(
id
)
|
Def
::
VariantCtor
(
id
,
..
)
|
Def
::
Enum
(
id
)
|
Def
::
TyAlias
(
id
)
|
Def
::
TraitAlias
(
id
)
|
Def
::
AssociatedTy
(
id
)
|
Def
::
Param
(
id
)
|
Def
::
Struct
(
id
)
|
Def
::
StructCtor
(
id
,
..
)
|
Def
::
AssociatedTy
(
id
)
|
Def
::
Ty
Param
(
id
)
|
Def
::
Struct
(
id
)
|
Def
::
StructCtor
(
id
,
..
)
|
Def
::
Union
(
id
)
|
Def
::
Trait
(
id
)
|
Def
::
Method
(
id
)
|
Def
::
Const
(
id
)
|
Def
::
AssociatedConst
(
id
)
|
Def
::
Macro
(
id
,
..
)
|
Def
::
Existential
(
id
)
|
Def
::
AssociatedExistential
(
id
)
|
Def
::
Foreign
(
id
)
=>
{
Def
::
Existential
(
id
)
|
Def
::
AssociatedExistential
(
id
)
|
Def
::
Ty
Foreign
(
id
)
=>
{
id
}
...
...
@@ -311,11 +311,11 @@ pub fn kind_name(&self) -> &'static str {
Def
::
StructCtor
(
..
,
CtorKind
::
Fictive
)
=>
bug!
(
"impossible struct constructor"
),
Def
::
Union
(
..
)
=>
"union"
,
Def
::
Trait
(
..
)
=>
"trait"
,
Def
::
Foreign
(
..
)
=>
"foreign type"
,
Def
::
Ty
Foreign
(
..
)
=>
"foreign type"
,
Def
::
Method
(
..
)
=>
"method"
,
Def
::
Const
(
..
)
=>
"constant"
,
Def
::
AssociatedConst
(
..
)
=>
"associated constant"
,
Def
::
Param
(
..
)
=>
"type parameter"
,
Def
::
Ty
Param
(
..
)
=>
"type parameter"
,
Def
::
PrimTy
(
..
)
=>
"builtin type"
,
Def
::
Local
(
..
)
=>
"local variable"
,
Def
::
Upvar
(
..
)
=>
"closure capture"
,
...
...
src/librustc/hir/lowering.rs
浏览文件 @
05cfb3f5
...
...
@@ -1213,7 +1213,7 @@ fn lower_ty_direct(&mut self, t: &Ty, mut itctx: ImplTraitContext) -> hir::Ty {
None
,
P
(
hir
::
Path
{
span
,
def
:
Def
::
Param
(
DefId
::
local
(
def_index
)),
def
:
Def
::
Ty
Param
(
DefId
::
local
(
def_index
)),
segments
:
hir_vec!
[
hir
::
PathSegment
::
from_ident
(
ident
)],
}),
))
...
...
@@ -2352,7 +2352,7 @@ fn lower_generics(
if
path
.segments
.len
()
==
1
&&
bound_pred
.bound_generic_params
.is_empty
()
=>
{
if
let
Some
(
Def
::
Param
(
def_id
))
=
self
.resolver
if
let
Some
(
Def
::
Ty
Param
(
def_id
))
=
self
.resolver
.get_resolution
(
bound_pred
.bounded_ty.id
)
.map
(|
d
|
d
.base_def
())
{
...
...
src/librustc/hir/map/mod.rs
浏览文件 @
05cfb3f5
...
...
@@ -453,7 +453,7 @@ pub fn describe_def(&self, node_id: NodeId) -> Option<Def> {
match
item
.node
{
ForeignItemKind
::
Fn
(
..
)
=>
Some
(
Def
::
Fn
(
def_id
)),
ForeignItemKind
::
Static
(
_
,
m
)
=>
Some
(
Def
::
Static
(
def_id
,
m
)),
ForeignItemKind
::
Type
=>
Some
(
Def
::
Foreign
(
def_id
)),
ForeignItemKind
::
Type
=>
Some
(
Def
::
Ty
Foreign
(
def_id
)),
}
}
NodeTraitItem
(
item
)
=>
{
...
...
@@ -499,7 +499,7 @@ pub fn describe_def(&self, node_id: NodeId) -> Option<Def> {
NodeGenericParam
(
param
)
=>
{
Some
(
match
param
.kind
{
GenericParamKind
::
Lifetime
{
..
}
=>
Def
::
Local
(
param
.id
),
GenericParamKind
::
Type
{
..
}
=>
Def
::
Param
(
self
.local_def_id
(
param
.id
)),
GenericParamKind
::
Type
{
..
}
=>
Def
::
Ty
Param
(
self
.local_def_id
(
param
.id
)),
})
}
}
...
...
src/librustc/ich/impls_hir.rs
浏览文件 @
05cfb3f5
...
...
@@ -1010,9 +1010,9 @@ fn to_stable_hash_key(&self,
AssociatedTy
(
def_id
),
AssociatedExistential
(
def_id
),
PrimTy
(
prim_ty
),
Param
(
def_id
),
Ty
Param
(
def_id
),
SelfTy
(
trait_def_id
,
impl_def_id
),
Foreign
(
def_id
),
Ty
Foreign
(
def_id
),
Fn
(
def_id
),
Const
(
def_id
),
Static
(
def_id
,
is_mutbl
),
...
...
src/librustc/middle/resolve_lifetime.rs
浏览文件 @
05cfb3f5
...
...
@@ -1326,7 +1326,7 @@ fn add_bounds(set: &mut Set1<hir::LifetimeName>, bounds: &[hir::GenericBound]) {
_
=>
continue
,
};
if
def
==
Def
::
Param
(
param_def_id
)
{
if
def
==
Def
::
Ty
Param
(
param_def_id
)
{
add_bounds
(
&
mut
set
,
&
data
.bounds
);
}
}
...
...
src/librustc_lint/builtin.rs
浏览文件 @
05cfb3f5
...
...
@@ -1510,7 +1510,7 @@ fn is_type_variable_assoc(qpath: &hir::QPath) -> bool {
match
ty
.node
{
hir
::
TyKind
::
Path
(
hir
::
QPath
::
Resolved
(
None
,
ref
path
))
=>
{
match
path
.def
{
Def
::
Param
(
_
)
=>
true
,
Def
::
Ty
Param
(
_
)
=>
true
,
_
=>
false
}
}
...
...
src/librustc_metadata/decoder.rs
浏览文件 @
05cfb3f5
...
...
@@ -429,7 +429,7 @@ fn to_def(&self, did: DefId) -> Option<Def> {
EntryKind
::
Trait
(
_
)
=>
Def
::
Trait
(
did
),
EntryKind
::
Enum
(
..
)
=>
Def
::
Enum
(
did
),
EntryKind
::
MacroDef
(
_
)
=>
Def
::
Macro
(
did
,
MacroKind
::
Bang
),
EntryKind
::
ForeignType
=>
Def
::
Foreign
(
did
),
EntryKind
::
ForeignType
=>
Def
::
Ty
Foreign
(
did
),
EntryKind
::
ForeignMod
|
EntryKind
::
GlobalAsm
|
...
...
src/librustc_resolve/build_reduced_graph.rs
浏览文件 @
05cfb3f5
...
...
@@ -656,7 +656,7 @@ fn build_reduced_graph_for_foreign_item(&mut self, item: &ForeignItem, expansion
(
Def
::
Static
(
self
.definitions
.local_def_id
(
item
.id
),
m
),
ValueNS
)
}
ForeignItemKind
::
Ty
=>
{
(
Def
::
Foreign
(
self
.definitions
.local_def_id
(
item
.id
)),
TypeNS
)
(
Def
::
Ty
Foreign
(
self
.definitions
.local_def_id
(
item
.id
)),
TypeNS
)
}
ForeignItemKind
::
Macro
(
_
)
=>
unreachable!
(),
};
...
...
@@ -692,7 +692,7 @@ fn build_reduced_graph_for_external_crate_def(&mut self, parent: Module<'a>, chi
span
);
self
.define
(
parent
,
ident
,
TypeNS
,
(
module
,
vis
,
DUMMY_SP
,
expansion
));
}
Def
::
Variant
(
..
)
|
Def
::
TyAlias
(
..
)
|
Def
::
Foreign
(
..
)
=>
{
Def
::
Variant
(
..
)
|
Def
::
TyAlias
(
..
)
|
Def
::
Ty
Foreign
(
..
)
=>
{
self
.define
(
parent
,
ident
,
TypeNS
,
(
def
,
vis
,
DUMMY_SP
,
expansion
));
}
Def
::
Fn
(
..
)
|
Def
::
Static
(
..
)
|
Def
::
Const
(
..
)
|
Def
::
VariantCtor
(
..
)
=>
{
...
...
src/librustc_resolve/lib.rs
浏览文件 @
05cfb3f5
...
...
@@ -204,14 +204,14 @@ fn resolve_struct_error<'sess, 'a>(resolver: &'sess Resolver,
"`Self` type implicitly declared here, on the `impl`"
);
}
},
Def
::
Param
(
typaram_defid
)
=>
{
Def
::
Ty
Param
(
typaram_defid
)
=>
{
if
let
Some
(
typaram_span
)
=
resolver
.definitions
.opt_span
(
typaram_defid
)
{
err
.span_label
(
typaram_span
,
"type variable from outer function"
);
}
},
_
=>
{
bug!
(
"TypeParametersFromOuterFunction should only be used with Def::SelfTy or
\
Def::Param"
)
Def::
Ty
Param"
)
}
}
...
...
@@ -537,9 +537,9 @@ fn is_expected(self, def: Def) -> bool {
PathSource
::
Type
=>
match
def
{
Def
::
Struct
(
..
)
|
Def
::
Union
(
..
)
|
Def
::
Enum
(
..
)
|
Def
::
Trait
(
..
)
|
Def
::
TyAlias
(
..
)
|
Def
::
AssociatedTy
(
..
)
|
Def
::
PrimTy
(
..
)
|
Def
::
Param
(
..
)
|
Def
::
SelfTy
(
..
)
|
Def
::
PrimTy
(
..
)
|
Def
::
Ty
Param
(
..
)
|
Def
::
SelfTy
(
..
)
|
Def
::
Existential
(
..
)
|
Def
::
Foreign
(
..
)
=>
true
,
Def
::
Ty
Foreign
(
..
)
=>
true
,
_
=>
false
,
},
PathSource
::
Trait
(
AliasPossibility
::
No
)
=>
match
def
{
...
...
@@ -2359,7 +2359,7 @@ fn with_type_parameter_rib<'b, F>(&'b mut self, type_parameters: TypeParameters<
seen_bindings
.entry
(
ident
)
.or_insert
(
param
.ident.span
);
// Plain insert (no renaming).
let
def
=
Def
::
Param
(
self
.definitions
.local_def_id
(
param
.id
));
let
def
=
Def
::
Ty
Param
(
self
.definitions
.local_def_id
(
param
.id
));
function_type_rib
.bindings
.insert
(
ident
,
def
);
self
.record_def
(
param
.id
,
PathResolution
::
new
(
def
));
}
...
...
@@ -3765,7 +3765,7 @@ fn adjust_local_def(&mut self,
}
}
}
Def
::
Param
(
..
)
|
Def
::
SelfTy
(
..
)
=>
{
Def
::
Ty
Param
(
..
)
|
Def
::
SelfTy
(
..
)
=>
{
for
rib
in
ribs
{
match
rib
.kind
{
NormalRibKind
|
TraitOrImplItemRibKind
|
ClosureRibKind
(
..
)
|
...
...
src/librustc_save_analysis/lib.rs
浏览文件 @
05cfb3f5
...
...
@@ -747,13 +747,13 @@ fn fn_type(path: &ast::Path) -> bool {
HirDef
::
Union
(
def_id
)
|
HirDef
::
Enum
(
def_id
)
|
HirDef
::
TyAlias
(
def_id
)
|
HirDef
::
Foreign
(
def_id
)
|
HirDef
::
Ty
Foreign
(
def_id
)
|
HirDef
::
TraitAlias
(
def_id
)
|
HirDef
::
AssociatedExistential
(
def_id
)
|
HirDef
::
AssociatedTy
(
def_id
)
|
HirDef
::
Trait
(
def_id
)
|
HirDef
::
Existential
(
def_id
)
|
HirDef
::
Param
(
def_id
)
=>
{
HirDef
::
Ty
Param
(
def_id
)
=>
{
let
span
=
self
.span_from_span
(
sub_span
);
Some
(
Ref
{
kind
:
RefKind
::
Type
,
...
...
src/librustc_typeck/astconv.rs
浏览文件 @
05cfb3f5
...
...
@@ -1240,7 +1240,7 @@ pub fn associated_path_def_to_ty(&self,
}
}
(
&
ty
::
Param
(
_
),
Def
::
SelfTy
(
Some
(
param_did
),
None
))
|
(
&
ty
::
Param
(
_
),
Def
::
Param
(
param_did
))
=>
{
(
&
ty
::
Param
(
_
),
Def
::
Ty
Param
(
param_did
))
=>
{
match
self
.find_bound_for_assoc_item
(
param_did
,
assoc_name
,
span
)
{
Ok
(
bound
)
=>
bound
,
Err
(
ErrorReported
)
=>
return
(
tcx
.types.err
,
Def
::
Err
),
...
...
@@ -1387,7 +1387,7 @@ pub fn def_to_ty(&self,
)
}
Def
::
Enum
(
did
)
|
Def
::
TyAlias
(
did
)
|
Def
::
Struct
(
did
)
|
Def
::
Union
(
did
)
|
Def
::
Foreign
(
did
)
=>
{
Def
::
Union
(
did
)
|
Def
::
Ty
Foreign
(
did
)
=>
{
assert_eq!
(
opt_self_ty
,
None
);
self
.prohibit_generics
(
path
.segments
.split_last
()
.unwrap
()
.1
);
self
.ast_path_to_ty
(
span
,
did
,
path
.segments
.last
()
.unwrap
())
...
...
@@ -1401,7 +1401,7 @@ pub fn def_to_ty(&self,
tcx
.parent_def_id
(
did
)
.unwrap
(),
path
.segments
.last
()
.unwrap
())
}
Def
::
Param
(
did
)
=>
{
Def
::
Ty
Param
(
did
)
=>
{
assert_eq!
(
opt_self_ty
,
None
);
self
.prohibit_generics
(
&
path
.segments
);
...
...
src/librustc_typeck/check/compare_method.rs
浏览文件 @
05cfb3f5
...
...
@@ -830,7 +830,7 @@ fn visit_ty(&mut self, ty: &'v hir::Ty) {
hir
::
intravisit
::
walk_ty
(
self
,
ty
);
match
ty
.node
{
hir
::
TyKind
::
Path
(
hir
::
QPath
::
Resolved
(
None
,
ref
path
))
=>
{
if
let
hir
::
def
::
Def
::
Param
(
def_id
)
=
path
.def
{
if
let
hir
::
def
::
Def
::
Ty
Param
(
def_id
)
=
path
.def
{
if
def_id
==
self
.1
{
self
.0
=
Some
(
ty
.span
);
}
...
...
src/librustc_typeck/collect.rs
浏览文件 @
05cfb3f5
...
...
@@ -350,7 +350,7 @@ fn is_param<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>,
if
let
hir
::
TyKind
::
Path
(
hir
::
QPath
::
Resolved
(
None
,
ref
path
))
=
ast_ty
.node
{
match
path
.def
{
Def
::
SelfTy
(
Some
(
def_id
),
None
)
|
Def
::
Param
(
def_id
)
=>
{
Def
::
Ty
Param
(
def_id
)
=>
{
def_id
==
tcx
.hir
.local_def_id
(
param_id
)
}
_
=>
false
...
...
src/librustdoc/clean/inline.rs
浏览文件 @
05cfb3f5
...
...
@@ -83,7 +83,7 @@ pub fn try_inline(cx: &DocContext, def: Def, name: ast::Name, visited: &mut FxHa
ret
.extend
(
build_impls
(
cx
,
did
,
true
));
clean
::
EnumItem
(
build_enum
(
cx
,
did
))
}
Def
::
Foreign
(
did
)
=>
{
Def
::
Ty
Foreign
(
did
)
=>
{
record_extern_fqn
(
cx
,
did
,
clean
::
TypeKind
::
Foreign
);
ret
.extend
(
build_impls
(
cx
,
did
,
false
));
clean
::
ForeignTypeItem
...
...
src/librustdoc/clean/mod.rs
浏览文件 @
05cfb3f5
...
...
@@ -2411,7 +2411,7 @@ fn clean(&self, cx: &DocContext) -> Type {
return
new_ty
;
}
if
let
Def
::
Param
(
did
)
=
path
.def
{
if
let
Def
::
Ty
Param
(
did
)
=
path
.def
{
if
let
Some
(
bounds
)
=
cx
.impl_trait_bounds
.borrow_mut
()
.remove
(
&
did
)
{
return
ImplTrait
(
bounds
);
}
...
...
@@ -2460,7 +2460,7 @@ fn clean(&self, cx: &DocContext) -> Type {
}
hir
::
GenericParamKind
::
Type
{
ref
default
,
..
}
=>
{
let
ty_param_def
=
Def
::
Param
(
cx
.tcx.hir
.local_def_id
(
param
.id
));
Def
::
Ty
Param
(
cx
.tcx.hir
.local_def_id
(
param
.id
));
let
mut
j
=
0
;
let
type_
=
generic_args
.args
.iter
()
.find_map
(|
arg
|
{
match
arg
{
...
...
@@ -3710,10 +3710,10 @@ fn resolve_type(cx: &DocContext,
Def
::
SelfTy
(
..
)
if
path
.segments
.len
()
==
1
=>
{
return
Generic
(
keywords
::
SelfType
.name
()
.to_string
());
}
Def
::
Param
(
..
)
if
path
.segments
.len
()
==
1
=>
{
Def
::
Ty
Param
(
..
)
if
path
.segments
.len
()
==
1
=>
{
return
Generic
(
format!
(
"{:#}"
,
path
));
}
Def
::
SelfTy
(
..
)
|
Def
::
Param
(
..
)
|
Def
::
AssociatedTy
(
..
)
=>
true
,
Def
::
SelfTy
(
..
)
|
Def
::
Ty
Param
(
..
)
|
Def
::
AssociatedTy
(
..
)
=>
true
,
_
=>
false
,
};
let
did
=
register_def
(
&*
cx
,
path
.def
);
...
...
@@ -3731,7 +3731,7 @@ pub fn register_def(cx: &DocContext, def: Def) -> DefId {
Def
::
Struct
(
i
)
=>
(
i
,
TypeKind
::
Struct
),
Def
::
Union
(
i
)
=>
(
i
,
TypeKind
::
Union
),
Def
::
Mod
(
i
)
=>
(
i
,
TypeKind
::
Module
),
Def
::
Foreign
(
i
)
=>
(
i
,
TypeKind
::
Foreign
),
Def
::
Ty
Foreign
(
i
)
=>
(
i
,
TypeKind
::
Foreign
),
Def
::
Const
(
i
)
=>
(
i
,
TypeKind
::
Const
),
Def
::
Static
(
i
,
_
)
=>
(
i
,
TypeKind
::
Static
),
Def
::
Variant
(
i
)
=>
(
cx
.tcx
.parent_def_id
(
i
)
.expect
(
"cannot get parent def id"
),
...
...
src/librustdoc/core.rs
浏览文件 @
05cfb3f5
...
...
@@ -234,7 +234,7 @@ pub fn ty_param_to_ty(&self, param: ty::GenericParamDef) -> hir::Ty {
None
,
P
(
hir
::
Path
{
span
:
DUMMY_SP
,
def
:
Def
::
Param
(
param
.def_id
),
def
:
Def
::
Ty
Param
(
param
.def_id
),
segments
:
HirVec
::
from_vec
(
vec!
[
hir
::
PathSegment
::
from_ident
(
Ident
::
from_interned_str
(
param
.name
))
]),
...
...
src/librustdoc/visit_ast.rs
浏览文件 @
05cfb3f5
...
...
@@ -267,7 +267,7 @@ fn inherits_doc_hidden(cx: &core::DocContext, mut node: ast::NodeId) -> bool {
Def
::
Struct
(
did
)
|
Def
::
Union
(
did
)
|
Def
::
Enum
(
did
)
|
Def
::
Foreign
(
did
)
|
Def
::
Ty
Foreign
(
did
)
|
Def
::
TyAlias
(
did
)
if
!
self_is_hidden
=>
{
self
.cx.access_levels
.borrow_mut
()
.map
.insert
(
did
,
AccessLevel
::
Public
);
},
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录