[PATCH] Add MicrosoftVFTableContext to AST

John McCall rjmccall at apple.com
Thu Jul 25 14:14:31 PDT 2013


On Jul 25, 2013, at 10:16 AM, Timur Iskhodzhanov <timurrrr at google.com> wrote:
>  Fixed wording in one of the comments.

+visitAllOverriddenMethods(const CXXMethodDecl *MD,
+                          VisitorTy &Visitor,
+                          OverriddenMethodsSetTy &VisitedMethods) {

Don’t have this take VisitedMethods.  Make the visitor that cares about
collecting methods collect them.

-ComputeAllOverriddenMethods(const CXXMethodDecl *MD,
-                            OverriddenMethodsSetTy& OverriddenMethods) {

You can actually leave this function around if you like.  It’s just:

namespace {
  struct MethodCollector {
    OverriddenMethodsSetTy *Methods;
    bool visit(const CXXMethodDecl *MD) {
      Methods->push_back(MD);
      return true;
    }
  };
}
void ComputeAllOverriddenMethods(const CXXMethodDecl *MD,
                            OverriddenMethodsSetTy& OverriddenMethods) {
  MethodCollector collector = { &OverriddenMethods };
  visitAllOverriddenMethods(MD, collector);
}

+static const CXXMethodDecl *
 FindNearestOverriddenMethod(const CXXMethodDecl *MD,
-                            VTableBuilder::PrimaryBasesSetVectorTy &Bases) {
+                            BasesSetVectorTy &Bases) {

Sorry, I didn’t mean to ask you to rewrite this algorithm; I just wanted a way to
re-use the recursive visitation without redundantly copying them out into an array
if that wasn’t needed.

+    ThisAdjustment ThisAdjustmentOffset;
+    // Check if this virtual member function overrides
+    // a method in one of the visited bases.
+    if (const CXXMethodDecl *OverriddenMD =
+            FindDirectlyOverriddenMethodInBases(MD, VisitedBases)) {
+      // Replace the method info of the overridden method with our own
+      // method - only if it's in the vftable we're laying out.
+      MethodInfoMapTy::iterator OverriddenMDIterator =

I’m confused about what’s actually going into MethodInfoMap and what
needs to be replaced, exactly.

John.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20130725/f9309863/attachment.html>


More information about the cfe-commits mailing list