ooRexx  4.2.0-source
About: ooRexx (Open Object Rexx) is a free implementation of Object Rexx. Object Rexx is an enhancement of the classic Rexx interpreter; a full-featured programming language with a human-oriented syntax.
  Fossies Dox: ooRexx-4.2.0-source.tar.gz  ("inofficial" and yet experimental doxygen-generated source code documentation)  

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);
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, 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, 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, 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, ProtectedObject &);
146 
147  inline RexxRoutineHandler *getEntry() { return entry; }
148 
149 protected:
150  RexxRoutineHandler *entry; // method entry point.
151 };
152 
153 #endif
RegisteredRoutine
Definition: RexxNativeCode.hpp:130
PNATIVEMETHOD
uint16_t *(RexxEntry * PNATIVEMETHOD)(RexxMethodContext *, ValueDescriptor *)
Definition: MethodClass.hpp:76
RexxNativeCode::setSourceObject
virtual BaseCode * setSourceObject(RexxSource *s)
Definition: RexxNativeCode.cpp:128
RexxNativeCode::liveGeneral
void liveGeneral(int reason)
Definition: RexxNativeCode.cpp:78
RexxNativeRoutine::call
virtual void call(RexxActivity *, RoutineClass *, RexxString *, RexxObject **, size_t, ProtectedObject &)
Definition: RexxNativeCode.cpp:302
MethodClass.hpp
RexxNativeRoutine::liveGeneral
void liveGeneral(int reason)
Definition: RexxNativeCode.cpp:200
RexxNativeRoutine::entry
PNATIVEROUTINE entry
Definition: RexxNativeCode.hpp:126
RegisteredRoutine::call
virtual void call(RexxActivity *, RoutineClass *, RexxString *, RexxObject **, size_t, ProtectedObject &)
Definition: RexxNativeCode.cpp:339
RoutineClass
Definition: RoutineClass.hpp:49
RexxNativeMethod::RexxNativeMethod
RexxNativeMethod(RexxString *p, RexxString *n, PNATIVEMETHOD e)
Definition: RexxNativeCode.hpp:81
RexxNativeMethod::RexxNativeMethod
RexxNativeMethod(RESTORETYPE restoreType)
Definition: RexxNativeCode.hpp:80
RegisteredRoutine::RegisteredRoutine
RegisteredRoutine(RESTORETYPE restoreType)
Definition: RexxNativeCode.hpp:141
RegisteredRoutine::flatten
void flatten(RexxEnvelope *envelope)
Definition: RexxNativeCode.cpp:240
RexxNativeCode
Definition: RexxNativeCode.hpp:50
RexxNativeCode::getSecurityManager
SecurityManager * getSecurityManager()
Definition: RexxNativeCode.cpp:164
RexxNativeCode::findClass
virtual RexxClass * findClass(RexxString *className)
Definition: RexxNativeCode.cpp:109
RexxEnvelope
Definition: RexxEnvelope.hpp:53
RexxNativeCode::getSourceObject
virtual RexxSource * getSourceObject()
Definition: RexxNativeCode.cpp:151
RexxNativeRoutine::RexxNativeRoutine
RexxNativeRoutine(RESTORETYPE restoreType)
Definition: RexxNativeCode.hpp:115
RexxRoutine::call
virtual void call(RexxActivity *, RoutineClass *, RexxString *, RexxObject **, size_t, ProtectedObject &)=0
RegisteredRoutine::RegisteredRoutine
RegisteredRoutine(RexxString *p, RexxString *n, RexxRoutineHandler *e)
Definition: RexxNativeCode.hpp:143
RexxNativeMethod::getEntry
PNATIVEMETHOD getEntry()
Definition: RexxNativeCode.hpp:86
RexxNativeMethod::entry
PNATIVEMETHOD entry
Definition: RexxNativeCode.hpp:92
PNATIVEROUTINE
uint16_t *(RexxEntry * PNATIVEROUTINE)(RexxCallContext *, ValueDescriptor *)
Definition: MethodClass.hpp:78
RexxSource
Definition: SourceFile.hpp:131
RexxRoutineHandler
size_t REXXENTRY RexxRoutineHandler(CSTRING, size_t, PCONSTRXSTRING, CSTRING, PRXSTRING)
Definition: rexx.h:406
OREF_NULL
#define OREF_NULL
Definition: RexxCore.h:60
RexxRoutine::RexxRoutine
RexxRoutine(RexxString *p, RexxString *n)
Definition: RexxNativeCode.hpp:101
RexxActivity
Definition: RexxActivity.hpp:127
RexxClass
Definition: ClassClass.hpp:49
RegisteredRoutine::RegisteredRoutine
RegisteredRoutine(RexxString *n, RexxRoutineHandler *e)
Definition: RexxNativeCode.hpp:142
ProtectedObject
Definition: ProtectedObject.hpp:46
RexxNativeMethod::flatten
void flatten(RexxEnvelope *envelope)
Definition: RexxNativeCode.cpp:188
RexxNativeCode::RexxNativeCode
RexxNativeCode()
Definition: RexxNativeCode.hpp:54
BaseCode
Definition: MethodClass.hpp:62
RegisteredRoutine::entry
RexxRoutineHandler * entry
Definition: RexxNativeCode.hpp:150
RexxRoutine
Definition: RexxNativeCode.hpp:96
RexxNativeRoutine::RexxNativeRoutine
RexxNativeRoutine(RexxString *p, RexxString *n, PNATIVEROUTINE e)
Definition: RexxNativeCode.hpp:116
SecurityManager
Definition: SecurityManager.hpp:52
RexxNativeCode::live
void live(size_t)
Definition: RexxNativeCode.cpp:67
RegisteredRoutine::liveGeneral
void liveGeneral(int reason)
Definition: RexxNativeCode.cpp:226
RexxNativeMethod
Definition: RexxNativeCode.hpp:72
RexxRoutine::RexxRoutine
RexxRoutine()
Definition: RexxNativeCode.hpp:100
RexxNativeCode::name
RexxString * name
Definition: RexxNativeCode.hpp:67
RexxNativeRoutine::flatten
void flatten(RexxEnvelope *envelope)
Definition: RexxNativeCode.cpp:214
RexxNativeMethod::run
virtual void run(RexxActivity *activity, RexxMethod *method, RexxObject *receiver, RexxString *messageName, RexxObject **argPtr, size_t count, ProtectedObject &result)
Definition: RexxNativeCode.cpp:264
RegisteredRoutine::getEntry
RexxRoutineHandler * getEntry()
Definition: RexxNativeCode.hpp:147
RexxNativeRoutine::getEntry
PNATIVEROUTINE getEntry()
Definition: RexxNativeCode.hpp:121
RESTORETYPE
RESTORETYPE
Definition: ObjectClass.hpp:80
RexxNativeMethod::liveGeneral
void liveGeneral(int reason)
Definition: RexxNativeCode.cpp:174
RexxNativeCode::source
RexxSource * source
Definition: RexxNativeCode.hpp:68
RexxMethod
Definition: MethodClass.hpp:101
RexxObject
Definition: ObjectClass.hpp:311
RexxString
Definition: StringClass.hpp:119
RexxNativeCode::package
RexxString * package
Definition: RexxNativeCode.hpp:66
RexxNativeCode::flatten
void flatten(RexxEnvelope *envelope)
Definition: RexxNativeCode.cpp:89
RexxNativeRoutine
Definition: RexxNativeCode.hpp:107