From 0cc3da3a4e993080b69ee94156c280b5f2630013 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Sun, 5 Oct 2003 06:46:53 +0000 Subject: [PATCH 1/1] In GLR grammars, $N and @N now yield non-modifiable lvalues. --- ChangeLog | 8 ++++++++ data/glr.c | 4 ++-- doc/bison.texinfo | 7 ++++--- 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/ChangeLog b/ChangeLog index f4ea6e4a..6af09b7b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2003-10-04 Paul Eggert + + * data/glr.c (b4_rhs_value, b4_rhs_location): Yield a + non-modifiable lvalue, instead of a modifiable one. + * doc/bison.texinfo (Actions): Document that $$ can + be assigned to. Do not claim that $$ and $N are + array element references: user code should not rely on this. + 2003-10-01 Paul Eggert * src/parse-gram.h (PERCENT_NO_DEFAULT_PREC): New token. diff --git a/data/glr.c b/data/glr.c index 17634dba..f2173854 100644 --- a/data/glr.c +++ b/data/glr.c @@ -111,7 +111,7 @@ m4_define([b4_lhs_value], # Expansion of $NUM, where the current rule has RULE-LENGTH # symbols on RHS. m4_define([b4_rhs_value], -[yyvsp@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3])]) +[((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yysemantics.yysval[]m4_ifval([$3], [.$3])]) @@ -131,7 +131,7 @@ m4_define([b4_lhs_location], # Expansion of @NUM, where the current rule has RULE-LENGTH symbols # on RHS. m4_define([b4_rhs_location], -[yyvsp@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yyloc]) +[((yyGLRStackItem const *)yyvsp)@{YYFILL (m4_eval([$2 - $1]))@}.yystate.yyloc]) # We do want M4 expansion after # for CPP macros. m4_changecom() diff --git a/doc/bison.texinfo b/doc/bison.texinfo index a6e2ee37..84761760 100644 --- a/doc/bison.texinfo +++ b/doc/bison.texinfo @@ -2797,9 +2797,10 @@ Actions, ,Actions in Mid-Rule}). The C code in an action can refer to the semantic values of the components matched by the rule with the construct @code{$@var{n}}, which stands for the value of the @var{n}th component. The semantic value for the grouping -being constructed is @code{$$}. (Bison translates both of these constructs -into array element references when it copies the actions into the parser -file.) +being constructed is @code{$$}. Bison translates both of these +constructs into expressions of the appropriate type when it copies the +actions into the parser file. @code{$$} is translated to a modifiable +lvalue, so it can be assigned to. Here is a typical example: -- 2.47.2