X-Git-Url: https://git.saurik.com/bison.git/blobdiff_plain/67f1a2c254e71e15125a1f4f64fae8f68deaa4fd..fe3cae17a1dd2afa1eb34239ba497252892b2090:/tests/calc.at?ds=sidebyside diff --git a/tests/calc.at b/tests/calc.at index 1a3096e7..0e5d0ec6 100644 --- a/tests/calc.at +++ b/tests/calc.at @@ -1,6 +1,6 @@ # Simple calculator. -*- Autotest -*- -# Copyright (C) 2000-2010 Free Software Foundation, Inc. +# Copyright (C) 2000-2011 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 @@ -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 = YYRHSLOC (Rhs, 1).first; \ + (Current).last = YYRHSLOC (Rhs, N).last; \ + } \ + else \ + { \ + (Current).first = (Current).last = YYRHSLOC (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; } ]]) @@ -701,6 +716,7 @@ m4_define([AT_CHECK_CALC_GLR_CC], [AT_CHECK_CALC([%language "C++" %glr-parser %defines %locations] $@)]) AT_CHECK_CALC_GLR_CC([]) +AT_CHECK_CALC_GLR_CC([%define location_type Span]) AT_CHECK_CALC_GLR_CC([%define parse.error verbose %name-prefix "calc" %verbose %yacc]) AT_CHECK_CALC_GLR_CC([%debug])