summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkim Demaille <demaille@gostai.com>2008-09-01 11:39:41 +0200
committerAkim Demaille <demaille@gostai.com>2008-11-13 07:04:47 +0100
commit3204049e31e71c30d0dddf7cae8738c289dbd104 (patch)
tree03401ebdc2eb0b5090e0e9d71a23e64276536db3
parent202598d3ab40e58385028c842ff79a680e79bbe8 (diff)
downloadbison-3204049e31e71c30d0dddf7cae8738c289dbd104.tar.gz
Compute at M4 time some of the subtractions.
* data/lalr1.cc (b4_substract): New. (b4_rhs_data): Use it.
-rw-r--r--ChangeLog6
-rw-r--r--data/lalr1.cc11
2 files changed, 16 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 134e862d..56f39316 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,11 @@
2008-11-13 Akim Demaille <demaille@gostai.com>
+ Compute at M4 time some of the subtractions.
+ * data/lalr1.cc (b4_substract): New.
+ (b4_rhs_data): Use it.
+
+2008-11-13 Akim Demaille <demaille@gostai.com>
+
symbol::token.
This is allows the user to get the type of a token return by
yylex.
diff --git a/data/lalr1.cc b/data/lalr1.cc
index 15a42580..97ba371b 100644
--- a/data/lalr1.cc
+++ b/data/lalr1.cc
@@ -18,6 +18,15 @@
m4_include(b4_pkgdatadir/[c++.m4])
+# b4_subtract(LHS, RHS)
+# ---------------------
+# Evaluate LHS - RHS if they are integer literals, otherwise expand
+# to (LHS) - (RHS).
+m4_define([b4_subtract],
+[m4_bmatch([$1$2], [^[0123456789]*$],
+ [m4_eval([$1 - $2])],
+ [($1) - ($2)])])
+
# b4_args(ARG1, ...)
# _b4_args(ARG1, ...)
@@ -107,7 +116,7 @@ m4_define([b4_lhs_location],
# Return the data corresponding to the symbol #NUM, where the current
# rule has RULE-LENGTH symbols on RHS.
m4_define([b4_rhs_data],
- [yystack_@{($1) - ($2)@}])
+ [yystack_@{b4_subtract($@)@}])
# b4_rhs_state(RULE-LENGTH, NUM)