Hide the events associated with the goals inserted by tabling transformations,

Estimated hours taken: 2
Branches: main

Hide the events associated with the goals inserted by tabling transformations,
since ordinary programmers shouldn't be exposed to the details of the
transformation. (A later diff will adjust the goal paths of the events
associated with the original code back to what they would have been without
the transformation.)

Add a new mdb command, unhide_events, that allows the programmer to expose
hidden events. This is intended for implementors only.

compiler/hlds_goal.m:
	Add a new goal feature, hide_debug_event. If a nonatomic goal has this
	feature, then the associated trace events will be hidden.

compiler/trace.m:
	Respect the new goal feature.

compiler/table_gen.m:
	Add the new goal feature to the compound goals created by tabling
	transformations.

compiler/code_gen.m:
compiler/dense_switch.m:
compiler/disj_gen.m:
compiler/ite_gen.m:
compiler/string_switch.m:
compiler/switch_gen.m:
compiler/tag_switch.m:
	Pass the required goal_info to trace.m, to allow it to hide events as
	required.

runtime/mercury_trace_base.[ch]:
	Add two global boolean variables. One says whether we are exposing
	hidden events, the other says whether we have ever exposed hidden
	events.

trace/mercury_trace.c:
	Hide hidden events, unless the programmer has asked for them to be
	exposed.

trace/mercury_trace_internal.c:
	Implement the unhide_events command.

	Make "dd" check whether we have ever exposed hidden events.

	Fix some unclear code in "print_optionals".

doc/user_guide.texi:
	Doument the unhide_events command.

doc/mdb_categories:
	Mention the unhide_events command.

tests/debugger/mdb_command_test.inp:
	Test the documentation of the unhide_events command.
This commit is contained in:
Zoltan Somogyi
2002-09-09 07:48:25 +00:00
parent ba63ad2479
commit d869c5505b
17 changed files with 338 additions and 199 deletions

View File

@@ -1157,8 +1157,8 @@ code_gen__generate_goal_2(par_conj(Goals), GoalInfo, CodeModel, Code) -->
par_conj_gen__generate_par_conj(Goals, GoalInfo, CodeModel, Code).
code_gen__generate_goal_2(disj(Goals), GoalInfo, CodeModel, Code) -->
disj_gen__generate_disj(CodeModel, Goals, GoalInfo, Code).
code_gen__generate_goal_2(not(Goal), _GoalInfo, CodeModel, Code) -->
ite_gen__generate_negation(CodeModel, Goal, Code).
code_gen__generate_goal_2(not(Goal), GoalInfo, CodeModel, Code) -->
ite_gen__generate_negation(CodeModel, Goal, GoalInfo, Code).
code_gen__generate_goal_2(if_then_else(_Vars, Cond, Then, Else),
GoalInfo, CodeModel, Code) -->
ite_gen__generate_ite(CodeModel, Cond, Then, Else, GoalInfo, Code).