revert between 56095 -> 55830 in arch
[AROS.git] / compiler / alib / coercemethod.c
blob79cbe92916536f208d253ac717811c17880f7858
1 /*
2 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
3 $Id$
4 */
6 #define ALIB_NO_INLINE_STDARG
8 #include <aros/debug.h>
9 #include <intuition/classes.h>
10 #include <proto/alib.h>
11 #include "alib_intern.h"
13 /******************************************************************************
15 NAME */
16 #include <intuition/classusr.h>
17 #include <proto/intuition.h>
19 IPTR CoerceMethodA (
21 /* SYNOPSIS */
22 Class * cl,
23 Object * obj,
24 Msg message)
26 /* FUNCTION
27 Invokes a method on a BOOPSI object, as if this was a object, inherited
28 from the class passed in. Ie the dispatcher of the this class is called
29 instead of the objects classes dispatcher.
31 INPUTS
32 cl - Class, which dispatcher is to be called.
33 obj - The object, on which the method is to be performed on.
34 message - The message. The first field is the same for all methods and
35 specifies which method is to be invokes (see
36 <intuition/classusr.h>).
38 RESULT
39 Class and method depending. See the class documentation. A value of 0
40 can mean a valid return code but can also mean that a method was not
41 supported.
43 NOTES
45 EXAMPLE
47 BUGS
49 SEE ALSO
51 ******************************************************************************/
53 ASSERT_VALID_PTR(obj);
54 ASSERT_VALID_PTR(cl);
56 if ((!obj) || (!cl))
57 return 0L;
59 ASSERT_VALID_PTR(message);
61 return CALLHOOKPKT((struct Hook *) cl, obj, message);
62 } /* CoerceMethodA() */
64 IPTR CoerceMethod (Class * cl, Object * obj, IPTR MethodID, ...)
66 ASSERT_VALID_PTR(obj);
67 ASSERT_VALID_PTR(cl);
69 if ((!obj) || (!cl))
70 return 0L;
72 AROS_SLOWSTACKMETHODS_PRE(MethodID)
73 retval = CALLHOOKPKT((struct Hook *) cl, obj, AROS_SLOWSTACKMETHODS_ARG(MethodID));
74 AROS_SLOWSTACKMETHODS_POST
75 } /* CoerceMethod() */