From 7bae3449ce5113596c7cdbd1df3d27bdbd0cd777 Mon Sep 17 00:00:00 2001 From: Eric Holk Date: Fri, 17 Aug 2012 11:47:01 -0700 Subject: [PATCH] Move select macro into another file, so it can be including in multiple tests. Fixing long lines. --- src/libsyntax/ext/pipes/ast_builder.rs | 2 +- src/test/run-pass/pipe-select-macro.rs | 61 ++----------------------- src/test/run-pass/select-macro.rs | 63 ++++++++++++++++++++++++++ 3 files changed, 67 insertions(+), 59 deletions(-) create mode 100644 src/test/run-pass/select-macro.rs diff --git a/src/libsyntax/ext/pipes/ast_builder.rs b/src/libsyntax/ext/pipes/ast_builder.rs index da2f9d43373..39132fd0d59 100644 --- a/src/libsyntax/ext/pipes/ast_builder.rs +++ b/src/libsyntax/ext/pipes/ast_builder.rs @@ -69,7 +69,7 @@ trait ext_ctxt_ast_builder { span: span, +enum_definition: ast::enum_def, +ty_params: ~[ast::ty_param]) -> @ast::item; - fn item_enum(name: ident, span: span, + fn item_enum(name: ident, span: span, +enum_definition: ast::enum_def) -> @ast::item; fn variant(name: ident, span: span, +tys: ~[@ast::ty]) -> ast::variant; fn item_mod(name: ident, span: span, +items: ~[@ast::item]) -> @ast::item; diff --git a/src/test/run-pass/pipe-select-macro.rs b/src/test/run-pass/pipe-select-macro.rs index 421e6306371..9559d815def 100644 --- a/src/test/run-pass/pipe-select-macro.rs +++ b/src/test/run-pass/pipe-select-macro.rs @@ -22,63 +22,8 @@ proto! bar { } } - -// select! -macro_rules! select_if { - - { - $index:expr, - $count:expr - } => { - fail - }; - - { - $index:expr, - $count:expr, - $port:path => [ - $(type_this $message:path$(($(x $x: ident),+))dont_type_this* - -> $next:ident => { $e:expr }),+ - ] - $(, $ports:path => [ - $(type_this $messages:path$(($(x $xs: ident),+))dont_type_this* - -> $nexts:ident => { $es:expr }),+ - ] )* - } => { - if $index == $count { - match move pipes::try_recv($port) { - $(some($message($($($x,)+)* next)) => { - // FIXME (#2329) we really want move out of enum here. - let $next = unsafe { let x <- *ptr::addr_of(next); x }; - $e - })+ - _ => fail - } - } else { - select_if!{ - $index, - $count + 1 - $(, $ports => [ - $(type_this $messages$(($(x $xs),+))dont_type_this* - -> $nexts => { $es }),+ - ])* - } - } - }; -} - -macro_rules! select { - { - $( $port:path => { - $($message:path$(($($x: ident),+))dont_type_this* - -> $next:ident $e:expr),+ - } )+ - } => { - let index = pipes::selecti([$(($port).header()),+]/_); - select_if!{index, 0 $(, $port => [ - $(type_this $message$(($(x $x),+))dont_type_this* -> $next => { $e }),+ - ])+} - } +fn macros() { + include!("select-macro.rs"); } // Code @@ -97,7 +42,7 @@ fn test(+foo: foo::client::foo, +bar: bar::client::bar) { }, do_baz(b) -> _next { - if b { debug!("true") } else { debug!("false") } + if *b { debug!("true") } else { debug!("false") } } } } diff --git a/src/test/run-pass/select-macro.rs b/src/test/run-pass/select-macro.rs new file mode 100644 index 00000000000..acaac71cf74 --- /dev/null +++ b/src/test/run-pass/select-macro.rs @@ -0,0 +1,63 @@ +// xfail-test - this isn't really a test. + + { + +// select! +macro_rules! select_if { + + { + $index:expr, + $count:expr + } => { + fail + }; + + { + $index:expr, + $count:expr, + $port:path => [ + $(type_this $message:path$(($(x $x: ident),+))dont_type_this* + -> $next:ident => { $e:expr }),+ + ] + $(, $ports:path => [ + $(type_this $messages:path$(($(x $xs: ident),+))dont_type_this* + -> $nexts:ident => { $es:expr }),+ + ] )* + } => { + if $index == $count { + match move pipes::try_recv($port) { + $(some($message($($(ref $x,)+)* ref next)) => { + // FIXME (#2329) we really want move out of enum here. + let $next = unsafe { let x <- *ptr::addr_of(*next); x }; + $e + })+ + _ => fail + } + } else { + select_if!{ + $index, + $count + 1 + $(, $ports => [ + $(type_this $messages$(($(x $xs),+))dont_type_this* + -> $nexts => { $es }),+ + ])* + } + } + }; +} + +macro_rules! select { + { + $( $port:path => { + $($message:path$(($($x: ident),+))dont_type_this* + -> $next:ident $e:expr),+ + } )+ + } => { + let index = pipes::selecti([$(($port).header()),+]/_); + select_if!{index, 0 $(, $port => [ + $(type_this $message$(($(x $x),+))dont_type_this* -> $next => { $e }),+ + ])+} + } +} + +}