1*67e74705SXin Li // RUN: %clang_cc1 -emit-llvm %s -o - -triple i386-apple-macosx10.7.2 2*67e74705SXin Li // PR1084 3*67e74705SXin Li 4*67e74705SXin Li extern "C" 5*67e74705SXin Li { 6*67e74705SXin Li typedef unsigned char PRUint8; 7*67e74705SXin Li typedef unsigned int PRUint32; 8*67e74705SXin Li } 9*67e74705SXin Li typedef PRUint32 nsresult; 10*67e74705SXin Li struct nsID 11*67e74705SXin Li { 12*67e74705SXin Li }; 13*67e74705SXin Li typedef nsID nsIID; 14*67e74705SXin Li class nsISupports 15*67e74705SXin Li { 16*67e74705SXin Li }; 17*67e74705SXin Li extern "C++" 18*67e74705SXin Li { 19*67e74705SXin Li template < class T > struct nsCOMTypeInfo 20*67e74705SXin Li { GetIIDnsCOMTypeInfo21*67e74705SXin Li static const nsIID & GetIID () 22*67e74705SXin Li { 23*67e74705SXin Li } 24*67e74705SXin Li }; 25*67e74705SXin Li } 26*67e74705SXin Li 27*67e74705SXin Li class nsIDOMEvent:public nsISupports 28*67e74705SXin Li { 29*67e74705SXin Li }; 30*67e74705SXin Li class nsIDOMEventListener:public nsISupports 31*67e74705SXin Li { GetIID()32*67e74705SXin Lipublic:static const nsIID & GetIID () 33*67e74705SXin Li { 34*67e74705SXin Li } 35*67e74705SXin Li virtual nsresult 36*67e74705SXin Li __attribute__ ((regparm (0), cdecl)) HandleEvent (nsIDOMEvent * event) = 37*67e74705SXin Li 0; 38*67e74705SXin Li }; 39*67e74705SXin Li class nsIDOMMouseListener:public nsIDOMEventListener 40*67e74705SXin Li { GetIID()41*67e74705SXin Lipublic:static const nsIID & GetIID () 42*67e74705SXin Li { 43*67e74705SXin Li static const nsIID iid = { 44*67e74705SXin Li }; 45*67e74705SXin Li } 46*67e74705SXin Li virtual nsresult 47*67e74705SXin Li __attribute__ ((regparm (0), 48*67e74705SXin Li cdecl)) MouseDown (nsIDOMEvent * aMouseEvent) = 0; 49*67e74705SXin Li }; 50*67e74705SXin Li typedef 51*67e74705SXin Li typeof (&nsIDOMEventListener::HandleEvent) 52*67e74705SXin Li GenericHandler; 53*67e74705SXin Li struct EventDispatchData 54*67e74705SXin Li { 55*67e74705SXin Li PRUint32 message; 56*67e74705SXin Li GenericHandler method; 57*67e74705SXin Li PRUint8 bits; 58*67e74705SXin Li }; 59*67e74705SXin Li struct EventTypeData 60*67e74705SXin Li { 61*67e74705SXin Li const EventDispatchData *events; 62*67e74705SXin Li int numEvents; 63*67e74705SXin Li const nsIID *iid; 64*67e74705SXin Li }; 65*67e74705SXin Li static const EventDispatchData sMouseEvents[] = { 66*67e74705SXin Li { 67*67e74705SXin Li (300 + 2), 68*67e74705SXin Li reinterpret_cast < GenericHandler > (&nsIDOMMouseListener::MouseDown), 69*67e74705SXin Li 0x01} 70*67e74705SXin Li }; 71*67e74705SXin Li static const EventTypeData sEventTypes[] = { 72*67e74705SXin Li { 73*67e74705SXin Li sMouseEvents, (sizeof (sMouseEvents) / sizeof (sMouseEvents[0])), 74*67e74705SXin Li &nsCOMTypeInfo < nsIDOMMouseListener >::GetIID ()} 75*67e74705SXin Li }; 76