Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
90cbe0ca
R
Rust
项目概览
int
/
Rust
11 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
90cbe0ca
编写于
3月 09, 2014
作者:
E
Eduard Burtescu
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
De-@ ParseSess uses.
上级
555a2393
变更
16
隐藏空白更改
内联
并排
Showing
16 changed file
with
90 addition
and
109 deletion
+90
-109
src/librustc/driver/driver.rs
src/librustc/driver/driver.rs
+4
-5
src/librustc/driver/session.rs
src/librustc/driver/session.rs
+1
-1
src/librustc/front/test.rs
src/librustc/front/test.rs
+1
-1
src/librustc/lib.rs
src/librustc/lib.rs
+2
-2
src/librustc/middle/astencode.rs
src/librustc/middle/astencode.rs
+4
-4
src/librustdoc/html/highlight.rs
src/librustdoc/html/highlight.rs
+3
-3
src/libsyntax/ext/base.rs
src/libsyntax/ext/base.rs
+3
-3
src/libsyntax/ext/expand.rs
src/libsyntax/ext/expand.rs
+8
-7
src/libsyntax/ext/format.rs
src/libsyntax/ext/format.rs
+3
-3
src/libsyntax/ext/tt/macro_parser.rs
src/libsyntax/ext/tt/macro_parser.rs
+4
-4
src/libsyntax/ext/tt/macro_rules.rs
src/libsyntax/ext/tt/macro_rules.rs
+4
-4
src/libsyntax/parse/attr.rs
src/libsyntax/parse/attr.rs
+1
-1
src/libsyntax/parse/mod.rs
src/libsyntax/parse/mod.rs
+39
-39
src/libsyntax/parse/obsolete.rs
src/libsyntax/parse/obsolete.rs
+1
-1
src/libsyntax/parse/parser.rs
src/libsyntax/parse/parser.rs
+5
-5
src/libsyntax/util/parser_testing.rs
src/libsyntax/util/parser_testing.rs
+7
-26
未找到文件。
src/librustc/driver/driver.rs
浏览文件 @
90cbe0ca
...
...
@@ -146,11 +146,10 @@ pub fn build_configuration(sess: &Session) -> ast::CrateConfig {
fn
parse_cfgspecs
(
cfgspecs
:
Vec
<~
str
>
)
->
ast
::
CrateConfig
{
cfgspecs
.move_iter
()
.map
(|
s
|
{
let
sess
=
parse
::
new_parse_sess
();
parse
::
parse_meta_from_source_str
(
"cfgspec"
.to_str
(),
s
,
Vec
::
new
(),
sess
)
&
parse
::
new_parse_sess
()
)
})
.collect
::
<
ast
::
CrateConfig
>
()
}
...
...
@@ -175,13 +174,13 @@ pub fn phase_1_parse_input(sess: &Session, cfg: ast::CrateConfig, input: &Input)
let
krate
=
time
(
sess
.time_passes
(),
"parsing"
,
(),
|
_
|
{
match
*
input
{
FileInput
(
ref
file
)
=>
{
parse
::
parse_crate_from_file
(
&
(
*
file
),
cfg
.clone
(),
sess
.parse_sess
)
parse
::
parse_crate_from_file
(
&
(
*
file
),
cfg
.clone
(),
&
sess
.parse_sess
)
}
StrInput
(
ref
src
)
=>
{
parse
::
parse_crate_from_source_str
(
anon_src
(),
(
*
src
)
.clone
(),
cfg
.clone
(),
sess
.parse_sess
)
&
sess
.parse_sess
)
}
}
});
...
...
@@ -241,7 +240,7 @@ pub fn phase_2_configure_and_expand(sess: &Session,
deriving_hash_type_parameter
:
sess
.features.default_type_params
.get
(),
crate_id
:
crate_id
.clone
(),
};
syntax
::
ext
::
expand
::
expand_crate
(
sess
.parse_sess
,
syntax
::
ext
::
expand
::
expand_crate
(
&
sess
.parse_sess
,
cfg
,
krate
)
});
...
...
src/librustc/driver/session.rs
浏览文件 @
90cbe0ca
...
...
@@ -177,7 +177,7 @@ pub struct Session {
targ_cfg
:
@
Config
,
opts
:
@
Options
,
cstore
:
metadata
::
cstore
::
CStore
,
parse_sess
:
@
ParseSess
,
parse_sess
:
ParseSess
,
codemap
:
@
codemap
::
CodeMap
,
// For a library crate, this is always none
entry_fn
:
RefCell
<
Option
<
(
NodeId
,
codemap
::
Span
)
>>
,
...
...
src/librustc/front/test.rs
浏览文件 @
90cbe0ca
...
...
@@ -166,7 +166,7 @@ fn generate_test_harness(sess: &Session, krate: ast::Crate)
let
loader
=
&
mut
Loader
::
new
(
sess
);
let
mut
cx
:
TestCtxt
=
TestCtxt
{
sess
:
sess
,
ext_cx
:
ExtCtxt
::
new
(
sess
.parse_sess
,
sess
.opts.cfg
.clone
(),
ext_cx
:
ExtCtxt
::
new
(
&
sess
.parse_sess
,
sess
.opts.cfg
.clone
(),
ExpansionConfig
{
loader
:
loader
,
deriving_hash_type_parameter
:
false
,
...
...
src/librustc/lib.rs
浏览文件 @
90cbe0ca
...
...
@@ -350,13 +350,13 @@ fn parse_crate_attrs(sess: &session::Session, input: &d::Input) ->
d
::
FileInput
(
ref
ifile
)
=>
{
parse
::
parse_crate_attrs_from_file
(
ifile
,
Vec
::
new
(),
sess
.parse_sess
)
&
sess
.parse_sess
)
}
d
::
StrInput
(
ref
src
)
=>
{
parse
::
parse_crate_attrs_from_source_str
(
d
::
anon_src
(),
(
*
src
)
.clone
(),
Vec
::
new
(),
sess
.parse_sess
)
&
sess
.parse_sess
)
}
};
result
.move_iter
()
.collect
()
...
...
src/librustc/middle/astencode.rs
浏览文件 @
90cbe0ca
...
...
@@ -1446,17 +1446,17 @@ fn decode_item_ast(par_doc: ebml::Doc) -> @ast::Item {
#[cfg(test)]
trait
fake_ext_ctxt
{
fn
cfg
(
&
self
)
->
ast
::
CrateConfig
;
fn
parse_sess
(
&
self
)
->
@
parse
::
ParseSess
;
fn
parse_sess
<
'a
>
(
&
'a
self
)
->
&
'a
parse
::
ParseSess
;
fn
call_site
(
&
self
)
->
Span
;
fn
ident_of
(
&
self
,
st
:
&
str
)
->
ast
::
Ident
;
}
#[cfg(test)]
impl
fake_ext_ctxt
for
@
parse
::
ParseSess
{
impl
fake_ext_ctxt
for
parse
::
ParseSess
{
fn
cfg
(
&
self
)
->
ast
::
CrateConfig
{
Vec
::
new
()
}
fn
parse_sess
(
&
self
)
->
@
parse
::
ParseSess
{
*
self
}
fn
parse_sess
<
'a
>
(
&
'a
self
)
->
&
'a
parse
::
ParseSess
{
self
}
fn
call_site
(
&
self
)
->
Span
{
codemap
::
Span
{
lo
:
codemap
::
BytePos
(
0
),
...
...
@@ -1470,7 +1470,7 @@ fn ident_of(&self, st: &str) -> ast::Ident {
}
#[cfg(test)]
fn
mk_ctxt
()
->
@
parse
::
ParseSess
{
fn
mk_ctxt
()
->
parse
::
ParseSess
{
parse
::
new_parse_sess
()
}
...
...
src/librustdoc/html/highlight.rs
浏览文件 @
90cbe0ca
...
...
@@ -30,10 +30,10 @@ pub fn highlight(src: &str, class: Option<&str>) -> ~str {
let
sess
=
parse
::
new_parse_sess
();
let
handler
=
diagnostic
::
default_handler
();
let
span_handler
=
diagnostic
::
mk_span_handler
(
handler
,
sess
.cm
);
let
fm
=
parse
::
string_to_filemap
(
sess
,
src
.to_owned
(),
~
"<stdin>"
);
let
fm
=
parse
::
string_to_filemap
(
&
sess
,
src
.to_owned
(),
~
"<stdin>"
);
let
mut
out
=
io
::
MemWriter
::
new
();
doit
(
sess
,
doit
(
&
sess
,
lexer
::
new_string_reader
(
span_handler
,
fm
),
class
,
&
mut
out
)
.unwrap
();
...
...
@@ -47,7 +47,7 @@ pub fn highlight(src: &str, class: Option<&str>) -> ~str {
/// it's used. All source code emission is done as slices from the source map,
/// not from the tokens themselves, in order to stay true to the original
/// source.
fn
doit
(
sess
:
@
parse
::
ParseSess
,
lexer
:
lexer
::
StringReader
,
class
:
Option
<&
str
>
,
fn
doit
(
sess
:
&
parse
::
ParseSess
,
lexer
:
lexer
::
StringReader
,
class
:
Option
<&
str
>
,
out
:
&
mut
Writer
)
->
io
::
IoResult
<
()
>
{
use
syntax
::
parse
::
lexer
::
Reader
;
...
...
src/libsyntax/ext/base.rs
浏览文件 @
90cbe0ca
...
...
@@ -289,7 +289,7 @@ pub trait CrateLoader {
// when a macro expansion occurs, the resulting nodes have the backtrace()
// -> expn_info of their expansion context stored into their span.
pub
struct
ExtCtxt
<
'a
>
{
parse_sess
:
@
parse
::
ParseSess
,
parse_sess
:
&
'a
parse
::
ParseSess
,
cfg
:
ast
::
CrateConfig
,
backtrace
:
Option
<@
ExpnInfo
>
,
ecfg
:
expand
::
ExpansionConfig
<
'a
>
,
...
...
@@ -299,7 +299,7 @@ pub struct ExtCtxt<'a> {
}
impl
<
'a
>
ExtCtxt
<
'a
>
{
pub
fn
new
<
'a
>
(
parse_sess
:
@
parse
::
ParseSess
,
cfg
:
ast
::
CrateConfig
,
pub
fn
new
<
'a
>
(
parse_sess
:
&
'a
parse
::
ParseSess
,
cfg
:
ast
::
CrateConfig
,
ecfg
:
expand
::
ExpansionConfig
<
'a
>
)
->
ExtCtxt
<
'a
>
{
ExtCtxt
{
parse_sess
:
parse_sess
,
...
...
@@ -327,7 +327,7 @@ pub fn expand_expr(&mut self, mut e: @ast::Expr) -> @ast::Expr {
}
pub
fn
codemap
(
&
self
)
->
@
CodeMap
{
self
.parse_sess.cm
}
pub
fn
parse_sess
(
&
self
)
->
@
parse
::
ParseSess
{
self
.parse_sess
}
pub
fn
parse_sess
(
&
self
)
->
&
'a
parse
::
ParseSess
{
self
.parse_sess
}
pub
fn
cfg
(
&
self
)
->
ast
::
CrateConfig
{
self
.cfg
.clone
()
}
pub
fn
call_site
(
&
self
)
->
Span
{
match
self
.backtrace
{
...
...
src/libsyntax/ext/expand.rs
浏览文件 @
90cbe0ca
...
...
@@ -838,12 +838,12 @@ pub fn new_span(cx: &ExtCtxt, sp: Span) -> Span {
}
}
pub
struct
MacroExpander
<
'a
>
{
pub
struct
MacroExpander
<
'a
,
'b
>
{
extsbox
:
SyntaxEnv
,
cx
:
&
'a
mut
ExtCtxt
<
'
a
>
,
cx
:
&
'a
mut
ExtCtxt
<
'
b
>
,
}
impl
<
'a
>
Folder
for
MacroExpander
<
'a
>
{
impl
<
'a
,
'b
>
Folder
for
MacroExpander
<
'a
,
'b
>
{
fn
fold_expr
(
&
mut
self
,
expr
:
@
ast
::
Expr
)
->
@
ast
::
Expr
{
expand_expr
(
expr
,
self
)
}
...
...
@@ -875,7 +875,7 @@ pub struct ExpansionConfig<'a> {
crate_id
:
CrateId
,
}
pub
fn
expand_crate
(
parse_sess
:
@
parse
::
ParseSess
,
pub
fn
expand_crate
(
parse_sess
:
&
parse
::
ParseSess
,
cfg
:
ExpansionConfig
,
c
:
Crate
)
->
Crate
{
let
mut
cx
=
ExtCtxt
::
new
(
parse_sess
,
c
.config
.clone
(),
cfg
);
...
...
@@ -974,7 +974,7 @@ mod test {
use
ext
::
mtwt
;
use
parse
;
use
parse
::
token
;
use
util
::
parser_testing
::{
string_to_
crate_and_sess
};
use
util
::
parser_testing
::{
string_to_
parser
};
use
util
::
parser_testing
::{
string_to_pat
,
strs_to_idents
};
use
visit
;
use
visit
::
Visitor
;
...
...
@@ -1126,7 +1126,8 @@ fn make_dummy_attr(s: &str) -> ast::Attribute {
//}
fn
expand_crate_str
(
crate_str
:
~
str
)
->
ast
::
Crate
{
let
(
crate_ast
,
ps
)
=
string_to_crate_and_sess
(
crate_str
);
let
ps
=
parse
::
new_parse_sess
();
let
crate_ast
=
string_to_parser
(
&
ps
,
source_str
)
.parse_crate_mod
();
// the cfg argument actually does matter, here...
let
mut
loader
=
ErrLoader
;
let
cfg
=
::
syntax
::
ext
::
expand
::
ExpansionConfig
{
...
...
@@ -1134,7 +1135,7 @@ fn expand_crate_str(crate_str: ~str) -> ast::Crate {
deriving_hash_type_parameter
:
false
,
crate_id
:
from_str
(
"test"
)
.unwrap
(),
};
expand_crate
(
ps
,
cfg
,
crate_ast
)
expand_crate
(
&
ps
,
cfg
,
crate_ast
)
}
//fn expand_and_resolve(crate_str: @str) -> ast::crate {
...
...
src/libsyntax/ext/format.rs
浏览文件 @
90cbe0ca
...
...
@@ -35,8 +35,8 @@ enum Position {
Named
(
~
str
),
}
struct
Context
<
'a
>
{
ecx
:
&
'a
mut
ExtCtxt
<
'
a
>
,
struct
Context
<
'a
,
'b
>
{
ecx
:
&
'a
mut
ExtCtxt
<
'
b
>
,
fmtsp
:
Span
,
// Parsed argument expressions and the types that we've found so far for
...
...
@@ -142,7 +142,7 @@ fn parse_args(ecx: &mut ExtCtxt, sp: Span, tts: &[ast::TokenTree])
return
(
extra
,
Some
((
fmtstr
,
args
,
order
,
names
)));
}
impl
<
'a
>
Context
<
'a
>
{
impl
<
'a
,
'b
>
Context
<
'a
,
'b
>
{
/// Verifies one piece of a parse string. All errors are not emitted as
/// fatal so we can continue giving errors about this and possibly other
/// format strings.
...
...
src/libsyntax/ext/tt/macro_parser.rs
浏览文件 @
90cbe0ca
...
...
@@ -170,9 +170,9 @@ pub enum NamedMatch {
MatchedNonterminal
(
Nonterminal
)
}
pub
fn
nameize
(
p_s
:
@
ParseSess
,
ms
:
&
[
Matcher
],
res
:
&
[
@
NamedMatch
])
pub
fn
nameize
(
p_s
:
&
ParseSess
,
ms
:
&
[
Matcher
],
res
:
&
[
@
NamedMatch
])
->
HashMap
<
Ident
,
@
NamedMatch
>
{
fn
n_rec
(
p_s
:
@
ParseSess
,
m
:
&
Matcher
,
res
:
&
[
@
NamedMatch
],
fn
n_rec
(
p_s
:
&
ParseSess
,
m
:
&
Matcher
,
res
:
&
[
@
NamedMatch
],
ret_val
:
&
mut
HashMap
<
Ident
,
@
NamedMatch
>
)
{
match
*
m
{
codemap
::
Spanned
{
node
:
MatchTok
(
_
),
..
}
=>
(),
...
...
@@ -205,7 +205,7 @@ pub enum ParseResult {
Error
(
codemap
::
Span
,
~
str
)
}
pub
fn
parse_or_else
<
R
:
Reader
>
(
sess
:
@
ParseSess
,
pub
fn
parse_or_else
<
R
:
Reader
>
(
sess
:
&
ParseSess
,
cfg
:
ast
::
CrateConfig
,
rdr
:
R
,
ms
:
Vec
<
Matcher
>
)
...
...
@@ -227,7 +227,7 @@ pub fn token_name_eq(t1 : &Token, t2 : &Token) -> bool {
}
}
pub
fn
parse
<
R
:
Reader
>
(
sess
:
@
ParseSess
,
pub
fn
parse
<
R
:
Reader
>
(
sess
:
&
ParseSess
,
cfg
:
ast
::
CrateConfig
,
rdr
:
R
,
ms
:
&
[
Matcher
])
...
...
src/libsyntax/ext/tt/macro_rules.rs
浏览文件 @
90cbe0ca
...
...
@@ -30,11 +30,11 @@
use
std
::
cell
::
RefCell
;
use
std
::
vec_ng
::
Vec
;
struct
ParserAnyMacro
{
parser
:
RefCell
<
Parser
>
,
struct
ParserAnyMacro
<
'a
>
{
parser
:
RefCell
<
Parser
<
'a
>
>
,
}
impl
ParserAnyMacro
{
impl
<
'a
>
ParserAnyMacro
<
'a
>
{
/// Make sure we don't have any tokens left to parse, so we don't
/// silently drop anything. `allow_semi` is so that "optional"
/// semilons at the end of normal expressions aren't complained
...
...
@@ -57,7 +57,7 @@ fn ensure_complete_parse(&self, allow_semi: bool) {
}
}
impl
AnyMacro
for
ParserAnyMacro
{
impl
<
'a
>
AnyMacro
for
ParserAnyMacro
<
'a
>
{
fn
make_expr
(
&
self
)
->
@
ast
::
Expr
{
let
ret
=
{
let
mut
parser
=
self
.parser
.borrow_mut
();
...
...
src/libsyntax/parse/attr.rs
浏览文件 @
90cbe0ca
...
...
@@ -28,7 +28,7 @@ fn parse_inner_attrs_and_next(&mut self)
fn
parse_optional_meta
(
&
mut
self
)
->
Vec
<@
ast
::
MetaItem
>
;
}
impl
ParserAttr
for
Parser
{
impl
<
'a
>
ParserAttr
for
Parser
<
'a
>
{
// Parse attributes that appear before an item
fn
parse_outer_attributes
(
&
mut
self
)
->
Vec
<
ast
::
Attribute
>
{
let
mut
attrs
:
Vec
<
ast
::
Attribute
>
=
Vec
::
new
();
...
...
src/libsyntax/parse/mod.rs
浏览文件 @
90cbe0ca
...
...
@@ -46,9 +46,9 @@ pub struct ParseSess {
included_mod_stack
:
RefCell
<
Vec
<
Path
>
>
,
}
pub
fn
new_parse_sess
()
->
@
ParseSess
{
pub
fn
new_parse_sess
()
->
ParseSess
{
let
cm
=
@
CodeMap
::
new
();
@
ParseSess
{
ParseSess
{
cm
:
cm
,
span_diagnostic
:
mk_span_handler
(
default_handler
(),
cm
),
included_mod_stack
:
RefCell
::
new
(
Vec
::
new
()),
...
...
@@ -57,8 +57,8 @@ pub fn new_parse_sess() -> @ParseSess {
pub
fn
new_parse_sess_special_handler
(
sh
:
@
SpanHandler
,
cm
:
@
codemap
::
CodeMap
)
->
@
ParseSess
{
@
ParseSess
{
->
ParseSess
{
ParseSess
{
cm
:
cm
,
span_diagnostic
:
sh
,
included_mod_stack
:
RefCell
::
new
(
Vec
::
new
()),
...
...
@@ -73,7 +73,7 @@ pub fn new_parse_sess_special_handler(sh: @SpanHandler,
pub
fn
parse_crate_from_file
(
input
:
&
Path
,
cfg
:
ast
::
CrateConfig
,
sess
:
@
ParseSess
sess
:
&
ParseSess
)
->
ast
::
Crate
{
new_parser_from_file
(
sess
,
cfg
,
input
)
.parse_crate_mod
()
// why is there no p.abort_if_errors here?
...
...
@@ -82,17 +82,17 @@ pub fn parse_crate_from_file(
pub
fn
parse_crate_attrs_from_file
(
input
:
&
Path
,
cfg
:
ast
::
CrateConfig
,
sess
:
@
ParseSess
sess
:
&
ParseSess
)
->
Vec
<
ast
::
Attribute
>
{
let
mut
parser
=
new_parser_from_file
(
sess
,
cfg
,
input
);
let
(
inner
,
_
)
=
parser
.parse_inner_attrs_and_next
();
return
inner
;
inner
}
pub
fn
parse_crate_from_source_str
(
name
:
~
str
,
source
:
~
str
,
cfg
:
ast
::
CrateConfig
,
sess
:
@
ParseSess
)
sess
:
&
ParseSess
)
->
ast
::
Crate
{
let
mut
p
=
new_parser_from_source_str
(
sess
,
cfg
,
...
...
@@ -104,20 +104,20 @@ pub fn parse_crate_from_source_str(name: ~str,
pub
fn
parse_crate_attrs_from_source_str
(
name
:
~
str
,
source
:
~
str
,
cfg
:
ast
::
CrateConfig
,
sess
:
@
ParseSess
)
sess
:
&
ParseSess
)
->
Vec
<
ast
::
Attribute
>
{
let
mut
p
=
new_parser_from_source_str
(
sess
,
cfg
,
name
,
source
);
let
(
inner
,
_
)
=
maybe_aborted
(
p
.parse_inner_attrs_and_next
(),
p
);
return
inner
;
inner
}
pub
fn
parse_expr_from_source_str
(
name
:
~
str
,
source
:
~
str
,
cfg
:
ast
::
CrateConfig
,
sess
:
@
ParseSess
)
sess
:
&
ParseSess
)
->
@
ast
::
Expr
{
let
mut
p
=
new_parser_from_source_str
(
sess
,
cfg
,
name
,
source
);
maybe_aborted
(
p
.parse_expr
(),
p
)
...
...
@@ -126,7 +126,7 @@ pub fn parse_expr_from_source_str(name: ~str,
pub
fn
parse_item_from_source_str
(
name
:
~
str
,
source
:
~
str
,
cfg
:
ast
::
CrateConfig
,
sess
:
@
ParseSess
)
sess
:
&
ParseSess
)
->
Option
<@
ast
::
Item
>
{
let
mut
p
=
new_parser_from_source_str
(
sess
,
cfg
,
name
,
source
);
let
attrs
=
p
.parse_outer_attributes
();
...
...
@@ -136,7 +136,7 @@ pub fn parse_item_from_source_str(name: ~str,
pub
fn
parse_meta_from_source_str
(
name
:
~
str
,
source
:
~
str
,
cfg
:
ast
::
CrateConfig
,
sess
:
@
ParseSess
)
sess
:
&
ParseSess
)
->
@
ast
::
MetaItem
{
let
mut
p
=
new_parser_from_source_str
(
sess
,
cfg
,
name
,
source
);
maybe_aborted
(
p
.parse_meta_item
(),
p
)
...
...
@@ -146,7 +146,7 @@ pub fn parse_stmt_from_source_str(name: ~str,
source
:
~
str
,
cfg
:
ast
::
CrateConfig
,
attrs
:
Vec
<
ast
::
Attribute
>
,
sess
:
@
ParseSess
)
sess
:
&
ParseSess
)
->
@
ast
::
Stmt
{
let
mut
p
=
new_parser_from_source_str
(
sess
,
...
...
@@ -160,7 +160,7 @@ pub fn parse_stmt_from_source_str(name: ~str,
pub
fn
parse_tts_from_source_str
(
name
:
~
str
,
source
:
~
str
,
cfg
:
ast
::
CrateConfig
,
sess
:
@
ParseSess
)
sess
:
&
ParseSess
)
->
Vec
<
ast
::
TokenTree
>
{
let
mut
p
=
new_parser_from_source_str
(
sess
,
...
...
@@ -174,48 +174,48 @@ pub fn parse_tts_from_source_str(name: ~str,
}
// Create a new parser from a source string
pub
fn
new_parser_from_source_str
(
sess
:
@
ParseSess
,
cfg
:
ast
::
CrateConfig
,
name
:
~
str
,
source
:
~
str
)
->
Parser
{
pub
fn
new_parser_from_source_str
<
'a
>
(
sess
:
&
'a
ParseSess
,
cfg
:
ast
::
CrateConfig
,
name
:
~
str
,
source
:
~
str
)
->
Parser
<
'a
>
{
filemap_to_parser
(
sess
,
string_to_filemap
(
sess
,
source
,
name
),
cfg
)
}
/// Create a new parser, handling errors as appropriate
/// if the file doesn't exist
pub
fn
new_parser_from_file
(
sess
:
@
ParseSess
,
pub
fn
new_parser_from_file
<
'a
>
(
sess
:
&
'a
ParseSess
,
cfg
:
ast
::
CrateConfig
,
path
:
&
Path
)
->
Parser
{
)
->
Parser
<
'a
>
{
filemap_to_parser
(
sess
,
file_to_filemap
(
sess
,
path
,
None
),
cfg
)
}
/// Given a session, a crate config, a path, and a span, add
/// the file at the given path to the codemap, and return a parser.
/// On an error, use the given span as the source of the problem.
pub
fn
new_sub_parser_from_file
(
sess
:
@
ParseSess
,
pub
fn
new_sub_parser_from_file
<
'a
>
(
sess
:
&
'a
ParseSess
,
cfg
:
ast
::
CrateConfig
,
path
:
&
Path
,
sp
:
Span
)
->
Parser
{
)
->
Parser
<
'a
>
{
filemap_to_parser
(
sess
,
file_to_filemap
(
sess
,
path
,
Some
(
sp
)),
cfg
)
}
/// Given a filemap and config, return a parser
pub
fn
filemap_to_parser
(
sess
:
@
ParseSess
,
filemap
:
@
FileMap
,
cfg
:
ast
::
CrateConfig
)
->
Parser
{
pub
fn
filemap_to_parser
<
'a
>
(
sess
:
&
'a
ParseSess
,
filemap
:
@
FileMap
,
cfg
:
ast
::
CrateConfig
)
->
Parser
<
'a
>
{
tts_to_parser
(
sess
,
filemap_to_tts
(
sess
,
filemap
),
cfg
)
}
// must preserve old name for now, because quote! from the *existing*
// compiler expands into it
pub
fn
new_parser_from_tts
(
sess
:
@
ParseSess
,
cfg
:
ast
::
CrateConfig
,
tts
:
Vec
<
ast
::
TokenTree
>
)
->
Parser
{
pub
fn
new_parser_from_tts
<
'a
>
(
sess
:
&
'a
ParseSess
,
cfg
:
ast
::
CrateConfig
,
tts
:
Vec
<
ast
::
TokenTree
>
)
->
Parser
<
'a
>
{
tts_to_parser
(
sess
,
tts
,
cfg
)
}
...
...
@@ -224,7 +224,7 @@ pub fn new_parser_from_tts(sess: @ParseSess,
/// Given a session and a path and an optional span (for error reporting),
/// add the path to the session's codemap and return the new filemap.
pub
fn
file_to_filemap
(
sess
:
@
ParseSess
,
path
:
&
Path
,
spanopt
:
Option
<
Span
>
)
pub
fn
file_to_filemap
(
sess
:
&
ParseSess
,
path
:
&
Path
,
spanopt
:
Option
<
Span
>
)
->
@
FileMap
{
let
err
=
|
msg
:
&
str
|
{
match
spanopt
{
...
...
@@ -250,13 +250,13 @@ pub fn file_to_filemap(sess: @ParseSess, path: &Path, spanopt: Option<Span>)
// given a session and a string, add the string to
// the session's codemap and return the new filemap
pub
fn
string_to_filemap
(
sess
:
@
ParseSess
,
source
:
~
str
,
path
:
~
str
)
pub
fn
string_to_filemap
(
sess
:
&
ParseSess
,
source
:
~
str
,
path
:
~
str
)
->
@
FileMap
{
sess
.cm
.new_filemap
(
path
,
source
)
}
// given a filemap, produce a sequence of token-trees
pub
fn
filemap_to_tts
(
sess
:
@
ParseSess
,
filemap
:
@
FileMap
)
pub
fn
filemap_to_tts
(
sess
:
&
ParseSess
,
filemap
:
@
FileMap
)
->
Vec
<
ast
::
TokenTree
>
{
// it appears to me that the cfg doesn't matter here... indeed,
// parsing tt's probably shouldn't require a parser at all.
...
...
@@ -267,9 +267,9 @@ pub fn filemap_to_tts(sess: @ParseSess, filemap: @FileMap)
}
// given tts and cfg, produce a parser
pub
fn
tts_to_parser
(
sess
:
@
ParseSess
,
tts
:
Vec
<
ast
::
TokenTree
>
,
cfg
:
ast
::
CrateConfig
)
->
Parser
{
pub
fn
tts_to_parser
<
'a
>
(
sess
:
&
'a
ParseSess
,
tts
:
Vec
<
ast
::
TokenTree
>
,
cfg
:
ast
::
CrateConfig
)
->
Parser
<
'a
>
{
let
trdr
=
lexer
::
new_tt_reader
(
sess
.span_diagnostic
,
None
,
tts
);
Parser
(
sess
,
cfg
,
~
trdr
)
}
...
...
@@ -594,7 +594,7 @@ fn parser_done(p: Parser){
}
#[test]
fn
parse_ident_pat
()
{
let
mut
parser
=
string_to_parser
(
~
"b"
);
let
mut
parser
=
string_to_parser
(
&
new_parse_sess
(),
~
"b"
);
assert
!
(
parser
.parse_pat
()
==
@
ast
::
Pat
{
id
:
ast
::
DUMMY_NODE_ID
,
node
:
ast
::
PatIdent
(
...
...
src/libsyntax/parse/obsolete.rs
浏览文件 @
90cbe0ca
...
...
@@ -59,7 +59,7 @@ fn report(&mut self,
fn
eat_obsolete_ident
(
&
mut
self
,
ident
:
&
str
)
->
bool
;
}
impl
ParserObsoleteMethods
for
Parser
{
impl
<
'a
>
ParserObsoleteMethods
for
Parser
<
'a
>
{
/// Reports an obsolete syntax non-fatal error.
fn
obsolete
(
&
mut
self
,
sp
:
Span
,
kind
:
ObsoleteSyntax
)
{
let
(
kind_str
,
desc
)
=
match
kind
{
...
...
src/libsyntax/parse/parser.rs
浏览文件 @
90cbe0ca
...
...
@@ -284,8 +284,8 @@ struct ParsedItemsAndViewItems {
/* ident is handled by common.rs */
pub
fn
Parser
(
sess
:
@
ParseSess
,
cfg
:
ast
::
CrateConfig
,
rdr
:
~
Reader
:)
->
Parser
{
pub
fn
Parser
<
'a
>
(
sess
:
&
'a
ParseSess
,
cfg
:
ast
::
CrateConfig
,
rdr
:
~
Reader
:)
->
Parser
<
'a
>
{
let
tok0
=
rdr
.next_token
();
let
span
=
tok0
.sp
;
let
placeholder
=
TokenAndSpan
{
...
...
@@ -320,8 +320,8 @@ pub fn Parser(sess: @ParseSess, cfg: ast::CrateConfig, rdr: ~Reader:)
}
}
pub
struct
Parser
{
sess
:
@
ParseSess
,
pub
struct
Parser
<
'a
>
{
sess
:
&
'a
ParseSess
,
cfg
:
CrateConfig
,
// the current token:
token
:
token
::
Token
,
...
...
@@ -354,7 +354,7 @@ fn is_plain_ident_or_underscore(t: &token::Token) -> bool {
is_plain_ident
(
t
)
||
*
t
==
token
::
UNDERSCORE
}
impl
Parser
{
impl
<
'a
>
Parser
<
'a
>
{
// convert a token to a string using self's reader
pub
fn
token_to_str
(
token
:
&
token
::
Token
)
->
~
str
{
token
::
to_str
(
token
)
...
...
src/libsyntax/util/parser_testing.rs
浏览文件 @
90cbe0ca
...
...
@@ -17,32 +17,19 @@
use
std
::
vec_ng
::
Vec
;
// map a string to tts, using a made-up filename: return both the TokenTree's
// and the ParseSess
pub
fn
string_to_tts_and_sess
(
source_str
:
~
str
)
->
(
Vec
<
ast
::
TokenTree
>
,
@
ParseSess
)
{
let
ps
=
new_parse_sess
();
(
filemap_to_tts
(
ps
,
string_to_filemap
(
ps
,
source_str
,
~
"bogofile"
)),
ps
)
}
// map a string to tts, using a made-up filename:
pub
fn
string_to_tts
(
source_str
:
~
str
)
->
Vec
<
ast
::
TokenTree
>
{
let
(
tts
,
_
)
=
string_to_tts_and_sess
(
source_str
);
tts
}
pub
fn
string_to_parser_and_sess
(
source_str
:
~
str
)
->
(
Parser
,
@
ParseSess
)
{
pub
fn
string_to_tts
(
source_str
:
~
str
)
->
Vec
<
ast
::
TokenTree
>
{
let
ps
=
new_parse_sess
();
(
new_parser_from_source_str
(
ps
,
Vec
::
new
(),
~
"bogofile"
,
source_str
),
ps
)
filemap_to_tts
(
&
ps
,
string_to_filemap
(
&
ps
,
source_str
,
~
"bogofile"
)
)
}
// map string to parser (via tts)
pub
fn
string_to_parser
(
source_str
:
~
str
)
->
Parser
{
let
(
p
,
_
)
=
string_to_parser_and_sess
(
source_str
);
p
pub
fn
string_to_parser
<
'a
>
(
ps
:
&
'a
ParseSess
,
source_str
:
~
str
)
->
Parser
<
'a
>
{
new_parser_from_source_str
(
ps
,
Vec
::
new
(),
~
"bogofile"
,
source_str
)
}
fn
with_error_checking_parse
<
T
>
(
s
:
~
str
,
f
:
|
&
mut
Parser
|
->
T
)
->
T
{
let
mut
p
=
string_to_parser
(
s
);
let
mut
p
=
string_to_parser
(
&
new_parse_sess
(),
s
);
let
x
=
f
(
&
mut
p
);
p
.abort_if_errors
();
x
...
...
@@ -55,12 +42,6 @@ pub fn string_to_crate (source_str : ~str) -> ast::Crate {
})
}
// parse a string, return a crate and the ParseSess
pub
fn
string_to_crate_and_sess
(
source_str
:
~
str
)
->
(
ast
::
Crate
,
@
ParseSess
)
{
let
(
mut
p
,
ps
)
=
string_to_parser_and_sess
(
source_str
);
(
p
.parse_crate_mod
(),
ps
)
}
// parse a string, return an expr
pub
fn
string_to_expr
(
source_str
:
~
str
)
->
@
ast
::
Expr
{
with_error_checking_parse
(
source_str
,
|
p
|
{
...
...
@@ -84,8 +65,8 @@ pub fn string_to_stmt(source_str : ~str) -> @ast::Stmt {
// parse a string, return a pat. Uses "irrefutable"... which doesn't
// (currently) affect parsing.
pub
fn
string_to_pat
(
source_str
:
~
str
)
->
@
ast
::
Pat
{
string_to_parser
(
source_str
)
.parse_pat
()
pub
fn
string_to_pat
(
source_str
:
~
str
)
->
@
ast
::
Pat
{
string_to_parser
(
&
new_parse_sess
(),
source_str
)
.parse_pat
()
}
// convert a vector of strings to a vector of ast::Ident's
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录