Пример #1
0
static void Includes( a_look *x )
{
    a_look          *y;
    a_link          *link;
    unsigned short  k;

    *top++ = x;
    k = (unsigned short)( top - stk );
    x->depth = k;
    for( link = x->include; link != NULL; link = link->next ) {
        y = link->el;
        if( y->depth == 0 ) {
            Includes( y );
        }
        if( y->depth < x->depth ) {
            x->depth = y->depth;
        }
        Union( x->follow, y->follow );
    }
    if( x->depth == k ) {
        do {
            --top;
            (*top)->depth = INFINITY;
            Assign( (*top)->follow, x->follow );
        } while( *top != x );
    }
}
Пример #2
0
static void CalcIncludes( void )
{
    a_state         *x, *y;
    a_shift_action  *tx;
    a_look          *p, *q;
    a_sym           *sym;
    a_pro           *pro;
    an_item         *nullable, *item;
    a_link          *free;

    for( x = statelist; x != NULL; x = x->next ) {
        for( p = x->look; p->trans != NULL; ++p ) {
            p->depth = 0;
            for( pro = p->trans->sym->pro; pro != NULL; pro = pro->next ) {
                nullable = pro->items;
                for( item = pro->items; (sym = item->p.sym) != NULL; ++item ) {
                    if( !sym->nullable ) {
                        nullable = item;
                    }
                }
                y = x;
                for( item = pro->items; (sym = item->p.sym) != NULL; ++item ) {
                    if( sym->pro == NULL ) {
                        for( tx = y->trans; tx->sym != sym; ) {
                            ++tx;
                        }
                        y = tx->state;
                    } else {
                        for( q = y->look; q->trans->sym != sym; ) {
                            ++q;
                        }
                        if( item >= nullable ) {
                            free = CALLOC( 1, a_link );
                            free->el = p;
                            free->next = q->include;
                            q->include = free;
                        }
                        y = q->trans->state;
                    }
                }
            }
        }
    }
    for( x = statelist; x != NULL; x = x->next ) {
        for( p = x->look; p->trans != NULL; ++p ) {
            if( p->depth == 0 ) {
                Includes( p );
            }
        }
    }
}
Пример #3
0
// TODO(wenxiang): applying passes in topological order according to invalidating relations.
bool PassManager::RunPasses(const PassSet& passes) {
    bool is_changed = false;

    // run all passes in order
    while (!Includes(m_valid_passes, passes)) {
        PassSet ready_passes = CollectReadyPasses(passes);

        // first apply passes who are immune from other passes
        BOOST_FOREACH(std::string pass, SelectSafePasses(ready_passes)) {
            is_changed |= RecursiveRunPass(pass);
        }

        BOOST_FOREACH(std::string pass, ready_passes) {
            is_changed |= RecursiveRunPass(pass);
        }
Пример #4
0
    unsigned int Items(Container_ c)
    {
        unsigned int count = 0;

        for (unsigned int i = 0; i < CAPACITY; ++i)
        {
            if (Includes(i))
            {
                c[count] = i;
                ++count;
            }
        }

        return count;
    }
Пример #5
0
 static Includes &SearchPathIncludes() {
   
   static bool initialised = false;
   static Includes includes;
   
   if(initialised)
     return includes;
   
   for(std::vector<std::string>::const_iterator itor = args.includeSearchPath.begin(); itor != args.includeSearchPath.end(); itor++)
     includes += Includes( *itor );
   
   initialised = true;
   
   return includes;
 }
Пример #6
0
 unsigned int operator[] (unsigned int bit) const
 {
     return Includes(bit) ? 1 : 0;
 }
Пример #7
0
 bool Contains(unsigned int bit) const
 {
     return Includes(bit);
 }
Пример #8
0
String CppBuilder::IncludesDefinesTargetTime(const String& package, const Package& pkg)
{
	String cc = Includes(" -I", package, pkg);
	cc << DefinesTargetTime(" -D", package, pkg);
	return cc;
}
Пример #9
0
bool ComputeCommitSelection(const CommitDialog::SelectedFiles& userSelection,
                            const FilesWithBugnumbers* modified,
                            const FilesWithBugnumbers* added,
                            const FilesWithBugnumbers* removed,
                            const FilesWithBugnumbers* renamed,
                            std::vector<std::string>& result)
{
#if 0
    // Optimization: If all files are selected, we can simply do a 'cvs commit' in the top-level directories
    if (Includes(userSelection, modified) &&
        Includes(userSelection, added) &&
        Includes(userSelection, removed) &&
        Includes(userSelection, renamed))
    {
        std::set<std::string> modifiedDirs;
        if (modified)
            modifiedDirs = GetTopLevelDirs(*modified);
        std::set<std::string> addedDirs;
        if (addedDirs)
            addedDirs = GetTopLevelDirs(*added);
        std::set<std::string> removedDirs;
        if (removedDirs)
            removedDirs = GetTopLevelDirs(*removed);
        std::set<std::string> renamedDirs;
        if (renamedDirs)
            renamedDirs = GetTopLevelDirs(*renamed);
        std::set<std::string> dirs1;
        std::set_union(modifiedDirs.begin(), modifiedDirs.end(), addedDirs.begin(), addedDirs.end(), std::inserter(dirs1, dirs1.begin()));
        std::set<std::string> dirs2;
        std::set_union(removedDirs.begin(), removedDirs.end(), renamedDirs.begin(), renamedDirs.end(), std::inserter(dirs2, dirs2.begin()));
        std::set<std::string> dirs;
        std::set_union(dirs1.begin(), dirs1.end(), dirs2.begin(), dirs2.end(), std::inserter(dirs, dirs.begin()));
        result.clear();
        for (std::set<std::string>::iterator it = dirs.begin(); it != dirs.end(); ++it)
            result.push_back(*it);
        return true;
    }
    else
#endif
    {
        // Get list of non-renamed files
        result.clear();
        for (CommitDialog::SelectedFiles::const_iterator it = userSelection.begin(); it != userSelection.end(); ++it)
            result.push_back(it->first);

        // Check if any renames are to be committed
        std::vector<std::string> renameDirs;
        for (CommitDialog::SelectedFiles::const_iterator it = userSelection.begin(); it != userSelection.end(); ++it)
            if (it->second == CVSStatus::STATUS_RENAMED)
                renameDirs.push_back(GetDirectoryPart(it->first));

        // For each directory containing renamed files
        for (std::vector<std::string>::iterator it = renameDirs.begin(); it != renameDirs.end(); ++it)
        {
            // Check if this directory contains any modified files that the user did not select
            std::vector<std::string> files;
            if (modified)
                files = GetFilesInFolder(*modified, *it);  
            for (std::vector<std::string>::iterator fileIter = files.begin(); fileIter != files.end(); ++fileIter)
                if (find(result.begin(), result.end(), *fileIter) == result.end())
                    // This file is not selected
                    return false;

            // Same for added
            files.clear();
            if (added)
                files = GetFilesInFolder(*added, *it);  
            for (std::vector<std::string>::iterator fileIter = files.begin(); fileIter != files.end(); ++fileIter)
                if (find(result.begin(), result.end(), *fileIter) == result.end())
                    // This file is not selected
                    return false;

            // Same for removed
            files.clear();
            if (removed)
                files = GetFilesInFolder(*removed, *it);  
            for (std::vector<std::string>::iterator fileIter = files.begin(); fileIter != files.end(); ++fileIter)
                if (find(result.begin(), result.end(), *fileIter) == result.end())
                    // This file is not selected
                    return false;

            // Same for renamed
            files.clear();
            if (renamed)
                files = GetFilesInFolder(*renamed, *it);  
            for (std::vector<std::string>::iterator fileIter = files.begin(); fileIter != files.end(); ++fileIter)
                if (find(result.begin(), result.end(), *fileIter) == result.end())
                    // This file is not selected
                    return false;
        }
        // Remove all files from the directories where renames are being committed
        result.clear();
        for (CommitDialog::SelectedFiles::const_iterator it = userSelection.begin(); it != userSelection.end(); ++it)
        {
            std::string dir = GetDirectoryPart(it->first);
            if (find(renameDirs.begin(), renameDirs.end(), dir) == renameDirs.end())
                result.push_back(it->first);
        }
        // Add directories where renames are being committed
        for (std::vector<std::string>::iterator it = renameDirs.begin(); it != renameDirs.end(); ++it)
            result.push_back(*it);
    }
    return true;
}