Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
ac228a59
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,发现更多精彩内容 >>
提交
ac228a59
编写于
7月 23, 2010
作者:
G
Graydon Hoare
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Widen write mutability check to cover all writing stmts.
上级
fe829789
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
22 addition
and
10 deletion
+22
-10
src/boot/me/effect.ml
src/boot/me/effect.ml
+22
-10
未找到文件。
src/boot/me/effect.ml
浏览文件 @
ac228a59
...
...
@@ -34,18 +34,21 @@ let mutability_checking_visitor
in
let
check_write
s
dst
=
let
_
=
iflog
cx
(
fun
_
->
log
cx
"checking write to lval #%d = %a"
(
int_of_node
(
lval_base_id
dst
))
Ast
.
sprintf_lval
dst
)
in
let
is_init
=
Hashtbl
.
mem
cx
.
ctxt_stmt_is_init
s
.
id
in
let
dst_ty
=
lval_ty
cx
dst
in
let
is_mutable
=
match
dst_ty
with
Ast
.
TY_mutable
_
->
true
|
_
->
false
in
if
(
is_mutable
or
(
Hashtbl
.
mem
cx
.
ctxt_stmt_is_init
s
.
id
))
iflog
cx
(
fun
_
->
log
cx
"checking %swrite to %slval #%d = %a of type %a"
(
if
is_init
then
"initializing "
else
""
)
(
if
is_mutable
then
"mutable "
else
""
)
(
int_of_node
(
lval_base_id
dst
))
Ast
.
sprintf_lval
dst
Ast
.
sprintf_ty
dst_ty
);
if
(
is_mutable
or
is_init
)
then
()
else
err
(
Some
s
.
id
)
"writing to non-mutable slot of type %a in statement %a"
...
...
@@ -57,10 +60,19 @@ let mutability_checking_visitor
let
visit_stmt_pre
s
=
begin
match
s
.
node
with
Ast
.
STMT_copy
(
dst
,
_
)
->
check_write
s
dst
|
Ast
.
STMT_copy_binop
(
dst
,
_
,
_
)
->
check_write
s
dst
|
Ast
.
STMT_call
(
dst
,
_
,
_
)
->
check_write
s
dst
|
Ast
.
STMT_recv
(
dst
,
_
)
->
check_write
s
dst
Ast
.
STMT_copy
(
lv_dst
,
_
)
|
Ast
.
STMT_call
(
lv_dst
,
_
,
_
)
|
Ast
.
STMT_spawn
(
lv_dst
,
_
,
_
,
_
)
|
Ast
.
STMT_recv
(
lv_dst
,
_
)
|
Ast
.
STMT_bind
(
lv_dst
,
_
,
_
)
|
Ast
.
STMT_new_rec
(
lv_dst
,
_
,
_
)
|
Ast
.
STMT_new_tup
(
lv_dst
,
_
)
|
Ast
.
STMT_new_vec
(
lv_dst
,
_
,
_
)
|
Ast
.
STMT_new_str
(
lv_dst
,
_
)
|
Ast
.
STMT_new_port
lv_dst
|
Ast
.
STMT_new_chan
(
lv_dst
,
_
)
|
Ast
.
STMT_new_box
(
lv_dst
,
_
,
_
)
->
check_write
s
lv_dst
|
_
->
()
end
;
inner
.
Walk
.
visit_stmt_pre
s
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录