/* Contributed by Nicola Pero - Thu Mar  8 16:27:46 CET 2001 */
#include <objc/objc.h>
#include <stdarg.h>

/* Test method with variable number of arguments */

@interface MathClass
{
  Class isa;
}
/* sum positive numbers; -1 ends the list */
+ (int) sum: (int)firstNumber, ...;
@end

@implementation MathClass
+ (int) sum: (int)firstNumber, ...
{
  va_list ap;
  int sum = 0, number = 0;

  va_start (ap, firstNumber);
  number = firstNumber;

  while (number >= 0)
    {
      sum += number;
      number = va_arg (ap, int);
    }
  
  va_end (ap);

  return sum;
}
+ initialize { return self; }
@end

int main (void)
{
  if ([MathClass sum: 1, 2, 3, 4, 5, -1] != 15)
    {
      abort ();
    }
  
  return 0;
}
