Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
6e2e17d1
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,发现更多精彩内容 >>
提交
6e2e17d1
编写于
4月 17, 2019
作者:
T
Tyler Mandry
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Make generator object debuginfo easier to read
上级
961ba95e
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
21 addition
and
12 deletion
+21
-12
src/librustc_codegen_llvm/debuginfo/metadata.rs
src/librustc_codegen_llvm/debuginfo/metadata.rs
+17
-8
src/test/debuginfo/generator-objects.rs
src/test/debuginfo/generator-objects.rs
+4
-4
未找到文件。
src/librustc_codegen_llvm/debuginfo/metadata.rs
浏览文件 @
6e2e17d1
...
...
@@ -1333,7 +1333,7 @@ fn create_member_descriptions(&self, cx: &CodegenCx<'ll, 'tcx>)
name
:
if
fallback
{
String
::
new
()
}
else
{
variant_info
.
name_as_string
()
variant_info
.
variant_name
()
},
type_metadata
:
variant_type_metadata
,
offset
:
Size
::
ZERO
,
...
...
@@ -1388,7 +1388,7 @@ fn create_member_descriptions(&self, cx: &CodegenCx<'ll, 'tcx>)
name
:
if
fallback
{
String
::
new
()
}
else
{
variant_info
.
name_as_string
()
variant_info
.
variant_name
()
},
type_metadata
:
variant_type_metadata
,
offset
:
Size
::
ZERO
,
...
...
@@ -1455,7 +1455,7 @@ fn compute_field_path<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>,
self
.layout
,
self
.layout.fields
.offset
(
discr_index
),
self
.layout
.field
(
cx
,
discr_index
)
.size
);
variant_info_for
(
*
niche_variants
.start
())
.map_name
(|
variant_name
|
{
variant_info_for
(
*
niche_variants
.start
())
.map_
struct_
name
(|
variant_name
|
{
name
.push_str
(
variant_name
);
});
...
...
@@ -1506,7 +1506,7 @@ fn compute_field_path<'a, 'tcx>(cx: &CodegenCx<'a, 'tcx>,
};
MemberDescription
{
name
:
variant_info
.
name_as_string
(),
name
:
variant_info
.
variant_name
(),
type_metadata
:
variant_type_metadata
,
offset
:
Size
::
ZERO
,
size
:
self
.layout.size
,
...
...
@@ -1571,7 +1571,7 @@ enum VariantInfo<'tcx> {
}
impl
<
'tcx
>
VariantInfo
<
'tcx
>
{
fn
map_name
<
R
>
(
&
self
,
f
:
impl
FnOnce
(
&
str
)
->
R
)
->
R
{
fn
map_
struct_
name
<
R
>
(
&
self
,
f
:
impl
FnOnce
(
&
str
)
->
R
)
->
R
{
match
self
{
VariantInfo
::
Adt
(
variant
)
=>
f
(
&
variant
.ident
.as_str
()),
VariantInfo
::
Generator
(
substs
,
variant_index
)
=>
...
...
@@ -1579,8 +1579,17 @@ fn map_name<R>(&self, f: impl FnOnce(&str) -> R) -> R {
}
}
fn
name_as_string
(
&
self
)
->
String
{
self
.map_name
(|
name
|
name
.to_string
())
fn
variant_name
(
&
self
)
->
String
{
match
self
{
VariantInfo
::
Adt
(
variant
)
=>
variant
.ident
.to_string
(),
VariantInfo
::
Generator
(
_
,
variant_index
)
=>
{
// Since GDB currently prints out the raw discriminant along
// with every variant, make each variant name be just the value
// of the discriminant. The struct name for the variant includes
// the actual variant description.
format!
(
"{}"
,
variant_index
.as_usize
())
.to_string
()
}
}
}
fn
field_name
(
&
self
,
i
:
usize
)
->
String
{
...
...
@@ -1604,7 +1613,7 @@ fn describe_enum_variant(
containing_scope
:
&
'll
DIScope
,
span
:
Span
,
)
->
(
&
'll
DICompositeType
,
MemberDescriptionFactory
<
'll
,
'tcx
>
)
{
let
metadata_stub
=
variant
.map_name
(|
variant_name
|
{
let
metadata_stub
=
variant
.map_
struct_
name
(|
variant_name
|
{
let
unique_type_id
=
debug_context
(
cx
)
.type_map
.borrow_mut
()
.get_unique_type_id_of_enum_variant
(
...
...
src/test/debuginfo/generator-objects.rs
浏览文件 @
6e2e17d1
...
...
@@ -10,16 +10,16 @@
// gdb-command:run
// gdb-command:print b
// gdb-check:$1 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 0,
Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 ([...]), variant#
4: generator_objects::main::generator::variant#4 ([...])}}
// gdb-check:$1 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 0,
0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 ([...]),
4: generator_objects::main::generator::variant#4 ([...])}}
// gdb-command:continue
// gdb-command:print b
// gdb-check:$2 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 3,
Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 (6, 7), variant#
4: generator_objects::main::generator::variant#4 ([...])}}
// gdb-check:$2 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 3,
0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 (6, 7),
4: generator_objects::main::generator::variant#4 ([...])}}
// gdb-command:continue
// gdb-command:print b
// gdb-check:$3 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 4,
Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 ([...]), variant#
4: generator_objects::main::generator::variant#4 (7, 8)}}
// gdb-check:$3 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 4,
0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 ([...]),
4: generator_objects::main::generator::variant#4 (7, 8)}}
// gdb-command:continue
// gdb-command:print b
// gdb-check:$4 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 1,
Unresumed: generator_objects::main::generator::Unresumed, Returned: generator_objects::main::generator::Returned, Panicked: generator_objects::main::generator::Panicked, variant#3: generator_objects::main::generator::variant#3 ([...]), variant#
4: generator_objects::main::generator::variant#4 ([...])}}
// gdb-check:$4 = generator_objects::main::generator {__0: 0x[...], <<variant>>: {__state: 1,
0: generator_objects::main::generator::Unresumed, 1: generator_objects::main::generator::Returned, 2: generator_objects::main::generator::Panicked, 3: generator_objects::main::generator::variant#3 ([...]),
4: generator_objects::main::generator::variant#4 ([...])}}
// === LLDB TESTS ==================================================================================
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录