Remove comparisons of this with NULL.

Calling functions on objects that are NULL is undefined behavior.
Hence, new versions of clang assume that `this` is never NULL,
warn on comparisons of `this` with NULL, and optimize the comparison away.

There were three comparisons of `this` with NULL in re2:

1. CharClass::Delete(). There are only two callers of this method, and
   as far as I can tell `this` can't be NULL there, so just delete that check.
2. Prefilter::DebugString(). This too has two callers: Prefilter::Info::ToString(),
   which already checks for NULL before calling, and DebugString() itself.
   Since several places check Prefilters for NULL, add explicit checks before
   calling here.
3. Prefilter::Info::ToString(). This has three callers. In 2 cases this can't be
   NULL. In the third case it could conceivably be NULL if op() is
   kRegexpConcat and nchild_args is 0, so add an explicit check here.

Fixes https://code.google.com/p/re2/issues/detail?id=115

LGTM=rsc
R=rsc
CC=re2-dev
https://codereview.appspot.com/107100043
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 2a694bc..1a1c848 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -31,6 +31,7 @@
 Dmitriy Vyukov <dvyukov@google.com>
 John Millikin <jmillikin@gmail.com>
 Mike Nazarewicz <mpn@google.com>
+Nico Weber <thakis@chromium.org>
 Pawel Hajdan <phajdan.jr@gmail.com>
 Rob Pike <r@google.com>
 Russ Cox <rsc@swtch.com>
diff --git a/re2/prefilter.cc b/re2/prefilter.cc
index 1b12458..f192f9b 100644
--- a/re2/prefilter.cc
+++ b/re2/prefilter.cc
@@ -265,14 +265,6 @@
 
 // Format a Info in string form.
 string Prefilter::Info::ToString() {
-  if (this == NULL) {
-    // Sometimes when iterating on children of a node,
-    // some children might have NULL Info. Adding
-    // the check here for NULL to take care of cases where
-    // the caller is not checking.
-    return "";
-  }
-
   if (is_exact_) {
     int n = 0;
     string s;
@@ -640,7 +632,7 @@
 
   if (Trace) {
     VLOG(0) << "BuildInfo " << re->ToString()
-            << ": " << info->ToString();
+            << ": " << (info ? info->ToString() : "");
   }
 
   return info;
@@ -665,9 +657,6 @@
 }
 
 string Prefilter::DebugString() const {
-  if (this == NULL)
-    return "<nil>";
-
   switch (op_) {
     default:
       LOG(DFATAL) << "Bad op in Prefilter::DebugString: " << op_;
@@ -683,7 +672,8 @@
       for (int i = 0; i < subs_->size(); i++) {
         if (i > 0)
           s += " ";
-        s += (*subs_)[i]->DebugString();
+        Prefilter* sub = (*subs_)[i];
+        s += sub ? sub->DebugString() : "<nil>";
       }
       return s;
     }
@@ -692,7 +682,8 @@
       for (int i = 0; i < subs_->size(); i++) {
         if (i > 0)
           s += "|";
-        s += (*subs_)[i]->DebugString();
+        Prefilter* sub = (*subs_)[i];
+        s += sub ? sub->DebugString() : "<nil>";
       }
       s += ")";
       return s;
diff --git a/re2/regexp.cc b/re2/regexp.cc
index a74ceec..ed4c3a0 100644
--- a/re2/regexp.cc
+++ b/re2/regexp.cc
@@ -873,8 +873,6 @@
 }
 
 void CharClass::Delete() {
-  if (this == NULL)
-    return;
   uint8 *data = reinterpret_cast<uint8*>(this);
   delete[] data;
 }