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)25 JSObject *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