def execute_operation_body_with_param(substitution, env, op, solution, result): try: # use values of solution (iterations musst not affect each other): return_val_idNodes = op.get_return() parameter_idNodes = op.get_param() bstate = env.state_space.get_state().clone() env.state_space.add_state(bstate) _set_parameter_values(env, parameter_idNodes, solution) # try to exec ex_sub_generator = exec_substitution(substitution, env) bstate2 = bstate.clone() env.state_space.add_state(bstate2) for possible in ex_sub_generator: if possible: # Solution found! # (3.2.2) get parameter and return-value solutions parameter_names, parameter_values = _get_value_list(env, parameter_idNodes) return_names, return_values = _get_value_list(env, return_val_idNodes) #print parameter_value_list env.pop_frame() # pop on the cloned state bstate2 = env.state_space.get_state().clone() #TODO:(#ISSUE 15) remove? if USE_ANIMATION_HISTORY: bstate2.add_prev_bstate(bstate, op.opName, parameter_values) exec_op = Executed_Operation(op.opName, parameter_names, parameter_values, return_names, return_values, bstate2) result.append(exec_op) #result.append([op.opName, parameter_value_list, return_value_list, bstate2]) env.state_space.undo() # pop last bstate2 bstate2 = bstate.clone() env.state_space.add_state(bstate2) env.state_space.undo() #pop last bstate2 env.state_space.undo() #pop bstate (all paths for this solution/parameters found) except ValueNotInDomainException: #TODO: modify enumerator not to generate that "solutions" at all env.state_space.undo() #pop bstate (all paths for this solution/parameters found)
def execute_operation_body_without_param(substitution, env, op, ref_bstate, result): return_val_idNodes = op.get_return() ex_sub_generator = exec_substitution(substitution, env) bstate = ref_bstate.clone() # new state for first exec-path (nondeterminism) env.state_space.add_state(bstate) for possible in ex_sub_generator: if USE_RPYTHON_CODE: driver.jit_merge_point(substitution=substitution, op=op) if possible: return_names, return_values = _get_value_list(env, return_val_idNodes) env.pop_frame() bstate = env.state_space.get_state() # TODO:(#ISSUE 15) remove? if USE_ANIMATION_HISTORY: bstate.add_prev_bstate(ref_bstate, op.opName, parameter_values=None) exec_op = Executed_Operation(op.opName, [], [], return_names, return_values, bstate) result.append(exec_op) #result.append([op.opName, [], return_value_list, bstate]) env.state_space.undo() # pop last bstate bstate = ref_bstate.clone() # new state for next exec-path (nondeterminism) env.state_space.add_state(bstate) env.state_space.undo() # pop bstate (all paths found)