本文整理汇总了C++中SourceFile类的典型用法代码示例。如果您正苦于以下问题:C++ SourceFile类的具体用法?C++ SourceFile怎么用?C++ SourceFile使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了SourceFile类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SourceMgr
Parser::Parser(std::unique_ptr<Lexer> Lex, SourceFile &SF,
SILParserState *SIL, PersistentParserState *PersistentState)
: SourceMgr(SF.getASTContext().SourceMgr),
Diags(SF.getASTContext().Diags),
SF(SF),
L(Lex.release()),
SIL(SIL),
CurDeclContext(&SF),
Context(SF.getASTContext()) {
State = PersistentState;
if (!State) {
OwnedState.reset(new PersistentParserState());
State = OwnedState.get();
}
// Set the token to a sentinel so that we know the lexer isn't primed yet.
// This cannot be tok::unknown, since that is a token the lexer could produce.
Tok.setKind(tok::NUM_TOKENS);
auto ParserPos = State->takeParserPosition();
if (ParserPos.isValid() &&
SourceMgr.findBufferContainingLoc(ParserPos.Loc) == L->getBufferID()) {
auto BeginParserPosition = getParserPosition(ParserPos);
restoreParserPosition(BeginParserPosition);
InPoundLineEnvironment = State->InPoundLineEnvironment;
}
}
示例2: assert
bool KJSDebugWin::sourceUnused(KJS::ExecState *exec, int sourceId)
{
// Verify that there aren't any contexts on the stack using the given sourceId
// This should never be the case because this function is only called when
// the interpreter has deleted all Node objects for the source.
for(int e = 0; e < m_execsCount; e++)
assert(m_execs[e]->context().sourceId() != sourceId);
// Now remove the fragment (and the SourceFile, if it was the last fragment in that file)
SourceFragment *fragment = m_sourceFragments[sourceId];
if(fragment)
{
m_sourceFragments.erase(sourceId);
SourceFile *sourceFile = fragment->sourceFile;
if(sourceFile->hasOneRef())
{
for(int i = 0; i < m_sourceSel->count(); i++)
{
if(m_sourceSelFiles.at(i) == sourceFile)
{
m_sourceSel->removeItem(i);
m_sourceSelFiles.remove(i);
break;
}
}
removeSourceFile(exec->interpreter(), sourceFile->url);
}
delete fragment;
}
return (m_mode != Stop);
}
示例3: TokenRecorder
Parser::Parser(std::unique_ptr<Lexer> Lex, SourceFile &SF,
SILParserTUStateBase *SIL,
PersistentParserState *PersistentState)
: SourceMgr(SF.getASTContext().SourceMgr),
Diags(SF.getASTContext().Diags),
SF(SF),
L(Lex.release()),
SIL(SIL),
CurDeclContext(&SF),
Context(SF.getASTContext()),
TokReceiver(SF.shouldKeepSyntaxInfo() ?
new TokenRecorder(SF) :
new ConsumeTokenReceiver()),
SyntaxContext(new SyntaxParsingContext(SyntaxContext, SF, Diags, SourceMgr,
L->getBufferID())) {
State = PersistentState;
if (!State) {
OwnedState.reset(new PersistentParserState());
State = OwnedState.get();
}
// Set the token to a sentinel so that we know the lexer isn't primed yet.
// This cannot be tok::unknown, since that is a token the lexer could produce.
Tok.setKind(tok::NUM_TOKENS);
auto ParserPos = State->takeParserPosition();
if (ParserPos.isValid() &&
L->isStateForCurrentBuffer(ParserPos.LS)) {
restoreParserPosition(ParserPos);
InPoundLineEnvironment = State->InPoundLineEnvironment;
}
}
示例4: fileInfo
bool MainWindow::memoryOpen(const QByteArray& ba, const QString& assocPath)
{
QFileInfo fileInfo(assocPath);
if(!fileInfo.isFile() || !fileInfo.isReadable()) return false;
for(int i = 0; i < ui_tabWidget->count(); ++i) {
SourceFile* sourceFile = dynamic_cast<SourceFile*>(ui_tabWidget->widget(i));
if(sourceFile && sourceFile->associatedFile() == assocPath) {
ui_tabWidget->setCurrentIndex(i);
on_ui_tabWidget_currentChanged(i);
return true;
}
}
/* Attempt to open the selected file */
SourceFile *sourceFile = new SourceFile(this);
if(!sourceFile->memoryOpen(ba, assocPath)) {
MessageDialog::showError(this, "simple_error", QStringList() <<
tr("Could not open ") + sourceFile->associatedFileName() <<
tr("Unable to open file from memory."));
delete sourceFile;
return false;
}
addTab(sourceFile);
UiEventManager::ref().sendEvent(UI_EVENT_OPEN_FILE);
hideProjectDock();
return true;
}
示例5: getInfixData
/// getInfixData - If the specified expression is an infix binary
/// operator, return its infix operator attributes.
static InfixData getInfixData(TypeChecker &TC, DeclContext *DC, Expr *E) {
if (auto *ifExpr = dyn_cast<IfExpr>(E)) {
// Ternary has fixed precedence.
assert(!ifExpr->isFolded() && "already folded if expr in sequence?!");
(void)ifExpr;
return InfixData(IntrinsicPrecedences::IfExpr,
Associativity::Right,
/*assignment*/ false);
}
if (auto *assign = dyn_cast<AssignExpr>(E)) {
// Assignment has fixed precedence.
assert(!assign->isFolded() && "already folded assign expr in sequence?!");
(void)assign;
return InfixData(IntrinsicPrecedences::AssignExpr,
Associativity::Right,
/*assignment*/ true);
}
if (auto *as = dyn_cast<ExplicitCastExpr>(E)) {
// 'as' and 'is' casts have fixed precedence.
assert(!as->isFolded() && "already folded 'as' expr in sequence?!");
(void)as;
return InfixData(IntrinsicPrecedences::ExplicitCastExpr,
Associativity::None,
/*assignment*/ false);
}
if (DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(E)) {
SourceFile *SF = DC->getParentSourceFile();
Identifier name = DRE->getDecl()->getName();
bool isCascading = DC->isCascadingContextForLookup(true);
if (InfixOperatorDecl *op = SF->lookupInfixOperator(name, isCascading,
E->getLoc()))
return op->getInfixData();
}
if (OverloadedDeclRefExpr *OO = dyn_cast<OverloadedDeclRefExpr>(E)) {
SourceFile *SF = DC->getParentSourceFile();
Identifier name = OO->getDecls()[0]->getName();
bool isCascading = DC->isCascadingContextForLookup(true);
if (InfixOperatorDecl *op = SF->lookupInfixOperator(name, isCascading,
E->getLoc()))
return op->getInfixData();
}
// If E is already an ErrorExpr, then we've diagnosed it as invalid already,
// otherwise emit an error.
if (!isa<ErrorExpr>(E))
TC.diagnose(E->getLoc(), diag::unknown_binop);
// Recover with an infinite-precedence left-associative operator.
return InfixData((unsigned char)~0U, Associativity::Left,
/*assignment*/ false);
}
示例6: Lexer
Parser::Parser(unsigned BufferID, SourceFile &SF, SILParserState *SIL,
PersistentParserState *PersistentState)
: Parser(std::unique_ptr<Lexer>(
new Lexer(SF.getASTContext().LangOpts, SF.getASTContext().SourceMgr,
BufferID, &SF.getASTContext().Diags,
/*InSILMode=*/SIL != nullptr,
SF.getASTContext().LangOpts.AttachCommentsToDecls
? CommentRetentionMode::AttachToNextToken
: CommentRetentionMode::None)), SF, SIL, PersistentState) {
}
示例7: lookupPrecedenceGroupForOperator
static PrecedenceGroupDecl *
lookupPrecedenceGroupForOperator(TypeChecker &TC, DeclContext *DC,
Identifier name, SourceLoc loc) {
SourceFile *SF = DC->getParentSourceFile();
bool isCascading = DC->isCascadingContextForLookup(true);
if (auto op = SF->lookupInfixOperator(name, isCascading, loc)) {
TC.validateDecl(op);
return op->getPrecedenceGroup();
} else {
TC.diagnose(loc, diag::unknown_binop);
}
return nullptr;
}
示例8:
bool
Project::HasLibrary(const char *path)
{
if (!path)
return false;
for (int32 i = 0; i < fLibraryList.CountItems(); i++)
{
SourceFile *file = (SourceFile*)fLibraryList.ItemAt(i);
if (file && strcmp(file->GetPath().GetFullPath(),path) == 0)
return true;
}
return false;
}
示例9: Parser
Parser::Parser(unsigned BufferID, SourceFile &SF, SILParserTUStateBase *SIL,
PersistentParserState *PersistentState)
: Parser(
std::unique_ptr<Lexer>(new Lexer(
SF.getASTContext().LangOpts, SF.getASTContext().SourceMgr,
BufferID, &SF.getASTContext().Diags,
/*InSILMode=*/SIL != nullptr,
SF.getASTContext().LangOpts.AttachCommentsToDecls
? CommentRetentionMode::AttachToNextToken
: CommentRetentionMode::None,
SF.shouldKeepSyntaxInfo()
? TriviaRetentionMode::WithTrivia
: TriviaRetentionMode::WithoutTrivia)),
SF, SIL, PersistentState) {}
示例10: breakPoints
void DesignerProjectImpl::breakPoints( QMap<QString, QValueList<uint> > &bps ) const
{
MainWindow::self->saveAllBreakPoints();
for ( QPtrListIterator<SourceFile> sources = project->sourceFiles();
sources.current(); ++sources ) {
SourceFile* f = sources.current();
bps.insert( project->makeRelative( f->fileName() ) + " <Source-File>", MetaDataBase::breakPoints( f ) );
}
for ( QPtrListIterator<FormFile> forms = project->formFiles();
forms.current(); ++forms ) {
if ( forms.current()->formWindow() )
bps.insert( QString( forms.current()->formWindow()->name() ) + " <Form>", MetaDataBase::breakPoints( forms.current()->formWindow() ) );
}
}
示例11: locker
status_t
FileManager::LoadSourceFile(LocatableFile* file, SourceFile*& _sourceFile)
{
AutoLocker<FileManager> locker(this);
// get the path
BString path;
BString originalPath;
file->GetPath(originalPath);
if (!file->GetLocatedPath(path)) {
// see if this is a file we have a lazy mapping for.
if (!_LocateFileIfMapped(originalPath, file)
|| !file->GetLocatedPath(path)) {
return B_ENTRY_NOT_FOUND;
}
}
// we might already know the source file
SourceFileEntry* entry = _LookupSourceFile(originalPath);
if (entry != NULL) {
entry->file->AcquireReference();
_sourceFile = entry->file;
return B_OK;
}
// create the hash table entry
entry = new(std::nothrow) SourceFileEntry(this, originalPath);
if (entry == NULL)
return B_NO_MEMORY;
// load the file
SourceFile* sourceFile = new(std::nothrow) SourceFile(entry);
if (sourceFile == NULL) {
delete entry;
return B_NO_MEMORY;
}
ObjectDeleter<SourceFile> sourceFileDeleter(sourceFile);
entry->file = sourceFile;
status_t error = sourceFile->Init(path);
if (error != B_OK)
return error;
fSourceFiles->Insert(entry);
_sourceFile = sourceFileDeleter.Detach();
return B_OK;
}
示例12: activeProject
void MainWindow::on_ui_addFile_clicked()
{
Project* project = activeProject();
if(!project) {
MessageDialog::showError(this, "simple_error", QStringList() <<
tr("Unable to determine active project.") <<
tr("Please make sure that you have a project open."));
return;
}
SourceFile* source = new SourceFile(this);
source->setAssociatedProject(project);
addTab(source);
// ui_projects->expandAll();
}
示例13: printUntilFirstDeclStarts
static void printUntilFirstDeclStarts(SourceFile &File, ASTPrinter &Printer) {
if (!File.getBufferID().hasValue())
return;
auto BufferID = *File.getBufferID();
auto &SM = File.getASTContext().SourceMgr;
CharSourceRange TextRange = SM.getRangeForBuffer(BufferID);
auto DeclStartLoc = getDeclStartPosition(File);
if (DeclStartLoc.isValid()) {
TextRange = CharSourceRange(SM, TextRange.getStart(), DeclStartLoc);
}
Printer << SM.extractText(TextRange, BufferID);
}
示例14: getDeclStartPosition
static SourceLoc getDeclStartPosition(SourceFile &File) {
SourceManager &SM = File.getASTContext().SourceMgr;
SourceLoc Winner;
auto tryUpdateStart = [&](SourceLoc Loc) -> bool {
if (Loc.isInvalid())
return false;
if (Winner.isInvalid()) {
Winner = Loc;
return true;
}
if (SM.isBeforeInBuffer(Loc, Winner)) {
Winner = Loc;
return true;
}
return false;
};
for (auto D : File.Decls) {
if (tryUpdateStart(D->getStartLoc())) {
tryUpdateStart(D->getAttrs().getStartLoc());
auto RawComment = D->getRawComment();
if (!RawComment.isEmpty())
tryUpdateStart(RawComment.Comments.front().Range.getStart());
}
}
return Winner;
}
示例15: STRACE
void
Project::ForceRebuild(void)
{
STRACE(1,("%s: Force rebuild\n",GetName()));
for (int32 i = 0; i < CountGroups(); i++)
{
SourceGroup *group = GroupAt(i);
for (int32 j = 0; j < group->filelist.CountItems(); j++)
{
SourceFile *file = group->filelist.ItemAt(j);
file->RemoveObjects(fBuildInfo);
}
}
}