Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
10c92665
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,发现更多精彩内容 >>
提交
10c92665
编写于
5月 10, 2011
作者:
P
Patrick Walton
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rustc: Number everything with an annotation
上级
4b5b96c5
变更
9
展开全部
隐藏空白更改
内联
并排
Showing
9 changed file
with
193 addition
and
175 deletion
+193
-175
src/comp/front/ast.rs
src/comp/front/ast.rs
+1
-1
src/comp/front/extenv.rs
src/comp/front/extenv.rs
+6
-6
src/comp/front/extfmt.rs
src/comp/front/extfmt.rs
+74
-65
src/comp/front/parser.rs
src/comp/front/parser.rs
+85
-76
src/comp/middle/trans.rs
src/comp/middle/trans.rs
+2
-2
src/comp/middle/ty.rs
src/comp/middle/ty.rs
+4
-4
src/comp/middle/typeck.rs
src/comp/middle/typeck.rs
+4
-4
src/comp/middle/typestate_check.rs
src/comp/middle/typestate_check.rs
+16
-16
src/comp/util/common.rs
src/comp/util/common.rs
+1
-1
未找到文件。
src/comp/front/ast.rs
浏览文件 @
10c92665
...
...
@@ -22,7 +22,7 @@
// Annotations added during successive passes.
tag
ann
{
ann_none
;
ann_none
(
uint
)
;
ann_type
(
middle
.ty.t
,
Option
.t
[
vec
[
middle
.ty.t
]],
/* ty param substs */
Option
.t
[
@
ts_ann
]);
/* pre- and postcondition for typestate */
...
...
src/comp/front/extenv.rs
浏览文件 @
10c92665
...
...
@@ -29,10 +29,10 @@ fn expand_syntax_ext(parser.parser p,
auto
var
=
expr_to_str
(
p
,
args
.
(
0
));
alt
(
GenericOS
.getenv
(
var
))
{
case
(
Option
.none
[
str
])
{
ret
make_new_str
(
sp
,
""
);
ret
make_new_str
(
p
,
sp
,
""
);
}
case
(
Option
.some
[
str
](
?
s
))
{
ret
make_new_str
(
sp
,
s
);
ret
make_new_str
(
p
,
sp
,
s
);
}
}
}
...
...
@@ -54,15 +54,15 @@ fn expr_to_str(parser.parser p,
fail
;
}
fn
make_new_lit
(
common
.span
sp
,
ast
.lit_
lit
)
->
@
ast
.expr
{
fn
make_new_lit
(
parser
.parser
p
,
common
.span
sp
,
ast
.lit_
lit
)
->
@
ast
.expr
{
auto
sp_lit
=
@
rec
(
node
=
lit
,
span
=
sp
);
auto
expr
=
ast
.expr_lit
(
sp_lit
,
ast
.ann_none
);
auto
expr
=
ast
.expr_lit
(
sp_lit
,
p
.get_ann
()
);
ret
@
rec
(
node
=
expr
,
span
=
sp
);
}
fn
make_new_str
(
common
.span
sp
,
str
s
)
->
@
ast
.expr
{
fn
make_new_str
(
parser
.parser
p
,
common
.span
sp
,
str
s
)
->
@
ast
.expr
{
auto
lit
=
ast
.lit_str
(
s
);
ret
make_new_lit
(
sp
,
lit
);
ret
make_new_lit
(
p
,
sp
,
lit
);
}
//
...
...
src/comp/front/extfmt.rs
浏览文件 @
10c92665
...
...
@@ -4,6 +4,7 @@
* compiler syntax extension plugin interface.
*/
import
front
.parser.parser
;
import
util
.common
;
import
std
.Str
;
...
...
@@ -45,11 +46,12 @@
export
expand_syntax_ext
;
// FIXME: Need to thread parser through here to handle errors correctly
fn
expand_syntax_ext
(
vec
[
@
ast
.expr
]
args
,
fn
expand_syntax_ext
(
parser
p
,
vec
[
@
ast
.expr
]
args
,
Option
.t
[
str
]
body
)
->
@
ast
.expr
{
if
(
Vec
.len
[
@
ast
.expr
](
args
)
==
0u
)
{
// FIXME: Handle error correctly.
log_err
"malformed #fmt call"
;
fail
;
}
...
...
@@ -62,7 +64,7 @@ fn expand_syntax_ext(vec[@ast.expr] args,
auto
pieces
=
parse_fmt_string
(
fmt
);
auto
args_len
=
Vec
.len
[
@
ast
.expr
](
args
);
auto
fmt_args
=
Vec
.slice
[
@
ast
.expr
](
args
,
1u
,
args_len
-
1u
);
ret
pieces_to_expr
(
pieces
,
args
);
ret
pieces_to_expr
(
p
,
p
ieces
,
args
);
}
fn
expr_to_str
(
@
ast
.expr
expr
)
->
str
{
...
...
@@ -75,6 +77,7 @@ fn expr_to_str(@ast.expr expr) -> str {
}
}
}
// FIXME: Handle error correctly.
log_err
"malformed #fmt call"
;
fail
;
}
...
...
@@ -83,59 +86,62 @@ fn expr_to_str(@ast.expr expr) -> str {
// be factored out in common with other code that builds expressions.
// FIXME: Probably should be using the parser's span functions
// FIXME: Cleanup the naming of these functions
fn
pieces_to_expr
(
vec
[
piece
]
pieces
,
vec
[
@
ast
.expr
]
args
)
->
@
ast
.expr
{
fn
pieces_to_expr
(
parser
p
,
vec
[
piece
]
pieces
,
vec
[
@
ast
.expr
]
args
)
->
@
ast
.expr
{
fn
make_new_lit
(
common
.span
sp
,
ast
.lit_
lit
)
->
@
ast
.expr
{
fn
make_new_lit
(
parser
p
,
common
.span
sp
,
ast
.lit_
lit
)
->
@
ast
.expr
{
auto
sp_lit
=
@
rec
(
node
=
lit
,
span
=
sp
);
auto
expr
=
ast
.expr_lit
(
sp_lit
,
ast
.ann_none
);
auto
expr
=
ast
.expr_lit
(
sp_lit
,
p
.get_ann
()
);
ret
@
rec
(
node
=
expr
,
span
=
sp
);
}
fn
make_new_str
(
common
.span
sp
,
str
s
)
->
@
ast
.expr
{
fn
make_new_str
(
parser
p
,
common
.span
sp
,
str
s
)
->
@
ast
.expr
{
auto
lit
=
ast
.lit_str
(
s
);
ret
make_new_lit
(
sp
,
lit
);
ret
make_new_lit
(
p
,
sp
,
lit
);
}
fn
make_new_int
(
common
.span
sp
,
int
i
)
->
@
ast
.expr
{
fn
make_new_int
(
parser
p
,
common
.span
sp
,
int
i
)
->
@
ast
.expr
{
auto
lit
=
ast
.lit_int
(
i
);
ret
make_new_lit
(
sp
,
lit
);
ret
make_new_lit
(
p
,
sp
,
lit
);
}
fn
make_new_uint
(
common
.span
sp
,
uint
u
)
->
@
ast
.expr
{
fn
make_new_uint
(
parser
p
,
common
.span
sp
,
uint
u
)
->
@
ast
.expr
{
auto
lit
=
ast
.lit_uint
(
u
);
ret
make_new_lit
(
sp
,
lit
);
ret
make_new_lit
(
p
,
sp
,
lit
);
}
fn
make_add_expr
(
common
.span
sp
,
fn
make_add_expr
(
parser
p
,
common
.span
sp
,
@
ast
.expr
lhs
,
@
ast
.expr
rhs
)
->
@
ast
.expr
{
auto
binexpr
=
ast
.expr_binary
(
ast
.add
,
lhs
,
rhs
,
ast
.ann_none
);
auto
binexpr
=
ast
.expr_binary
(
ast
.add
,
lhs
,
rhs
,
p
.get_ann
()
);
ret
@
rec
(
node
=
binexpr
,
span
=
sp
);
}
fn
make_path_expr
(
common
.span
sp
,
vec
[
ast
.ident
]
idents
)
->
@
ast
.expr
{
fn
make_path_expr
(
parser
p
,
common
.span
sp
,
vec
[
ast
.ident
]
idents
)
->
@
ast
.expr
{
let
vec
[
@
ast
.ty
]
types
=
vec
();
auto
path
=
rec
(
idents
=
idents
,
types
=
types
);
auto
sp_path
=
rec
(
node
=
path
,
span
=
sp
);
auto
pathexpr
=
ast
.expr_path
(
sp_path
,
none
[
ast
.def
],
ast
.ann_none
);
auto
pathexpr
=
ast
.expr_path
(
sp_path
,
none
[
ast
.def
],
p
.get_ann
()
);
auto
sp_pathexpr
=
@
rec
(
node
=
pathexpr
,
span
=
sp
);
ret
sp_pathexpr
;
}
fn
make_vec_expr
(
common
.span
sp
,
vec
[
@
ast
.expr
]
exprs
)
->
@
ast
.expr
{
auto
vecexpr
=
ast
.expr_vec
(
exprs
,
ast
.imm
,
ast
.ann_none
);
fn
make_vec_expr
(
parser
p
,
common
.span
sp
,
vec
[
@
ast
.expr
]
exprs
)
->
@
ast
.expr
{
auto
vecexpr
=
ast
.expr_vec
(
exprs
,
ast
.imm
,
p
.get_ann
());
auto
sp_vecexpr
=
@
rec
(
node
=
vecexpr
,
span
=
sp
);
ret
sp_vecexpr
;
}
fn
make_call
(
common
.span
sp
,
vec
[
ast
.ident
]
fn_path
,
fn
make_call
(
parser
p
,
common
.span
sp
,
vec
[
ast
.ident
]
fn_path
,
vec
[
@
ast
.expr
]
args
)
->
@
ast
.expr
{
auto
pathexpr
=
make_path_expr
(
sp
,
fn_path
);
auto
callexpr
=
ast
.expr_call
(
pathexpr
,
args
,
ast
.ann_none
);
auto
pathexpr
=
make_path_expr
(
p
,
sp
,
fn_path
);
auto
callexpr
=
ast
.expr_call
(
pathexpr
,
args
,
p
.get_ann
()
);
auto
sp_callexpr
=
@
rec
(
node
=
callexpr
,
span
=
sp
);
ret
sp_callexpr
;
}
fn
make_rec_expr
(
common
.span
sp
,
fn
make_rec_expr
(
parser
p
,
common
.span
sp
,
vec
[
tup
(
ast
.ident
,
@
ast
.expr
)]
fields
)
->
@
ast
.expr
{
let
vec
[
ast
.field
]
astfields
=
vec
();
for
(
tup
(
ast
.ident
,
@
ast
.expr
)
field
in
fields
)
{
...
...
@@ -149,7 +155,7 @@ fn make_rec_expr(common.span sp,
auto
recexpr
=
ast
.expr_rec
(
astfields
,
Option
.none
[
@
ast
.expr
],
ast
.ann_none
);
p
.get_ann
()
);
auto
sp_recexpr
=
@
rec
(
node
=
recexpr
,
span
=
sp
);
ret
sp_recexpr
;
}
...
...
@@ -160,16 +166,17 @@ fn make_path_vec(str ident) -> vec[str] {
ret
vec
(
"std"
,
"ExtFmt"
,
"RT"
,
ident
);
}
fn
make_rt_path_expr
(
common
.span
sp
,
str
ident
)
->
@
ast
.expr
{
fn
make_rt_path_expr
(
parser
p
,
common
.span
sp
,
str
ident
)
->
@
ast
.expr
{
auto
path
=
make_path_vec
(
ident
);
ret
make_path_expr
(
sp
,
path
);
ret
make_path_expr
(
p
,
sp
,
path
);
}
// Produces an AST expression that represents a RT.conv record,
// which tells the RT.conv* functions how to perform the conversion
fn
make_rt_conv_expr
(
common
.span
sp
,
&
conv
cnv
)
->
@
ast
.expr
{
fn
make_rt_conv_expr
(
parser
p
,
common
.span
sp
,
&
conv
cnv
)
->
@
ast
.expr
{
fn
make_flags
(
common
.span
sp
,
vec
[
flag
]
flags
)
->
@
ast
.expr
{
fn
make_flags
(
parser
p
,
common
.span
sp
,
vec
[
flag
]
flags
)
->
@
ast
.expr
{
let
vec
[
@
ast
.expr
]
flagexprs
=
vec
();
for
(
flag
f
in
flags
)
{
auto
fstr
;
...
...
@@ -190,29 +197,29 @@ fn make_flags(common.span sp, vec[flag] flags) -> @ast.expr {
fstr
=
"flag_alternate"
;
}
}
flagexprs
+=
vec
(
make_rt_path_expr
(
sp
,
fstr
));
flagexprs
+=
vec
(
make_rt_path_expr
(
p
,
sp
,
fstr
));
}
// FIXME: 0-length vectors can't have their type inferred
// through the rec that these flags are a member of, so
// this is a hack placeholder flag
if
(
Vec
.len
[
@
ast
.expr
](
flagexprs
)
==
0u
)
{
flagexprs
+=
vec
(
make_rt_path_expr
(
sp
,
"flag_none"
));
flagexprs
+=
vec
(
make_rt_path_expr
(
p
,
sp
,
"flag_none"
));
}
ret
make_vec_expr
(
sp
,
flagexprs
);
ret
make_vec_expr
(
p
,
sp
,
flagexprs
);
}
fn
make_count
(
common
.span
sp
,
&
count
cnt
)
->
@
ast
.expr
{
fn
make_count
(
parser
p
,
common
.span
sp
,
&
count
cnt
)
->
@
ast
.expr
{
alt
(
cnt
)
{
case
(
count_implied
)
{
ret
make_rt_path_expr
(
sp
,
"count_implied"
);
ret
make_rt_path_expr
(
p
,
sp
,
"count_implied"
);
}
case
(
count_is
(
?
c
))
{
auto
count_lit
=
make_new_int
(
sp
,
c
);
auto
count_lit
=
make_new_int
(
p
,
sp
,
c
);
auto
count_is_path
=
make_path_vec
(
"count_is"
);
auto
count_is_args
=
vec
(
count_lit
);
ret
make_call
(
sp
,
count_is_path
,
count_is_args
);
ret
make_call
(
p
,
sp
,
count_is_path
,
count_is_args
);
}
case
(
_
)
{
log_err
"not implemented"
;
...
...
@@ -221,7 +228,7 @@ fn make_count(common.span sp, &count cnt) -> @ast.expr {
}
}
fn
make_ty
(
common
.span
sp
,
&
ty
t
)
->
@
ast
.expr
{
fn
make_ty
(
parser
p
,
common
.span
sp
,
&
ty
t
)
->
@
ast
.expr
{
auto
rt_type
;
alt
(
t
)
{
case
(
ty_hex
(
?
c
))
{
...
...
@@ -245,41 +252,43 @@ fn make_ty(common.span sp, &ty t) -> @ast.expr {
}
}
ret
make_rt_path_expr
(
sp
,
rt_type
);
ret
make_rt_path_expr
(
p
,
sp
,
rt_type
);
}
fn
make_conv_rec
(
common
.span
sp
,
fn
make_conv_rec
(
parser
p
,
common
.span
sp
,
@
ast
.expr
flags_expr
,
@
ast
.expr
width_expr
,
@
ast
.expr
precision_expr
,
@
ast
.expr
ty_expr
)
->
@
ast
.expr
{
ret
make_rec_expr
(
sp
,
vec
(
tup
(
"flags"
,
flags_expr
),
tup
(
"width"
,
width_expr
),
tup
(
"precision"
,
precision_expr
),
tup
(
"ty"
,
ty_expr
)));
ret
make_rec_expr
(
p
,
sp
,
vec
(
tup
(
"flags"
,
flags_expr
),
tup
(
"width"
,
width_expr
),
tup
(
"precision"
,
precision_expr
),
tup
(
"ty"
,
ty_expr
)));
}
auto
rt_conv_flags
=
make_flags
(
sp
,
cnv
.flags
);
auto
rt_conv_width
=
make_count
(
sp
,
cnv
.width
);
auto
rt_conv_precision
=
make_count
(
sp
,
cnv
.precision
);
auto
rt_conv_ty
=
make_ty
(
sp
,
cnv
.ty
);
ret
make_conv_rec
(
sp
,
auto
rt_conv_flags
=
make_flags
(
p
,
sp
,
cnv
.flags
);
auto
rt_conv_width
=
make_count
(
p
,
sp
,
cnv
.width
);
auto
rt_conv_precision
=
make_count
(
p
,
sp
,
cnv
.precision
);
auto
rt_conv_ty
=
make_ty
(
p
,
sp
,
cnv
.ty
);
ret
make_conv_rec
(
p
,
sp
,
rt_conv_flags
,
rt_conv_width
,
rt_conv_precision
,
rt_conv_ty
);
}
fn
make_conv_call
(
common
.span
sp
,
str
conv_type
,
fn
make_conv_call
(
parser
p
,
common
.span
sp
,
str
conv_type
,
&
conv
cnv
,
@
ast
.expr
arg
)
->
@
ast
.expr
{
auto
fname
=
"conv_"
+
conv_type
;
auto
path
=
make_path_vec
(
fname
);
auto
cnv_expr
=
make_rt_conv_expr
(
sp
,
cnv
);
auto
cnv_expr
=
make_rt_conv_expr
(
p
,
sp
,
cnv
);
auto
args
=
vec
(
cnv_expr
,
arg
);
ret
make_call
(
arg
.span
,
path
,
args
);
ret
make_call
(
p
,
arg
.span
,
path
,
args
);
}
fn
make_new_conv
(
conv
cnv
,
@
ast
.expr
arg
)
->
@
ast
.expr
{
fn
make_new_conv
(
parser
p
,
conv
cnv
,
@
ast
.expr
arg
)
->
@
ast
.expr
{
// FIXME: Extract all this validation into ExtFmt.CT
fn
is_signed_type
(
conv
cnv
)
->
bool
{
...
...
@@ -361,32 +370,32 @@ fn is_signed_type(conv cnv) -> bool {
alt
(
cnv
.ty
)
{
case
(
ty_str
)
{
ret
make_conv_call
(
arg
.span
,
"str"
,
cnv
,
arg
);
ret
make_conv_call
(
p
,
arg
.span
,
"str"
,
cnv
,
arg
);
}
case
(
ty_int
(
?
sign
))
{
alt
(
sign
)
{
case
(
signed
)
{
ret
make_conv_call
(
arg
.span
,
"int"
,
cnv
,
arg
);
ret
make_conv_call
(
p
,
arg
.span
,
"int"
,
cnv
,
arg
);
}
case
(
unsigned
)
{
ret
make_conv_call
(
arg
.span
,
"uint"
,
cnv
,
arg
);
ret
make_conv_call
(
p
,
arg
.span
,
"uint"
,
cnv
,
arg
);
}
}
}
case
(
ty_bool
)
{
ret
make_conv_call
(
arg
.span
,
"bool"
,
cnv
,
arg
);
ret
make_conv_call
(
p
,
arg
.span
,
"bool"
,
cnv
,
arg
);
}
case
(
ty_char
)
{
ret
make_conv_call
(
arg
.span
,
"char"
,
cnv
,
arg
);
ret
make_conv_call
(
p
,
arg
.span
,
"char"
,
cnv
,
arg
);
}
case
(
ty_hex
(
_
))
{
ret
make_conv_call
(
arg
.span
,
"uint"
,
cnv
,
arg
);
ret
make_conv_call
(
p
,
arg
.span
,
"uint"
,
cnv
,
arg
);
}
case
(
ty_bits
)
{
ret
make_conv_call
(
arg
.span
,
"uint"
,
cnv
,
arg
);
ret
make_conv_call
(
p
,
arg
.span
,
"uint"
,
cnv
,
arg
);
}
case
(
ty_octal
)
{
ret
make_conv_call
(
arg
.span
,
"uint"
,
cnv
,
arg
);
ret
make_conv_call
(
p
,
arg
.span
,
"uint"
,
cnv
,
arg
);
}
case
(
_
)
{
log_err
unsupported
;
...
...
@@ -489,13 +498,13 @@ fn log_conv(conv c) {
auto
sp
=
args
.
(
0
)
.span
;
auto
n
=
0u
;
auto
tmp_expr
=
make_new_str
(
sp
,
""
);
auto
tmp_expr
=
make_new_str
(
p
,
sp
,
""
);
for
(
piece
p
in
pieces
)
{
alt
(
p
)
{
for
(
piece
p
c
in
pieces
)
{
alt
(
p
c
)
{
case
(
piece_string
(
?
s
))
{
auto
s_expr
=
make_new_str
(
sp
,
s
);
tmp_expr
=
make_add_expr
(
sp
,
tmp_expr
,
s_expr
);
auto
s_expr
=
make_new_str
(
p
,
sp
,
s
);
tmp_expr
=
make_add_expr
(
p
,
sp
,
tmp_expr
,
s_expr
);
}
case
(
piece_conv
(
?
conv
))
{
if
(
n
>=
Vec
.len
[
@
ast
.expr
](
args
))
{
...
...
@@ -509,8 +518,8 @@ fn log_conv(conv c) {
n
+=
1u
;
auto
arg_expr
=
args
.
(
n
);
auto
c_expr
=
make_new_conv
(
conv
,
arg_expr
);
tmp_expr
=
make_add_expr
(
sp
,
tmp_expr
,
c_expr
);
auto
c_expr
=
make_new_conv
(
p
,
conv
,
arg_expr
);
tmp_expr
=
make_add_expr
(
p
,
sp
,
tmp_expr
,
c_expr
);
}
}
}
...
...
src/comp/front/parser.rs
浏览文件 @
10c92665
此差异已折叠。
点击以展开。
src/comp/middle/trans.rs
浏览文件 @
10c92665
...
...
@@ -3090,7 +3090,7 @@ fn node_ann_type(@crate_ctxt cx, &ast.ann a) -> ty.t {
fn
node_ann_ty_params
(
&
ast
.ann
a
)
->
vec
[
ty
.t
]
{
alt
(
a
)
{
case
(
ast
.ann_none
)
{
case
(
ast
.ann_none
(
_
)
)
{
log_err
"missing type annotation"
;
fail
;
}
...
...
@@ -4106,7 +4106,7 @@ fn lval_generic_fn(@block_ctxt cx,
auto
monoty
;
let
vec
[
ty
.t
]
tys
;
alt
(
ann
)
{
case
(
ast
.ann_none
)
{
case
(
ast
.ann_none
(
_
)
)
{
cx
.fcx.lcx.ccx.sess
.bug
(
"no type annotation for path!"
);
fail
;
}
...
...
src/comp/middle/ty.rs
浏览文件 @
10c92665
...
...
@@ -1557,7 +1557,7 @@ fn eq_ty(&t a, &t b) -> bool {
fn
ann_to_type
(
&
ast
.ann
ann
)
->
t
{
alt
(
ann
)
{
case
(
ast
.ann_none
)
{
case
(
ast
.ann_none
(
_
)
)
{
log_err
"ann_to_type() called on node with no type"
;
fail
;
}
...
...
@@ -1569,7 +1569,7 @@ fn ann_to_type(&ast.ann ann) -> t {
fn
ann_to_type_params
(
&
ast
.ann
ann
)
->
vec
[
t
]
{
alt
(
ann
)
{
case
(
ast
.ann_none
)
{
case
(
ast
.ann_none
(
_
)
)
{
log_err
"ann_to_type_params() called on node with no type params"
;
fail
;
}
...
...
@@ -1591,7 +1591,7 @@ fn ann_to_monotype(ctxt cx, ast.ann a) -> t {
// TODO: Refactor to use recursive pattern matching when we're more
// confident that it works.
alt
(
a
)
{
case
(
ast
.ann_none
)
{
case
(
ast
.ann_none
(
_
)
)
{
log_err
"ann_to_monotype() called on expression with no type!"
;
fail
;
}
...
...
@@ -1905,7 +1905,7 @@ fn expr_ty_params_and_ty(&ctxt cx, &@ast.expr expr) -> tup(vec[t], t) {
fn
expr_has_ty_params
(
&@
ast
.expr
expr
)
->
bool
{
// FIXME: Rewrite using complex patterns when they're trustworthy.
alt
(
expr_ann
(
expr
))
{
case
(
ast
.ann_none
)
{
fail
;
}
case
(
ast
.ann_none
(
_
)
)
{
fail
;
}
case
(
ast
.ann_type
(
_
,
?
tps_opt
,
_
))
{
ret
!
Option
.is_none
[
vec
[
t
]](
tps_opt
);
}
...
...
src/comp/middle/typeck.rs
浏览文件 @
10c92665
...
...
@@ -1396,7 +1396,7 @@ fn pushdown_expr_full(&@fn_ctxt fcx, &ty.t expected, &@ast.expr e,
// provided by the programmer.
auto
ty_params_opt
;
alt
(
ann
)
{
case
(
ast
.ann_none
)
{
case
(
ast
.ann_none
(
_
)
)
{
log_err
"pushdown_expr(): no type annotation for "
+
"path expr; did you pass it to check_expr()?"
;
fail
;
...
...
@@ -1558,7 +1558,7 @@ fn resolver(@fn_ctxt fcx, ty.t typ) -> ty.t {
auto
fcx
=
Option
.get
[
@
fn_ctxt
](
env
);
alt
(
ann
)
{
case
(
ast
.ann_none
)
{
case
(
ast
.ann_none
(
_
)
)
{
log
"warning: no type for expression"
;
ret
ann
;
}
...
...
@@ -2506,7 +2506,7 @@ fn check_call(&@fn_ctxt fcx, &@ast.expr f, &vec[@ast.expr] args)
Vec
.push
[
field
](
fields_t
,
rec
(
ident
=
f
.ident
,
mt
=
expr_mt
));
}
auto
ann
=
ast
.ann_none
;
auto
ann
;
alt
(
base
)
{
case
(
none
[
@
ast
.expr
])
{
...
...
@@ -2717,7 +2717,7 @@ fn check_decl_local(&@fn_ctxt fcx, &@ast.decl decl) -> @ast.decl {
auto
a_res
=
local
.ann
;
alt
(
a_res
)
{
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
a_res
=
triv_ann
(
t
);
}
case
(
_
)
{}
...
...
src/comp/middle/typestate_check.rs
浏览文件 @
10c92665
...
...
@@ -392,7 +392,7 @@ fn mk_f_to_fn_info(@ast.crate c) -> fn_info_map {
/**** Helpers ****/
fn
ann_to_ts_ann
(
ann
a
,
uint
nv
)
->
ts_ann
{
alt
(
a
)
{
case
(
ann_none
)
{
ret
empty_ann
(
nv
);
}
case
(
ann_none
(
_
))
{
ret
empty_ann
(
nv
);
}
case
(
ann_type
(
_
,
_
,
?
t
))
{
alt
(
t
)
{
/* Kind of inconsistent. empty_ann()s everywhere
...
...
@@ -406,7 +406,7 @@ fn ann_to_ts_ann(ann a, uint nv) -> ts_ann {
fn
ann_to_ts_ann_fail
(
ann
a
)
->
Option
.t
[
@
ts_ann
]
{
alt
(
a
)
{
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log
(
"ann_to_ts_ann_fail: didn't expect ann_none here"
);
fail
;
}
...
...
@@ -418,7 +418,7 @@ fn ann_to_ts_ann_fail(ann a) -> Option.t[@ts_ann] {
fn
ann_to_ts_ann_fail_more
(
ann
a
)
->
@
ts_ann
{
alt
(
a
)
{
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log
(
"ann_to_ts_ann_fail: didn't expect ann_none here"
);
fail
;
}
...
...
@@ -450,7 +450,7 @@ fn stmt_to_ann(&stmt s) -> Option.t[@ts_ann] {
/* fails if e has no annotation */
fn
expr_states
(
@
expr
e
)
->
pre_and_post_state
{
alt
(
expr_ann
(
e
))
{
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log_err
"expr_pp: the impossible happened (no annotation)"
;
fail
;
}
...
...
@@ -471,7 +471,7 @@ fn expr_states(@expr e) -> pre_and_post_state {
/* fails if e has no annotation */
fn
expr_pp
(
@
expr
e
)
->
pre_and_post
{
alt
(
expr_ann
(
e
))
{
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log_err
"expr_pp: the impossible happened (no annotation)"
;
fail
;
}
...
...
@@ -505,7 +505,7 @@ fn stmt_pp(&stmt s) -> pre_and_post {
/* FIXME: factor out code in the following two functions (block_ts_ann) */
fn
block_pp
(
&
block
b
)
->
pre_and_post
{
alt
(
b
.node.a
)
{
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log_err
"block_pp: the impossible happened (no ann)"
;
fail
;
}
...
...
@@ -525,7 +525,7 @@ fn block_pp(&block b) -> pre_and_post {
fn
block_states
(
&
block
b
)
->
pre_and_post_state
{
alt
(
b
.node.a
)
{
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log_err
"block_pp: the impossible happened (no ann)"
;
fail
;
}
...
...
@@ -605,7 +605,7 @@ fn block_poststate(&block b) -> poststate {
/* returns a new annotation where the pre_and_post is p */
fn
with_pp
(
ann
a
,
pre_and_post
p
)
->
ann
{
alt
(
a
)
{
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log
(
"with_pp: the impossible happened"
);
fail
;
/* shouldn't happen b/c code is typechecked */
}
...
...
@@ -1300,7 +1300,7 @@ fn set_prestate_ann(@ann a, prestate pre) -> bool {
assert
(
!
is_none
[
@
ts_ann
](
ts_a
));
ret
set_prestate
(
get
[
@
ts_ann
](
ts_a
),
pre
);
}
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log
(
"set_prestate_ann: expected an ann_type here"
);
fail
;
}
...
...
@@ -1314,7 +1314,7 @@ fn extend_prestate_ann(ann a, prestate pre) -> bool {
assert
(
!
is_none
[
@
ts_ann
](
ts_a
));
ret
extend_prestate
((
get
[
@
ts_ann
](
ts_a
))
.states.prestate
,
pre
);
}
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log
(
"set_prestate_ann: expected an ann_type here"
);
fail
;
}
...
...
@@ -1327,7 +1327,7 @@ fn set_poststate_ann(ann a, poststate post) -> bool {
assert
(
!
is_none
[
@
ts_ann
](
ts_a
));
ret
set_poststate
(
get
[
@
ts_ann
](
ts_a
),
post
);
}
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log
(
"set_poststate_ann: expected an ann_type here"
);
fail
;
}
...
...
@@ -1340,7 +1340,7 @@ fn extend_poststate_ann(ann a, poststate post) -> bool {
assert
(
!
is_none
[
@
ts_ann
](
ts_a
));
ret
extend_poststate
((
*
get
[
@
ts_ann
](
ts_a
))
.states.poststate
,
post
);
}
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log
(
"set_poststate_ann: expected an ann_type here"
);
fail
;
}
...
...
@@ -1360,7 +1360,7 @@ fn set_pre_and_post(&ann a, pre_and_post pp) -> () {
set_precondition
(
t
,
pp
.precondition
);
set_postcondition
(
t
,
pp
.postcondition
);
}
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log_err
(
"set_pre_and_post: expected an ann_type here"
);
fail
;
}
...
...
@@ -2042,7 +2042,7 @@ fn one(fn_info_map fm, &@method m) -> () {
fn
init_ann
(
&
fn_info
fi
,
&
ann
a
)
->
ann
{
alt
(
a
)
{
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
// log("init_ann: shouldn't see ann_none");
// fail;
log
(
"warning: init_ann: saw ann_none"
);
...
...
@@ -2058,7 +2058,7 @@ fn init_ann(&fn_info fi, &ann a) -> ann {
fn
init_blank_ann
(
&
()
ignore
,
&
ann
a
)
->
ann
{
alt
(
a
)
{
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
// log("init_blank_ann: shouldn't see ann_none");
//fail;
log
(
"warning: init_blank_ann: saw ann_none"
);
...
...
@@ -2074,7 +2074,7 @@ fn init_block(&fn_info fi, &span sp, &block_ b) -> block {
log
(
"init_block:"
);
log_block
(
respan
(
sp
,
b
));
alt
(
b
.a
)
{
case
(
ann_none
)
{
case
(
ann_none
(
_
)
)
{
log
(
"init_block: shouldn't see ann_none"
);
fail
;
}
...
...
src/comp/util/common.rs
浏览文件 @
10c92665
...
...
@@ -161,7 +161,7 @@ fn log_block_err(&ast.block b) -> () {
fn
log_ann
(
&
ast
.ann
a
)
->
()
{
alt
(
a
)
{
case
(
ast
.ann_none
)
{
case
(
ast
.ann_none
(
_
)
)
{
log
(
"ann_none"
);
}
case
(
ast
.ann_type
(
_
,
_
,
_
))
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录