bug-bison
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: C++ token move constructors/assignment with LALR


From: Akim Demaille
Subject: Re: C++ token move constructors/assignment with LALR
Date: Sat, 3 Sep 2022 10:01:41 +0200

Anthony,

Thanks for the suggestion, the patience, and for the patch.  I'm installing the 
following edited version of your commit.  It is "trivial" enough to not need 
FSF paperwork.

Frank:

> BTW, when checking this, I noticed there's a "void move" function
> declared (actually 3 of them for different classes) in the skeletons
> which I thought were involved here, but there doesn't seem to be any
> definition of them. So these declarations may be remnants, and you
> might want to remove them, Akim.


These functions are not C++ standard, they participate in Bison's effort to 
have some form of move semantics in C98.

Cheers!

commit eb83487606276fdefd20415176aff9309a62a5ee
Author: Anthony Heading <ajrh@ajrh.net>
Date:   Fri Apr 29 04:08:35 2022 -0400

    c++: enable C++11 assignment operators for lalr1.cc
    
    <https://github.com/akimd/bison/pull/85>
    <https://lists.gnu.org/r/bug-bison/2022-04/msg00000.html>
    
    * data/skeletons/c++.m4: Enable C++11 assignment operators for
    all C++ skeletons.

diff --git a/NEWS b/NEWS
index aabca967..f480cb95 100644
--- a/NEWS
+++ b/NEWS
@@ -6,6 +6,8 @@ GNU Bison NEWS
 
   Fixed spurious warnings about input containing `m4_` or `b4_`.
 
+  The C++ skeletons now expose copy and move operators for symbols.
+
 * Noteworthy changes in release 3.8.2 (2021-09-25) [stable]
 
   Fixed portability issues of bison on Cygwin.
diff --git a/data/skeletons/c++.m4 b/data/skeletons/c++.m4
index 78f71fce..d63d1548 100644
--- a/data/skeletons/c++.m4
+++ b/data/skeletons/c++.m4
@@ -346,7 +346,7 @@ m4_define([b4_symbol_type_define],
         clear ();
       }
 
-]b4_glr2_cc_if([[
+#if 201103L <= YY_CPLUSPLUS
       /// Copy assignment.
       basic_symbol& operator= (const basic_symbol& that)
       {
@@ -368,7 +368,7 @@ m4_define([b4_symbol_type_define],
         location = std::move (that.location);]])[
         return *this;
       }
-]])[
+#endif
 
       /// Destroy contents, and record that is empty.
       void clear () YY_NOEXCEPT
@@ -454,13 +454,13 @@ m4_define([b4_symbol_type_define],
       /// Constructor from (external) token numbers.
       by_kind (kind_type t) YY_NOEXCEPT;
 
-]b4_glr2_cc_if([[
+#if 201103L <= YY_CPLUSPLUS
       /// Copy assignment.
       by_kind& operator= (const by_kind& that);
 
       /// Move assignment.
       by_kind& operator= (by_kind&& that);
-]])[
+#endif
 
       /// Record that this symbol is empty.
       void clear () YY_NOEXCEPT;
@@ -584,7 +584,7 @@ m4_define([b4_public_types_define],
     : kind_ (yytranslate_ (t))
   {}
 
-]b4_glr2_cc_if([[
+#if 201103L <= YY_CPLUSPLUS
   ]b4_inline([$1])]b4_parser_class[::by_kind&
   b4_parser_class[::by_kind::by_kind::operator= (const by_kind& that)
   {
@@ -599,7 +599,7 @@ m4_define([b4_public_types_define],
     that.clear ();
     return *this;
   }
-]])[
+#endif
 
   ]b4_inline([$1])[void
   ]b4_parser_class[::by_kind::clear () YY_NOEXCEPT




reply via email to

[Prev in Thread] Current Thread [Next in Thread]