Re: Horrible compiletimes and memory usage while compiling a parser with X3
Larry Evans <[email protected]>
| Newsgroups | gmane.comp.parsers.spirit.general |
|---|---|
| Message-ID | <[email protected]> |
On 11/13/2016 02:53 PM, Larry Evans wrote: > On 11/13/2016 07:50 AM, Larry Evans wrote: >> On 11/07/2016 02:44 AM, Peter Gerell wrote: >>> On 07/11/2016 12:38 PM , Joel de Guzman wrote: >>>> On 07/11/2016 1:26 AM, Mikael Asplund wrote: >>>>> This is the reason we're still on 1.60 (with a small >>>>> const-patch from 1.61), since later version have link problems which are just too hard >>>>> to debug. >>> >>>> It would be great if you post a test file that exhibits this problem you mention. >>>> This linking problem doesn't look good and must be fixed. >>> >>> Hi Joel. >>> This is the problem Mikael is referring to. >>> http://melpon.org/wandbox/permlink/X8Awj4wIZ2JqMWIw >>> >>> If KEEP_CHAR is defined the code builds with both boost 1.60 and 1.61. >>> Without KEEP_CHAR it fails with 1.61. >>> >>> The following commit introduced the problem. >>> https://github.com/boostorg/spirit/commit/a8e391bd99dddb3f9ece84bdb1bb9236b0a37cf7 >>> >>> The problem seems to be that the attribute types are short-circuited for sequences of one >>> even though we explicitly request a specific binding using FUSION_DEFINE_FOR_STRUCT(ast::Start, count); >> [snip] >> >> More specifically, the change on line 178 causes the >> problem. > [snip] >> Why not revert the change on detail/sequence.hpp:178 to >> solve the problem? > > Or instead of: > > https://github.com/boostorg/spirit/blob/boost-1.61.0/include/boost/spirit/home/x3/operator/detail/sequence.hpp#L178 > > why not make the bool value dependent on whether R is *not* a rule? > A similar change would be made to: > > https://github.com/boostorg/spirit/blob/boost-1.61.0/include/boost/spirit/home/x3/operator/detail/sequence.hpp#L198 > > WARNING: not tested. > OR, try the spirit rule.hpp patches here: https://github.com/cppljevans/spirit/blob/ExagonLinkingError/include/boost/spirit/home/x3/nonterminal/rule.hpp#L129 When run with the modification of your problem code here: https://github.com/cppljevans/boost_1_61_problem there's no link error. Fortunately, this change also solves the problem which Exagon was having: https://sourceforge.net/p/spirit/mailman/message/35502917/ HTH. -regards, Larry ------------------------------------------------------------------------------