1 /* { dg-require-effective-target indirect_calls } */ 2 3 typedef struct JSObject JSObject; 4 typedef struct JSObjectMap *(*JSNewObjectMapOp) (JSObject *obj); 5 typedef JSObject *(*JSGetMethodOp) (JSObject *obj); 6 struct JSObjectOps { 7 JSNewObjectMapOp newObjectMap; 8 }; 9 struct JSXMLObjectOps { 10 struct JSObjectOps base; 11 JSGetMethodOp getMethod; 12 }; 13 struct JSObjectMap { 14 struct JSObjectOps *ops; 15 }; 16 struct JSObject { 17 struct JSObjectMap *map; 18 }; 19 20 struct JSXMLObjectOps js_XMLObjectOps; 21 22 23 /* We need to create SFT's for the entire structure when this address is taken, 24 not just the part in the component reference itself. */ JS_GetMethod(JSObject * obj)25JSObject *JS_GetMethod(JSObject *obj) 26 { 27 if (obj->map->ops == &js_XMLObjectOps.base) { 28 struct JSXMLObjectOps *ops; 29 ops = (struct JSXMLObjectOps *) obj->map->ops; 30 obj = ops->getMethod(obj); 31 } 32 return obj; 33 } 34