Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
348c77c3
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,发现更多精彩内容 >>
提交
348c77c3
编写于
3月 01, 2011
作者:
G
Graydon Hoare
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Populate default compilation environment as in rustboot.
上级
0761c5f4
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
44 addition
and
7 deletion
+44
-7
src/comp/driver/rustc.rs
src/comp/driver/rustc.rs
+34
-4
src/comp/front/eval.rs
src/comp/front/eval.rs
+1
-1
src/comp/front/parser.rs
src/comp/front/parser.rs
+9
-2
未找到文件。
src/comp/driver/rustc.rs
浏览文件 @
348c77c3
...
...
@@ -2,6 +2,7 @@
import
front
.parser
;
import
front
.token
;
import
front
.eval
;
import
middle
.trans
;
import
middle
.resolve
;
import
middle
.typeck
;
...
...
@@ -13,6 +14,30 @@
import
std
._str
;
import
std
._vec
;
fn
default_environment
(
session
.session
sess
,
str
argv0
,
str
input
)
->
eval
.env
{
auto
libc
=
"libc.so"
;
alt
(
sess
.get_targ_cfg
()
.os
)
{
case
(
session
.os_win32
)
{
libc
=
"msvcrt.dll"
;
}
case
(
session
.os_macos
)
{
libc
=
"libc.dylib"
;
}
case
(
session
.os_linux
)
{
libc
=
"libc.so.6"
;
}
}
ret
vec
(
// Target bindings.
tup
(
"target_os"
,
eval
.val_str
(
std
.os
.target_os
())),
tup
(
"target_arch"
,
eval
.val_str
(
"x86"
)),
tup
(
"target_libc"
,
eval
.val_str
(
libc
)),
// Build bindings.
tup
(
"build_compiler"
,
eval
.val_str
(
argv0
)),
tup
(
"build_input"
,
eval
.val_str
(
input
))
);
}
impure
fn
parse_input
(
session
.session
sess
,
parser
.parser
p
,
str
input
)
->
@
front
.ast.crate
{
...
...
@@ -25,9 +50,11 @@
fail
;
}
impure
fn
compile_input
(
session
.session
sess
,
str
input
,
str
output
,
impure
fn
compile_input
(
session
.session
sess
,
eval
.env
env
,
str
input
,
str
output
,
bool
shared
)
{
auto
p
=
parser
.new_parser
(
sess
,
0
,
input
);
auto
p
=
parser
.new_parser
(
sess
,
env
,
0
,
input
);
auto
crate
=
parse_input
(
sess
,
p
,
input
);
crate
=
resolve
.resolve_crate
(
sess
,
crate
);
crate
=
typeck
.check_crate
(
sess
,
crate
);
...
...
@@ -131,16 +158,19 @@ fn get_os() -> session.os {
sess
.err
(
"no input filename"
);
}
case
(
some
[
str
](
?
ifile
))
{
auto
env
=
default_environment
(
sess
,
args
.
(
0
),
ifile
);
alt
(
output_file
)
{
case
(
none
[
str
])
{
let
vec
[
str
]
parts
=
_
str
.split
(
ifile
,
'.'
as
u8
);
parts
=
_
vec
.pop
[
str
](
parts
);
parts
+=
".bc"
;
auto
ofile
=
_
str
.concat
(
parts
);
compile_input
(
sess
,
ifile
,
ofile
,
shared
);
compile_input
(
sess
,
env
,
ifile
,
ofile
,
shared
);
}
case
(
some
[
str
](
?
ofile
))
{
compile_input
(
sess
,
ifile
,
ofile
,
shared
);
compile_input
(
sess
,
env
,
ifile
,
ofile
,
shared
);
}
}
}
...
...
src/comp/front/eval.rs
浏览文件 @
348c77c3
...
...
@@ -393,7 +393,7 @@ fn val_eq(session.session sess, span sp, val av, val bv) -> bool {
auto
full_path
=
prefix
+
std
.os
.path_sep
()
+
file_path
;
auto
p0
=
new_parser
(
p
.get_session
(),
0
,
full_path
);
auto
p0
=
new_parser
(
p
.get_session
(),
e
,
0
,
full_path
);
auto
m0
=
parse_mod_items
(
p0
,
token
.EOF
);
auto
im
=
ast
.item_mod
(
id
,
m0
,
p
.next_def_id
());
auto
i
=
@
spanned
(
cdir
.span
,
cdir
.span
,
im
);
...
...
src/comp/front/parser.rs
浏览文件 @
348c77c3
...
...
@@ -31,15 +31,18 @@
impure
fn
restrict
(
restriction
r
);
fn
get_restriction
()
->
restriction
;
fn
get_file_type
()
->
file_type
;
fn
get_env
()
->
eval
.env
;
fn
get_session
()
->
session
.session
;
fn
get_span
()
->
common
.span
;
fn
next_def_id
()
->
ast
.def_id
;
};
impure
fn
new_parser
(
session
.session
sess
,
eval
.env
env
,
ast
.crate_num
crate
,
str
path
)
->
parser
{
state
obj
stdio_parser
(
session
.session
sess
,
eval
.env
env
,
file_type
ftype
,
mutable
token
.token
tok
,
mutable
common
.pos
lo
,
...
...
@@ -93,6 +96,10 @@ fn get_file_type() -> file_type {
ret
ftype
;
}
fn
get_env
()
->
eval
.env
{
ret
env
;
}
}
auto
ftype
=
SOURCE_FILE
;
if
(
_
str
.ends_with
(
path
,
".rc"
))
{
...
...
@@ -101,7 +108,7 @@ fn get_file_type() -> file_type {
auto
srdr
=
io
.new_stdio_reader
(
path
);
auto
rdr
=
lexer
.new_reader
(
srdr
,
path
);
auto
npos
=
rdr
.get_curr_pos
();
ret
stdio_parser
(
sess
,
ftype
,
lexer
.next_token
(
rdr
),
ret
stdio_parser
(
sess
,
env
,
ftype
,
lexer
.next_token
(
rdr
),
npos
,
npos
,
0
,
UNRESTRICTED
,
crate
,
rdr
);
}
...
...
@@ -2279,7 +2286,7 @@ fn is_use_or_import(token.token t) -> bool {
auto
hi
=
lo
;
auto
prefix
=
std
.path
.dirname
(
lo
.filename
);
auto
cdirs
=
parse_crate_directives
(
p
,
token
.EOF
);
auto
m
=
eval
.eval_crate_directives_to_mod
(
p
,
eval
.mk
_env
(),
auto
m
=
eval
.eval_crate_directives_to_mod
(
p
,
p
.get
_env
(),
cdirs
,
prefix
);
hi
=
p
.get_span
();
expect
(
p
,
token
.EOF
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录