Test please. - Fariborz > On Dec 9, 2014, at 3:47 PM, Sean Callanan <[email protected]> wrote: > > Author: spyffe > Date: Tue Dec 9 17:47:56 2014 > New Revision: 223855 > > URL: http://llvm.org/viewvc/llvm-project?rev=223855&view=rev > Log: > Modified the Objective-C lexer and parser (only > in debugger mode) to accept @import declarations > and pass them to the debugger. > > In the preprocessor, accept import declarations > if the debugger is enabled, but don't actually > load the module, just pass the import path on to > the preprocessor callbacks. > > In the Objective-C parser, if it sees an import > declaration in statement context (usual for LLDB), > ignore it and return a NullStmt. > > Modified: > cfe/trunk/lib/Lex/Preprocessor.cpp > cfe/trunk/lib/Parse/ParseObjc.cpp > > Modified: cfe/trunk/lib/Lex/Preprocessor.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/Preprocessor.cpp?rev=223855&r1=223854&r2=223855&view=diff > ============================================================================== > --- cfe/trunk/lib/Lex/Preprocessor.cpp (original) > +++ cfe/trunk/lib/Lex/Preprocessor.cpp Tue Dec 9 17:47:56 2014 > @@ -672,7 +672,8 @@ bool Preprocessor::HandleIdentifier(Toke > // keyword when we're in a caching lexer, because caching lexers only get > // used in contexts where import declarations are disallowed. > if (LastTokenWasAt && II.isModulesImport() && !InMacroArgs && > - !DisableMacroExpansion && getLangOpts().Modules && > + !DisableMacroExpansion && > + (getLangOpts().Modules || getLangOpts().DebuggerSupport) && > CurLexerKind != CLK_CachingLexer) { > ModuleImportLoc = Identifier.getLocation(); > ModuleImportPath.clear(); > @@ -745,12 +746,14 @@ void Preprocessor::LexAfterModuleImport( > } > > // If we have a non-empty module path, load the named module. > - if (!ModuleImportPath.empty() && getLangOpts().Modules) { > - Module *Imported = TheModuleLoader.loadModule(ModuleImportLoc, > - ModuleImportPath, > - Module::MacrosVisible, > - > /*IsIncludeDirective=*/false); > - if (Callbacks) > + if (!ModuleImportPath.empty()) { > + Module *Imported = nullptr; > + if (getLangOpts().Modules) > + Imported = TheModuleLoader.loadModule(ModuleImportLoc, > + ModuleImportPath, > + Module::MacrosVisible, > + /*IsIncludeDirective=*/false); > + if (Callbacks && (getLangOpts().Modules || > getLangOpts().DebuggerSupport)) > Callbacks->moduleImport(ModuleImportLoc, ModuleImportPath, Imported); > } > } > > Modified: cfe/trunk/lib/Parse/ParseObjc.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseObjc.cpp?rev=223855&r1=223854&r2=223855&view=diff > ============================================================================== > --- cfe/trunk/lib/Parse/ParseObjc.cpp (original) > +++ cfe/trunk/lib/Parse/ParseObjc.cpp Tue Dec 9 17:47:56 2014 > @@ -79,7 +79,7 @@ Parser::DeclGroupPtrTy Parser::ParseObjC > SingleDecl = ParseObjCPropertyDynamic(AtLoc); > break; > case tok::objc_import: > - if (getLangOpts().Modules) > + if (getLangOpts().Modules || getLangOpts().DebuggerSupport) > return ParseModuleImport(AtLoc); > Diag(AtLoc, diag::err_atimport); > SkipUntil(tok::semi); > @@ -2024,7 +2024,13 @@ StmtResult Parser::ParseObjCAtStatement( > > if (Tok.isObjCAtKeyword(tok::objc_autoreleasepool)) > return ParseObjCAutoreleasePoolStmt(AtLoc); > - > + > + if (Tok.isObjCAtKeyword(tok::objc_import) && > + getLangOpts().DebuggerSupport) { > + SkipUntil(tok::semi); > + return Actions.ActOnNullStmt(Tok.getLocation()); > + } > + > ExprResult Res(ParseExpressionWithLeadingAt(AtLoc)); > if (Res.isInvalid()) { > // If the expression is invalid, skip ahead to the next semicolon. Not > > > _______________________________________________ > cfe-commits mailing list > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
