Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
274128c6
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,发现更多精彩内容 >>
提交
274128c6
编写于
9月 23, 2010
作者:
G
Graydon Hoare
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add trans.get_upcall and skeleton for trans_log.
上级
730439c5
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
2 deletion
+36
-2
src/comp/middle/trans.rs
src/comp/middle/trans.rs
+36
-2
未找到文件。
src/comp/middle/trans.rs
浏览文件 @
274128c6
...
...
@@ -2,6 +2,7 @@
import
std
._vec
;
import
std
._str.rustrt.sbuf
;
import
std
._vec.rustrt.vbuf
;
import
std
.map.hashmap
;
import
front
.ast
;
import
driver
.session
;
...
...
@@ -9,6 +10,7 @@
import
back
.abi
;
import
util
.common.istr
;
import
util
.common.new_str_hash
;
import
lib
.llvm.llvm
;
import
lib
.llvm.builder
;
...
...
@@ -27,6 +29,7 @@
type
trans_ctxt
=
rec
(
session
.session
sess
,
ModuleRef
llmod
,
hashmap
[
str
,
ValueRef
]
upcalls
,
@
glue_fns
glues
,
str
path
);
...
...
@@ -88,10 +91,36 @@ fn decl_upcall(ModuleRef llmod, uint _n) -> ValueRef {
ret
decl_cdecl_fn
(
llmod
,
s
,
args
,
T_int
());
}
type
terminator
=
fn
(
&
trans_ctxt
cx
,
builder
b
);
fn
get_upcall
(
&
trans_ctxt
cx
,
str
name
,
int
n_args
)
->
ValueRef
{
if
(
cx
.upcalls
.contains_key
(
name
))
{
ret
cx
.upcalls
.get
(
name
);
}
auto
inputs
=
vec
(
T_ptr
(
T_task
()));
inputs
+=
_
vec
.init_elt
[
TypeRef
](
T_int
(),
n_args
as
uint
);
auto
output
=
T_nil
();
auto
f
=
decl_cdecl_fn
(
cx
.llmod
,
name
,
inputs
,
output
);
cx
.upcalls
.insert
(
name
,
f
);
ret
f
;
}
fn
trans_log
(
&
trans_ctxt
cx
,
builder
b
,
&
ast
.atom
a
)
{
alt
(
a
)
{
case
(
ast
.atom_lit
(
?
lit
))
{
alt
(
*
lit
)
{
case
(
ast
.lit_int
(
?
i
))
{
cx
.sess
.unimpl
(
"log int"
);
}
case
(
_
)
{
cx
.sess
.unimpl
(
"literal variant in trans_log"
);
}
}
}
case
(
_
)
{
cx
.sess
.unimpl
(
"atom variant in trans_log"
);
}
}
}
fn
trans_stmt
(
&
trans_ctxt
cx
,
builder
b
,
&
ast
.stmt
s
,
terminator
t
)
{
...
...
@@ -160,7 +189,12 @@ fn trans_crate(session.session sess, ast.crate crate) {
_
vec
.init_fn
[
ValueRef
](
bind
decl_upcall
(
llmod
,
_
),
abi
.n_upcall_glues
as
uint
));
auto
cx
=
rec
(
sess
=
sess
,
llmod
=
llmod
,
glues
=
glues
,
path
=
""
);
auto
cx
=
rec
(
sess
=
sess
,
llmod
=
llmod
,
upcalls
=
new_str_hash
[
ValueRef
](),
glues
=
glues
,
path
=
""
);
trans_mod
(
cx
,
crate
.module
);
llvm
.LLVMWriteBitcodeToFile
(
llmod
,
_
str
.buf
(
"rust_out.bc"
));
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录