Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
41212792
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,发现更多精彩内容 >>
提交
41212792
编写于
7月 19, 2011
作者:
T
Tim Chevalier
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add missing case in tyencode for ty_constr
Fixes the Windoze breakage, I hope.
上级
1a2a8b6b
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
66 addition
and
0 deletion
+66
-0
src/comp/metadata/tydecode.rs
src/comp/metadata/tydecode.rs
+37
-0
src/comp/metadata/tyencode.rs
src/comp/metadata/tyencode.rs
+28
-0
src/comp/middle/ty.rs
src/comp/middle/ty.rs
+1
-0
未找到文件。
src/comp/metadata/tydecode.rs
浏览文件 @
41212792
...
...
@@ -82,6 +82,23 @@ fn parse_constrs(@pstate st, str_def sd) -> (@ty::constr)[] {
ret
rslt
;
}
// FIXME less copy-and-paste
fn
parse_ty_constrs
(
@
pstate
st
,
str_def
sd
)
->
(
@
ty
::
type_constr
)[]
{
let
(
@
ty
::
type_constr
)[]
rslt
=
~
[];
alt
(
peek
(
st
)
as
char
)
{
case
(
':'
)
{
do
{
next
(
st
);
let
@
ty
::
type_constr
one
=
parse_constr
[
path
](
st
,
sd
,
parse_ty_constr_arg
);
rslt
+=
~
[
one
];
}
while
(
peek
(
st
)
as
char
==
';'
)
}
case
(
_
)
{
}
}
ret
rslt
;
}
fn
parse_path
(
@
pstate
st
,
str_def
sd
)
->
ast
::
path
{
let
ast
::
ident
[]
idents
=
~
[];
fn
is_last
(
char
c
)
->
bool
{
...
...
@@ -136,6 +153,19 @@ fn parse_constr_arg(@pstate st, str_def sd) -> ast::fn_constr_arg {
}
}
fn
parse_ty_constr_arg
(
@
pstate
st
,
str_def
sd
)
->
ast
::
constr_arg_general_
[
path
]
{
alt
(
peek
(
st
)
as
char
)
{
case
(
'*'
)
{
st
.pos
+=
1u
;
ret
ast
::
carg_base
;
}
case
(
?
c
)
{
ret
ast
::
carg_ident
(
parse_path
(
st
,
sd
));
}
}
}
fn
parse_constr
[
T
](
@
pstate
st
,
str_def
sd
,
arg_parser
[
T
]
pser
)
->
@
ty
::
constr_general
[
T
]
{
auto
sp
=
rec
(
lo
=
0u
,
hi
=
0u
);
// FIXME: use a real span
...
...
@@ -294,6 +324,13 @@ fn parse_ty(@pstate st, str_def sd) -> ty::t {
}
}
}
case
(
'A'
)
{
assert
(
next
(
st
)
as
char
==
'['
);
auto
tt
=
parse_ty
(
st
,
sd
);
auto
tcs
=
parse_ty_constrs
(
st
,
sd
);
assert
(
next
(
st
)
as
char
==
']'
);
ret
ty
::
mk_constr
(
st
.tcx
,
tt
,
tcs
);
}
case
(
?
c
)
{
log_err
"unexpected char in type string: "
;
log_err
c
;
...
...
src/comp/metadata/tyencode.rs
浏览文件 @
41212792
...
...
@@ -191,6 +191,14 @@ fn enc_sty(&ioivec::writer w, &@ctxt cx, &ty::sty st) {
}
case
(
ty
::
ty_type
)
{
w
.write_char
(
'Y'
);
}
case
(
ty
::
ty_task
)
{
w
.write_char
(
'a'
);
}
case
(
ty
::
ty_constr
(
?
ty
,
?
cs
))
{
w
.write_str
(
"A["
);
enc_ty
(
w
,
cx
,
ty
);
for
(
@
ty
::
type_constr
tc
in
cs
)
{
enc_ty_constr
(
w
,
cx
,
tc
);
}
w
.write_char
(
']'
);
}
}
}
fn
enc_proto
(
&
ioivec
::
writer
w
,
proto
proto
)
{
...
...
@@ -229,6 +237,7 @@ fn enc_ty_fn(&ioivec::writer w, &@ctxt cx, &ty::arg[] args, &ty::t out,
}
// FIXME less copy-and-paste
fn
enc_constr
(
&
ioivec
::
writer
w
,
&@
ctxt
cx
,
&@
ty
::
constr
c
)
{
w
.write_str
(
path_to_str
(
c
.node.path
));
w
.write_char
(
'('
);
...
...
@@ -248,6 +257,25 @@ fn enc_constr(&ioivec::writer w, &@ctxt cx, &@ty::constr c) {
w
.write_char
(
')'
);
}
fn
enc_ty_constr
(
&
ioivec
::
writer
w
,
&@
ctxt
cx
,
&@
ty
::
type_constr
c
)
{
w
.write_str
(
path_to_str
(
c
.node.path
));
w
.write_char
(
'('
);
w
.write_str
(
cx
.ds
(
c
.node.id
));
w
.write_char
(
'|'
);
auto
semi
=
false
;
for
(
@
ty
::
ty_constr_arg
a
in
c
.node.args
)
{
if
(
semi
)
{
w
.write_char
(
';'
);
}
else
{
semi
=
true
;
}
alt
(
a
.node
)
{
case
(
carg_base
)
{
w
.write_char
(
'*'
);
}
case
(
carg_ident
(
?
p
))
{
w
.write_str
(
path_to_str
(
p
));
}
case
(
carg_lit
(
?
l
))
{
w
.write_str
(
lit_to_str
(
l
));
}
}
}
w
.write_char
(
')'
);
}
//
// Local Variables:
...
...
src/comp/middle/ty.rs
浏览文件 @
41212792
...
...
@@ -122,6 +122,7 @@
export
ty_chan
;
export
ty_char
;
export
ty_constr
;
export
ty_constr_arg
;
export
ty_float
;
export
ty_fn
;
export
ty_fn_abi
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录