RexxNativeCode.hpp
Go to the documentation of this file.
1 /*----------------------------------------------------------------------------*/
2 /* */
3 /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */
4 /* Copyright (c) 2005-2009 Rexx Language Association. All rights reserved. */
5 /* */
6 /* This program and the accompanying materials are made available under */
7 /* the terms of the Common Public License v1.0 which accompanies this */
8 /* distribution. A copy is also available at the following address: */
9 /* http://www.oorexx.org/license.html */
10 /* */
11 /* Redistribution and use in source and binary forms, with or */
12 /* without modification, are permitted provided that the following */
13 /* conditions are met: */
14 /* */
15 /* Redistributions of source code must retain the above copyright */
16 /* notice, this list of conditions and the following disclaimer. */
17 /* Redistributions in binary form must reproduce the above copyright */
18 /* notice, this list of conditions and the following disclaimer in */
19 /* the documentation and/or other materials provided with the distribution. */
20 /* */
21 /* Neither the name of Rexx Language Association nor the names */
22 /* of its contributors may be used to endorse or promote products */
23 /* derived from this software without specific prior written permission. */
24 /* */
25 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
26 /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
27 /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */
28 /* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
29 /* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
30 /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */
31 /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
32 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */
33 /* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
34 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
35 /* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
36 /* */
37 /*----------------------------------------------------------------------------*/
38 /******************************************************************************/
39 /* REXX Kernel RexxNativeMethod.hpp */
40 /* */
41 /* Primitive Native Code Class Definitions */
42 /* */
43 /******************************************************************************/
44 #ifndef Included_RexxNativeCode
45 #define Included_RexxNativeCode
46 
47 #include "MethodClass.hpp"
48 
49 
50 class RexxNativeCode : public BaseCode
51 {
52  public:
53 
54  inline RexxNativeCode() { }
56  void live(size_t);
57  void liveGeneral(int reason);
58  void flatten(RexxEnvelope *envelope);
59 
60  virtual RexxSource *getSourceObject();
61  virtual RexxClass *findClass(RexxString *className);
62  virtual BaseCode *setSourceObject(RexxSource *s); // ooRexx5 uses setPackageObject
64 
65 protected:
66  RexxString *package; // the package name
67  RexxString *name; // the mapped method name
68  RexxSource *source; // source this is attached to
69 };
70 
71 
73 {
74  public:
75  inline void *operator new(size_t size, void *ptr) { return ptr; }
76  void *operator new(size_t size);
77  inline void operator delete(void *) { ; }
78  inline void operator delete(void *, void *) { ; }
79 
80  inline RexxNativeMethod(RESTORETYPE restoreType) { ; };
82 
83  void liveGeneral(int reason);
84  void flatten(RexxEnvelope *envelope);
85 
86  inline PNATIVEMETHOD getEntry() { return entry; }
87 
88  virtual void run(RexxActivity *activity, RexxMethod *method, RexxObject *receiver, RexxString *messageName,
89  RexxObject **argPtr, size_t count, size_t named_count, ProtectedObject &result);
90 
91 protected:
92  PNATIVEMETHOD entry; // method entry point.
93 };
94 
95 
97 {
98  public:
99 
100  inline RexxRoutine() { }
101  inline RexxRoutine(RexxString *p, RexxString *n) : RexxNativeCode(p, n) { }
102 
103  virtual void call(RexxActivity *, RoutineClass *, RexxString *, RexxObject **, size_t, size_t, ProtectedObject &) = 0;
104 };
105 
106 
108 {
109  public:
110  inline void *operator new(size_t size, void *ptr) { return ptr; }
111  void *operator new(size_t size);
112  inline void operator delete(void *) { ; }
113  inline void operator delete(void *, void *) { ; }
114 
115  inline RexxNativeRoutine(RESTORETYPE restoreType) { ; };
117 
118  void liveGeneral(int reason);
119  void flatten(RexxEnvelope *envelope);
120 
121  inline PNATIVEROUTINE getEntry() { return entry; }
122 
123  virtual void call(RexxActivity *, RoutineClass *, RexxString *, RexxObject **, size_t, size_t, ProtectedObject &);
124 
125 protected:
126  PNATIVEROUTINE entry; // method entry point.
127 };
128 
129 
131 {
132  public:
133  inline void *operator new(size_t size, void *ptr) { return ptr; }
134  void *operator new(size_t size);
135  inline void operator delete(void *) { ; }
136  inline void operator delete(void *, void *) { ; }
137 
138  void liveGeneral(int reason);
139  void flatten(RexxEnvelope *envelope);
140 
141  inline RegisteredRoutine(RESTORETYPE restoreType) { ; };
144 
145  virtual void call(RexxActivity *, RoutineClass *, RexxString *, RexxObject **, size_t, size_t, ProtectedObject &);
146 
147  inline RexxRoutineHandler *getEntry() { return entry; }
148 
149 protected:
150  RexxRoutineHandler *entry; // method entry point.
151 };
152 
153 #endif
uint16_t *(RexxEntry * PNATIVEMETHOD)(RexxMethodContext *, ValueDescriptor *)
uint16_t *(RexxEntry * PNATIVEROUTINE)(RexxCallContext *, ValueDescriptor *)
RESTORETYPE
Definition: ObjectClass.hpp:82
#define OREF_NULL
Definition: RexxCore.h:61
RegisteredRoutine(RESTORETYPE restoreType)
void liveGeneral(int reason)
RegisteredRoutine(RexxString *n, RexxRoutineHandler *e)
void flatten(RexxEnvelope *envelope)
RegisteredRoutine(RexxString *p, RexxString *n, RexxRoutineHandler *e)
RexxRoutineHandler * entry
virtual void call(RexxActivity *, RoutineClass *, RexxString *, RexxObject **, size_t, size_t, ProtectedObject &)
RexxRoutineHandler * getEntry()
virtual RexxClass * findClass(RexxString *className)
RexxString * name
SecurityManager * getSecurityManager()
virtual RexxSource * getSourceObject()
virtual BaseCode * setSourceObject(RexxSource *s)
RexxString * package
void live(size_t)
void flatten(RexxEnvelope *envelope)
RexxSource * source
void liveGeneral(int reason)
PNATIVEMETHOD entry
void liveGeneral(int reason)
virtual void run(RexxActivity *activity, RexxMethod *method, RexxObject *receiver, RexxString *messageName, RexxObject **argPtr, size_t count, size_t named_count, ProtectedObject &result)
RexxNativeMethod(RexxString *p, RexxString *n, PNATIVEMETHOD e)
RexxNativeMethod(RESTORETYPE restoreType)
void flatten(RexxEnvelope *envelope)
PNATIVEMETHOD getEntry()
RexxNativeRoutine(RESTORETYPE restoreType)
virtual void call(RexxActivity *, RoutineClass *, RexxString *, RexxObject **, size_t, size_t, ProtectedObject &)
RexxNativeRoutine(RexxString *p, RexxString *n, PNATIVEROUTINE e)
PNATIVEROUTINE entry
void flatten(RexxEnvelope *envelope)
PNATIVEROUTINE getEntry()
void liveGeneral(int reason)
virtual void call(RexxActivity *, RoutineClass *, RexxString *, RexxObject **, size_t, size_t, ProtectedObject &)=0
RexxRoutine(RexxString *p, RexxString *n)
size_t REXXENTRY RexxRoutineHandler(CONSTANT_STRING, size_t, PCONSTRXSTRING, CONSTANT_STRING, PRXSTRING)
Definition: rexx.h:408