-
-
Notifications
You must be signed in to change notification settings - Fork 14.3k
Closed
Labels
A-syntaxextArea: Syntax extensionsArea: Syntax extensions
Description
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 #11905 more natural.
Metadata
Metadata
Assignees
Labels
A-syntaxextArea: Syntax extensionsArea: Syntax extensions