@@ -40,11 +40,11 @@ fn parse_json(cx: &ExtCtxt, parser: &mut Parser) -> P<Expr> {
40
40
Ok ( parse_json ( cx, p) )
41
41
} ) . ok ( ) . unwrap ( ) ;
42
42
let exprs = cx. expr_vec ( orig_span, exprs) ;
43
- quote_expr ! ( cx, { {
43
+ quote_expr ! ( cx, {
44
44
use :: std:: boxed:: Box ;
45
45
let xs: Box <[ _] > = Box :: new( $exprs) ;
46
46
:: rustc_serialize:: json:: Json :: Array ( xs. into_vec( ) )
47
- } } )
47
+ } )
48
48
} ,
49
49
& Token :: OpenDelim ( DelimToken :: Brace ) => {
50
50
let _ = parser. bump ( ) ;
@@ -53,22 +53,27 @@ fn parse_json(cx: &ExtCtxt, parser: &mut Parser) -> P<Expr> {
53
53
let ( istr, _) = p. parse_str ( ) . ok ( ) . unwrap ( ) ;
54
54
let s = & * istr;
55
55
let _ = p. expect ( & Token :: Colon ) ;
56
- let key = quote_expr ! ( cx, { {
56
+ let key = quote_expr ! ( cx, {
57
57
use :: std:: borrow:: ToOwned ;
58
58
$s. to_owned( )
59
- } } ) ;
59
+ } ) ;
60
60
Ok ( ( key, parse_json ( cx, p) ) )
61
61
} ) . ok ( ) . unwrap ( ) ;
62
- let ob = quote_expr ! ( cx, _ob) ;
63
- let mut stmts = vec ! [ ] ;
62
+ let mut insertions = vec ! [ ] ;
63
+ // Can't use `quote_stmt!()` and interpolate a vector of
64
+ // statements, seemingly. Should consider filing a bug
65
+ // upstream.
64
66
for & ( ref key, ref value) in kvs. iter ( ) {
65
- stmts. push ( quote_stmt ! ( cx, $ob. insert( $key, $value) ) ) ;
67
+ insertions. push ( quote_expr ! ( cx, {
68
+ _ob. insert( $key, $value) ;
69
+ } ) ) ;
66
70
}
67
- quote_expr ! ( cx, { {
68
- let mut $ob = :: std:: collections:: BTreeMap :: new( ) ;
69
- $stmts;
70
- :: rustc_serialize:: json:: Json :: Object ( $ob)
71
- } } )
71
+ let expr = quote_expr ! ( cx, {
72
+ let mut _ob = :: std:: collections:: BTreeMap :: new( ) ;
73
+ $insertions;
74
+ :: rustc_serialize:: json:: Json :: Object ( _ob)
75
+ } ) ;
76
+ expr
72
77
} ,
73
78
& Token :: OpenDelim ( DelimToken :: Paren ) => {
74
79
let expr = parser. parse_expr ( ) ;
0 commit comments