1#[macro_export]
232#[cfg_attr(docsrs, doc(cfg(feature = "macros")))]
233macro_rules! select {
234 (@ {
248 start=$start:expr;
251
252 ( $($count:tt)* )
255
256 $( ( $($skip:tt)* ) $bind:pat = $fut:expr, if $c:expr => $handle:expr, )+
263
264 ; $else:expr
266
267 }) => {{
268 mod util {
273 $crate::select_priv_declare_output_enum!( ( $($count)* ) );
275 }
276
277 use $crate::macros::support::Future;
280 use $crate::macros::support::Pin;
281 use $crate::macros::support::Poll::{Ready, Pending};
282
283 const BRANCHES: u32 = $crate::count!( $($count)* );
284
285 let mut disabled: util::Mask = Default::default();
286
287 $(
290 if !$c {
291 let mask: util::Mask = 1 << $crate::count!( $($skip)* );
292 disabled |= mask;
293 }
294 )*
295
296 let mut output = {
299 let mut futures = ( $( $fut , )+ );
302
303 $crate::macros::support::poll_fn(|cx| {
304 let mut is_pending = false;
308
309 let start = $start;
314
315 for i in 0..BRANCHES {
316 let branch;
317 #[allow(clippy::modulo_one)]
318 {
319 branch = (start + i) % BRANCHES;
320 }
321 match branch {
322 $(
323 #[allow(unreachable_code)]
324 $crate::count!( $($skip)* ) => {
325 let mask = 1 << branch;
330
331 if disabled & mask == mask {
332 continue;
334 }
335
336 let ( $($skip,)* fut, .. ) = &mut futures;
339
340 let mut fut = unsafe { Pin::new_unchecked(fut) };
343
344 let out = match fut.poll(cx) {
346 Ready(out) => out,
347 Pending => {
348 is_pending = true;
351 continue;
352 }
353 };
354
355 disabled |= mask;
357
358 #[allow(unused_variables)]
361 #[allow(unused_mut)]
362 match &out {
363 $bind => {}
364 _ => continue,
365 }
366
367 return Ready($crate::select_variant!(util::Out, ($($skip)*))(out));
369 }
370 )*
371 _ => unreachable!("reaching this means there probably is an off by one bug"),
372 }
373 }
374
375 if is_pending {
376 Pending
377 } else {
378 Ready(util::Out::Disabled)
380 }
381 }).await
382 };
383
384 match output {
385 $(
386 $crate::select_variant!(util::Out, ($($skip)*) ($bind)) => $handle,
387 )*
388 util::Out::Disabled => $else,
389 _ => unreachable!("failed to match bind"),
390 }
391 }};
392
393 (@ { start=$start:expr; $($t:tt)* } ) => {
399 $crate::select!(@{ start=$start; $($t)*; panic!("all branches are disabled and there is no else branch") })
401 };
402 (@ { start=$start:expr; $($t:tt)* } else => $else:expr $(,)?) => {
403 $crate::select!(@{ start=$start; $($t)*; $else })
404 };
405 (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr, if $c:expr => $h:block, $($r:tt)* ) => {
406 $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if $c => $h, } $($r)*)
407 };
408 (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr => $h:block, $($r:tt)* ) => {
409 $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if true => $h, } $($r)*)
410 };
411 (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr, if $c:expr => $h:block $($r:tt)* ) => {
412 $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if $c => $h, } $($r)*)
413 };
414 (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr => $h:block $($r:tt)* ) => {
415 $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if true => $h, } $($r)*)
416 };
417 (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr, if $c:expr => $h:expr ) => {
418 $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if $c => $h, })
419 };
420 (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr => $h:expr ) => {
421 $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if true => $h, })
422 };
423 (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr, if $c:expr => $h:expr, $($r:tt)* ) => {
424 $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if $c => $h, } $($r)*)
425 };
426 (@ { start=$start:expr; ( $($s:tt)* ) $($t:tt)* } $p:pat = $f:expr => $h:expr, $($r:tt)* ) => {
427 $crate::select!(@{ start=$start; ($($s)* _) $($t)* ($($s)*) $p = $f, if true => $h, } $($r)*)
428 };
429
430 (biased; $p:pat = $($t:tt)* ) => {
433 $crate::select!(@{ start=0; () } $p = $($t)*)
434 };
435
436 ( $p:pat = $($t:tt)* ) => {
437 $crate::select!(@{ start={ $crate::macros::support::thread_rng_n(BRANCHES) }; () } $p = $($t)*)
440 };
441 () => {
442 compile_error!("select! requires at least one branch.")
443 };
444}
445
446#[macro_export]
450#[doc(hidden)]
451macro_rules! count {
452 () => {
453 0
454 };
455 (_) => {
456 1
457 };
458 (_ _) => {
459 2
460 };
461 (_ _ _) => {
462 3
463 };
464 (_ _ _ _) => {
465 4
466 };
467 (_ _ _ _ _) => {
468 5
469 };
470 (_ _ _ _ _ _) => {
471 6
472 };
473 (_ _ _ _ _ _ _) => {
474 7
475 };
476 (_ _ _ _ _ _ _ _) => {
477 8
478 };
479 (_ _ _ _ _ _ _ _ _) => {
480 9
481 };
482 (_ _ _ _ _ _ _ _ _ _) => {
483 10
484 };
485 (_ _ _ _ _ _ _ _ _ _ _) => {
486 11
487 };
488 (_ _ _ _ _ _ _ _ _ _ _ _) => {
489 12
490 };
491 (_ _ _ _ _ _ _ _ _ _ _ _ _) => {
492 13
493 };
494 (_ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
495 14
496 };
497 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
498 15
499 };
500 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
501 16
502 };
503 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
504 17
505 };
506 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
507 18
508 };
509 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
510 19
511 };
512 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
513 20
514 };
515 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
516 21
517 };
518 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
519 22
520 };
521 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
522 23
523 };
524 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
525 24
526 };
527 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
528 25
529 };
530 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
531 26
532 };
533 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
534 27
535 };
536 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
537 28
538 };
539 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
540 29
541 };
542 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
543 30
544 };
545 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
546 31
547 };
548 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
549 32
550 };
551 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
552 33
553 };
554 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
555 34
556 };
557 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
558 35
559 };
560 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
561 36
562 };
563 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
564 37
565 };
566 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
567 38
568 };
569 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
570 39
571 };
572 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
573 40
574 };
575 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
576 41
577 };
578 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
579 42
580 };
581 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
582 43
583 };
584 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
585 44
586 };
587 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
588 45
589 };
590 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
591 46
592 };
593 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
594 47
595 };
596 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
597 48
598 };
599 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
600 49
601 };
602 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
603 50
604 };
605 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
606 51
607 };
608 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
609 52
610 };
611 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
612 53
613 };
614 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
615 54
616 };
617 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
618 55
619 };
620 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
621 56
622 };
623 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
624 57
625 };
626 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
627 58
628 };
629 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
630 59
631 };
632 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
633 60
634 };
635 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
636 61
637 };
638 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
639 62
640 };
641 (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) => {
642 63
643 };
644}
645
646#[macro_export]
647#[doc(hidden)]
648macro_rules! select_variant {
649 ($($p:ident)::*, () $($t:tt)*) => {
650 $($p)::*::_0 $($t)*
651 };
652 ($($p:ident)::*, (_) $($t:tt)*) => {
653 $($p)::*::_1 $($t)*
654 };
655 ($($p:ident)::*, (_ _) $($t:tt)*) => {
656 $($p)::*::_2 $($t)*
657 };
658 ($($p:ident)::*, (_ _ _) $($t:tt)*) => {
659 $($p)::*::_3 $($t)*
660 };
661 ($($p:ident)::*, (_ _ _ _) $($t:tt)*) => {
662 $($p)::*::_4 $($t)*
663 };
664 ($($p:ident)::*, (_ _ _ _ _) $($t:tt)*) => {
665 $($p)::*::_5 $($t)*
666 };
667 ($($p:ident)::*, (_ _ _ _ _ _) $($t:tt)*) => {
668 $($p)::*::_6 $($t)*
669 };
670 ($($p:ident)::*, (_ _ _ _ _ _ _) $($t:tt)*) => {
671 $($p)::*::_7 $($t)*
672 };
673 ($($p:ident)::*, (_ _ _ _ _ _ _ _) $($t:tt)*) => {
674 $($p)::*::_8 $($t)*
675 };
676 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _) $($t:tt)*) => {
677 $($p)::*::_9 $($t)*
678 };
679 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
680 $($p)::*::_10 $($t)*
681 };
682 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
683 $($p)::*::_11 $($t)*
684 };
685 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
686 $($p)::*::_12 $($t)*
687 };
688 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
689 $($p)::*::_13 $($t)*
690 };
691 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
692 $($p)::*::_14 $($t)*
693 };
694 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
695 $($p)::*::_15 $($t)*
696 };
697 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
698 $($p)::*::_16 $($t)*
699 };
700 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
701 $($p)::*::_17 $($t)*
702 };
703 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
704 $($p)::*::_18 $($t)*
705 };
706 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
707 $($p)::*::_19 $($t)*
708 };
709 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
710 $($p)::*::_20 $($t)*
711 };
712 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
713 $($p)::*::_21 $($t)*
714 };
715 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
716 $($p)::*::_22 $($t)*
717 };
718 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
719 $($p)::*::_23 $($t)*
720 };
721 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
722 $($p)::*::_24 $($t)*
723 };
724 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
725 $($p)::*::_25 $($t)*
726 };
727 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
728 $($p)::*::_26 $($t)*
729 };
730 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
731 $($p)::*::_27 $($t)*
732 };
733 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
734 $($p)::*::_28 $($t)*
735 };
736 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
737 $($p)::*::_29 $($t)*
738 };
739 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
740 $($p)::*::_30 $($t)*
741 };
742 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
743 $($p)::*::_31 $($t)*
744 };
745 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
746 $($p)::*::_32 $($t)*
747 };
748 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
749 $($p)::*::_33 $($t)*
750 };
751 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
752 $($p)::*::_34 $($t)*
753 };
754 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
755 $($p)::*::_35 $($t)*
756 };
757 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
758 $($p)::*::_36 $($t)*
759 };
760 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
761 $($p)::*::_37 $($t)*
762 };
763 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
764 $($p)::*::_38 $($t)*
765 };
766 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
767 $($p)::*::_39 $($t)*
768 };
769 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
770 $($p)::*::_40 $($t)*
771 };
772 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
773 $($p)::*::_41 $($t)*
774 };
775 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
776 $($p)::*::_42 $($t)*
777 };
778 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
779 $($p)::*::_43 $($t)*
780 };
781 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
782 $($p)::*::_44 $($t)*
783 };
784 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
785 $($p)::*::_45 $($t)*
786 };
787 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
788 $($p)::*::_46 $($t)*
789 };
790 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
791 $($p)::*::_47 $($t)*
792 };
793 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
794 $($p)::*::_48 $($t)*
795 };
796 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
797 $($p)::*::_49 $($t)*
798 };
799 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
800 $($p)::*::_50 $($t)*
801 };
802 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
803 $($p)::*::_51 $($t)*
804 };
805 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
806 $($p)::*::_52 $($t)*
807 };
808 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
809 $($p)::*::_53 $($t)*
810 };
811 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
812 $($p)::*::_54 $($t)*
813 };
814 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
815 $($p)::*::_55 $($t)*
816 };
817 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
818 $($p)::*::_56 $($t)*
819 };
820 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
821 $($p)::*::_57 $($t)*
822 };
823 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
824 $($p)::*::_58 $($t)*
825 };
826 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
827 $($p)::*::_59 $($t)*
828 };
829 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
830 $($p)::*::_60 $($t)*
831 };
832 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
833 $($p)::*::_61 $($t)*
834 };
835 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
836 $($p)::*::_62 $($t)*
837 };
838 ($($p:ident)::*, (_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _) $($t:tt)*) => {
839 $($p)::*::_63 $($t)*
840 };
841}