From: Akim Demaille Date: Wed, 14 Apr 2010 14:37:54 +0000 (+0200) Subject: lalr1.cc: location_type: make sure we don't depend on loc.(begin|end). X-Git-Tag: v2.5_rc1~79 X-Git-Url: https://git.saurik.com/bison.git/commitdiff_plain/0f404a0af0cb68849b5099e95dec0f9a09e3973d lalr1.cc: location_type: make sure we don't depend on loc.(begin|end). * tests/calc.at (Span): Instead of begin/end, as in the built-in location class, use first and last. Define YYLLOC_DEFAULT to adjust to these changes. * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Adjust to the location_type changes. (cherry picked from commit c826013fb38c98861ef0fc5d4dc3fb3fb4f555be) Conflicts: tests/calc.at --- diff --git a/ChangeLog b/ChangeLog index 514dd5d6..c59e809b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2010-05-04 Akim Demaille + + lalr1.cc: location_type: make sure we don't depend on loc.(begin|end). + * tests/calc.at (Span): Instead of begin/end, as in the built-in + location class, use first and last. + Define YYLLOC_DEFAULT to adjust to these changes. + * tests/local.at (_AT_BISON_OPTION_PUSHDEFS): Adjust to the + location_type changes. + 2010-05-04 Akim Demaille tests: enhance AT_SYNCLINES_COMPILE. diff --git a/tests/calc.at b/tests/calc.at index 5bb746f7..b3955ca5 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -156,7 +156,7 @@ AT_SKEL_CC_IF( [%define global_tokens_and_yystype])[ %code requires { -]AT_LOCATION_TYPE_IF([ +]AT_LOCATION_TYPE_IF([[ # include struct Point { @@ -166,10 +166,24 @@ AT_SKEL_CC_IF( struct Span { - Point begin; - Point end; + Point first; + Point last; }; -])[ + +# define YYLLOC_DEFAULT(Current, Rhs, N) \ +do { \ + if (N) \ + { \ + (Current).first = (Rhs)[1].first; \ + (Current).last = (Rhs)[N].last; \ + } \ + else \ + { \ + (Current).first = (Current).last = (Rhs)[0].last; \ + } \ +} while (false) + +]])[ /* Exercise pre-prologue dependency to %union. */ typedef int semantic_value; } @@ -207,6 +221,7 @@ FILE *input; static semantic_value global_result = 0; static int global_count = 0; static int power (int base, int exponent); + ]AT_SKEL_CC_IF(, [/* yyerror receives the location if: - %location & %pure & %glr @@ -278,11 +293,11 @@ exp: std::ostream& operator<< (std::ostream& o, const Span& s) { - o << s.begin.l << '.' << s.begin.c; - if (s.begin.l != s.end.l) - o << '-' << s.end.l << '.' << s.end.c - 1; - else if (s.begin.c != s.end.c - 1) - o << '-' << s.end.c - 1; + o << s.first.l << '.' << s.first.c; + if (s.first.l != s.last.l) + o << '-' << s.last.l << '.' << s.last.c - 1; + else if (s.first.c != s.last.c - 1) + o << '-' << s.last.c - 1; return o; } ]]) diff --git a/tests/local.at b/tests/local.at index f691ab23..dcf382d0 100644 --- a/tests/local.at +++ b/tests/local.at @@ -152,7 +152,7 @@ AT_PURE_LEX_IF( AT_SKEL_CC_IF( [AT_LOCATION_TYPE_IF( - [AT_LOC_PUSHDEF([begin.l], [begin.c], [end.l], [end.c])], + [AT_LOC_PUSHDEF([first.l], [first.c], [last.l], [last.c])], [AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], [end.column])])], [AT_LOC_PUSHDEF([first_line], [first_column], [last_line], [last_column])])