Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
68287592
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,发现更多精彩内容 >>
提交
68287592
编写于
7月 18, 2011
作者:
P
Patrick Walton
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
rustc: Stub binary operator translation
上级
437b7761
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
47 addition
and
0 deletion
+47
-0
src/comp/middle/trans_dps.rs
src/comp/middle/trans_dps.rs
+47
-0
未找到文件。
src/comp/middle/trans_dps.rs
浏览文件 @
68287592
...
...
@@ -221,6 +221,36 @@ fn malloc(&@block_ctxt bcx, ValueRef lldest, heap heap,
ret
bcx
;
}
// If the supplied destination is an alias, spills to a temporary. Returns the
// new destination.
fn
spill_alias
(
&@
block_ctxt
cx
,
&
dest
dest
,
ty
::
t
t
)
->
tup
(
@
block_ctxt
,
dest
)
{
auto
bcx
=
cx
;
alt
(
dest
)
{
dst_alias
(
?
box
)
{
// TODO: Mark the alias as needing a cleanup.
assert
(
std
::
option
::
is_none
(
*
box
));
auto
r
=
trans
::
alloc_ty
(
cx
,
t
);
bcx
=
r
.bcx
;
auto
llptr
=
r
.val
;
*
box
=
some
(
llptr
);
ret
tup
(
bcx
,
dst_move
(
llptr
));
}
_
{
ret
tup
(
bcx
,
dest
);
}
}
}
fn
mk_temp
(
&@
block_ctxt
cx
,
ty
::
t
t
)
->
tup
(
@
block_ctxt
,
dest
)
{
auto
bcx
=
cx
;
if
ty
::
type_is_nil
(
bcx_tcx
(
bcx
),
t
)
{
ret
tup
(
bcx
,
dst_nil
);
}
if
trans
::
type_is_immediate
(
bcx_ccx
(
bcx
),
t
)
{
ret
tup
(
bcx
,
dst_imm
(
@
mutable
none
));
}
auto
r
=
trans
::
alloc_ty
(
cx
,
t
);
bcx
=
r
.bcx
;
auto
llptr
=
r
.val
;
ret
tup
(
bcx
,
dst_copy
(
llptr
));
}
// AST substructure translation, with destinations
...
...
@@ -257,6 +287,20 @@ fn trans_lit(&@block_ctxt cx, &dest dest, &ast::lit lit) -> @block_ctxt {
ret
bcx
;
}
fn
trans_binary
(
&@
block_ctxt
cx
,
&
dest
in_dest
,
ast
::
binop
op
,
&@
ast
::
expr
lhs
,
&@
ast
::
expr
rhs
)
->
@
block_ctxt
{
auto
bcx
=
cx
;
auto
r
=
spill_alias
(
bcx
,
in_dest
,
ty
::
expr_ty
(
bcx_tcx
(
bcx
),
lhs
));
bcx
=
r
._0
;
auto
dest
=
r
._1
;
bcx
=
trans_expr
(
bcx
,
dest
,
lhs
);
r
=
mk_temp
(
bcx
,
ty
::
expr_ty
(
bcx_tcx
(
bcx
),
rhs
));
bcx
=
r
._0
;
auto
rhs_tmp
=
r
._1
;
bcx
=
trans_expr
(
bcx
,
rhs_tmp
,
rhs
);
ret
bcx
;
// TODO
}
fn
trans_log
(
&@
block_ctxt
cx
,
&
span
sp
,
int
level
,
&@
ast
::
expr
expr
)
->
@
block_ctxt
{
fn
trans_log_level
(
&@
local_ctxt
lcx
)
->
ValueRef
{
...
...
@@ -363,6 +407,9 @@ fn trans_expr(&@block_ctxt bcx, &dest dest, &@ast::expr expr) -> @block_ctxt {
ast
::
expr_log
(
?
level
,
?
operand
)
{
ret
trans_log
(
bcx
,
expr
.span
,
level
,
operand
);
}
ast
::
expr_binary
(
?
op
,
?
lhs
,
?
rhs
)
{
ret
trans_binary
(
bcx
,
dest
,
op
,
lhs
,
rhs
);
}
_
{
fail
"unhandled expr type in trans_expr"
;
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录