/* Instrument a series branch with STConstraint* slices (typically for a hr * stipulation) * @param si entry slice of branch to be instrumented * @param constraint identifies branch that constrains the attacker * @param parity indicates after which help move of the branch to insert * @return true iff the constraint could be inserted * @note deallocates the constraint if couldn't be inserted */ boolean help_branch_insert_constraint(slice_index si, slice_index constraint, unsigned int parity) { boolean result; TraceFunctionEntry(__func__); TraceFunctionParam("%u",si); TraceFunctionParam("%u",constraint); TraceFunctionParam("%u",parity); TraceFunctionParamListEnd(); TraceStipulation(si); TraceStipulation(constraint); { slice_index const tester = alloc_constraint_tester_slice(constraint); if (help_branch_insert_end_of_branch(si,tester,parity)) result = true; else { result = false; dealloc_slices(tester); } } TraceFunctionExit(__func__); TraceFunctionResult("%u",result); TraceFunctionResultEnd(); return result; }
/* Instrument a series branch with STConstraint* slices (typically for a ser-r * stipulation) * @param si entry slice of branch to be instrumented * @param constraint identifies branch that constrains the attacker */ void series_branch_insert_constraint(slice_index si, slice_index constraint) { TraceFunctionEntry(__func__); TraceFunctionParam("%u",si); TraceFunctionParam("%u",constraint); TraceFunctionParamListEnd(); TraceStipulation(si); TraceStipulation(constraint); assert(SLICE_TYPE(constraint)==STProxy); { slice_index const prototype = alloc_constraint_tester_slice(constraint); slice_insertion_insert(si,&prototype,1); } TraceFunctionExit(__func__); TraceFunctionResultEnd(); }
/* Instrument a battle branch with STConstraint* slices (typically for a reflex * stipulation) * @param si entry slice of branch to be instrumented * @param constraint identifies branch that constrains the attacker */ void battle_branch_insert_attack_constraint(slice_index si, slice_index constraint) { TraceFunctionEntry(__func__); TraceFunctionParam("%u",si); TraceFunctionParam("%u",constraint); TraceFunctionParamListEnd(); TraceStipulation(si); TraceStipulation(constraint); { slice_index const ready = branch_find_slice(STReadyForAttack, si, stip_traversal_context_intro); slice_index const prototype = alloc_constraint_tester_slice(constraint); assert(ready!=no_slice); attack_branch_insert_slices(ready,&prototype,1); } TraceFunctionExit(__func__); TraceFunctionResultEnd(); }