@@ -36,7 +36,7 @@ pub fn comments<A: Allocator + Clone>(input: Input<A>) -> IResult<Vec<Comment, A
36
36
map ( none_of ( "\" ;#" ) , |_| None ) ,
37
37
map ( raw_string, |_| None ) ,
38
38
map ( raw_symbol, |_| None ) ,
39
- map ( hash_semicolon , |_| None ) ,
39
+ map ( quote , |_| None ) ,
40
40
map ( comment, Some ) ,
41
41
) ) ,
42
42
move || Vec :: new_in ( allocator. clone ( ) ) ,
@@ -104,16 +104,7 @@ fn expression<A: Allocator + Clone>(input: Input<A>) -> IResult<Expression<A>, A
104
104
context (
105
105
"quote" ,
106
106
map (
107
- token ( positioned ( tuple ( (
108
- recognize ( alt ( (
109
- tag ( "'" ) ,
110
- tag ( "`" ) ,
111
- tag ( "," ) ,
112
- hash_semicolon,
113
- tag ( "#" ) ,
114
- ) ) ) ,
115
- expression,
116
- ) ) ) ) ,
107
+ token ( positioned ( tuple ( ( quote, expression) ) ) ) ,
117
108
move |( ( sign, expression) , position) | {
118
109
Expression :: Quote ( & sign, Box :: new_in ( expression, allocator. clone ( ) ) , position)
119
110
} ,
@@ -124,6 +115,10 @@ fn expression<A: Allocator + Clone>(input: Input<A>) -> IResult<Expression<A>, A
124
115
) ) ( input)
125
116
}
126
117
118
+ fn quote < A : Allocator + Clone > ( input : Input < A > ) -> IResult < Input < A > , A > {
119
+ alt ( ( tag ( "'" ) , tag ( "`" ) , tag ( "," ) , hash_semicolon, tag ( "#" ) ) ) ( input)
120
+ }
121
+
127
122
fn hash_semicolon < A : Allocator + Clone > ( input : Input < A > ) -> IResult < Input < A > , A > {
128
123
tag ( "#;" ) ( input)
129
124
}
@@ -371,6 +366,28 @@ mod tests {
371
366
372
367
#[ test]
373
368
fn parse_vector ( ) {
369
+ assert_eq ! (
370
+ expression( Input :: new_extra( "#(1 2 3)" , Global ) ) . unwrap( ) . 1 ,
371
+ Expression :: Quote (
372
+ "#" ,
373
+ Expression :: List (
374
+ "(" ,
375
+ ")" ,
376
+ vec![
377
+ Expression :: Symbol ( "1" , Position :: new( 2 , 3 ) ) ,
378
+ Expression :: Symbol ( "2" , Position :: new( 4 , 5 ) ) ,
379
+ Expression :: Symbol ( "3" , Position :: new( 6 , 7 ) )
380
+ ] ,
381
+ Position :: new( 1 , 8 )
382
+ )
383
+ . into( ) ,
384
+ Position :: new( 0 , 8 )
385
+ )
386
+ ) ;
387
+ }
388
+
389
+ #[ test]
390
+ fn parse_bracket_vector ( ) {
374
391
assert_eq ! (
375
392
expression( Input :: new_extra( "[1 2 3]" , Global ) ) . unwrap( ) . 1 ,
376
393
Expression :: List (
@@ -602,5 +619,10 @@ mod tests {
602
619
vec![ Comment :: new( "foo" , Position :: new( 3 , 7 ) ) ]
603
620
) ;
604
621
}
622
+
623
+ #[ test]
624
+ fn parse_comment_with_vector ( ) {
625
+ assert_eq ! ( comments( Input :: new_extra( "#()" , Global ) ) . unwrap( ) . 1 , vec![ ] ) ;
626
+ }
605
627
}
606
628
}
0 commit comments