Esempio n. 1
0
ProgramStateRef ProgramStateManager::getPersistentState(ProgramState &State) {

    llvm::FoldingSetNodeID ID;
    State.Profile(ID);
    void *InsertPos;

    if (ProgramState *I = StateSet.FindNodeOrInsertPos(ID, InsertPos))
        return I;

    ProgramState *newState = nullptr;
    if (!freeStates.empty()) {
        newState = freeStates.back();
        freeStates.pop_back();
    }
    else {
        newState = (ProgramState*) Alloc.Allocate<ProgramState>();
    }
    new (newState) ProgramState(State);
    StateSet.InsertNode(newState, InsertPos);
    return newState;
}