-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Open
Labels
T-langRelevant to the language team, which will review and decide on the RFC.Relevant to the language team, which will review and decide on the RFC.
Description
Issue by huonw
Thursday Jan 30, 2014 at 08:25 GMT
For earlier discussion, see rust-lang/rust#11928
This issue was labelled with: A-syntaxext, B-RFC in the Rust repository
e.g. (using the currently-invalid brace syntax from #11892)
macro_rules! spawn {
($b: block_internals) => {
spawn(proc() { $b })
}
}
spawn! {
use foo::bar;
fn baz() {}
if x == 0 { bar() }
let a = 1 + 2;
foo();
baz()
}
I don't believe this is currently possible to emulate. e.g. with $($s: stmt);*
you have to write fn foo() {}; if x == 0 { bar() }; ...
and without the ;
you end up with foo() bar()
being valid (and expr
doesn't allow for statements like let
and fn bar() {}
). The best solution I've found is just writing ($e: expr) => { ... }
but this requires double braces:
spawn! { foo() } // ok
spawn! { foo(); bar() } // not ok! :(
spawn! {{ foo(); bar() }} // ok :(
This would make sugary control-flow-y macros like spawn
and scope
/finally
from rust-lang/rust#11905 more natural.
mohe2015
Metadata
Metadata
Assignees
Labels
T-langRelevant to the language team, which will review and decide on the RFC.Relevant to the language team, which will review and decide on the RFC.