Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


At 4:15pm -0400 Tue, 04 Oct 2011, Stephan Bergmann wrote:
Thanks a lot for the patch. I think the real intent always was to
actually look through all the returned getSuperclasses(), and the
error that superclasses past the first one are effectively ignored
has never been noticed.

Excellent. Was wondering, but don't yet know LO well enough to make such declarations. Well, modulo any errors on my part, the logic I sent in patch 1 should be the same as what was originally there, but I hope easier to read/see for comparison/fixing.

Here is a second patch that compiles, /should/ respond to what you just confirmed was the original intent, but is untested. (It was a random drive by patching.) Specifically, I suppose it's obvious that this now changes the semantics of it actually used to do. If you know how to test it ...

Cheers,

Kevin
From 0543ea7fad724856ee1ed837129808815eb44480 Mon Sep 17 00:00:00 2001
From: Kevin Hunter <hunteke@earlham.edu>
Date: Tue, 4 Oct 2011 12:58:10 -0400
Subject: [PATCH] Fix logic of isDerivedFrom function

From an email conversation with Stephen Bergmann

"I think the real intent always was to actually look through all the
returned getSuperclasses(), and the error that superclasses past the
first one are effectively ignored has never been noticed."
---
 stoc/source/inspect/introspection.cxx |   25 +++++++------------------
 1 files changed, 7 insertions(+), 18 deletions(-)

diff --git a/stoc/source/inspect/introspection.cxx b/stoc/source/inspect/introspection.cxx
index 36f1acc..7d62578 100644
--- a/stoc/source/inspect/introspection.cxx
+++ b/stoc/source/inspect/introspection.cxx
@@ -110,29 +110,18 @@ sal_Bool isDerivedFrom( Reference<XIdlClass> xToTestClass, 
Reference<XIdlClass>
 {
     Sequence< Reference<XIdlClass> > aClassesSeq = xToTestClass->getSuperclasses();
     const Reference<XIdlClass>* pClassesArray = aClassesSeq.getConstArray();
+
     sal_Int32 nSuperClassCount = aClassesSeq.getLength();
-    sal_Int32 i;
-    for( i = 0 ;
-         i < nSuperClassCount ;
-         /* No "increment" expression needed as the body always
-          * returns, and in fact MSVC warns about unreachable code if
-          * we include one. On the other hand, what's the point in
-          * using a for loop here then if all we ever will look at is
-          * pClassesArray[0] ?
-          */ )
+    for ( sal_Int32 i = 0; i < nSuperClassCount; ++i )
     {
         const Reference<XIdlClass>& rxClass = pClassesArray[i];
-        if( xDerivedFromClass->equals( rxClass ) )
-        {
-            // Treffer
+
+        if ( xDerivedFromClass->equals( rxClass ) ||
+             isDerivedFrom( rxClass, xDerivedFromClass )
+           )
             return sal_True;
-        }
-        else
-        {
-            // Rekursiv weitersuchen
-            return isDerivedFrom( rxClass, xDerivedFromClass );
-        }
     }
+
     return sal_False;
 }
 
-- 
1.7.1


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.