From 7287be84f10886ea3c38ac86da1d6642822b671e Mon Sep 17 00:00:00 2001 From: Akim Demaille Date: Fri, 12 Oct 2012 13:00:59 +0200 Subject: [PATCH] java: use api.location.type and api.position.type * data/java.m4: here. * NEWS, doc/bison.texi, tests/java.at: Adjust. --- NEWS | 15 ++++++++++----- data/java.m4 | 4 ++-- doc/bison.texi | 21 ++++++++++++--------- tests/java.at | 8 ++++---- 4 files changed, 28 insertions(+), 20 deletions(-) diff --git a/NEWS b/NEWS index a20898fc..9476819e 100644 --- a/NEWS +++ b/NEWS @@ -43,7 +43,7 @@ GNU Bison NEWS The parse function now catches exceptions, uses the %destructors to release memory (the lookahead symbol and the symbols pushed on the stack) - before rethrowing the exception. + before re-throwing the exception. This feature is somewhat experimental. User feedback would be appreciated. @@ -65,7 +65,7 @@ GNU Bison NEWS "function declared 'noreturn' should not return") have also been addressed. -** New %define variable: api.location.type (glr.cc, lalr1.cc) +** New %define variable: api.location.type (glr.cc, lalr1.cc, lalr1.java) The %define variable api.location.type defines the name of the type to use for locations. When defined, Bison no longer generates the position.hh @@ -73,13 +73,17 @@ GNU Bison NEWS then responsible to define her type. This can be used in programs with several parsers to factor their location - and position files: let one of them generate them, and let the others - simply resue these types and files. + and position files: let one of them generate them, and the others just use + them. This feature was actually introduced, but not documented, in Bison 2.5, under the name "location_type" (which is maintained for backward compatibility). + For consistency, lalr1.java's %define variables location_type and + position_type are deprecated in favor of api.location.type and + api.position.type. + * Noteworthy changes in release 2.6.2 (2012-08-03) [stable] ** Bug fixes @@ -1937,7 +1941,8 @@ along with this program. If not, see . LocalWords: namespaces strerror const autoconfiguration Dconst Autoconf's FDL LocalWords: Automake TMPDIR LESSEQ ylwrap endif yydebug YYTOKEN YYLSP ival hh LocalWords: extern YYTOKENTYPE TOKENTYPE yytokentype tokentype STYPE lval pdf - LocalWords: lang yyoutput dvi html ps POSIX lvalp llocp calc yyo fval + LocalWords: lang yyoutput dvi html ps POSIX lvalp llocp calc yyo fval Wmaybe + LocalWords: yyvsp pragmas noreturn java's Local Variables: mode: outline diff --git a/data/java.m4 b/data/java.m4 index 351f0f0d..4e809680 100644 --- a/data/java.m4 +++ b/data/java.m4 @@ -172,8 +172,8 @@ m4_define([b4_throws], [b4_percent_define_get([[throws]])]) b4_percent_define_default([[api.location.type]], [Location])]) m4_define([b4_location_type], [b4_percent_define_get([[api.location.type]])]) -b4_percent_define_default([[position_type]], [Position])]) -m4_define([b4_position_type], [b4_percent_define_get([[position_type]])]) +b4_percent_define_default([[api.position.type]], [Position])]) +m4_define([b4_position_type], [b4_percent_define_get([[api.position.type]])]) ## ----------------- ## diff --git a/doc/bison.texi b/doc/bison.texi index 75e80183..8e8e9bb6 100644 --- a/doc/bison.texi +++ b/doc/bison.texi @@ -5331,7 +5331,7 @@ Some of the accepted @var{variable}s are: @findex %define api.location.type @itemize @bullet -@item Language(s): C++ +@item Language(s): C++, Java @item Purpose: Define the location type. @xref{User Defined Location Type}. @@ -9458,7 +9458,7 @@ to generate the @file{master/position.hh} and @file{master/location.hh} files, reused by other parsers as follows: @example -%define location_type "master::location" +%define api.location.type "master::location" %code requires @{ #include @} @end example @@ -10175,11 +10175,11 @@ class defines a @dfn{position}, a single point in a file; Bison itself defines a class representing a @dfn{location}, a range composed of a pair of positions (possibly spanning several files). The location class is an inner class of the parser; the name is @code{Location} by default, and may also be -renamed using @code{%define location_type "@var{class-name}"}. +renamed using @code{%define api.location.type "@var{class-name}"}. The location class treats the position as a completely opaque value. By default, the class name is @code{Position}, but this can be changed -with @code{%define position_type "@var{class-name}"}. This class must +with @code{%define api.position.type "@var{class-name}"}. This class must be supplied by the user. @@ -10314,7 +10314,7 @@ In both cases, the scanner has to implement the following methods. @deftypemethod {Lexer} {void} yyerror (Location @var{loc}, String @var{msg}) This method is defined by the user to emit an error message. The first parameter is omitted if location tracking is not active. Its type can be -changed using @code{%define location_type "@var{class-name}".} +changed using @code{%define api.location.type "@var{class-name}".} @end deftypemethod @deftypemethod {Lexer} {int} yylex () @@ -10332,7 +10332,7 @@ Return respectively the first position of the last token that @code{yylex} returned, and the first position beyond it. These methods are not needed unless location tracking is active. -The return type can be changed using @code{%define position_type +The return type can be changed using @code{%define api.position.type "@var{class-name}".} @end deftypemethod @@ -10577,10 +10577,11 @@ comma-separated list. Default is @code{java.io.IOException}. @xref{Java Scanner Interface}. @end deffn -@deffn {Directive} {%define location_type} "@var{class}" +@deffn {Directive} {%define api.location.type} "@var{class}" The name of the class used for locations (a range between two positions). This class is generated as an inner class of the parser class by @command{bison}. Default is @code{Location}. +Formerly named @code{location_type}. @xref{Java Location Values}. @end deffn @@ -10595,9 +10596,10 @@ The name of the parser class. Default is @code{YYParser} or @xref{Java Bison Interface}. @end deffn -@deffn {Directive} {%define position_type} "@var{class}" +@deffn {Directive} {%define api.position.type} "@var{class}" The name of the class used for positions. This class must be supplied by the user. Default is @code{Position}. +Formerly named @code{position_type}. @xref{Java Location Values}. @end deffn @@ -11881,9 +11883,10 @@ London, Department of Computer Science, TR-00-12 (December 2000). @c LocalWords: getLVal defvar deftypefn deftypefnx gotos msgfmt Corbett LALR's @c LocalWords: subdirectory Solaris nonassociativity perror schemas Malloy ints @c LocalWords: Scannerless ispell american ChangeLog smallexample CSTYPE CLTYPE -@c LocalWords: clval CDEBUG cdebug deftypeopx yyterminate +@c LocalWords: clval CDEBUG cdebug deftypeopx yyterminate LocationType @c Local Variables: @c ispell-dictionary: "american" @c fill-column: 76 @c End: +@c LocalWords: errorVerbose diff --git a/tests/java.at b/tests/java.at index f822ec6e..db3f5000 100644 --- a/tests/java.at +++ b/tests/java.at @@ -719,8 +719,8 @@ AT_SETUP([Java stype, position_class and location_class]) AT_CHECK_JAVA_MINIMAL([[ %define stype "java.awt.Color" %type start; -%define location_type "MyLoc" -%define position_type "MyPos" +%define api.location.type "MyLoc" +%define api.position.type "MyPos" %code { class MyPos {} }]], [[$$ = $1;]], [[MyPos]]) AT_CHECK([[grep 'java.awt.Color' YYParser.java]], [0], [ignore]) AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Position']], [1], [ignore]) @@ -729,8 +729,8 @@ AT_CHECK([[$EGREP -v ' */?\*' YYParser.java | grep 'Location']], [1], [ignore]) AT_CHECK_JAVA_MINIMAL_W_LEXER([[ %define stype "java.awt.Color" %type start; -%define location_type "MyLoc" -%define position_type "MyPos" +%define api.location.type "MyLoc" +%define api.position.type "MyPos" %code { class MyPos {} }]], [], [[return EOF;]], [], [[$$ = $1;]], [[java.awt.Color]], [[MyPos]], [[MyLoc]]) -- 2.47.2