Estimated hours taken: 3
Branches: main and 0.12
Make the I/O tabling transformation respect :- pragma no_inline directives
by creating a copy of the predicate to be transformed and calling the
copy, instead of duplicating the body, if :- pragma no_inline is
given. This is necessary to avoid duplicate label errors from the C compiler
when the I/O tabled foreign proc uses labels.
compiler/hlds_pred.m:
Add a new functor to the pred_creation type to indicate that a pred
was created by the I/O tabling transformation.
Fix some formatting.
compiler/table_gen.m:
If the predicate to be I/O tabled has a no_inline pragma attached to
it, then create a copy of the predicate and call the new predicate in
the transformed version.
compiler/trace_params.m:
Do not trace the copy of the I/O tabled predicate.
doc/reference_manual.texi
Document the tabled_for_io attribute.
tests/debugger/Mercury.options:
tests/debugger/Mmakefile:
tests/debugger/io_tab_goto.data:
tests/debugger/io_tab_goto.exp:
tests/debugger/io_tab_goto.inp:
tests/debugger/io_tab_goto.m:
Test that foreign C code with labels is I/O tabled correctly.
tests/debugger/declarative/Mmakefile:
tests/debugger/declarative/tabled_read_decl_goto.data:
tests/debugger/declarative/tabled_read_decl_goto.exp:
tests/debugger/declarative/tabled_read_decl_goto.inp:
tests/debugger/declarative/tabled_read_decl_goto.m:
Test declarative debugging of I/O tabled foreign predicates with
gotos.