Ejemplo n.º 1
0
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) 
Ejemplo n.º 2
0
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)