]> git.saurik.com Git - bison.git/blobdiff - ChangeLog
Fixes.
[bison.git] / ChangeLog
index fdc0d613933520746c963a8c48cb6aff64617c74..fea590450d0ab28d2ccf75a85982918b79c5a6e9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,324 @@
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Support parametric types.
+
+       There are two issues to handle: first scanning nested angle
+       bracket pairs to support types such as std::pair< std::string,
+       std::list<std::string> > >.
+
+       Another issue is to address idiosyncracies of C++: do not glue two
+       closing angle brackets together (otherwise it's operator>>), and
+       avoid sticking blindly a TYPE to the opening <, as it can result
+       in '<:' which is a digraph for '['.
+
+       * src/scan-gram.l (brace_level): Rename as...
+       (nesting): this.
+       (SC_TAG): New.
+       Implement support for complex tags.
+       (tag): Accept
+       , but not <.
+       * data/lalr1.cc (b4_symbol_value, b4_symbol_value_template)
+       (b4_symbol_variant): Leave space around types as parameters.
+       * examples/variant.yy: Use nested template types and leading ::.
+       * src/parse-gram.y (TYPE, TYPE_TAG_ANY, TYPE_TAG_NONE, type.opt):
+       Rename as...
+       (TAG, TAG_ANY, TAG_NONE, tag.opt): these.
+       * tests/c++.at: Test parametric types.
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+       Test token.prefix.
+       This is not sufficient, but we test at least that the make_SYMBOL
+       interface is not affected by token.prefix.  A more general test
+       will be implemented when the support of token.prefix is generalized
+       to more skeletons.
+
+       * tests/c++.at: One more variant test, using token.prefix.
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+       Test the make_TOKEN interface.
+       * tests/c++.at (AT_CHECK_VARIANTS): Require and use locations.
+       Factor the common code in yylex.
+       Use it to test "%define lex_symbol".
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+       Formatting change.
+
+2008-11-15  Akim Demaille  <akim@betelgeuse.gostai.ensta.fr>
+
+       Simplify code for variants bench marks.
+       * etc/bench.pl.in (&generate_grammar_list): Define and use
+       location_type.
+       Factor the common code in yylex.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Better error message.
+       * bootstrap (find_tool): Fix the error message.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Update variant.yy to newest interface.
+       * examples/variant.yy: Define lex_symbol.
+       Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Don't use locations in variant.yy.
+       * examples/variant.yy: Adjust to not using locations.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Comment changes.
+       * data/local.mk, etc/local.mk, examples/local.mk: Use Automake
+       comments for the license.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove tests/Makefile.am.
+       * tests/Makefile.am: Rename as...
+       * tests/local.mk: this.
+       * Makefile.am, configure.ac: Adjust.
+       * Makefile.am (DISTCLEANFILES): Define.
+       (maintainer-check, maintainer-xml-check, maintainer-push-check):
+       Remove, we no longer need to bounce to the real targets.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Comment changes.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       djgpp/local.mk.
+       * Makefile.am (EXTRA_DIST): Move djgpp related part to...
+       * djgpp/local.mk: this new file.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove doc/Makefile.am.
+       * doc/Makefile.am: Rename as...
+       * doc/local.mk: this.
+       Adjust paths
+       * Makefile.am, configure.ac: Adjust.
+       * Makefile.am (MOSTLYCLEANFILES): New.
+       * src/local.mk: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Move sc_tight_scope into maint.mk.
+       It does not work, and I don't know how it was supposed to work: it
+       seems to be looking for sources in the build tree.  I just moved
+       it at a better place, fixing it is still required.
+
+       * src/local.mk (echo): Remove.
+       (sc_tight_scope): Move to...
+       * maint.mk: here.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Regen.
+       * src/parse-gram.h, src/parse-gram.h: Regen.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove src/Makefile.am.
+       * src/Makefile.am: Rename as...
+       * src/local.mk: this.
+       Prefix all the paths with src/.
+       (AUTOMAKE_OPTIONS): Build object files in the sub dirs.
+       (AM_CPPFLAGS): Find find in builddir/src.
+       (YACC): Move the flags into...
+       (AM_YFLAGS): here.
+       * maint.mk (sc_tight_scope): Disable.
+       It used to bounce to the version in src/Makefile.am which is now
+       part of this very Makefile.
+       * Makefile.am, configure.ac: Adjust.
+       * src/scan-code-c.c, src/scan-code.l: We can no longer rely on
+       include "..." to find files "here": we are no longer in src/, so
+       qualify the includes with src/.
+       * doc/Makefile.am (PREPATH): No longer include the top_builddir
+       prefix.
+       (.x.1): Adjust to be able to create src/foo from the top level
+       Makefile, instead of going bounce to src/Makefile the creation of
+       foo.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove useless variable.
+       * doc/Makefile.am (srcsrcdir): Remove.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove data/Makefile.am.
+       * data/Makefile.am: Rename as...
+       * data/local.mk: this.
+       Adjust paths.
+       * Makefile.am, configure.ac: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove etc/Makefile.am.
+       * etc/Makefile.am: Rename as...
+       * etc/local.mk: this.
+       Adjust.
+       * Makefile.am, configure.ac: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove examples/local.mk.
+       examples/calc++/Makefile.am might be interesting to keep as is, since
+       it is an example in itself.
+
+       * examples/Makefile.am: Rename as...
+       * examples/local.mk: this.
+       Adjust.
+       * Makefile.am, configure.ac: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Remove build-aux/Makefile.am.
+       Recursive Makefiles are really way too slow, let's get rid of some of
+       them.
+
+       * build-aux/Makefile.am: Rename as...
+       * build-aux/local.mk: this.
+       Adjust paths.
+       * Makefile.am, configure.ac: Adjust.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Provide convenience constructors for locations and positions.
+       * data/location.cc (position::position): Accept file, line and
+       column as arguments with default values.
+       Always qualify initial line and column literals as unsigned.
+       (location::location): Provide convenience constructors.
+
+2008-11-15  Akim Demaille  <demaille@gostai.com>
+
+       Instead of using make_symbol<TOK_FOO>, generate make_FOO for each
+       token type.
+       Using template buys us nothing, and makes it uselessly complex to
+       construct a symbol.  Besides, it could not be generalized to other
+       languages, while make_FOO would work in C/Java etc.
+
+       * data/lalr1.cc (b4_symbol_): New.
+       (b4_symbol): Use it.
+       (b4_symbol_constructor_declaration_)
+       (b4_symbol_constructor_definition_): Instead of generating
+       specializations of an overloaded template function, just generate
+       several functions whose names are forged from the token names
+       without the token.prefix.
+       (b4_symbol_constructor_declarations): Generate them for all the
+       symbols, not just by class of symbol type, now that instead of
+       specializing a function template by the token, we generate a
+       function named after the token.
+       (b4_symbol_constructor_specialization_)
+       (b4_symbol_constructor_specializations): Remove.
+       * etc/bench.pl.in: Adjust to this new API.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       %define token.prefix.
+       Provide a means to add a prefix to the name of the tokens as
+       output in the generated files.  Because of name clashes, it is
+       good to have such a prefix such as TOK_ that protects from names
+       such as EOF, FILE etc.  But it clutters the grammar itself.
+
+       * data/bison.m4 (token.prefix): Empty by default.
+       * data/c.m4 (b4_token_enum, b4_token_define): Use it.
+       * data/lalr1.cc (b4_symbol): Ditto.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       Compute at M4 time some of the subtractions.
+       * data/lalr1.cc (b4_substract): New.
+       (b4_rhs_data): Use it.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       symbol::token.
+       This allows the user to get the type of a token returned by yylex.
+
+       * data/lalr1.cc (symbol::token): New.
+       (yytoknum_): Define when %define lex_symbol, independently of
+       %debug.
+       (yytoken_number_): Move into...
+       (symbol::token): here, since that's the only use.
+       The other one is YYPRINT which was not officially supported
+       by lalr1.cc, and anyway it did not work since YYPRINT uses this
+       array under a different name (yytoknum).
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       YYERRCODE.
+       * TODO (YYERRCODE): Mention the case of $undef.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       TODO: YYPRINT.
+       * TODO (YYPRINT): New.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       Comment changes.
+       * data/lalr1.cc, data/yacc.c: Fix the description of the
+       yytranslate and yytoknum tables.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       Define make_symbol in the header.
+       To reach good performances these functions should be inlined (yet
+       this is to measure precisely).  To this end they must be available
+       to the caller.
+
+       * data/lalr1.cc (b4_symbol_constructor_definition_): Qualify
+       location_type with the class name.
+       Since will now be output in the header, declare "inline".
+       No longer use b4_symbol_constructor_specializations, but
+       b4_symbol_constructor_definitions in the header.
+       Don't call it in the *.cc file.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       Define yytranslate in the header for lex_symbol.
+       * data/lalr1.cc: Move the invocation of b4_yytranslate_definition
+       into the header file when using %define lex_symbol.
+       (yytranslate_): Declare inline.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       Define the constructors of symbol_type in
+       b4_symbol_constructor_definitions.
+       The constructors are called by the make_symbol functions, which a
+       forthcoming patch will move elsewhere.  Hence the interest of
+       putting them together.
+
+       The stack_symbol_type does not need to be moved, it is used only
+       by the parser.
+
+       * data/lalr1.cc: Move symbol_type and symbol_base_type
+       constructors into...
+       (b4_symbol_constructor_definitions): here.
+       Adjust.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       Make it easier to move the definition of yytranslate_.
+       Forthcoming changes will make it possible to use yytranslate_
+       from outside the parser implementation file.
+
+       * data/lalr1.cc (b4_yytranslate_definition): New.
+       Use it.
+
+2008-11-13  Akim Demaille  <demaille@gostai.com>
+
+       Remove useless class specification.
+       * data/lalr1.cc (b4_symbol_constructor_specialization_): No need
+       to refer to the class name to use a type defined by the class for
+       arguments of member functions.
+
 2008-11-13  Akim Demaille  <demaille@gostai.com>
 
        Finer input type for yytranslate.
@@ -7,7 +328,7 @@
        goes against the stronger typing I am trying to have with the new
        lex interface which return a symbol_type.  So in this case, feed
        yytranslate_ with a token_type.
-       
+
        * data/lalr1.cc (yytranslate_): When in %define lex-symbol,
        expect a token_type.
 
 2008-11-13  Akim Demaille  <demaille@gostai.com>
 
        Use b4_type_names for the union type.
-       The union used to compute the size of the variant used to iterate over the
-       type of all the symbols, with a lot of redundancy.  Now iterate over the
-       lists of symbols having the same type-name.
-       
+       The union used to compute the size of the variant used to iterate
+       over the type of all the symbols, with a lot of redundancy.  Now
+       iterate over the lists of symbols having the same type-name.
+
        * data/lalr1.cc (b4_char_sizeof_): New.
        (b4_char_sizeof): Use it.
        Adjust to be called with a list of numbers instead of a single
 2008-11-13  Akim Demaille  <demaille@gostai.com>
 
        Define the "identifier" of a symbol.
-       Symbols may have several string representations, for instance if they
-       have an alias.  What I call its "id" is a string that can be used as
-       an identifier.  May not exist.
-       
-       Currently the symbols which have the "tag_is_id" flag set are those that
-       don't have an alias.  Look harder for the id.
-       
+       Symbols may have several string representations, for instance if
+       they have an alias.  What I call its "id" is a string that can be
+       used as an identifier.  May not exist.
+
+       Currently the symbols which have the "tag_is_id" flag set are
+       those that don't have an alias.  Look harder for the id.
+
        * src/output.c (is_identifier): Move to...
        * src/symtab.c (is_identifier): here.
        * src/symtab.h, src/symtab.c (symbol_id_get): New.
 2008-11-11  Akim Demaille  <demaille@gostai.com>
 
        Introduce make_symbol.
-       make_symbol provides a means to construct a full symbol (kind, value,
-       location) in a single shot.  It is meant to be a Symbol constructor,
-       parameterized by the symbol kind so that overloading would prevent
-       incorrect kind/value pairs.  Unfortunately parameterized constructors do
-       not work well in C++ (unless the parameter also appears as an argument,
-       which is not acceptable), hence the use of a function instead of a
-       constructor.
-       
+       make_symbol provides a means to construct a full symbol (kind,
+       value, location) in a single shot.  It is meant to be a Symbol
+       constructor, parameterized by the symbol kind so that overloading
+       would prevent incorrect kind/value pairs.  Unfortunately
+       parameterized constructors do not work well in C++ (unless the
+       parameter also appears as an argument, which is not acceptable),
+       hence the use of a function instead of a constructor.
+
        * data/lalr1.cc (b4_symbol_constructor_declaration_)
        (b4_symbol_constructor_declarations)
        (b4_symbol_constructor_specialization_)
 2008-11-10  Akim Demaille  <demaille@gostai.com>
 
        Make parser::yytranslate static.
-       Small speedup (1%) on the list grammar.  And makes yytranslate_ available
-       in non member functions.
+       Small speedup (1%) on the list grammar.  And makes yytranslate_
+       available in non member functions.
 
        * data/lalr1.cc (yytranslate_): Does not need to be a instance
        function.
 2008-11-09  Akim Demaille  <demaille@gostai.com>
 
        Rely on the state stack to display reduction traces.
-       To display rhs symbols before a reduction, we used information about the rule
-       reduced, which required the tables yyrhs and yyprhs.  Now use rely only on the
-       state stack to get the same information.
+       To display rhs symbols before a reduction, we used information
+       about the rule reduced, which required the tables yyrhs and
+       yyprhs.  Now use rely only on the state stack to get the same
+       information.
 
        * data/lalr1.cc (b4_rhs_data, b4_rhs_state): New.
        Use them.
 2008-11-03  Akim Demaille  <demaille@gostai.com>
 
        Fuse the three stacks into a single one.
-       In order to make it easy to perform benchmarks to ensure that there are no
-       performance loss, lalr1.cc is forked into lalr1-fusion.cc.  Eventually,
-       lalr1-fusion.cc will replace lalr1.cc.
 
-       Meanwhile, to make sure that lalr1-fusion.cc is correctly exercized by the
-       test suite, the user must install a symbolic link from lalr1.cc to it.
+       In order to make it easy to perform benchmarks to ensure that
+       there are no performance loss, lalr1.cc is forked into
+       lalr1-fusion.cc.  Eventually, lalr1-fusion.cc will replace
+       lalr1.cc.
+
+       Meanwhile, to make sure that lalr1-fusion.cc is correctly
+       exercized by the test suite, the user must install a symbolic link
+       from lalr1.cc to it.
 
-       Instead of having three stacks (state, value, location), use a stack
-       of triples.  This considerably simplifies the code (and it will be
-       easier not to require locations as currently does the C++ parser),
-       and also gives a 10% speedup according to etc/bench (probably mainly since
-       memory allocation is done once instead of three times).
+       Instead of having three stacks (state, value, location), use a
+       stack of triples.  This considerably simplifies the code (and it
+       will be easier not to require locations as currently does the C++
+       parser), and also gives a 10% speedup according to
+       etc/bench (probably mainly since memory allocation is done once
+       instead of three times).
 
        Another motivation is to make it easier to destruct properly
        semantic values: now that they are bound to their state (hence
 
        These changes should probably benefit the C parser too.
 
-       * data/lalr1.cc: Copy as...  * data/lalr1-fusion.cc: this new
-       file.
+       * data/lalr1.cc: Copy as...
+       * data/lalr1-fusion.cc: this new file.
        (b4_rhs_value, b4_rhs_location): New definitions overriding those
        from c++.m4.
        (state_stack_type, semantic_stack_type, location_stack_type)
 2008-11-03  Akim Demaille  <demaille@gostai.com>
 
        Use variants to support objects as semantic values.
-       This patch was inspired by work by Michiel De Wilde.  But he used Boost
-       variants which (i) requires Boost on the user side, (ii) is slow, and
-       (iii) has useless overhead (the parser knows the type of the semantic value
-       there is no reason to duplicate this information as Boost.Variants do).
-
-       This implementation reserves a buffer large enough to store the largest
-       objects.  yy::variant implements this buffer.  It was implemented with
-       Quentin Hocquet.
+       This patch was inspired by work by Michiel De Wilde.  But he used
+       Boost variants which (i) requires Boost on the user side, (ii) is
+       slow, and (iii) has useless overhead (the parser knows the type of
+       the semantic value there is no reason to duplicate this
+       information as Boost.Variants do).
+
+       This implementation reserves a buffer large enough to store the
+       largest objects.  yy::variant implements this buffer.  It was
+       implemented with Quentin Hocquet.
 
        * src/output.c (type_names_output): New.
        (output_skeleton): Invoke it.