RoutineClass.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 RoutineClass.hpp */
40 /* */
41 /* Primitive Kernel Method Class Definitions */
42 /* */
43 /******************************************************************************/
44 #ifndef Included_RoutineClass
45 #define Included_RoutineClass
46 
47 #include "MethodClass.hpp"
48 
50 {
51 public:
52  void *operator new(size_t);
53  inline void *operator new(size_t size, void *ptr) { return ptr; };
54  RoutineClass(RexxString *n, BaseCode *_code);
55  RoutineClass(RexxString *name);
57  RoutineClass(RexxString *name, const char *data, size_t length);
58  RoutineClass(RexxString *name, RexxArray *source, size_t startLine=0, RexxString *programName=OREF_NULL);
59  inline RoutineClass(RESTORETYPE restoreType) { ; };
60 
62  void live(size_t);
63  void liveGeneral(int reason);
64  void flatten(RexxEnvelope*);
65 
66  void call(RexxActivity *, RexxString *, RexxObject **, size_t, size_t, RexxString *, RexxString *, int, ProtectedObject &);
67  void call(RexxActivity *, RexxString *, RexxObject **, size_t, size_t, ProtectedObject &);
68  void runProgram(RexxActivity *activity, RexxString * calltype, RexxString * environment, RexxObject **arguments, size_t argCount, size_t named_argCount, ProtectedObject &result);
69  void runProgram(RexxActivity *activity, RexxObject **arguments, size_t argCount, size_t named_argCount, ProtectedObject &result);
70 
71  RexxObject *callRexx(RexxObject **, size_t, size_t);
72  RexxObject *callWithRexx(RexxArray *, /* named arguments*/ RexxObject **, size_t);
73 
74  RexxBuffer *save();
75  void save(PRXSTRING outBuffer);
76  void save(const char *filename);
78 
79  RoutineClass *newRexx(RexxObject **, size_t, size_t);
82 
83  static RoutineClass *restore(RexxBuffer *, char *, size_t length);
84  static RoutineClass *restore(const char *data, size_t length);
85  static RoutineClass *restore(RexxString *fileName, RexxBuffer *buffer);
87  static RoutineClass *restore(RexxBuffer *buffer);
88  static RoutineClass *restore(RXSTRING *inData, RexxString *name);
89  static RoutineClass *fromFile(RexxString *filename);
90 
91  static RoutineClass *newRoutineObject(RexxString *, RexxObject *, RexxObject *, RexxSource *s, bool isBlock);
93 
94  static RoutineClass *processInstore(PRXSTRING instore, RexxString * name );
95 
96  static void createInstance();
98 };
99 #endif
100 
RESTORETYPE
Definition: ObjectClass.hpp:80
#define OREF_NULL
Definition: RexxCore.h:60
RexxArray * source()
void runProgram(RexxActivity *activity, RexxString *calltype, RexxString *environment, RexxObject **arguments, size_t argCount, size_t named_argCount, ProtectedObject &result)
RexxObject * callRexx(RexxObject **, size_t, size_t)
RexxObject * setSecurityManager(RexxObject *)
static RoutineClass * restoreFromMacroSpace(RexxString *name)
RexxBuffer * save()
RoutineClass(RexxString *n, BaseCode *_code)
RoutineClass * loadExternalRoutine(RexxString *name, RexxString *descriptor)
void call(RexxActivity *, RexxString *, RexxObject **, size_t, size_t, RexxString *, RexxString *, int, ProtectedObject &)
static RoutineClass * restore(RexxBuffer *, char *, size_t length)
RexxObject * callWithRexx(RexxArray *, RexxObject **, size_t)
void liveGeneral(int reason)
static RoutineClass * processInstore(PRXSTRING instore, RexxString *name)
void live(size_t)
RoutineClass * newRexx(RexxObject **, size_t, size_t)
RoutineClass(RESTORETYPE restoreType)
static RoutineClass * fromFile(RexxString *filename)
void execute(RexxObject *, RexxObject *)
RoutineClass * newFileRexx(RexxString *)
static RoutineClass * restore(RexxBuffer *buffer)
static RoutineClass * newRoutineObject(RexxString *, RexxObject *, RexxObject *, RexxSource *s, bool isBlock)
static void createInstance()
static RexxClass * classInstance
void flatten(RexxEnvelope *)