From e8e1f3a19fd07ba64381094b98c66f7d07c1746e Mon Sep 17 00:00:00 2001
From: Ben Boeckel <ben.boeckel@kitware.com>
Date: Mon, 3 Feb 2014 16:06:54 -0500
Subject: cmSourceFileLocation: Simplify logic in Matches

---
 Source/cmSourceFileLocation.cxx | 71 ++++++++++++++++++++---------------------
 1 file changed, 35 insertions(+), 36 deletions(-)

diff --git a/Source/cmSourceFileLocation.cxx b/Source/cmSourceFileLocation.cxx
index 9c0b2c5..7837738 100644
--- a/Source/cmSourceFileLocation.cxx
+++ b/Source/cmSourceFileLocation.cxx
@@ -211,36 +211,33 @@ cmSourceFileLocation
 bool cmSourceFileLocation::Matches(cmSourceFileLocation const& loc)
 {
   assert(this->Makefile);
-  if(this->AmbiguousExtension && loc.AmbiguousExtension)
+  if(this->AmbiguousExtension == loc.AmbiguousExtension)
     {
-    // Both extensions are ambiguous.  Since only the old fixed set of
-    // extensions will be tried, the names must match at this point to
-    // be the same file.
+    // Both extensions are similarly ambiguous.  Since only the old fixed set
+    // of extensions will be tried, the names must match at this point to be
+    // the same file.
     if(this->Name != loc.Name)
       {
       return false;
       }
     }
-  else if(this->AmbiguousExtension)
+  else
     {
-    // Only "this" extension is ambiguous.
-    if(!loc.MatchesAmbiguousExtension(*this))
+    const cmSourceFileLocation* loc1;
+    const cmSourceFileLocation* loc2;
+    if(this->AmbiguousExtension)
       {
-      return false;
+      // Only "this" extension is ambiguous.
+      loc1 = &loc;
+      loc2 = this;
       }
-    }
-  else if(loc.AmbiguousExtension)
-    {
-    // Only "loc" extension is ambiguous.
-    if(!this->MatchesAmbiguousExtension(loc))
+    else
       {
-      return false;
+      // Only "loc" extension is ambiguous.
+      loc1 = this;
+      loc2 = &loc;
       }
-    }
-  else
-    {
-    // Neither extension is ambiguous.
-    if(this->Name != loc.Name)
+    if(!loc1->MatchesAmbiguousExtension(*loc2))
       {
       return false;
       }
@@ -254,28 +251,30 @@ bool cmSourceFileLocation::Matches(cmSourceFileLocation const& loc)
       return false;
       }
     }
-  else if(this->AmbiguousDirectory && loc.AmbiguousDirectory &&
-          this->Makefile == loc.Makefile)
+  else if(this->AmbiguousDirectory && loc.AmbiguousDirectory)
     {
-    // Both sides have directories relative to the same location.
-    if(this->Directory != loc.Directory)
+    if (this->Makefile == loc.Makefile)
+      {
+      // Both sides have directories relative to the same location.
+      if(this->Directory != loc.Directory)
+        {
+        return false;
+        }
+      }
+    else
       {
+      // Each side has a directory relative to a different location.
+      // This can occur when referencing a source file from a different
+      // directory.  This is not yet allowed.
+      this->Makefile->IssueMessage(
+        cmake::INTERNAL_ERROR,
+        "Matches error: Each side has a directory relative to a different "
+        "location. This can occur when referencing a source file from a "
+        "different directory.  This is not yet allowed."
+        );
       return false;
       }
     }
-  else if(this->AmbiguousDirectory && loc.AmbiguousDirectory)
-    {
-    // Each side has a directory relative to a different location.
-    // This can occur when referencing a source file from a different
-    // directory.  This is not yet allowed.
-    this->Makefile->IssueMessage(
-      cmake::INTERNAL_ERROR,
-      "Matches error: Each side has a directory relative to a different "
-      "location. This can occur when referencing a source file from a "
-      "different directory.  This is not yet allowed."
-      );
-    return false;
-    }
   else if(this->AmbiguousDirectory)
     {
     // Compare possible directory combinations.
-- 
cgit v0.12