Remove use of varargs in SkImageFilter.  This is causing a crash in recent
builds of clang.  (It was also masking the fact that SkMergeImageFilter was
calling the wrong constructor!)

Review URL: https://codereview.appspot.com/6709066

git-svn-id: http://skia.googlecode.com/svn/trunk@6029 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/include/core/SkImageFilter.h b/include/core/SkImageFilter.h
index 596da24..ecbf79d 100644
--- a/include/core/SkImageFilter.h
+++ b/include/core/SkImageFilter.h
@@ -133,10 +133,11 @@
 protected:
     SkImageFilter(int inputCount, SkImageFilter** inputs);
 
-    // The ... represents inputCount SkImageFilter pointers, upon which this
-    // constructor will call SkSafeRef().  This is the same behaviour as
-    // the SkImageFilter(int, SkImageFilter**) constructor above.
-    explicit SkImageFilter(int inputCount, ...);
+    // Convenience constructor for 1-input filters.
+    explicit SkImageFilter(SkImageFilter* input);
+
+    // Convenience constructor for 2-input filters.
+    SkImageFilter(SkImageFilter* input1, SkImageFilter* input2);
 
     virtual ~SkImageFilter();
 
diff --git a/include/effects/SkTestImageFilters.h b/include/effects/SkTestImageFilters.h
index 5174856..7e2fb91 100755
--- a/include/effects/SkTestImageFilters.h
+++ b/include/effects/SkTestImageFilters.h
@@ -28,7 +28,7 @@
 
 class SK_API SkComposeImageFilter : public SkImageFilter {
 public:
-    SkComposeImageFilter(SkImageFilter* outer, SkImageFilter* inner) : INHERITED(2, outer, inner) {}
+    SkComposeImageFilter(SkImageFilter* outer, SkImageFilter* inner) : INHERITED(outer, inner) {}
     virtual ~SkComposeImageFilter();
 
     SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposeImageFilter)
@@ -50,7 +50,7 @@
 public:
     SkMergeImageFilter(SkImageFilter* first, SkImageFilter* second,
                        SkXfermode::Mode = SkXfermode::kSrcOver_Mode);
-    SkMergeImageFilter(SkImageFilter* const filters[], int count,
+    SkMergeImageFilter(SkImageFilter* filters[], int count,
                        const SkXfermode::Mode modes[] = NULL);
     virtual ~SkMergeImageFilter();
 
diff --git a/src/core/SkImageFilter.cpp b/src/core/SkImageFilter.cpp
index 45ad024..b5a7b1b 100644
--- a/src/core/SkImageFilter.cpp
+++ b/src/core/SkImageFilter.cpp
@@ -10,7 +10,6 @@
 #include "SkBitmap.h"
 #include "SkFlattenableBuffers.h"
 #include "SkRect.h"
-#include "stdarg.h"
 
 SK_DEFINE_INST_COUNT(SkImageFilter)
 
@@ -22,15 +21,18 @@
     }
 }
 
-SkImageFilter::SkImageFilter(int inputCount, ...)
-  : fInputCount(inputCount), fInputs(new SkImageFilter*[inputCount]) {
-    va_list ap;
-    va_start(ap, inputCount);
-    for (int i = 0; i < inputCount; ++i) {
-        fInputs[i] = va_arg(ap, SkImageFilter*);
-        SkSafeRef(fInputs[i]);
-    }
-    va_end(ap);
+SkImageFilter::SkImageFilter(SkImageFilter* input)
+  : fInputCount(1), fInputs(new SkImageFilter*[1]) {
+    fInputs[0] = input;
+    SkSafeRef(fInputs[0]);
+}
+
+SkImageFilter::SkImageFilter(SkImageFilter* input1, SkImageFilter* input2)
+  : fInputCount(2), fInputs(new SkImageFilter*[2]) {
+    fInputs[0] = input1;
+    fInputs[1] = input2;
+    SkSafeRef(fInputs[0]);
+    SkSafeRef(fInputs[1]);
 }
 
 SkImageFilter::~SkImageFilter() {
diff --git a/src/effects/SkBlendImageFilter.cpp b/src/effects/SkBlendImageFilter.cpp
index 1fa3c0d..d14b5fc 100644
--- a/src/effects/SkBlendImageFilter.cpp
+++ b/src/effects/SkBlendImageFilter.cpp
@@ -52,7 +52,7 @@
 ///////////////////////////////////////////////////////////////////////////////
 
 SkBlendImageFilter::SkBlendImageFilter(SkBlendImageFilter::Mode mode, SkImageFilter* background, SkImageFilter* foreground)
-  : INHERITED(2, background, foreground), fMode(mode)
+  : INHERITED(background, foreground), fMode(mode)
 {
 }
 
diff --git a/src/effects/SkSingleInputImageFilter.cpp b/src/effects/SkSingleInputImageFilter.cpp
index 2019e25..7615038 100644
--- a/src/effects/SkSingleInputImageFilter.cpp
+++ b/src/effects/SkSingleInputImageFilter.cpp
@@ -15,7 +15,7 @@
 #include "SkGrPixelRef.h"
 #endif
 
-SkSingleInputImageFilter::SkSingleInputImageFilter(SkImageFilter* input) : INHERITED(1, input) {
+SkSingleInputImageFilter::SkSingleInputImageFilter(SkImageFilter* input) : INHERITED(input) {
 }
 
 SkSingleInputImageFilter::~SkSingleInputImageFilter() {
diff --git a/src/effects/SkTestImageFilters.cpp b/src/effects/SkTestImageFilters.cpp
index a672c33..99c80d0 100755
--- a/src/effects/SkTestImageFilters.cpp
+++ b/src/effects/SkTestImageFilters.cpp
@@ -127,7 +127,7 @@
 }
 
 SkMergeImageFilter::SkMergeImageFilter(SkImageFilter* first, SkImageFilter* second,
-                                       SkXfermode::Mode mode) : INHERITED(2, first, second) {
+                                       SkXfermode::Mode mode) : INHERITED(first, second) {
     if (SkXfermode::kSrcOver_Mode != mode) {
         SkXfermode::Mode modes[] = { mode, mode };
         this->initModes(modes);
@@ -136,7 +136,7 @@
     }
 }
 
-SkMergeImageFilter::SkMergeImageFilter(SkImageFilter* const filters[], int count,
+SkMergeImageFilter::SkMergeImageFilter(SkImageFilter* filters[], int count,
                                        const SkXfermode::Mode modes[]) : INHERITED(count, filters) {
     this->initModes(modes);
 }