// Extracted from http://dev.w3.org/2006/webapi/WebIDL/ on 2011-05-06
interface A {
  // ...
};

interface B {
  // ...
};

interface C {
  void f(A x);
  void f(B x);
};

interface A {
  /* f1 */ void f(DOMString a);
  /* f2 */ void f([AllowAny] DOMString a, DOMString b, float... c);
  /* f3 */ void f();
  /* f4 */ void f(long a, DOMString b, optional DOMString c, float... d);
};