aboutsummaryrefslogtreecommitdiffstats
path: root/gnuwin32/bin/data/variant.hh
diff options
context:
space:
mode:
Diffstat (limited to 'gnuwin32/bin/data/variant.hh')
-rw-r--r--gnuwin32/bin/data/variant.hh362
1 files changed, 0 insertions, 362 deletions
diff --git a/gnuwin32/bin/data/variant.hh b/gnuwin32/bin/data/variant.hh
deleted file mode 100644
index ac4f7a78..00000000
--- a/gnuwin32/bin/data/variant.hh
+++ /dev/null
@@ -1,362 +0,0 @@
-# C++ skeleton for Bison
-
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-
-## --------- ##
-## variant. ##
-## --------- ##
-
-# b4_symbol_variant(YYTYPE, YYVAL, ACTION, [ARGS])
-# ------------------------------------------------
-# Run some ACTION ("build", or "destroy") on YYVAL of symbol type
-# YYTYPE.
-m4_define([b4_symbol_variant],
-[m4_pushdef([b4_dollar_dollar],
- [$2.$3< $][3 > (m4_shift3($@))])dnl
- switch ($1)
- {
-b4_type_foreach([b4_type_action_])[]dnl
- default:
- break;
- }
-m4_popdef([b4_dollar_dollar])dnl
-])
-
-
-# _b4_char_sizeof_counter
-# -----------------------
-# A counter used by _b4_char_sizeof_dummy to create fresh symbols.
-m4_define([_b4_char_sizeof_counter],
-[0])
-
-# _b4_char_sizeof_dummy
-# ---------------------
-# At each call return a new C++ identifier.
-m4_define([_b4_char_sizeof_dummy],
-[m4_define([_b4_char_sizeof_counter], m4_incr(_b4_char_sizeof_counter))dnl
-dummy[]_b4_char_sizeof_counter])
-
-
-# b4_char_sizeof(SYMBOL-NUMS)
-# ---------------------------
-# To be mapped on the list of type names to produce:
-#
-# char dummy1[sizeof(type_name_1)];
-# char dummy2[sizeof(type_name_2)];
-#
-# for defined type names.
-m4_define([b4_char_sizeof],
-[b4_symbol_if([$1], [has_type],
-[
-m4_map([ b4_symbol_tag_comment], [$@])dnl
- char _b4_char_sizeof_dummy@{sizeof(b4_symbol([$1], [type]))@};
-])])
-
-
-# b4_variant_includes
-# -------------------
-# The needed includes for variants support.
-m4_define([b4_variant_includes],
-[b4_parse_assert_if([[#include <typeinfo>]])[
-#ifndef YYASSERT
-# include <cassert>
-# define YYASSERT assert
-#endif
-]])
-
-# b4_variant_define
-# -----------------
-# Define "variant".
-m4_define([b4_variant_define],
-[[ /// A char[S] buffer to store and retrieve objects.
- ///
- /// Sort of a variant, but does not keep track of the nature
- /// of the stored data, since that knowledge is available
- /// via the current state.
- template <size_t S>
- struct variant
- {
- /// Type of *this.
- typedef variant<S> self_type;
-
- /// Empty construction.
- variant ()]b4_parse_assert_if([
- : yytname_ (YY_NULL)])[
- {}
-
- /// Construct and fill.
- template <typename T>
- variant (const T& t)]b4_parse_assert_if([
- : yytname_ (typeid (T).name ())])[
- {
- YYASSERT (sizeof (T) <= S);
- new (yyas_<T> ()) T (t);
- }
-
- /// Destruction, allowed only if empty.
- ~variant ()
- {]b4_parse_assert_if([
- YYASSERT (!yytname_);
- ])[}
-
- /// Instantiate an empty \a T in here.
- template <typename T>
- T&
- build ()
- {]b4_parse_assert_if([
- YYASSERT (!yytname_);
- YYASSERT (sizeof (T) <= S);
- yytname_ = typeid (T).name ();])[
- return *new (yyas_<T> ()) T;
- }
-
- /// Instantiate a \a T in here from \a t.
- template <typename T>
- T&
- build (const T& t)
- {]b4_parse_assert_if([
- YYASSERT (!yytname_);
- YYASSERT (sizeof (T) <= S);
- yytname_ = typeid (T).name ();])[
- return *new (yyas_<T> ()) T (t);
- }
-
- /// Accessor to a built \a T.
- template <typename T>
- T&
- as ()
- {]b4_parse_assert_if([
- YYASSERT (yytname_ == typeid (T).name ());
- YYASSERT (sizeof (T) <= S);])[
- return *yyas_<T> ();
- }
-
- /// Const accessor to a built \a T (for %printer).
- template <typename T>
- const T&
- as () const
- {]b4_parse_assert_if([
- YYASSERT (yytname_ == typeid (T).name ());
- YYASSERT (sizeof (T) <= S);])[
- return *yyas_<T> ();
- }
-
- /// Swap the content with \a other, of same type.
- ///
- /// Both variants must be built beforehand, because swapping the actual
- /// data requires reading it (with as()), and this is not possible on
- /// unconstructed variants: it would require some dynamic testing, which
- /// should not be the variant's responsability.
- /// Swapping between built and (possibly) non-built is done with
- /// variant::move ().
- template <typename T>
- void
- swap (self_type& other)
- {]b4_parse_assert_if([
- YYASSERT (yytname_);
- YYASSERT (yytname_ == other.yytname_);])[
- std::swap (as<T> (), other.as<T> ());
- }
-
- /// Move the content of \a other to this.
- ///
- /// Destroys \a other.
- template <typename T>
- void
- move (self_type& other)
- {]b4_parse_assert_if([
- YYASSERT (!yytname_);])[
- build<T> ();
- swap<T> (other);
- other.destroy<T> ();
- }
-
- /// Copy the content of \a other to this.
- template <typename T>
- void
- copy (const self_type& other)
- {
- build<T> (other.as<T> ());
- }
-
- /// Destroy the stored \a T.
- template <typename T>
- void
- destroy ()
- {
- as<T> ().~T ();]b4_parse_assert_if([
- yytname_ = YY_NULL;])[
- }
-
- private:
- /// Prohibit blind copies.
- self_type& operator=(const self_type&);
- variant (const self_type&);
-
- /// Accessor to raw memory as \a T.
- template <typename T>
- T*
- yyas_ ()
- {
- void *yyp = yybuffer_.yyraw;
- return static_cast<T*> (yyp);
- }
-
- /// Const accessor to raw memory as \a T.
- template <typename T>
- const T*
- yyas_ () const
- {
- const void *yyp = yybuffer_.yyraw;
- return static_cast<const T*> (yyp);
- }
-
- union
- {
- /// Strongest alignment constraints.
- long double yyalign_me;
- /// A buffer large enough to store any of the semantic values.
- char yyraw[S];
- } yybuffer_;]b4_parse_assert_if([
-
- /// Whether the content is built: if defined, the name of the stored type.
- const char *yytname_;])[
- };
-]])
-
-
-## -------------------------- ##
-## Adjustments for variants. ##
-## -------------------------- ##
-
-
-# b4_value_type_declare
-# ---------------------
-# Declare semantic_type.
-m4_define([b4_value_type_declare],
-[[ /// An auxiliary type to compute the largest semantic type.
- union union_type
- {]b4_type_foreach([b4_char_sizeof])[};
-
- /// Symbol semantic values.
- typedef variant<sizeof(union_type)> semantic_type;][]dnl
-])
-
-
-# How the semantic value is extracted when using variants.
-
-# b4_symbol_value(VAL, [TYPE])
-# ----------------------------
-m4_define([b4_symbol_value],
-[m4_ifval([$2],
- [$1.as< $2 > ()],
- [$1])])
-
-# b4_symbol_value_template(VAL, [TYPE])
-# -------------------------------------
-# Same as b4_symbol_value, but used in a template method.
-m4_define([b4_symbol_value_template],
-[m4_ifval([$2],
- [$1.template as< $2 > ()],
- [$1])])
-
-
-
-## ------------- ##
-## make_SYMBOL. ##
-## ------------- ##
-
-
-# b4_symbol_constructor_declare_(SYMBOL-NUMBER)
-# ---------------------------------------------
-# Declare the overloaded version of make_symbol for the (common) type of
-# these SYMBOL-NUMBERS. Use at class-level.
-m4_define([b4_symbol_constructor_declare_],
-[b4_symbol_if([$1], [is_token], [b4_symbol_if([$1], [has_id],
-[ static inline
- symbol_type
- make_[]b4_symbol_([$1], [id]) (dnl
-b4_join(b4_symbol_if([$1], [has_type],
- [const b4_symbol([$1], [type])& v]),
- b4_locations_if([const location_type& l])));
-
-])])])
-
-
-# b4_symbol_constructor_declare
-# -----------------------------
-# Declare symbol constructors for all the value types.
-# Use at class-level.
-m4_define([b4_symbol_constructor_declare],
-[ // Symbol constructors declarations.
-b4_symbol_foreach([b4_symbol_constructor_declare_])])
-
-
-
-# b4_symbol_constructor_define_(SYMBOL-NUMBER)
-# --------------------------------------------
-# Define symbol constructor for this SYMBOL-NUMBER.
-m4_define([b4_symbol_constructor_define_],
-[b4_symbol_if([$1], [is_token], [b4_symbol_if([$1], [has_id],
-[ b4_parser_class_name::symbol_type
- b4_parser_class_name::make_[]b4_symbol_([$1], [id]) (dnl
-b4_join(b4_symbol_if([$1], [has_type],
- [const b4_symbol([$1], [type])& v]),
- b4_locations_if([const location_type& l])))
- {
- return symbol_type (b4_join([token::b4_symbol([$1], [id])],
- b4_symbol_if([$1], [has_type], [v]),
- b4_locations_if([l])));
-
- }
-
-])])])
-
-
-# b4_basic_symbol_constructor_declare
-# -----------------------------------
-# Generate a constructor declaration for basic_symbol from given type.
-m4_define([b4_basic_symbol_constructor_declare],
-[[
- basic_symbol (]b4_join(
- [typename Base::kind_type t],
- b4_symbol_if([$1], [has_type], const b4_symbol([$1], [type])[ v]),
- b4_locations_if([const location_type& l]))[);
-]])
-
-# b4_basic_symbol_constructor_define
-# ----------------------------------
-# Generate a constructor implementation for basic_symbol from given type.
-m4_define([b4_basic_symbol_constructor_define],
-[[
- template <typename Base>
- ]b4_parser_class_name[::basic_symbol<Base>::basic_symbol (]b4_join(
- [typename Base::kind_type t],
- b4_symbol_if([$1], [has_type], const b4_symbol([$1], [type])[ v]),
- b4_locations_if([const location_type& l]))[)
- : Base (t)
- , value (]b4_symbol_if([$1], [has_type], [v])[)]b4_locations_if([
- , location (l)])[
- {}
-]])
-
-# b4_symbol_constructor_define
-# ----------------------------
-# Define the overloaded versions of make_symbol for all the value types.
-m4_define([b4_symbol_constructor_define],
-[ // Implementation of make_symbol for each symbol type.
-b4_symbol_foreach([b4_symbol_constructor_define_])])