[cfe-commits] r126387 - in /cfe/trunk: include/clang/Sema/ExternalSemaSource.h lib/Sema/SemaLookup.cpp

Axel Naumann Axel.Naumann at cern.ch
Thu Feb 24 08:47:47 PST 2011


Author: axel
Date: Thu Feb 24 10:47:47 2011
New Revision: 126387

URL: http://llvm.org/viewvc/llvm-project?rev=126387&view=rev
Log:
>From Vassil Vassilev:
Add an interface for last resort, unqualified lookup. It can provide results for unqualified lookup when Sema fails to find anything itself.

Modified:
    cfe/trunk/include/clang/Sema/ExternalSemaSource.h
    cfe/trunk/lib/Sema/SemaLookup.cpp

Modified: cfe/trunk/include/clang/Sema/ExternalSemaSource.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/ExternalSemaSource.h?rev=126387&r1=126386&r2=126387&view=diff
==============================================================================
--- cfe/trunk/include/clang/Sema/ExternalSemaSource.h (original)
+++ cfe/trunk/include/clang/Sema/ExternalSemaSource.h Thu Feb 24 10:47:47 2011
@@ -20,6 +20,8 @@
 
 struct ObjCMethodList;
 class Sema;
+class Scope;
+class LookupResult;
 
 /// \brief An abstract interface that should be implemented by
 /// external AST sources that also provide information for semantic
@@ -47,6 +49,16 @@
   /// instance and factory methods, respectively, with this selector.
   virtual std::pair<ObjCMethodList,ObjCMethodList> ReadMethodPool(Selector Sel);
 
+  /// \brief Do last resort, unqualified lookup on a LookupResult that
+  /// Sema cannot find.
+  ///
+  /// \param R a LookupResult that is being recovered.
+  ///
+  /// \param S the Scope of the identifier occurrence.
+  ///
+  /// \return true to tell Sema to recover using the LookupResult.
+  virtual bool LookupUnqualified(LookupResult &R, Scope *S) { return false; }
+
   // isa/cast/dyn_cast support
   static bool classof(const ExternalASTSource *Source) {
     return Source->SemaSource;

Modified: cfe/trunk/lib/Sema/SemaLookup.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaLookup.cpp?rev=126387&r1=126386&r2=126387&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaLookup.cpp (original)
+++ cfe/trunk/lib/Sema/SemaLookup.cpp Thu Feb 24 10:47:47 2011
@@ -18,6 +18,7 @@
 #include "clang/Sema/Scope.h"
 #include "clang/Sema/ScopeInfo.h"
 #include "clang/Sema/TemplateDeduction.h"
+#include "clang/Sema/ExternalSemaSource.h"
 #include "clang/AST/ASTContext.h"
 #include "clang/AST/CXXInheritance.h"
 #include "clang/AST/Decl.h"
@@ -1132,7 +1133,11 @@
   if (AllowBuiltinCreation)
     return LookupBuiltin(*this, R);
 
-  return false;
+  // If we didn't find a use of this identifier, the ExternalSource 
+  // may be able to handle the situation. 
+  // Note: some lookup failures are expected!
+  // See e.g. R.isForRedeclaration().
+  return (ExternalSource && ExternalSource->LookupUnqualified(R, S));
 }
 
 /// @brief Perform qualified name lookup in the namespaces nominated by





More information about the cfe-commits mailing list