Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
int
Rust
提交
492677ec
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,发现更多精彩内容 >>
提交
492677ec
编写于
11月 19, 2013
作者:
P
Patrick Walton
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
libsyntax: Change all uses of `&fn` to `||`.
上级
18a30aff
变更
16
隐藏空白更改
内联
并排
Showing
16 changed file
with
139 addition
and
111 deletion
+139
-111
src/libsyntax/abi.rs
src/libsyntax/abi.rs
+2
-2
src/libsyntax/ast_map.rs
src/libsyntax/ast_map.rs
+3
-4
src/libsyntax/ast_util.rs
src/libsyntax/ast_util.rs
+3
-3
src/libsyntax/diagnostic.rs
src/libsyntax/diagnostic.rs
+5
-3
src/libsyntax/ext/base.rs
src/libsyntax/ext/base.rs
+15
-8
src/libsyntax/ext/deriving/decodable.rs
src/libsyntax/ext/deriving/decodable.rs
+5
-2
src/libsyntax/ext/deriving/generic.rs
src/libsyntax/ext/deriving/generic.rs
+15
-12
src/libsyntax/ext/deriving/rand.rs
src/libsyntax/ext/deriving/rand.rs
+4
-2
src/libsyntax/fold.rs
src/libsyntax/fold.rs
+1
-1
src/libsyntax/opt_vec.rs
src/libsyntax/opt_vec.rs
+4
-4
src/libsyntax/parse/lexer.rs
src/libsyntax/parse/lexer.rs
+11
-5
src/libsyntax/parse/mod.rs
src/libsyntax/parse/mod.rs
+8
-13
src/libsyntax/parse/obsolete.rs
src/libsyntax/parse/obsolete.rs
+1
-1
src/libsyntax/parse/parser.rs
src/libsyntax/parse/parser.rs
+53
-46
src/libsyntax/print/pprust.rs
src/libsyntax/print/pprust.rs
+8
-4
src/libsyntax/util/parser_testing.rs
src/libsyntax/util/parser_testing.rs
+1
-1
未找到文件。
src/libsyntax/abi.rs
浏览文件 @
492677ec
...
...
@@ -84,7 +84,7 @@ pub struct AbiSet {
AbiData
{
abi
:
RustIntrinsic
,
name
:
"rust-intrinsic"
,
abi_arch
:
RustArch
},
];
fn
each_abi
(
op
:
&
fn
(
abi
:
Abi
)
->
bool
)
->
bool
{
fn
each_abi
(
op
:
|
abi
:
Abi
|
->
bool
)
->
bool
{
/*!
*
* Iterates through each of the defined ABIs.
...
...
@@ -201,7 +201,7 @@ pub fn add(&mut self, abi: Abi) {
self
.bits
|
=
(
1
<<
abi
.index
());
}
pub
fn
each
(
&
self
,
op
:
&
fn
(
abi
:
Abi
)
->
bool
)
->
bool
{
pub
fn
each
(
&
self
,
op
:
|
abi
:
Abi
|
->
bool
)
->
bool
{
each_abi
(|
abi
|
!
self
.contains
(
abi
)
||
op
(
abi
))
}
...
...
src/libsyntax/ast_map.rs
浏览文件 @
492677ec
...
...
@@ -122,7 +122,7 @@ pub enum ast_node {
}
impl
ast_node
{
pub
fn
with_attrs
<
T
>
(
&
self
,
f
:
&
fn
(
Option
<&
[
Attribute
]
>
)
->
T
)
->
T
{
pub
fn
with_attrs
<
T
>
(
&
self
,
f
:
|
Option
<&
[
Attribute
]
>
|
->
T
)
->
T
{
let
attrs
=
match
*
self
{
node_item
(
i
,
_
)
=>
Some
(
i
.attrs
.as_slice
()),
node_foreign_item
(
fi
,
_
,
_
,
_
)
=>
Some
(
fi
.attrs
.as_slice
()),
...
...
@@ -480,9 +480,8 @@ pub fn node_id_to_str(map: map, id: NodeId, itr: @ident_interner) -> ~str {
}
}
pub
fn
node_item_query
<
Result
>
(
items
:
map
,
id
:
NodeId
,
query
:
&
fn
(
@
item
)
->
Result
,
error_msg
:
~
str
)
->
Result
{
pub
fn
node_item_query
<
Result
>
(
items
:
map
,
id
:
NodeId
,
query
:
|
@
item
|
->
Result
,
error_msg
:
~
str
)
->
Result
{
match
items
.find
(
&
id
)
{
Some
(
&
node_item
(
it
,
_
))
=>
query
(
it
),
_
=>
fail
!
(
"{}"
,
error_msg
)
...
...
src/libsyntax/ast_util.rs
浏览文件 @
492677ec
...
...
@@ -636,7 +636,7 @@ pub fn is_item_impl(item: @ast::item) -> bool {
}
}
pub
fn
walk_pat
(
pat
:
@
Pat
,
it
:
&
fn
(
@
Pat
)
->
bool
)
->
bool
{
pub
fn
walk_pat
(
pat
:
@
Pat
,
it
:
|
@
Pat
|
->
bool
)
->
bool
{
if
!
it
(
pat
)
{
return
false
;
}
...
...
@@ -665,7 +665,7 @@ pub fn walk_pat(pat: @Pat, it: &fn(@Pat) -> bool) -> bool {
}
pub
trait
EachViewItem
{
fn
each_view_item
(
&
self
,
f
:
&
fn
(
&
ast
::
view_item
)
->
bool
)
->
bool
;
fn
each_view_item
(
&
self
,
f
:
|
&
ast
::
view_item
|
->
bool
)
->
bool
;
}
struct
EachViewItemData
<
'self
>
{
...
...
@@ -679,7 +679,7 @@ fn visit_view_item(&mut self, view_item: &ast::view_item, _: ()) {
}
impl
EachViewItem
for
ast
::
Crate
{
fn
each_view_item
(
&
self
,
f
:
&
fn
(
&
ast
::
view_item
)
->
bool
)
->
bool
{
fn
each_view_item
(
&
self
,
f
:
|
&
ast
::
view_item
|
->
bool
)
->
bool
{
let
mut
visit
=
EachViewItemData
{
callback
:
f
,
};
...
...
src/libsyntax/diagnostic.rs
浏览文件 @
492677ec
...
...
@@ -347,9 +347,11 @@ fn print_macro_backtrace(cm: @codemap::CodeMap, sp: Span) {
}
}
pub
fn
expect
<
T
:
Clone
>
(
diag
:
@
mut
span_handler
,
opt
:
Option
<
T
>
,
msg
:
&
fn
()
->
~
str
)
->
T
{
pub
fn
expect
<
T
:
Clone
>
(
diag
:
@
mut
span_handler
,
opt
:
Option
<
T
>
,
msg
:
||
->
~
str
)
->
T
{
match
opt
{
Some
(
ref
t
)
=>
(
*
t
)
.clone
(),
None
=>
diag
.handler
()
.bug
(
msg
()),
...
...
src/libsyntax/ext/base.rs
浏览文件 @
492677ec
...
...
@@ -559,11 +559,11 @@ pub fn contains_key (&self, key: &K) -> bool {
// should each_key and each_value operate on shadowed
// names? I think not.
// delaying implementing this....
pub
fn
each_key
(
&
self
,
_
f
:
&
fn
(
&
K
)
->
bool
)
{
pub
fn
each_key
(
&
self
,
_
f
:
|
&
K
|
->
bool
)
{
fail
!
(
"unimplemented 2013-02-15T10:01"
);
}
pub
fn
each_value
(
&
self
,
_
f
:
&
fn
(
&
V
)
->
bool
)
{
pub
fn
each_value
(
&
self
,
_
f
:
|
&
V
|
->
bool
)
{
fail
!
(
"unimplemented 2013-02-15T10:02"
);
}
...
...
@@ -601,7 +601,11 @@ pub fn insert (&mut self, key: K, ext: @V) -> bool {
// ... there are definitely some opportunities for abstraction
// here that I'm ignoring. (e.g., manufacturing a predicate on
// the maps in the chain, and using an abstract "find".
pub
fn
insert_into_frame
(
&
mut
self
,
key
:
K
,
ext
:
@
V
,
n
:
K
,
pred
:
&
fn
(
&@
V
)
->
bool
)
{
pub
fn
insert_into_frame
(
&
mut
self
,
key
:
K
,
ext
:
@
V
,
n
:
K
,
pred
:
|
&@
V
|
->
bool
)
{
match
*
self
{
BaseMapChain
(
~
ref
mut
map
)
=>
{
if
satisfies_pred
(
map
,
&
n
,
pred
)
{
...
...
@@ -622,10 +626,12 @@ pub fn insert_into_frame(&mut self, key: K, ext: @V, n: K, pred: &fn(&@V)->bool)
}
// returns true if the binding for 'n' satisfies 'pred' in 'map'
fn
satisfies_pred
<
K
:
Eq
+
Hash
+
IterBytes
,
V
>
(
map
:
&
mut
HashMap
<
K
,
V
>
,
n
:
&
K
,
pred
:
&
fn
(
&
V
)
->
bool
)
->
bool
{
fn
satisfies_pred
<
K
:
Eq
+
Hash
+
IterBytes
,
V
>
(
map
:
&
mut
HashMap
<
K
,
V
>
,
n
:
&
K
,
pred
:
|
&
V
|
->
bool
)
->
bool
{
match
map
.find
(
n
)
{
Some
(
ref
v
)
=>
(
pred
(
*
v
)),
None
=>
false
...
...
@@ -637,7 +643,8 @@ mod test {
use
super
::
MapChain
;
use
std
::
hashmap
::
HashMap
;
#[test]
fn
testenv
()
{
#[test]
fn
testenv
()
{
let
mut
a
=
HashMap
::
new
();
a
.insert
(
@
"abc"
,
@
15
);
let
m
=
MapChain
::
new
(
~
a
);
...
...
src/libsyntax/ext/deriving/decodable.rs
浏览文件 @
492677ec
...
...
@@ -124,9 +124,12 @@ fn decodable_substructure(cx: @ExtCtxt, span: Span,
/// Create a decoder for a single enum variant/struct:
/// - `outer_pat_ident` is the name of this enum variant/struct
/// - `getarg` should retrieve the `uint`-th field with name `@str`.
fn
decode_static_fields
(
cx
:
@
ExtCtxt
,
outer_span
:
Span
,
outer_pat_ident
:
Ident
,
fn
decode_static_fields
(
cx
:
@
ExtCtxt
,
outer_span
:
Span
,
outer_pat_ident
:
Ident
,
fields
:
&
StaticFields
,
getarg
:
&
fn
(
Span
,
@
str
,
uint
)
->
@
Expr
)
->
@
Expr
{
getarg
:
|
Span
,
@
str
,
uint
|
->
@
Expr
)
->
@
Expr
{
match
*
fields
{
Unnamed
(
ref
fields
)
=>
{
if
fields
.is_empty
()
{
...
...
src/libsyntax/ext/deriving/generic.rs
浏览文件 @
492677ec
...
...
@@ -1064,14 +1064,13 @@ fn create_enum_variant_pattern(cx: @ExtCtxt,
left-to-right (`true`) or right-to-left (`false`).
*/
pub
fn
cs_fold
(
use_foldl
:
bool
,
f
:
&
fn
(
@
ExtCtxt
,
Span
,
old
:
@
Expr
,
self_f
:
@
Expr
,
other_fs
:
&
[
@
Expr
])
->
@
Expr
,
f
:
|
@
ExtCtxt
,
Span
,
@
Expr
,
@
Expr
,
&
[
@
Expr
]|
->
@
Expr
,
base
:
@
Expr
,
enum_nonmatch_f
:
EnumNonMatchFunc
,
cx
:
@
ExtCtxt
,
trait_span
:
Span
,
substructure
:
&
Substructure
)
->
@
Expr
{
cx
:
@
ExtCtxt
,
trait_span
:
Span
,
substructure
:
&
Substructure
)
->
@
Expr
{
match
*
substructure
.fields
{
EnumMatching
(
_
,
_
,
ref
all_fields
)
|
Struct
(
ref
all_fields
)
=>
{
if
use_foldl
{
...
...
@@ -1104,10 +1103,12 @@ pub fn cs_fold(use_foldl: bool,
~~~
*/
#[inline]
pub
fn
cs_same_method
(
f
:
&
fn
(
@
ExtCtxt
,
Span
,
~
[
@
Expr
])
->
@
Expr
,
pub
fn
cs_same_method
(
f
:
|
@
ExtCtxt
,
Span
,
~
[
@
Expr
]|
->
@
Expr
,
enum_nonmatch_f
:
EnumNonMatchFunc
,
cx
:
@
ExtCtxt
,
trait_span
:
Span
,
substructure
:
&
Substructure
)
->
@
Expr
{
cx
:
@
ExtCtxt
,
trait_span
:
Span
,
substructure
:
&
Substructure
)
->
@
Expr
{
match
*
substructure
.fields
{
EnumMatching
(
_
,
_
,
ref
all_fields
)
|
Struct
(
ref
all_fields
)
=>
{
// call self_n.method(other_1_n, other_2_n, ...)
...
...
@@ -1136,11 +1137,13 @@ pub fn cs_same_method(f: &fn(@ExtCtxt, Span, ~[@Expr]) -> @Expr,
*/
#[inline]
pub
fn
cs_same_method_fold
(
use_foldl
:
bool
,
f
:
&
fn
(
@
ExtCtxt
,
Span
,
@
Expr
,
@
Expr
)
->
@
Expr
,
f
:
|
@
ExtCtxt
,
Span
,
@
Expr
,
@
Expr
|
->
@
Expr
,
base
:
@
Expr
,
enum_nonmatch_f
:
EnumNonMatchFunc
,
cx
:
@
ExtCtxt
,
trait_span
:
Span
,
substructure
:
&
Substructure
)
->
@
Expr
{
cx
:
@
ExtCtxt
,
trait_span
:
Span
,
substructure
:
&
Substructure
)
->
@
Expr
{
cs_same_method
(
|
cx
,
span
,
vals
|
{
if
use_foldl
{
...
...
src/libsyntax/ext/deriving/rand.rs
浏览文件 @
492677ec
...
...
@@ -128,10 +128,12 @@ fn rand_substructure(cx: @ExtCtxt, span: Span, substr: &Substructure) -> @Expr {
_
=>
cx
.bug
(
"Non-static method in `deriving(Rand)`"
)
};
fn
rand_thing
(
cx
:
@
ExtCtxt
,
span
:
Span
,
fn
rand_thing
(
cx
:
@
ExtCtxt
,
span
:
Span
,
ctor_ident
:
Ident
,
summary
:
&
StaticFields
,
rand_call
:
&
fn
(
Span
)
->
@
Expr
)
->
@
Expr
{
rand_call
:
|
Span
|
->
@
Expr
)
->
@
Expr
{
match
*
summary
{
Unnamed
(
ref
fields
)
=>
{
if
fields
.is_empty
()
{
...
...
src/libsyntax/fold.rs
浏览文件 @
492677ec
...
...
@@ -381,7 +381,7 @@ fn fold_mac(&self, macro: &mac) -> mac {
}
}
fn
map_exprs
(
&
self
,
f
:
&
fn
(
@
Expr
)
->
@
Expr
,
es
:
&
[
@
Expr
])
->
~
[
@
Expr
]
{
fn
map_exprs
(
&
self
,
f
:
|
@
Expr
|
->
@
Expr
,
es
:
&
[
@
Expr
])
->
~
[
@
Expr
]
{
es
.map
(|
x
|
f
(
*
x
))
}
...
...
src/libsyntax/opt_vec.rs
浏览文件 @
492677ec
...
...
@@ -50,14 +50,14 @@ pub fn push(&mut self, t: T) {
*
self
=
Vec
(
~
[
t
]);
}
pub
fn
map
<
U
>
(
&
self
,
op
:
&
fn
(
&
T
)
->
U
)
->
OptVec
<
U
>
{
pub
fn
map
<
U
>
(
&
self
,
op
:
|
&
T
|
->
U
)
->
OptVec
<
U
>
{
match
*
self
{
Empty
=>
Empty
,
Vec
(
ref
v
)
=>
Vec
(
v
.map
(
op
))
}
}
pub
fn
map_move
<
U
>
(
self
,
op
:
&
fn
(
T
)
->
U
)
->
OptVec
<
U
>
{
pub
fn
map_move
<
U
>
(
self
,
op
:
|
T
|
->
U
)
->
OptVec
<
U
>
{
match
self
{
Empty
=>
Empty
,
Vec
(
v
)
=>
Vec
(
v
.move_iter
()
.map
(
op
)
.collect
())
...
...
@@ -91,11 +91,11 @@ pub fn iter<'r>(&'r self) -> OptVecIterator<'r, T> {
}
#[inline]
pub
fn
map_to_vec
<
B
>
(
&
self
,
op
:
&
fn
(
&
T
)
->
B
)
->
~
[
B
]
{
pub
fn
map_to_vec
<
B
>
(
&
self
,
op
:
|
&
T
|
->
B
)
->
~
[
B
]
{
self
.iter
()
.map
(
op
)
.collect
()
}
pub
fn
mapi_to_vec
<
B
>
(
&
self
,
op
:
&
fn
(
uint
,
&
T
)
->
B
)
->
~
[
B
]
{
pub
fn
mapi_to_vec
<
B
>
(
&
self
,
op
:
|
uint
,
&
T
|
->
B
)
->
~
[
B
]
{
let
mut
index
=
0
;
self
.map_to_vec
(|
a
|
{
let
i
=
index
;
...
...
src/libsyntax/parse/lexer.rs
浏览文件 @
492677ec
...
...
@@ -216,16 +216,22 @@ fn byte_offset(rdr: &StringReader, pos: BytePos) -> BytePos {
/// Calls `f` with a string slice of the source text spanning from `start`
/// up to but excluding `rdr.last_pos`, meaning the slice does not include
/// the character `rdr.curr`.
pub
fn
with_str_from
<
T
>
(
rdr
:
@
mut
StringReader
,
start
:
BytePos
,
f
:
&
fn
(
s
:
&
str
)
->
T
)
->
T
{
pub
fn
with_str_from
<
T
>
(
rdr
:
@
mut
StringReader
,
start
:
BytePos
,
f
:
|
s
:
&
str
|
->
T
)
->
T
{
with_str_from_to
(
rdr
,
start
,
rdr
.last_pos
,
f
)
}
/// Calls `f` with astring slice of the source text spanning from `start`
/// up to but excluding `end`.
fn
with_str_from_to
<
T
>
(
rdr
:
@
mut
StringReader
,
start
:
BytePos
,
end
:
BytePos
,
f
:
&
fn
(
s
:
&
str
)
->
T
)
->
T
{
fn
with_str_from_to
<
T
>
(
rdr
:
@
mut
StringReader
,
start
:
BytePos
,
end
:
BytePos
,
f
:
|
s
:
&
str
|
->
T
)
->
T
{
f
(
rdr
.src
.slice
(
byte_offset
(
rdr
,
start
)
.to_uint
(),
byte_offset
(
rdr
,
end
)
.to_uint
()))
...
...
src/libsyntax/parse/mod.rs
浏览文件 @
492677ec
...
...
@@ -177,19 +177,14 @@ pub fn parse_tts_from_source_str(
// consumed all of the input before returning the function's
// result.
pub
fn
parse_from_source_str
<
T
>
(
f
:
&
fn
(
&
Parser
)
->
T
,
name
:
@
str
,
ss
:
codemap
::
FileSubstr
,
source
:
@
str
,
cfg
:
ast
::
CrateConfig
,
sess
:
@
mut
ParseSess
)
->
T
{
let
p
=
new_parser_from_source_substr
(
sess
,
cfg
,
name
,
ss
,
source
);
f
:
|
&
Parser
|
->
T
,
name
:
@
str
,
ss
:
codemap
::
FileSubstr
,
source
:
@
str
,
cfg
:
ast
::
CrateConfig
,
sess
:
@
mut
ParseSess
)
->
T
{
let
p
=
new_parser_from_source_substr
(
sess
,
cfg
,
name
,
ss
,
source
);
let
r
=
f
(
&
p
);
if
!
p
.reader
.is_eof
()
{
p
.reader
.fatal
(
~
"expected end-of-string"
);
...
...
src/libsyntax/parse/obsolete.rs
浏览文件 @
492677ec
...
...
@@ -82,7 +82,7 @@ fn obsolete(&self, sp: Span, kind: ObsoleteSyntax) {
),
ObsoleteBareFnType
=>
(
"bare function type"
,
"use `
&fn` or `extern fn
` instead"
"use `
|A| -> B` or `extern fn(A) -> B
` instead"
),
ObsoleteNamedExternModule
=>
(
"named external module"
,
...
...
src/libsyntax/parse/parser.rs
浏览文件 @
492677ec
...
...
@@ -581,10 +581,8 @@ fn expect_or(&self) {
}
// Parse a sequence bracketed by `|` and `|`, stopping before the `|`.
fn
parse_seq_to_before_or
<
T
>
(
&
self
,
sep
:
&
token
::
Token
,
f
:
&
fn
(
&
Parser
)
->
T
)
->
~
[
T
]
{
fn
parse_seq_to_before_or
<
T
>
(
&
self
,
sep
:
&
token
::
Token
,
f
:
|
&
Parser
|
->
T
)
->
~
[
T
]
{
let
mut
first
=
true
;
let
mut
vector
=
~
[];
while
*
self
.token
!=
token
::
BINOP
(
token
::
OR
)
&&
...
...
@@ -619,10 +617,11 @@ pub fn expect_gt(&self) {
// parse a sequence bracketed by '<' and '>', stopping
// before the '>'.
pub
fn
parse_seq_to_before_gt
<
T
>
(
&
self
,
sep
:
Option
<
token
::
Token
>
,
f
:
&
fn
(
&
Parser
)
->
T
)
->
OptVec
<
T
>
{
pub
fn
parse_seq_to_before_gt
<
T
>
(
&
self
,
sep
:
Option
<
token
::
Token
>
,
f
:
|
&
Parser
|
->
T
)
->
OptVec
<
T
>
{
let
mut
first
=
true
;
let
mut
v
=
opt_vec
::
Empty
;
while
*
self
.token
!=
token
::
GT
...
...
@@ -639,10 +638,11 @@ pub fn parse_seq_to_before_gt<T>(&self,
return
v
;
}
pub
fn
parse_seq_to_gt
<
T
>
(
&
self
,
sep
:
Option
<
token
::
Token
>
,
f
:
&
fn
(
&
Parser
)
->
T
)
->
OptVec
<
T
>
{
pub
fn
parse_seq_to_gt
<
T
>
(
&
self
,
sep
:
Option
<
token
::
Token
>
,
f
:
|
&
Parser
|
->
T
)
->
OptVec
<
T
>
{
let
v
=
self
.parse_seq_to_before_gt
(
sep
,
f
);
self
.expect_gt
();
return
v
;
...
...
@@ -651,11 +651,12 @@ pub fn parse_seq_to_gt<T>(&self,
// parse a sequence, including the closing delimiter. The function
// f must consume tokens until reaching the next separator or
// closing bracket.
pub
fn
parse_seq_to_end
<
T
>
(
&
self
,
ket
:
&
token
::
Token
,
sep
:
SeqSep
,
f
:
&
fn
(
&
Parser
)
->
T
)
->
~
[
T
]
{
pub
fn
parse_seq_to_end
<
T
>
(
&
self
,
ket
:
&
token
::
Token
,
sep
:
SeqSep
,
f
:
|
&
Parser
|
->
T
)
->
~
[
T
]
{
let
val
=
self
.parse_seq_to_before_end
(
ket
,
sep
,
f
);
self
.bump
();
val
...
...
@@ -664,11 +665,12 @@ pub fn parse_seq_to_end<T>(&self,
// parse a sequence, not including the closing delimiter. The function
// f must consume tokens until reaching the next separator or
// closing bracket.
pub
fn
parse_seq_to_before_end
<
T
>
(
&
self
,
ket
:
&
token
::
Token
,
sep
:
SeqSep
,
f
:
&
fn
(
&
Parser
)
->
T
)
->
~
[
T
]
{
pub
fn
parse_seq_to_before_end
<
T
>
(
&
self
,
ket
:
&
token
::
Token
,
sep
:
SeqSep
,
f
:
|
&
Parser
|
->
T
)
->
~
[
T
]
{
let
mut
first
:
bool
=
true
;
let
mut
v
:
~
[
T
]
=
~
[];
while
*
self
.token
!=
*
ket
{
...
...
@@ -688,12 +690,13 @@ pub fn parse_seq_to_before_end<T>(&self,
// parse a sequence, including the closing delimiter. The function
// f must consume tokens until reaching the next separator or
// closing bracket.
pub
fn
parse_unspanned_seq
<
T
>
(
&
self
,
bra
:
&
token
::
Token
,
ket
:
&
token
::
Token
,
sep
:
SeqSep
,
f
:
&
fn
(
&
Parser
)
->
T
)
->
~
[
T
]
{
pub
fn
parse_unspanned_seq
<
T
>
(
&
self
,
bra
:
&
token
::
Token
,
ket
:
&
token
::
Token
,
sep
:
SeqSep
,
f
:
|
&
Parser
|
->
T
)
->
~
[
T
]
{
self
.expect
(
bra
);
let
result
=
self
.parse_seq_to_before_end
(
ket
,
sep
,
f
);
self
.bump
();
...
...
@@ -702,12 +705,13 @@ pub fn parse_unspanned_seq<T>(&self,
// NB: Do not use this function unless you actually plan to place the
// spanned list in the AST.
pub
fn
parse_seq
<
T
>
(
&
self
,
bra
:
&
token
::
Token
,
ket
:
&
token
::
Token
,
sep
:
SeqSep
,
f
:
&
fn
(
&
Parser
)
->
T
)
->
Spanned
<~
[
T
]
>
{
pub
fn
parse_seq
<
T
>
(
&
self
,
bra
:
&
token
::
Token
,
ket
:
&
token
::
Token
,
sep
:
SeqSep
,
f
:
|
&
Parser
|
->
T
)
->
Spanned
<~
[
T
]
>
{
let
lo
=
self
.span.lo
;
self
.expect
(
bra
);
let
result
=
self
.parse_seq_to_before_end
(
ket
,
sep
,
f
);
...
...
@@ -765,8 +769,8 @@ pub fn buffer_length(&self) -> int {
}
return
(
4
-
*
self
.buffer_start
)
+
*
self
.buffer_end
;
}
pub
fn
look_ahead
<
R
>
(
&
self
,
distance
:
uint
,
f
:
&
fn
(
&
token
::
Token
)
->
R
)
->
R
{
pub
fn
look_ahead
<
R
>
(
&
self
,
distance
:
uint
,
f
:
|
&
token
::
Token
|
->
R
)
->
R
{
let
dist
=
distance
as
int
;
while
self
.buffer_length
()
<
dist
{
self
.buffer
[
*
self
.buffer_end
]
=
self
.reader
.next_token
();
...
...
@@ -1272,7 +1276,8 @@ pub fn parse_ty(&self, _: bool) -> Ty {
// parse the type following a @ or a ~
pub
fn
parse_box_or_uniq_pointee
(
&
self
,
sigil
:
ast
::
Sigil
,
ctor
:
&
fn
(
v
:
mt
)
->
ty_
)
->
ty_
{
ctor
:
|
v
:
mt
|
->
ty_
)
->
ty_
{
// ~'foo fn() or ~fn() are parsed directly as obsolete fn types:
match
*
self
.token
{
token
::
LIFETIME
(
*
)
=>
{
...
...
@@ -2467,8 +2472,8 @@ pub fn parse_lambda_expr(&self) -> @Expr {
// this is used both in parsing a lambda expr
// and in parsing a block expr as e.g. in for...
pub
fn
parse_lambda_expr_
(
&
self
,
parse_decl
:
&
fn
()
->
fn_decl
,
parse_body
:
&
fn
()
->
@
Expr
)
parse_decl
:
||
->
fn_decl
,
parse_body
:
||
->
@
Expr
)
->
@
Expr
{
let
lo
=
self
.last_span.lo
;
let
decl
=
parse_decl
();
...
...
@@ -2513,10 +2518,11 @@ pub fn parse_for_expr(&self, opt_ident: Option<ast::Ident>) -> @Expr {
// parse a 'for' or 'do'.
// the 'for' and 'do' expressions parse as calls, but look like
// function calls followed by a closure expression.
pub
fn
parse_sugary_call_expr
(
&
self
,
lo
:
BytePos
,
pub
fn
parse_sugary_call_expr
(
&
self
,
lo
:
BytePos
,
keyword
:
~
str
,
sugar
:
CallSugar
,
ctor
:
&
fn
(
v
:
@
Expr
)
->
Expr_
)
ctor
:
|
v
:
@
Expr
|
->
Expr_
)
->
@
Expr
{
// Parse the callee `foo` in
// for foo || {
...
...
@@ -3611,11 +3617,12 @@ fn expect_self_ident(&self) {
// parse the argument list and result type of a function
// that may have a self type.
fn
parse_fn_decl_with_self
(
&
self
,
parse_arg_fn
:
&
fn
(
&
Parser
)
->
arg
)
->
(
explicit_self
,
fn_decl
)
{
fn
maybe_parse_explicit_self
(
cnstr
:
&
fn
(
v
:
Mutability
)
->
ast
::
explicit_self_
,
p
:
&
Parser
)
->
ast
::
explicit_self_
{
fn
parse_fn_decl_with_self
(
&
self
,
parse_arg_fn
:
|
&
Parser
|
->
arg
)
->
(
explicit_self
,
fn_decl
)
{
fn
maybe_parse_explicit_self
(
cnstr
:
|
v
:
Mutability
|
->
ast
::
explicit_self_
,
p
:
&
Parser
)
->
ast
::
explicit_self_
{
// We need to make sure it isn't a type
if
p
.look_ahead
(
1
,
|
t
|
token
::
is_keyword
(
keywords
::
Self
,
t
))
||
((
p
.look_ahead
(
1
,
|
t
|
token
::
is_keyword
(
keywords
::
Const
,
t
))
||
...
...
src/libsyntax/print/pprust.rs
浏览文件 @
492677ec
...
...
@@ -331,7 +331,7 @@ pub fn synth_comment(s: @ps, text: ~str) {
word
(
s
.s
,
"*/"
);
}
pub
fn
commasep
<
T
>
(
s
:
@
ps
,
b
:
breaks
,
elts
:
&
[
T
],
op
:
&
fn
(
@
ps
,
&
T
)
)
{
pub
fn
commasep
<
T
>
(
s
:
@
ps
,
b
:
breaks
,
elts
:
&
[
T
],
op
:
|
@
ps
,
&
T
|
)
{
box
(
s
,
0u
,
b
);
let
mut
first
=
true
;
for
elt
in
elts
.iter
()
{
...
...
@@ -342,8 +342,12 @@ pub fn commasep<T>(s: @ps, b: breaks, elts: &[T], op: &fn(@ps, &T)) {
}
pub
fn
commasep_cmnt
<
T
>
(
s
:
@
ps
,
b
:
breaks
,
elts
:
&
[
T
],
op
:
&
fn
(
@
ps
,
&
T
),
get_span
:
&
fn
(
&
T
)
->
codemap
::
Span
)
{
pub
fn
commasep_cmnt
<
T
>
(
s
:
@
ps
,
b
:
breaks
,
elts
:
&
[
T
],
op
:
|
@
ps
,
&
T
|,
get_span
:
|
&
T
|
->
codemap
::
Span
)
{
box
(
s
,
0u
,
b
);
let
len
=
elts
.len
();
let
mut
i
=
0u
;
...
...
@@ -2289,7 +2293,7 @@ pub fn print_string(s: @ps, st: &str, style: ast::StrStyle) {
word
(
s
.s
,
st
);
}
pub
fn
to_str
<
T
>
(
t
:
&
T
,
f
:
&
fn
(
@
ps
,
&
T
)
,
intr
:
@
ident_interner
)
->
~
str
{
pub
fn
to_str
<
T
>
(
t
:
&
T
,
f
:
|
@
ps
,
&
T
|
,
intr
:
@
ident_interner
)
->
~
str
{
let
wr
=
@
mut
MemWriter
::
new
();
let
s
=
rust_printer
(
wr
as
@
mut
io
::
Writer
,
intr
);
f
(
s
,
t
);
...
...
src/libsyntax/util/parser_testing.rs
浏览文件 @
492677ec
...
...
@@ -39,7 +39,7 @@ pub fn string_to_parser(source_str: @str) -> Parser {
p
}
fn
with_error_checking_parse
<
T
>
(
s
:
@
str
,
f
:
&
fn
(
&
mut
Parser
)
->
T
)
->
T
{
fn
with_error_checking_parse
<
T
>
(
s
:
@
str
,
f
:
|
&
mut
Parser
|
->
T
)
->
T
{
let
mut
p
=
string_to_parser
(
s
);
let
x
=
f
(
&
mut
p
);
p
.abort_if_errors
();
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录