diff options
| author | Paul Stansifer <paul.stansifer@gmail.com> | 2012-11-07 23:13:15 -0500 |
|---|---|---|
| committer | Graydon Hoare <graydon@mozilla.com> | 2012-11-29 12:09:10 -0800 |
| commit | 9845a4be5a4f9919fcadfb1076d2425781eab41f (patch) | |
| tree | 949dd7517a8d564d3fb6f279f6b6386eb1af4161 /src/libsyntax/ext/expand.rs | |
| parent | c946c87b6f9cd536309dfba09abdc9af32729f34 (diff) | |
| download | rust-9845a4be5a4f9919fcadfb1076d2425781eab41f.tar.gz rust-9845a4be5a4f9919fcadfb1076d2425781eab41f.zip | |
Allow `macro_rules!` macros to expand to expressions or items.
Diffstat (limited to 'src/libsyntax/ext/expand.rs')
| -rw-r--r-- | src/libsyntax/ext/expand.rs | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/src/libsyntax/ext/expand.rs b/src/libsyntax/ext/expand.rs index c09655d73d3..f4d3111f0a2 100644 --- a/src/libsyntax/ext/expand.rs +++ b/src/libsyntax/ext/expand.rs @@ -81,6 +81,7 @@ fn expand_expr(exts: HashMap<~str, syntax_extension>, cx: ext_ctxt, Some(expr_tt({expander: exp, span: exp_sp})) => { let expanded = match exp(cx, mac.span, tts) { mr_expr(e) => e, + mr_expr_or_item(expr_maker,_) => expr_maker(), _ => cx.span_fatal( pth.span, fmt!("non-expr macro in expr pos: %s", *extname)) @@ -214,6 +215,8 @@ fn expand_item_mac(exts: HashMap<~str, syntax_extension>, mr_expr(_) => cx.span_fatal(pth.span, ~"expr macro in item position: " + *extname), + mr_expr_or_item(_, item_maker) => + option::chain(item_maker(), |i| {fld.fold_item(i)}), mr_def(mdef) => { exts.insert(mdef.name, mdef.ext); None |
