java: use full locations for diagnostics about destructors

Currently we use the syncline to report errors about a symbol's
destructor/printer.  This is not accurate (only file and line), and
this is incorrect: the file name is double quotes (a recent change,
needed to make sure we escape properly double quotes in it).  And
worst of all: with --no-line, b4_syncline expands to nothing.

Rather, push the locations into the backend, and use them.

* src/muscle-tab.h, src/muscle-tab.c (muscle_location_grow): Make it
public.
* src/output.c (prepare_symbol_definitions): Use it to pubish the
location of the printer and destructor.
* data/skeletons/lalr1.java: Use complain_at instead of complain.
* tests/java.at (Java invalid directives): Adjust expectations.
* data/skeletons/bison.m4 (b4_symbol_action_location): Remove.
We should not use b4_syncline this way.
This commit is contained in:
Akim Demaille
2019-04-01 17:49:10 +02:00
parent 507c679b9b
commit 9832fdd6ef
7 changed files with 18 additions and 20 deletions

View File

@@ -17,8 +17,7 @@
m4_include(b4_skeletonsdir/[java.m4])
b4_defines_if([b4_complain([%s: %%defines does not make sense in Java],
[b4_skeleton])])
b4_defines_if([b4_complain([%defines does not make sense in Java])])
# We do not depend on %debug in Java, but pacify warnings about
# non-used flags.
@@ -26,9 +25,8 @@ b4_parse_trace_if([0], [0])
m4_define([b4_symbol_no_destructor_assert],
[b4_symbol_if([$1], [has_destructor],
[b4_complain([%s: %s: %%destructor does not make sense in Java],
[b4_skeleton],
[b4_symbol_action_location([$1], [destructor])])])])
[b4_complain_at(m4_unquote(b4_symbol([$1], [destructor_loc])),
[%destructor does not make sense in Java])])])
b4_symbol_foreach([b4_symbol_no_destructor_assert])
# Setup some macros for api.push-pull.