[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Using "%define location_type" c++ skeleton should exclude default lo
From: |
Akim Demaille |
Subject: |
Re: Using "%define location_type" c++ skeleton should exclude default location |
Date: |
Tue, 4 May 2010 15:19:42 +0200 |
Le 14 avr. 2010 à 13:19, Akim Demaille a écrit :
> I have installed a first batch of changes in 2.5 and 2.6 to this end. I
> think I failed to keep you in CC, please have a look at the archive (it
> should appear in
> http://lists.gnu.org/archive/html/bison-patches/2010-04/threads.html I guess).
Installed in master and 2.5.
From 4f756f887bca79b6feeeeedc821b17fd08079e5b Mon Sep 17 00:00:00 2001
From: Akim Demaille <address@hidden>
Date: Tue, 13 Apr 2010 23:04:03 +0200
Subject: [PATCH 05/18] tests: calc: simplify location management.
* tests/local.at (AT_LOC_PUSHDEF, AT_LOC_POPDEF): New.
(_AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS): Use them to
define the appropriate AT_LOC accessors.
* tests/calc.at: Use AT_LOC accessors.
---
ChangeLog | 8 ++++++++
tests/calc.at | 40 +++++++++++++++-------------------------
tests/local.at | 30 ++++++++++++++++++++++++++++++
3 files changed, 53 insertions(+), 25 deletions(-)
diff --git a/ChangeLog b/ChangeLog
index 58f27a5..81817c7 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,13 @@
2010-04-13 Akim Demaille <address@hidden>
+ tests: calc: simplify location management.
+ * tests/local.at (AT_LOC_PUSHDEF, AT_LOC_POPDEF): New.
+ (_AT_BISON_OPTION_PUSHDEFS, AT_BISON_OPTION_POPDEFS): Use them to
+ define the appropriate AT_LOC accessors.
+ * tests/calc.at: Use AT_LOC accessors.
+
+2010-04-13 Akim Demaille <address@hidden>
+
test location_type.
* tests/local.at (_AT_BISON_OPTION_PUSHDEFS):
Define AT_LOCATION_TYPE_IF.
diff --git a/tests/calc.at b/tests/calc.at
index 16e40f5..fddddee 100644
--- a/tests/calc.at
+++ b/tests/calc.at
@@ -55,11 +55,11 @@ get_char (]AT_LEX_FORMALS[)
last_yylloc = AT_LOC;
if (res == '\n')
{
- AT_LOC.last_line++;
- AT_LOC.last_column = 1;
+ AT_LOC_LAST_LINE++;
+ AT_LOC_LAST_COLUMN = 1;
}
else
- AT_LOC.last_column++;
+ AT_LOC_LAST_COLUMN++;
])[
return res;
}
@@ -117,22 +117,22 @@ int
{
init = 0;
]AT_LOCATION_IF([
- AT_LOC.last_column = 1;
- AT_LOC.last_line = 1;
+ AT_LOC_LAST_COLUMN = 1;
+ AT_LOC_LAST_LINE = 1;
])[
}
]AT_LOCATION_IF([
- AT_LOC.first_column = AT_LOC.last_column;
- AT_LOC.first_line = AT_LOC.last_line;
+ AT_LOC_FIRST_COLUMN = AT_LOC_LAST_COLUMN;
+ AT_LOC_FIRST_LINE = AT_LOC_LAST_LINE;
])[
/* Skip white space. */
while ((c = get_char (]AT_LEX_ARGS[)) == ' ' || c == '\t')
{
]AT_LOCATION_IF(
-[ AT_LOC.first_column = AT_LOC.last_column;
- AT_LOC.first_line = AT_LOC.last_line;
+[ AT_LOC_FIRST_COLUMN = AT_LOC_LAST_COLUMN;
+ AT_LOC_FIRST_LINE = AT_LOC_LAST_LINE;
])[
}
@@ -192,17 +192,7 @@ extern FILE *input;]AT_SKEL_CC_IF([[
#ifndef YYLTYPE
# define YYLTYPE ]AT_NAME_PREFIX[::parser::location_type
#endif
-]AT_LOCATION_TYPE_IF([[
- #define first_line begin.l
- #define first_column begin.c
- #define last_line end.l
- #define last_column end.c
-]], [[
- #define first_line begin.line
- #define first_column begin.column
- #define last_line end.line
- #define last_column end.column
-]])])[
+]])[
}
%code
@@ -328,13 +318,13 @@ yyerror (AT_YYERROR_ARG_LOC_IF([YYLTYPE *llocp, ])
AT_PARAM_IF([(void) result; (void) count;])
AT_YYERROR_SEES_LOC_IF([
fprintf (stderr, "%d.%d",
- AT_LOC.first_line, AT_LOC.first_column);
- if (AT_LOC.first_line != AT_LOC.last_line)
+ AT_LOC_FIRST_LINE, AT_LOC_FIRST_COLUMN);
+ if (AT_LOC_FIRST_LINE != AT_LOC_LAST_LINE)
fprintf (stderr, "-%d.%d",
- AT_LOC.last_line, AT_LOC.last_column - 1);
- else if (AT_LOC.first_column != AT_LOC.last_column - 1)
+ AT_LOC_LAST_LINE, AT_LOC_LAST_COLUMN - 1);
+ else if (AT_LOC_FIRST_COLUMN != AT_LOC_LAST_COLUMN - 1)
fprintf (stderr, "-%d",
- AT_LOC.last_column - 1);
+ AT_LOC_LAST_COLUMN - 1);
fprintf (stderr, ": ");])
fprintf (stderr, "%s\n", s);
}])[
diff --git a/tests/local.at b/tests/local.at
index f8a88c9..8ebf26a 100644
--- a/tests/local.at
+++ b/tests/local.at
@@ -40,6 +40,25 @@ printf "$count\n";' $1], [0], [$3
## Macros decoding Bison options. ##
## ------------------------------- ##
+# AT_LOC_PUSHDEF(FIRST-LINE, FIRST-COLUMN, LAST-LINE, LAST-COLUMN)
+# ----------------------------------------------------------------
+# Pushdef AT_LOC_(FIRST|LAST)_(LINE|COLUMN).
+m4_define([AT_LOC_PUSHDEF],
+[m4_pushdef([AT_LOC_FIRST_LINE], [AT_LOC.$1])
+m4_pushdef([AT_LOC_FIRST_COLUMN], [AT_LOC.$2])
+m4_pushdef([AT_LOC_LAST_LINE], [AT_LOC.$3])
+m4_pushdef([AT_LOC_LAST_COLUMN], [AT_LOC.$4])])
+
+# AT_LOC_POPDEF
+# -------------
+# Popdef AT_LOC_(FIRST|LAST)_(LINE|COL).
+m4_define([AT_LOC_POPDEF],
+[m4_popdef([AT_LOC_FIRST_LINE])
+m4_popdef([AT_LOC_FIRST_COLUMN])
+m4_popdef([AT_LOC_LAST_LINE])
+m4_popdef([AT_LOC_LAST_COLUMN])])
+
+
# AT_BISON_OPTION_PUSHDEFS([BISON-OPTIONS])
# -----------------------------------------
@@ -131,6 +150,16 @@ AT_PURE_LEX_IF(
m4_pushdef([AT_LEX_PRE_FORMALS], [])
m4_pushdef([AT_LEX_PRE_ARGS], [])
])
+
+# Handle the different types of location components.
+
+AT_SKEL_CC_IF(
+ [AT_LOCATION_TYPE_IF(
+ [AT_LOC_PUSHDEF([begin.l], [begin.c], [end.l], [end.c])],
+ [AT_LOC_PUSHDEF([begin.line], [begin.column], [end.line], [end.column])])],
+ [AT_LOC_PUSHDEF([first_line], [first_column], [last_line], [last_column])])
+
+
AT_GLR_IF([AT_KEYWORDS([glr])])
])# _AT_BISON_OPTION_PUSHDEFS
@@ -161,6 +190,7 @@ m4_popdef([AT_SKEL_CC_IF])
m4_popdef([AT_GLR_CC_IF])
m4_popdef([AT_LALR1_CC_IF])
m4_popdef([AT_DEFINES_IF])
+AT_LOC_POPDEF
])# AT_BISON_OPTION_POPDEFS
--
1.7.0.5
- Re: Using "%define location_type" c++ skeleton should exclude default location, Akim Demaille, 2010/05/04
- Re: Using "%define location_type" c++ skeleton should exclude default location, Akim Demaille, 2010/05/04
- Re: Using "%define location_type" c++ skeleton should exclude default location, Akim Demaille, 2010/05/04
- Re: Using "%define location_type" c++ skeleton should exclude default location,
Akim Demaille <=
- Re: Using "%define location_type" c++ skeleton should exclude default location, Akim Demaille, 2010/05/04
- Re: Using "%define location_type" c++ skeleton should exclude default location, Akim Demaille, 2010/05/04
- Re: Using "%define location_type" c++ skeleton should exclude default location, Akim Demaille, 2010/05/04
- Re: Using "%define location_type" c++ skeleton should exclude default location, Akim Demaille, 2010/05/04