[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: syntax_error constructor is declared inline
From: |
Vishal V |
Subject: |
Re: syntax_error constructor is declared inline |
Date: |
Wed, 14 Mar 2018 13:49:17 -0700 |
Thank you for the workaround suggestions. I ended up using a sed rule to
specifically remove the offending keyword:
sed -i '/inline/{ N;
s/inline\s*\n\s*parser::syntax_error::syntax_error/parser::syntax_error::syntax_error/
}' parser.cpp
By keeping it specific, I hope the rule will simply have no effect once the
issue is fixed in a future release.
Thanks,
Vishal
On Wed, Mar 14, 2018 at 11:22 AM, Kaz Kylheku <address@hidden> wrote:
> On 2018-03-13 13:31, Hans Åberg wrote:
>
>> On 12 Mar 2018, at 20:08, Vishal V <address@hidden> wrote:
>>>
>>> Bison 3.0.4 marks the constructor for the syntax_error class as 'inline'
>>> when generating a C++ scanner, which results in undefined references when
>>> the exception is thrown from a separate scanner file. Since this is the
>>> stated purpose of the syntax_error class (see
>>> http://lists.gnu.org/archive/html/help-bison/2013-07/msg00010.html),
>>> this
>>> appears to be a bug.
>>>
>>
>> As a workaround, you might try removing the inline specifier by adding
>> to the .yy grammar file:
>> %code {
>> ...
>> #define inline
>> ...
>> }
>>
>
> The developers of this stuff are pretty fucking careless about what goes
> into these skeleton files.
>
> They think they can just throw in random new stuff and nobody's build will
> break.
>
> Here is a rule from a production Makefile to remove // comments in Lex
> code that prevent it from being C90:
>
> lex.yy.c: $(top_srcdir)parser.l
> $(call ABBREV,LEX)
> $(call SH,rm -f $@)
> $(call SH, \
> if $(TXR_LEX) $(LEX_DBG_FLAGS) $< ; then \
> sed -e s@//.*@@ < $@ > address@hidden ; \
> mv address@hidden $@ ; \
> else \
> exit 1 ; \
> fi)
> $(call SH,chmod a-w $@)
>
> Commit: http://www.kylheku.com/cgit/txr/commit/?id=038bed1fa17743cbb
> fe4d219b6798d88254eef2c
>
> Here is build recipe which removes an unwanted/incorrect yyparse
> declaration from y.tab.h:
>
> y.tab.c: $(top_srcdir)parser.y
> $(call ABBREV,YACC)
> $(call SH, \
> if [ -e y.tab.h ]; then mv y.tab.h y.tab.h.old ; fi)
> $(call SH,rm -f y.tab.c)
> $(call SH, \
> if $(TXR_YACC) -v -d $< ; then \
> chmod a-w y.tab.c ; \
> sed -e '/yyparse/d' < y.tab.h > y.tab.h.tmp && \
> mv y.tab.h.tmp y.tab.h ; \
> if cmp -s y.tab.h y.tab.h.old ; then \
> mv y.tab.h.old y.tab.h ; \
> fi ; \
> else \
> rm y.tab.c ; \
> false ; \
> fi)
>
>
> Commit: http://www.kylheku.com/cgit/txr/commit/?id=fdb54c85577859e26
> 525463c2e21801cd9b2377c
>
- syntax_error constructor is declared inline, Vishal V, 2018/03/12
- Re: syntax_error constructor is declared inline, Hans Åberg, 2018/03/13
- Re: syntax_error constructor is declared inline, Frank Heckenbach, 2018/03/13
- Re: syntax_error constructor is declared inline, Hans Åberg, 2018/03/13
- Re: syntax_error constructor is declared inline, Frank Heckenbach, 2018/03/13
- Re: syntax_error constructor is declared inline, Hans Åberg, 2018/03/14
- Re: syntax_error constructor is declared inline, Frank Heckenbach, 2018/03/14
- Re: syntax_error constructor is declared inline, Hans Åberg, 2018/03/14
- Re: syntax_error constructor is declared inline, Frank Heckenbach, 2018/03/14
- Re: syntax_error constructor is declared inline, Hans Åberg, 2018/03/14
- Re: syntax_error constructor is declared inline, Frank Heckenbach, 2018/03/15