pass_through_impl.hpp 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419
  1. ///////////////////////////////////////////////////////////////////////////////
  2. /// \file pass_through_impl.hpp
  3. ///
  4. /// Specializations of pass_through_impl, used in the implementation of the
  5. /// pass_through transform.
  6. //
  7. // Copyright 2008 Eric Niebler. Distributed under the Boost
  8. // Software License, Version 1.0. (See accompanying file
  9. // LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
  10. template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
  11. struct pass_through_impl<Grammar, Domain, Expr, State, Data, 1>
  12. : transform_impl<Expr, State, Data>
  13. {
  14. typedef typename pass_through_impl::expr unref_expr;
  15. typedef
  16. typename mpl::if_c<
  17. is_same<Domain, deduce_domain>::value
  18. , typename unref_expr::proto_domain
  19. , Domain
  20. >::type
  21. result_domain;
  22. typedef
  23. typename base_expr<
  24. result_domain
  25. , typename unref_expr::proto_tag
  26. , list1<
  27. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type
  28. >
  29. >::type
  30. expr_type;
  31. typedef typename result_domain::proto_generator proto_generator;
  32. typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
  33. BOOST_FORCEINLINE
  34. BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
  35. operator ()(
  36. typename pass_through_impl::expr_param e
  37. , typename pass_through_impl::state_param s
  38. , typename pass_through_impl::data_param d
  39. ) const
  40. {
  41. expr_type const that = {
  42. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d )
  43. };
  44. detail::ignore_unused(&that);
  45. return proto_generator()(that);
  46. }
  47. };
  48. template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
  49. struct pass_through_impl<Grammar, Domain, Expr, State, Data, 2>
  50. : transform_impl<Expr, State, Data>
  51. {
  52. typedef typename pass_through_impl::expr unref_expr;
  53. typedef
  54. typename mpl::if_c<
  55. is_same<Domain, deduce_domain>::value
  56. , typename unref_expr::proto_domain
  57. , Domain
  58. >::type
  59. result_domain;
  60. typedef
  61. typename base_expr<
  62. result_domain
  63. , typename unref_expr::proto_tag
  64. , list2<
  65. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type
  66. >
  67. >::type
  68. expr_type;
  69. typedef typename result_domain::proto_generator proto_generator;
  70. typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
  71. BOOST_FORCEINLINE
  72. BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
  73. operator ()(
  74. typename pass_through_impl::expr_param e
  75. , typename pass_through_impl::state_param s
  76. , typename pass_through_impl::data_param d
  77. ) const
  78. {
  79. expr_type const that = {
  80. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d )
  81. };
  82. detail::ignore_unused(&that);
  83. return proto_generator()(that);
  84. }
  85. };
  86. template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
  87. struct pass_through_impl<Grammar, Domain, Expr, State, Data, 3>
  88. : transform_impl<Expr, State, Data>
  89. {
  90. typedef typename pass_through_impl::expr unref_expr;
  91. typedef
  92. typename mpl::if_c<
  93. is_same<Domain, deduce_domain>::value
  94. , typename unref_expr::proto_domain
  95. , Domain
  96. >::type
  97. result_domain;
  98. typedef
  99. typename base_expr<
  100. result_domain
  101. , typename unref_expr::proto_tag
  102. , list3<
  103. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type
  104. >
  105. >::type
  106. expr_type;
  107. typedef typename result_domain::proto_generator proto_generator;
  108. typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
  109. BOOST_FORCEINLINE
  110. BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
  111. operator ()(
  112. typename pass_through_impl::expr_param e
  113. , typename pass_through_impl::state_param s
  114. , typename pass_through_impl::data_param d
  115. ) const
  116. {
  117. expr_type const that = {
  118. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d )
  119. };
  120. detail::ignore_unused(&that);
  121. return proto_generator()(that);
  122. }
  123. };
  124. template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
  125. struct pass_through_impl<Grammar, Domain, Expr, State, Data, 4>
  126. : transform_impl<Expr, State, Data>
  127. {
  128. typedef typename pass_through_impl::expr unref_expr;
  129. typedef
  130. typename mpl::if_c<
  131. is_same<Domain, deduce_domain>::value
  132. , typename unref_expr::proto_domain
  133. , Domain
  134. >::type
  135. result_domain;
  136. typedef
  137. typename base_expr<
  138. result_domain
  139. , typename unref_expr::proto_tag
  140. , list4<
  141. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type
  142. >
  143. >::type
  144. expr_type;
  145. typedef typename result_domain::proto_generator proto_generator;
  146. typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
  147. BOOST_FORCEINLINE
  148. BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
  149. operator ()(
  150. typename pass_through_impl::expr_param e
  151. , typename pass_through_impl::state_param s
  152. , typename pass_through_impl::data_param d
  153. ) const
  154. {
  155. expr_type const that = {
  156. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d )
  157. };
  158. detail::ignore_unused(&that);
  159. return proto_generator()(that);
  160. }
  161. };
  162. template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
  163. struct pass_through_impl<Grammar, Domain, Expr, State, Data, 5>
  164. : transform_impl<Expr, State, Data>
  165. {
  166. typedef typename pass_through_impl::expr unref_expr;
  167. typedef
  168. typename mpl::if_c<
  169. is_same<Domain, deduce_domain>::value
  170. , typename unref_expr::proto_domain
  171. , Domain
  172. >::type
  173. result_domain;
  174. typedef
  175. typename base_expr<
  176. result_domain
  177. , typename unref_expr::proto_tag
  178. , list5<
  179. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type
  180. >
  181. >::type
  182. expr_type;
  183. typedef typename result_domain::proto_generator proto_generator;
  184. typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
  185. BOOST_FORCEINLINE
  186. BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
  187. operator ()(
  188. typename pass_through_impl::expr_param e
  189. , typename pass_through_impl::state_param s
  190. , typename pass_through_impl::data_param d
  191. ) const
  192. {
  193. expr_type const that = {
  194. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d )
  195. };
  196. detail::ignore_unused(&that);
  197. return proto_generator()(that);
  198. }
  199. };
  200. template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
  201. struct pass_through_impl<Grammar, Domain, Expr, State, Data, 6>
  202. : transform_impl<Expr, State, Data>
  203. {
  204. typedef typename pass_through_impl::expr unref_expr;
  205. typedef
  206. typename mpl::if_c<
  207. is_same<Domain, deduce_domain>::value
  208. , typename unref_expr::proto_domain
  209. , Domain
  210. >::type
  211. result_domain;
  212. typedef
  213. typename base_expr<
  214. result_domain
  215. , typename unref_expr::proto_tag
  216. , list6<
  217. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type
  218. >
  219. >::type
  220. expr_type;
  221. typedef typename result_domain::proto_generator proto_generator;
  222. typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
  223. BOOST_FORCEINLINE
  224. BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
  225. operator ()(
  226. typename pass_through_impl::expr_param e
  227. , typename pass_through_impl::state_param s
  228. , typename pass_through_impl::data_param d
  229. ) const
  230. {
  231. expr_type const that = {
  232. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d )
  233. };
  234. detail::ignore_unused(&that);
  235. return proto_generator()(that);
  236. }
  237. };
  238. template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
  239. struct pass_through_impl<Grammar, Domain, Expr, State, Data, 7>
  240. : transform_impl<Expr, State, Data>
  241. {
  242. typedef typename pass_through_impl::expr unref_expr;
  243. typedef
  244. typename mpl::if_c<
  245. is_same<Domain, deduce_domain>::value
  246. , typename unref_expr::proto_domain
  247. , Domain
  248. >::type
  249. result_domain;
  250. typedef
  251. typename base_expr<
  252. result_domain
  253. , typename unref_expr::proto_tag
  254. , list7<
  255. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type
  256. >
  257. >::type
  258. expr_type;
  259. typedef typename result_domain::proto_generator proto_generator;
  260. typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
  261. BOOST_FORCEINLINE
  262. BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
  263. operator ()(
  264. typename pass_through_impl::expr_param e
  265. , typename pass_through_impl::state_param s
  266. , typename pass_through_impl::data_param d
  267. ) const
  268. {
  269. expr_type const that = {
  270. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d )
  271. };
  272. detail::ignore_unused(&that);
  273. return proto_generator()(that);
  274. }
  275. };
  276. template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
  277. struct pass_through_impl<Grammar, Domain, Expr, State, Data, 8>
  278. : transform_impl<Expr, State, Data>
  279. {
  280. typedef typename pass_through_impl::expr unref_expr;
  281. typedef
  282. typename mpl::if_c<
  283. is_same<Domain, deduce_domain>::value
  284. , typename unref_expr::proto_domain
  285. , Domain
  286. >::type
  287. result_domain;
  288. typedef
  289. typename base_expr<
  290. result_domain
  291. , typename unref_expr::proto_tag
  292. , list8<
  293. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type
  294. >
  295. >::type
  296. expr_type;
  297. typedef typename result_domain::proto_generator proto_generator;
  298. typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
  299. BOOST_FORCEINLINE
  300. BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
  301. operator ()(
  302. typename pass_through_impl::expr_param e
  303. , typename pass_through_impl::state_param s
  304. , typename pass_through_impl::data_param d
  305. ) const
  306. {
  307. expr_type const that = {
  308. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d )
  309. };
  310. detail::ignore_unused(&that);
  311. return proto_generator()(that);
  312. }
  313. };
  314. template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
  315. struct pass_through_impl<Grammar, Domain, Expr, State, Data, 9>
  316. : transform_impl<Expr, State, Data>
  317. {
  318. typedef typename pass_through_impl::expr unref_expr;
  319. typedef
  320. typename mpl::if_c<
  321. is_same<Domain, deduce_domain>::value
  322. , typename unref_expr::proto_domain
  323. , Domain
  324. >::type
  325. result_domain;
  326. typedef
  327. typename base_expr<
  328. result_domain
  329. , typename unref_expr::proto_tag
  330. , list9<
  331. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >::result_type
  332. >
  333. >::type
  334. expr_type;
  335. typedef typename result_domain::proto_generator proto_generator;
  336. typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
  337. BOOST_FORCEINLINE
  338. BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
  339. operator ()(
  340. typename pass_through_impl::expr_param e
  341. , typename pass_through_impl::state_param s
  342. , typename pass_through_impl::data_param d
  343. ) const
  344. {
  345. expr_type const that = {
  346. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d ) , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >()( e.proto_base().child8, s, d )
  347. };
  348. detail::ignore_unused(&that);
  349. return proto_generator()(that);
  350. }
  351. };
  352. template<typename Grammar, typename Domain, typename Expr, typename State, typename Data>
  353. struct pass_through_impl<Grammar, Domain, Expr, State, Data, 10>
  354. : transform_impl<Expr, State, Data>
  355. {
  356. typedef typename pass_through_impl::expr unref_expr;
  357. typedef
  358. typename mpl::if_c<
  359. is_same<Domain, deduce_domain>::value
  360. , typename unref_expr::proto_domain
  361. , Domain
  362. >::type
  363. result_domain;
  364. typedef
  365. typename base_expr<
  366. result_domain
  367. , typename unref_expr::proto_tag
  368. , list10<
  369. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >::result_type , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >::result_type , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >::result_type , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >::result_type , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >::result_type , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >::result_type , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >::result_type , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >::result_type , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >::result_type , typename Grammar::proto_child9::template impl< typename result_of::child_c<Expr, 9>::type , State , Data >::result_type
  370. >
  371. >::type
  372. expr_type;
  373. typedef typename result_domain::proto_generator proto_generator;
  374. typedef typename BOOST_PROTO_RESULT_OF<proto_generator(expr_type)>::type result_type;
  375. BOOST_FORCEINLINE
  376. BOOST_PROTO_RETURN_TYPE_STRICT_LOOSE(result_type, result_type const)
  377. operator ()(
  378. typename pass_through_impl::expr_param e
  379. , typename pass_through_impl::state_param s
  380. , typename pass_through_impl::data_param d
  381. ) const
  382. {
  383. expr_type const that = {
  384. typename Grammar::proto_child0::template impl< typename result_of::child_c<Expr, 0>::type , State , Data >()( e.proto_base().child0, s, d ) , typename Grammar::proto_child1::template impl< typename result_of::child_c<Expr, 1>::type , State , Data >()( e.proto_base().child1, s, d ) , typename Grammar::proto_child2::template impl< typename result_of::child_c<Expr, 2>::type , State , Data >()( e.proto_base().child2, s, d ) , typename Grammar::proto_child3::template impl< typename result_of::child_c<Expr, 3>::type , State , Data >()( e.proto_base().child3, s, d ) , typename Grammar::proto_child4::template impl< typename result_of::child_c<Expr, 4>::type , State , Data >()( e.proto_base().child4, s, d ) , typename Grammar::proto_child5::template impl< typename result_of::child_c<Expr, 5>::type , State , Data >()( e.proto_base().child5, s, d ) , typename Grammar::proto_child6::template impl< typename result_of::child_c<Expr, 6>::type , State , Data >()( e.proto_base().child6, s, d ) , typename Grammar::proto_child7::template impl< typename result_of::child_c<Expr, 7>::type , State , Data >()( e.proto_base().child7, s, d ) , typename Grammar::proto_child8::template impl< typename result_of::child_c<Expr, 8>::type , State , Data >()( e.proto_base().child8, s, d ) , typename Grammar::proto_child9::template impl< typename result_of::child_c<Expr, 9>::type , State , Data >()( e.proto_base().child9, s, d )
  385. };
  386. detail::ignore_unused(&that);
  387. return proto_generator()(that);
  388. }
  389. };