Setup.cpp
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 */
40 /* */
41 /* Setup initial class definitions during an image build */
42 /* */
43 /* NOTE: The methods contained here are part of the RexxMemory class, but */
44 /* are in a separate file because of the extensive #include requirements */
45 /* for these particular methods and tables. */
46 /* */
47 /******************************************************************************/
48 #include <string.h>
49 #include "RexxCore.h"
50 #include "TableClass.hpp"
51 #include "RexxMemory.hpp"
52 #include "RexxBehaviour.hpp"
53 #include "ClassClass.hpp"
54 #include "NumberStringClass.hpp"
55 #include "IntegerClass.hpp"
56 #include "StringClass.hpp"
57 #include "MutableBufferClass.hpp"
58 #include "ArrayClass.hpp"
59 #include "DirectoryClass.hpp"
60 #include "RelationClass.hpp"
61 #include "ListClass.hpp"
62 #include "QueueClass.hpp"
63 #include "SupplierClass.hpp"
64 #include "MethodClass.hpp"
65 #include "RoutineClass.hpp"
66 #include "RexxEnvelope.hpp"
67 #include "MessageClass.hpp"
68 #include "StemClass.hpp"
69 #include "RexxMisc.hpp"
70 #include "RexxNativeCode.hpp"
71 #include "RexxActivity.hpp"
72 #include "ActivityManager.hpp"
73 #include "RexxNativeActivation.hpp"
75 #include "ExpressionVariable.hpp"
76 #include "RexxLocalVariables.hpp"
77 #include "ProtectedObject.hpp"
78 #include "PointerClass.hpp"
79 #include "BufferClass.hpp"
80 #include "WeakReferenceClass.hpp"
81 #include "CPPCode.hpp"
82 #include "Interpreter.hpp"
83 #include "SystemInterpreter.hpp"
84 #include "InterpreterInstance.hpp"
85 #include "PackageManager.hpp"
86 #include "PackageClass.hpp"
87 #include "ContextClass.hpp"
88 #include "StackFrameClass.hpp"
89 #include "BlockClass.hpp"
90 #include "TextClass.hpp"
91 #include "SourceFile.hpp"
92 
93 
95  const char * name, /* ASCII-Z name for the method */
96  RexxBehaviour * behaviour, /* behaviour to use */
97  PCPPM entryPoint, /* method's entry point */
98  size_t arguments, /* count of arguments */
99  bool passNamedArgs /* pass the named arguments? */
100 )
101 /******************************************************************************/
102 /* Function: Add a C++ method to an object's behaviour */
103 /******************************************************************************/
104 {
105  behaviour->define(name, entryPoint, arguments, passNamedArgs);
106 }
107 
109  const char * name, /* ASCII-Z name for the method */
110  RexxBehaviour * behaviour, /* behaviour to use */
111  PCPPM entryPoint, /* method's entry point */
112  size_t arguments, /* count of arguments */
113  bool passNamedArgs /* pass the named arguments? */
114 )
115 /******************************************************************************/
116 /* Function: Add a C++ method to an object's behaviour */
117 /******************************************************************************/
118 {
119  RexxMethod *method = behaviour->define(name, entryPoint, arguments, passNamedArgs);
120  method->setProtected(); /* make this protected */
121 }
122 
123 
125  const char * name, /* ASCII-Z name for the method */
126  RexxBehaviour * behaviour, /* behaviour to use */
127  PCPPM entryPoint, /* method's entry point */
128  size_t arguments, /* count of arguments */
129  bool passNamedArgs /* pass the named arguments? */
130 )
131 /******************************************************************************/
132 /* Function: Add a C++ method to an object's behaviour */
133 /******************************************************************************/
134 {
135  RexxMethod *method = behaviour->define(name, entryPoint, arguments, passNamedArgs);
136  // On 20/07/2014 rev 10318, official ooRexx was updated to no longer declare protected
137  //method->setProtected(); /* make this protected */
138  method->setPrivate(); /* make this protected */
139 }
140 
141 
142 /**
143  * Add a object to the kernel directory using the provided name.
144  *
145  * @param name The name of the new environment entry.
146  * @param value The value added.
147  */
148 void RexxMemory::addToSystem(const char *name, RexxInternalObject *value) // ooRexx5
149 {
150  // In ooRexx5, TheSystem is a StringTable which accepts RexxInternalObject*
151  // Here, TheSystem is a Directory which doesn't accept RexxInternalObject*
152  // Must cast...
153  TheSystem->put((RexxObject *)value, getGlobalName(name));
154 }
155 
156 #if 0 // This ooRexx5 macro is not used.
157  // Use directly addToSystem.
158 // Finish up one of the special classes (Integer and NumberString). Those are
159 // real classes, but are kept hidden.
160 #define EndSpecialClassDefinition(name) \
161  addToSystem(#name, currentClass); \
162 }
163 #endif
164 
165 /**
166  * Finalize a system class during image construction. This
167  * places the class in the Environment and also adds it to
168  * the Rexx package.
169  *
170  * @param name The class name.
171  * @param classObj The class object.
172  */
173 void RexxMemory::completeSystemClass(const char *name, RexxClass *classObj) // ooRexx5
174 {
175  // this gets added to the environment and the package in an uppercase name.
176  RexxString *className = getGlobalName(name);
177 
178 #if 0 // Not activated. This is done by kernel_public
179  TheEnvironment->put(classObj, className);
180 #endif
181 
182  // this is added as a public class in this package.
183 
184 #if 0 // jlf: can't use addPublicClass (crash because classObj not finalized)
185  TheRexxPackage->addPublicClass(className, classObj);
186 #else // Must use addInstalledClass (like ooRexx5)
187  TheRexxPackage->getSourceObject()->addInstalledClass(className, classObj, true);
188 #endif
189 }
190 
191 #if 0 // This ooRexx5 macro is not used.
192  // Use directly completeSystemClass.
193 // Add the created class object to the environment under its name and close
194 // the local variable scope
195 #define EndClassDefinition(name) \
196  completeSystemClass(#name, currentClass); \
197 }
198 #endif
199 
200 
201 /**
202  * Create the base Rexx package object. All Rexx-defined classes
203  * in the image will be added to this package.
204  */
206 {
207  // this is a dummy package named "REXX" with the place holder
208  // sourceless program source
209  rexxPackage = new PackageClass(new RexxSource(OREF_REXX, "", 0));
210 }
211 
212 
213 /**
214  * Initialize the Rexx memory environment during an image built.
215  *
216  * @param imageTarget
217  * The location to save the created image file.
218  */
219 void RexxMemory::createImage(const char *imageTarget)
220 /******************************************************************************/
221 /* Function: Initialize the kernel on image build */
222 /******************************************************************************/
223 {
224  RexxMemory::create(); /* create initial memory stuff */
225 
226  Interpreter::init(); // the interpreter subsystem first
227  ActivityManager::init(); /* Initialize the activity managers */
228  // Get an instance. This also gives the root activity of the instance
229  // the kernel lock.
231  memoryObject.createStrings(); /* create all of the OREF_ strings */
232  // initializer for native libraries
234 
235  /* avoid that through caching */
236  /* TheTrueObject == IntegerOne etc. */
237  TheTrueObject = new RexxInteger(1);
238  TheFalseObject = new RexxInteger(0);
239 
240 
242  /* We don't move the NIL object, we */
243  /*will use the remote systems NIL */
244  /*object. */
245  TheNilObject->makeProxiedObject();
246 
247  /* create string first */
249  RexxText::createInstance(); // must be before the call new_text
254 
256 
257  /* If first one through, generate all */
258  IntegerZero = new_integer(0); /* static integers we want to use... */
259  IntegerOne = new_integer(1); /* This will allow us to use the static */
260  IntegerTwo = new_integer(2); /* integers instead of having to do a */
261  IntegerThree = new_integer(3); /* new_integer every time.... */
264  IntegerSix = new_integer(6);
269 
270  TheNullText = new_text("");
271 
272  /* RexxNumberString */
273  // NOTE: The number string class lies about its identity
276 
277  // The pointer class needs to be created early because other classes
278  // use the instances to store information.
280 
282  CLASS_CREATE(Directory, "Directory", RexxClass); /* RexxDirectory */
283  TheEnvironment = new_directory(); /* create the environment directory */
284  /* setup OREF_ENV as the mark start */
285  /* point */
287  TheKernel = new_directory(); /* now add the kernel and system */
288  TheSystem = new_directory(); /* directories */
289  /* Indicate these objects will not be*/
290  /* moved to another system, rather */
291  /* will re-establish themselves on */
292  /* the remote system. */
293  TheEnvironment->makeProxiedObject();
294  TheKernel->makeProxiedObject();
295  TheSystem->makeProxiedObject();
296 
297  /* RexxMethod */
308 
314 
315  /* build the common retriever tables */
317  /* add all of the special variables */
318  TheCommonRetrievers->put((RexxObject *)new RexxParseVariable(OREF_SELF, VARIABLE_SELF), OREF_SELF);
319  TheCommonRetrievers->put((RexxObject *)new RexxParseVariable(OREF_SUPER, VARIABLE_SUPER), OREF_SUPER);
320  TheCommonRetrievers->put((RexxObject *)new RexxParseVariable(OREF_SIGL, VARIABLE_SIGL), OREF_SIGL);
321  TheCommonRetrievers->put((RexxObject *)new RexxParseVariable(OREF_RC, VARIABLE_RC), OREF_RC);
322  TheCommonRetrievers->put((RexxObject *)new RexxParseVariable(OREF_RESULT, VARIABLE_RESULT), OREF_RESULT);
323  memoryObject.enableOrefChecks(); /* enable setCheckOrefs... */
324 
325  // create the Rexx package so created classes can get added to it.
326  createRexxPackage(); // ooRexx5
327 
328 /******************************************************************************/
329 /* The following Rexx classes that are exposed to the users are set up as */
330 /* subclassable classes. */
331 /*****************************************************************************/
332 
333  /* The NEW method is exposed for the CLASS class behaviour. */
334  /* The CLASS class needs the methods of the CLASS instance behaviour */
335  /* so the instance behaviour methods are also in the CLASS class mdict. */
336  /* */
337  /* Also Since the CLASS class needs OBJECT instance methods the */
338  /* OBJECT class is setup. Then the class method SUBCLASSABLE can be */
339  /* invoked on OBJECT then CLASS and then all the subclassable classes. */
340 
341  /* add the Rexx class NEW method */
343 
344  /* set the scope of the method to */
345  /* the CLASS scope */
346  TheClassClassBehaviour->setMethodDictionaryScope(TheClassClass);
347 
348  /* add the instance methods to the */
349  /* class's instance mdict */
363  defineKernelMethod(CHAR_ISMETACLASS ,TheClassBehaviour, CPPM(RexxClass::isMetaClassRexx), 0); // ooRexx5
364  defineKernelMethod(CHAR_ISABSTRACT ,TheClassBehaviour, CPPM(RexxClass::isAbstractRexx), 0); // ooRexx5
370  /* Class operator methods.... */
373  defineKernelMethod(CHAR_BACKSLASH_EQUAL ,TheClassBehaviour, CPPM(RexxClass::notEqual), 1);
374  defineKernelMethod(CHAR_LESSTHAN_GREATERTHAN ,TheClassBehaviour, CPPM(RexxClass::notEqual), 1);
375  defineKernelMethod(CHAR_GREATERTHAN_LESSTHAN ,TheClassBehaviour, CPPM(RexxClass::notEqual), 1);
376  defineKernelMethod(CHAR_STRICT_BACKSLASH_EQUAL ,TheClassBehaviour, CPPM(RexxClass::notEqual), 1);
381  // this is explicitly inserted into the class behaviour because it gets used
382  // prior to the instance behavior merges.
384  // this is a NOP by default, so we'll just use the object init method as a fill in.
386 
387  /* set the scope of the methods to */
388  /* the CLASS scope */
389  TheClassBehaviour->setMethodDictionaryScope(TheClassClass);
391 
392  /************************************************************************/
393  /* */
394  /* The OBJECT class and instance behaviour mdict's are needed next */
395  /* */
396  /************************************************************************/
397 
398  /* add the NEW method to the OBJECT */
399  /* behaviour mdict */
401 
402  /* set the scope of the method to */
403  /* the OBJECT scope */
404  TheObjectClassBehaviour->setMethodDictionaryScope(TheObjectClass);
405 
406  /* now set up the instance behaviour */
407  /* mdict */
413  defineKernelMethod(CHAR_LESSTHAN_GREATERTHAN ,TheObjectBehaviour, CPPM(RexxObject::notEqual), 1);
414  defineKernelMethod(CHAR_GREATERTHAN_LESSTHAN ,TheObjectBehaviour, CPPM(RexxObject::notEqual), 1);
415  defineKernelMethod(CHAR_STRICT_BACKSLASH_EQUAL ,TheObjectBehaviour, CPPM(RexxObject::strictNotEqual), 1);
427  defineKernelMethod("STARTWITH" ,TheObjectBehaviour, CPPM(RexxObject::startWith), 2, true); // pass named arguments
429  defineKernelMethod("SENDWITH" ,TheObjectBehaviour, CPPM(RexxObject::sendWith), 2, true); // pass named arguments
441  /* set the scope of the methods to */
442  /* the OBJECT scope */
443  TheObjectBehaviour->setMethodDictionaryScope(TheObjectClass);
444  /* Now call the class subclassable */
445  /* method for OBJECT then CLASS */
446  TheObjectClass->subClassable(true);
447  TheClassClass->subClassable(true);
449 
450  /************************************** The rest of the classes can now be */
451  /************************************** set up. */
452 
453  /***************************************************************************/
454  /* ARRAY */
455  /***************************************************************************/
456 
459  /* set the scope of the methods to */
460  /* this classes oref */
461  TheArrayClassBehaviour->setMethodDictionaryScope(TheArrayClass);
462 
495  // there have been some problems with the quick sort used as the default sort, so map everything
496  // to the stable sort. The stable sort, in theory, uses more memory, but in practice, this is not true.
501  /* set the scope of the methods to */
502  /* this classes oref */
503  TheArrayBehaviour->setMethodDictionaryScope(TheArrayClass);
504 
505  /* Now call the class subclassable */
506  /* method */
507  TheArrayClass->subClassable(false);
509 
510  /***************************************************************************/
511  /* DIRECTORY */
512  /***************************************************************************/
513 
515 
516  /* set the scope of the method to */
517  /* this classes oref */
518  TheDirectoryClassBehaviour->setMethodDictionaryScope(TheDirectoryClass);
519 
520  /* add the instance methods */
538  defineKernelMethod(CHAR_UNKNOWN , TheDirectoryBehaviour, CPPM(RexxObject::unknownRexx), 2, true); // pass named arguments
543 
544  /* set the scope of the methods to */
545  /* this classes oref */
546  TheDirectoryBehaviour->setMethodDictionaryScope(TheDirectoryClass);
547 
548  /* Now call the class subclassable */
549  /* method */
550  TheDirectoryClass->subClassable(false);
552 
553 
554  /***************************************************************************/
555  /* LIST */
556  /***************************************************************************/
557 
558  /* add the class behaviour methods */
561 
562  /* set the scope of the methods to */
563  /* this classes oref */
564  TheListClassBehaviour->setMethodDictionaryScope(TheListClass);
565 
566  /* add the instance behaviour methods*/
568  defineKernelMethod(CHAR_BRACKETSEQUAL,TheListBehaviour, CPPM(RexxList::put), 2);
582  // DELETE is the same as REMOVE for the List class
594  /* set the scope of the methods to */
595  /* this classes oref */
596  TheListBehaviour->setMethodDictionaryScope(TheListClass);
597 
598  /* Now call the class subclassable */
599  /* method */
600  TheListClass->subClassable(false);
602 
603  /***************************************************************************/
604  /* MESSAGE */
605  /***************************************************************************/
606 
607  /* Define the NEW method in the */
608  /* class behaviour mdict */
610 
611  /* set the scope of the methods to */
612  /* this classes oref */
613  TheMessageClassBehaviour->setMethodDictionaryScope(TheMessageClass);
614 
615  /* Add the instance methods to the */
616  /* instance behaviour mdict */
617 
628 
629  /* set the scope of the methods to */
630  /* this classes oref */
631  TheMessageBehaviour->setMethodDictionaryScope(TheMessageClass);
632 
633  /* Now call the class subclassable */
634  /* method */
635  TheMessageClass->subClassable(true);
637 
638  /***************************************************************************/
639  /* METHOD */
640  /***************************************************************************/
641 
642  /* Add the NEW methods to the */
643  /* class behaviour */
647  /* set the scope of the methods to */
648  /* this classes oref */
649  TheMethodClassBehaviour->setMethodDictionaryScope(TheMethodClass);
650 
651  /* Add the instance methods to the */
652  /* instance behaviour mdict */
668  /* set the scope of the methods to */
669  /* this classes oref */
670  TheMethodBehaviour->setMethodDictionaryScope(TheMethodClass);
671 
672  /* Now call the class subclassable */
673  /* method */
674  TheMethodClass->subClassable(true);
676 
677  /***************************************************************************/
678  /* ROUTINE */
679  /***************************************************************************/
680 
681  /* Add the NEW methods to the */
682  /* class behaviour */
686  /* set the scope of the methods to */
687  /* this classes oref */
688  TheRoutineClassBehaviour->setMethodDictionaryScope(TheRoutineClass);
689 
690  /* Add the instance methods to the */
691  /* instance behaviour mdict */
696  defineKernelMethod(CHAR_CALLWITH ,TheRoutineBehaviour, CPPM(RoutineClass::callWithRexx), 1, true); // pass named arguments
697  /* set the scope of the methods to */
698  /* this classes oref */
699  TheRoutineBehaviour->setMethodDictionaryScope(TheRoutineClass);
700 
701  /* Now call the class subclassable */
702  /* method */
703  TheRoutineClass->subClassable(true);
705 
706 
707  /***************************************************************************/
708  /* Package */
709  /***************************************************************************/
710 
711  /* Add the NEW methods to the */
712  /* class behaviour */
714  /* set the scope of the methods to */
715  /* this classes oref */
716  ThePackageClassBehaviour->setMethodDictionaryScope(ThePackageClass);
717 
718  /* Add the instance methods to the */
719  /* instance behaviour mdict */
748  /* set the scope of the methods to */
749  /* this classes oref */
750  ThePackageBehaviour->setMethodDictionaryScope(ThePackageClass);
751 
752  /* Now call the class subclassable */
753  /* method */
754  ThePackageClass->subClassable(true);
756 
757 
758  /***************************************************************************/
759  /* RexxContext */
760  /***************************************************************************/
761 
762  /* Add the NEW methods to the */
763  /* class behaviour */
765  /* set the scope of the methods to */
766  /* this classes oref */
767  TheRexxContextClassBehaviour->setMethodDictionaryScope(TheRexxContextClass);
768 
778  defineKernelMethod(CHAR_SETARGS ,TheRexxContextBehaviour, CPPM(RexxContext::setArgs), 1, true); // pass named arguments
786 
787  /* Add the instance methods to the */
788  /* instance behaviour mdict */
789  /* set the scope of the methods to */
790  /* this classes oref */
791  TheRexxContextBehaviour->setMethodDictionaryScope(TheRexxContextClass);
792 
793  /* Now call the class subclassable */
794  /* method */
795  TheRexxContextClass->subClassable(true);
797 
798  /***************************************************************************/
799  /* QUEUE */
800  /***************************************************************************/
801 
802  /* Add the NEW method to the class */
803  /* behaviour mdict */
806 
807  /* set the scope of the methods to */
808  /* this classes oref */
809  TheQueueClassBehaviour->setMethodDictionaryScope(TheQueueClass);
810 
811  /* Add the instance methods to the */
812  /* instance method mdict */
813 
822  defineKernelMethod(CHAR_BRACKETSEQUAL ,TheQueueBehaviour, CPPM(RexxQueue::put), 2);
827  // REMOVE and DELETE are synonyms for the QUEUE class
845 
846  /* set the scope of the methods to */
847  /* this classes oref */
848  TheQueueBehaviour->setMethodDictionaryScope(TheQueueClass);
849 
850  /* Now call the class subclassable */
851  /* method */
852  TheQueueClass->subClassable(false);
854 
855  /***************************************************************************/
856  /* RELATION */
857  /***************************************************************************/
858 
859  /* Add the NEW method to the */
860  /* class behaviour mdict */
862 
863  /* set the scope of the methods to */
864  /* this classes oref */
865  TheRelationClassBehaviour->setMethodDictionaryScope(TheRelationClass);
866 
867  /* Add the instance methods to the */
868  /* instance behaviour mdict */
889 
890  /* set the scope of the methods to */
891  /* this classes oref */
892  TheRelationBehaviour->setMethodDictionaryScope(TheRelationClass);
893 
894  /* Now call the class subclassable */
895  /* method */
896  TheRelationClass->subClassable(false);
898 
899  /***************************************************************************/
900  /* STEM */
901  /***************************************************************************/
902 
903  /* Add the NEW method to the class */
904  /* behaviour mdict */
906  /* set the scope of the methods to */
907  /* this classes oref */
908  TheStemClassBehaviour->setMethodDictionaryScope(TheStemClass);
909 
910  /* Add the instance methods to the */
911  /* instance behaviour mdict */
923  defineKernelMethod(CHAR_UNKNOWN ,TheStemBehaviour, CPPM(RexxObject::unknownRexx), 2, true); // pass named arguments
924 
932 
933  /* set the scope of the methods to */
934  /* this classes oref */
935  TheStemBehaviour->setMethodDictionaryScope(TheStemClass);
936 
937  /* delete these methods from stems by*/
938  /* using .nil as the methobj */
939  TheStemBehaviour->define(getGlobalName(CHAR_STRICT_EQUAL) , OREF_NULL);
940  TheStemBehaviour->define(getGlobalName(CHAR_EQUAL) , OREF_NULL);
941  TheStemBehaviour->define(getGlobalName(CHAR_STRICT_BACKSLASH_EQUAL), OREF_NULL);
942  TheStemBehaviour->define(getGlobalName(CHAR_BACKSLASH_EQUAL) , OREF_NULL);
943  TheStemBehaviour->define(getGlobalName(CHAR_LESSTHAN_GREATERTHAN) , OREF_NULL);
944  TheStemBehaviour->define(getGlobalName(CHAR_GREATERTHAN_LESSTHAN) , OREF_NULL);
945 
946  /* Now call the class subclassable */
947  /* method */
948  TheStemClass->subClassable(false);
950 
951  /***************************************************************************/
952  /* STRING */
953  /***************************************************************************/
954 
955  /* Add the NEW method to the class */
956  /* behaviour mdict */
958 
959  /* set the scope of the methods to */
960  /* this classes oref */
961  TheStringClassBehaviour->setMethodDictionaryScope(TheStringClass);
962 
963  /* Add the instance methods to the */
964  /* instance behaviour mdict */
1031  defineKernelMethod(CHAR_BACKSLASH_EQUAL ,TheStringBehaviour, CPPM(RexxString::notEqual), 1);
1032  defineKernelMethod(CHAR_LESSTHAN_GREATERTHAN ,TheStringBehaviour, CPPM(RexxString::notEqual), 1);
1033  defineKernelMethod(CHAR_GREATERTHAN_LESSTHAN ,TheStringBehaviour, CPPM(RexxString::notEqual), 1);
1039  defineKernelMethod(CHAR_BACKSLASH_GREATERTHAN ,TheStringBehaviour, CPPM(RexxString::isLessOrEqual), 1);
1041  defineKernelMethod(CHAR_STRICT_BACKSLASH_EQUAL ,TheStringBehaviour, CPPM(RexxString::strictNotEqual), 1);
1044  defineKernelMethod(CHAR_STRICT_GREATERTHAN_EQUAL ,TheStringBehaviour, CPPM(RexxString::strictGreaterOrEqual), 1);
1045  defineKernelMethod(CHAR_STRICT_BACKSLASH_LESSTHAN ,TheStringBehaviour, CPPM(RexxString::strictGreaterOrEqual), 1);
1046  defineKernelMethod(CHAR_STRICT_LESSTHAN_EQUAL ,TheStringBehaviour, CPPM(RexxString::strictLessOrEqual), 1);
1047  defineKernelMethod(CHAR_STRICT_BACKSLASH_GREATERTHAN ,TheStringBehaviour, CPPM(RexxString::strictLessOrEqual), 1);
1073  /* set the scope of the methods to */
1074  /* this classes oref */
1075  TheStringBehaviour->setMethodDictionaryScope(TheStringClass);
1076 
1077  /* Now call the class subclassable */
1078  /* method */
1079  TheStringClass->subClassable(false);
1081 
1082 
1083  /***************************************************************************/
1084  /* MUTABLEBUFFER */
1085  /***************************************************************************/
1086 
1087  /* Add the NEW method to the class */
1088  /* behaviour mdict */
1090 
1091  /* set the scope of the methods to */
1092  /* this classes oref */
1093  TheMutableBufferClassBehaviour->setMethodDictionaryScope(TheMutableBufferClass);
1094 
1095  /* Add the instance methods to the */
1096  /* instance behaviour mdict */
1111 
1139 
1140  /* set the scope of the methods to */
1141  /* this classes oref */
1142  TheMutableBufferBehaviour->setMethodDictionaryScope(TheMutableBufferClass);
1143  /* Now call the class subclassable */
1144  /* method */
1145  TheMutableBufferClass->subClassable(true);
1146  completeSystemClass("MUTABLEBUFFER", TheMutableBufferClass);
1147 
1148  /***************************************************************************/
1149  /* INTEGER */
1150  /***************************************************************************/
1151 
1152  /* If the integer class was set up correctly it would have the */
1153  /* class_id method in its own class but instead it points to the one */
1154  /* in the string class. .*/
1155 
1157 
1158  /* set the scope of the methods to */
1159  /* this classes oref */
1160  TheIntegerClassBehaviour->setMethodDictionaryScope(TheIntegerClass);
1161 
1162  /* Add the instance methods to the */
1163  /* instance behaviour mdict */
1175  defineKernelMethod(CHAR_UNKNOWN ,TheIntegerBehaviour, CPPM(RexxObject::unknownRexx), 2, true); // pass named arguments
1184  defineKernelMethod(CHAR_LESSTHAN_GREATERTHAN ,TheIntegerBehaviour, CPPM(RexxInteger::notEqual), 1);
1185  defineKernelMethod(CHAR_GREATERTHAN_LESSTHAN ,TheIntegerBehaviour, CPPM(RexxInteger::notEqual), 1);
1191  defineKernelMethod(CHAR_BACKSLASH_GREATERTHAN ,TheIntegerBehaviour, CPPM(RexxInteger::isLessOrEqual), 1);
1194  defineKernelMethod(CHAR_STRICT_BACKSLASH_EQUAL ,TheIntegerBehaviour, CPPM(RexxInteger::strictNotEqual), 1);
1198  defineKernelMethod(CHAR_STRICT_BACKSLASH_LESSTHAN ,TheIntegerBehaviour, CPPM(RexxInteger::strictGreaterOrEqual), 1);
1200  defineKernelMethod(CHAR_STRICT_BACKSLASH_GREATERTHAN ,TheIntegerBehaviour, CPPM(RexxInteger::strictLessOrEqual), 1);
1208 
1209  /* set the scope of the methods to */
1210  /* this classes oref */
1211  TheIntegerBehaviour->setMethodDictionaryScope(TheIntegerClass);
1212 
1213  /* Now call the class subclassable */
1214  /* method */
1215  TheIntegerClass->subClassable(true);
1216  addToSystem("INTEGER", TheIntegerClass);
1217 
1218  /***************************************************************************/
1219  /* NUMBERSTRING */
1220  /***************************************************************************/
1221 
1222  /* If the numberstring class was set up correctly it should have the */
1223  /* class_id method in its own class but instead it points to the one */
1224  /* in the string class. */
1225 
1227 
1228  /* set the scope of the methods to */
1229  /* this classes oref */
1230  TheNumberStringClassBehaviour->setMethodDictionaryScope(TheNumberStringClass);
1231 
1232  /* Add the instance methods to this */
1233  /* instance behaviour mdict */
1234  defineKernelMethod(CHAR_UNKNOWN ,TheNumberStringBehaviour, CPPM(RexxObject::unknownRexx), 2, true); // pass named arguments
1278 
1279  /* set the scope of the methods to */
1280  /* this classes oref */
1281  TheNumberStringBehaviour->setMethodDictionaryScope(TheNumberStringClass);
1282 
1283  /* Now call the class subclassable */
1284  /* method */
1285  TheNumberStringClass->subClassable(true);
1286  addToSystem("NUMBERSTRING", TheNumberStringClass);
1287 
1288 
1289  /***************************************************************************/
1290  /* SUPPLIER */
1291  /***************************************************************************/
1292  /* Add the NEW methods to the class */
1293  /* behaviour mdict */
1295  /* set the scope of the methods to */
1296  /* this classes oref */
1297  TheSupplierClassBehaviour->setMethodDictionaryScope(TheSupplierClass);
1298 
1299 
1300  /* Add the instance methods to the */
1301  /* instance behaviour mdict */
1302 
1308 
1309  /* set the scope of the methods to */
1310  /* this classes oref */
1311  TheSupplierBehaviour->setMethodDictionaryScope(TheSupplierClass);
1312 
1313  /* Now call the class subclassable */
1314  /* method */
1315  TheSupplierClass->subClassable(false);
1317 
1318  /***************************************************************************/
1319  /* TABLE */
1320  /***************************************************************************/
1321 
1322  /* Add the NEW methods to the class */
1323  /* behaviour mdict */
1325 
1326  /* set the scope of the methods to */
1327  /* this classes oref */
1328  TheTableClassBehaviour->setMethodDictionaryScope(TheTableClass);
1329 
1330  /* Add the instance methods to the */
1331  /* instance behaviour mdict */
1348 
1349  /* set the scope of the methods to */
1350  /* this classes oref */
1351  TheTableBehaviour->setMethodDictionaryScope(TheTableClass);
1352 
1353  /* Now call the class subclassable */
1354  /* method */
1355  TheTableClass->subClassable(false);
1357 
1358  /***************************************************************************/
1359  /* IDENTITYTABLE */
1360  /***************************************************************************/
1361 
1362  /* Add the NEW methods to the class */
1363  /* behaviour mdict */
1365 
1366  /* set the scope of the methods to */
1367  /* this classes oref */
1368  TheIdentityTableClassBehaviour->setMethodDictionaryScope(TheIdentityTableClass);
1369 
1370  /* Add the instance methods to the */
1371  /* instance behaviour mdict */
1388 
1389  /* set the scope of the methods to */
1390  /* this classes oref */
1391  TheIdentityTableBehaviour->setMethodDictionaryScope(TheIdentityTableClass);
1392 
1393  /* Now call the class subclassable */
1394  /* method */
1395  TheIdentityTableClass->subClassable(false);
1396  completeSystemClass("IDENTITYTABLE", TheIdentityTableClass);
1397 
1398 
1399  /***************************************************************************/
1400  /* POINTER */
1401  /***************************************************************************/
1402  /* Add the NEW methods to the class */
1403  /* behaviour mdict */
1405  /* set the scope of the methods to */
1406  /* this classes oref */
1407  ThePointerClassBehaviour->setMethodDictionaryScope(ThePointerClass);
1408 
1409 
1410  /* Add the instance methods to the */
1411  /* instance behaviour mdict */
1415  defineKernelMethod(CHAR_STRICT_BACKSLASH_EQUAL ,ThePointerBehaviour, CPPM(RexxPointer::notEqual), 1);
1417 
1418  /* set the scope of the methods to */
1419  /* this classes oref */
1420  ThePointerBehaviour->setMethodDictionaryScope(ThePointerClass);
1421 
1422  /* Now call the class subclassable */
1423  /* method */
1424  ThePointerClass->subClassable(false);
1426 
1427 
1428  /***************************************************************************/
1429  /* BUFFER */
1430  /***************************************************************************/
1431  /* Add the NEW methods to the class */
1432  /* behaviour mdict */
1434  /* set the scope of the methods to */
1435  /* this classes oref */
1436  TheBufferClassBehaviour->setMethodDictionaryScope(TheBufferClass);
1437 
1438 
1439  /* Add the instance methods to the */
1440  /* instance behaviour mdict */
1441 
1442  // NO instance methods on buffer
1443 
1444  /* set the scope of the methods to */
1445  /* this classes oref */
1446  TheBufferBehaviour->setMethodDictionaryScope(TheBufferClass);
1447 
1448  /* Now call the class subclassable */
1449  /* method */
1450  TheBufferClass->subClassable(false);
1452 
1453 
1454  /***************************************************************************/
1455  /* WEAKREFERENCE */
1456  /***************************************************************************/
1457  /* Add the NEW methods to the class */
1458  /* behaviour mdict */
1460  /* set the scope of the methods to */
1461  /* this classes oref */
1462  TheWeakReferenceClassBehaviour->setMethodDictionaryScope(TheWeakReferenceClass);
1463 
1464 
1465  /* Add the instance methods to the */
1466  /* instance behaviour mdict */
1468  /* set the scope of the methods to */
1469  /* this classes oref */
1470  TheWeakReferenceBehaviour->setMethodDictionaryScope(TheWeakReferenceClass);
1471 
1472  /* Now call the class subclassable */
1473  /* method */
1474  TheWeakReferenceClass->subClassable(false);
1475  completeSystemClass("WEAKREFERENCE", TheWeakReferenceClass);
1476 
1477 
1478  /***************************************************************************/
1479  /* STACKFRAME */
1480  /***************************************************************************/
1481  /* Add the NEW methods to the class */
1482  /* behaviour mdict */
1484  /* set the scope of the methods to */
1485  /* this classes oref */
1486  TheStackFrameClassBehaviour->setMethodDictionaryScope(TheStackFrameClass);
1487 
1488 
1489  /* Add the instance methods to the */
1490  /* instance behaviour mdict */
1498  // the string method just maps to TRACELINE
1501 
1502  /* set the scope of the methods to */
1503  /* this classes oref */
1504  TheStackFrameBehaviour->setMethodDictionaryScope(TheStackFrameClass);
1505 
1506  /* Now call the class subclassable */
1507  /* method */
1508  TheStackFrameClass->subClassable(false);
1509  completeSystemClass("STACKFRAME", TheStackFrameClass);
1510 
1511  /***************************************************************************/
1512  /* RexxBlock */
1513  /***************************************************************************/
1514 
1515  /* Add the NEW methods to the */
1516  /* class behaviour */
1518  /* set the scope of the methods to */
1519  /* this classes oref */
1520  TheRexxBlockClassBehaviour->setMethodDictionaryScope(TheRexxBlockClass);
1521 
1528 
1529  /* Add the instance methods to the */
1530  /* instance behaviour mdict */
1531  /* set the scope of the methods to */
1532  /* this classes oref */
1533  TheRexxBlockBehaviour->setMethodDictionaryScope(TheRexxBlockClass);
1534 
1535  /* Now call the class subclassable */
1536  /* method */
1537  TheRexxBlockClass->subClassable(true);
1538  completeSystemClass("REXXBLOCK", TheRexxBlockClass);
1539 
1540  /***************************************************************************/
1541  /* RexxText */
1542  /***************************************************************************/
1543 
1545  /* set the scope of the methods to */
1546  /* this classes oref */
1547  TheRexxTextClassBehaviour->setMethodDictionaryScope(TheRexxTextClass);
1548 
1549  /* set the scope of the methods to */
1550  /* this classes oref */
1551  TheRexxTextBehaviour->setMethodDictionaryScope(TheRexxTextClass);
1552 
1553  /* Now call the class subclassable */
1554  /* method */
1555  TheRexxTextClass->subClassable(true);
1557 
1558  /***************************************************************************/
1559  /* Unicode */
1560  /***************************************************************************/
1561 
1565 
1582  defineKernelMethod("UTF8PROC_TRANSFORM" , TheUnicodeClassBehaviour, CPPM(Unicode::utf8proc_transform), 1, true); // pass named arguments
1583 
1585 
1586  /* set the scope of the methods to */
1587  /* this classes oref */
1588  TheUnicodeClassBehaviour->setMethodDictionaryScope(TheUnicodeClass);
1589 
1590  /* set the scope of the methods to */
1591  /* this classes oref */
1592  TheUnicodeBehaviour->setMethodDictionaryScope(TheUnicodeClass);
1593 
1594  /* Now call the class subclassable */
1595  /* method */
1596  TheUnicodeClass->subClassable(true);
1598 
1599 
1600  /***************************************************************************/
1601  /***************************************************************************/
1602  /***************************************************************************/
1603  /* These classes don't have any class methods */
1604  /* and are not subclassed from object */
1605 
1606 #define kernel_public(name, object, dir) ((RexxDirectory *)dir)->setEntry(getGlobalName(name), (RexxObject *)object)
1607 
1608  /* put the kernel-provided public objects in the environment directory */
1612  kernel_public(CHAR_ENVIRONMENT ,TheEnvironment ,TheEnvironment);
1614  kernel_public(CHAR_KERNEL ,TheKernel ,TheEnvironment);
1615  kernel_public("GLOBALROUTINES" ,TheFunctionsDirectory ,TheEnvironment); // jlf: give direct access to TheFunctionsDirectory. Later, TheKernel will be removed from TheEnvironment.
1621  kernel_public(CHAR_REXXCONTEXT ,TheRexxContextClass ,TheEnvironment);
1630  kernel_public(CHAR_MUTABLEBUFFER ,TheMutableBufferClass ,TheEnvironment);
1633  //kernel_public(CHAR_SYSTEM ,TheSystem ,TheEnvironment); // jlf: not sure what's the purpose of this entry... The infos in this directory are totally wrong for MacOs
1635  kernel_public(CHAR_IDENTITYTABLE ,TheIdentityTableClass,TheEnvironment);
1637  //kernel_public(CHAR_BUFFER ,TheBufferClass ,TheEnvironment); // jlf: not sure why this class is declared in TheEnvironment... This class is used only internally for the API (see RexxObject::getCSelf)
1638  kernel_public(CHAR_WEAKREFERENCE ,TheWeakReferenceClass ,TheEnvironment);
1641 
1642  /* set up the kernel directory (MEMORY done elsewhere) */
1643  kernel_public(CHAR_INTEGER ,TheIntegerClass , TheKernel);
1644  kernel_public(CHAR_NUMBERSTRING ,TheNumberStringClass, TheKernel);
1645 
1646  // TODO: Make the kernel directory part of the memory object, but not in the
1647  // environment.
1648 
1649  kernel_public(CHAR_FUNCTIONS ,TheFunctionsDirectory ,TheKernel);
1650  kernel_public(CHAR_NULLARRAY ,TheNullArray ,TheKernel);
1651  kernel_public(CHAR_NULLPOINTER ,TheNullPointer ,TheKernel);
1652  kernel_public(CHAR_COMMON_RETRIEVERS,TheCommonRetrievers ,TheKernel);
1653  kernel_public(CHAR_ENVIRONMENT ,TheEnvironment ,TheKernel);
1654 
1655  /* set Oryx version */
1657  /* set the system name */
1658 #if 0 // jlf deactivate because GetVersionEx API deprecated on Windows
1660  /* set the internal system name */
1661  kernel_public(CHAR_INTERNALNAME, SystemInterpreter::getInternalSystemName(), TheSystem);
1662  /* and the system version info */
1663  kernel_public(CHAR_VERSION, SystemInterpreter::getSystemVersion(), TheSystem);
1664 #endif
1665  // initialize our thread vector for external calls.
1667 
1668 /******************************************************************************/
1669 /* Complete the image build process, calling BaseClasses to establish */
1670 /* the rest of the REXX image. */
1671 /******************************************************************************/
1672 
1673  /* set up the kernel methods that will be defined on OBJECT classes in */
1674  /* BaseClasses.ORX and ORYXJ.ORX. */
1675  {
1676  /* create a kernel methods directory */
1677  RexxDirectory *kernel_methods = new_directory();
1678  ProtectedObject p1(kernel_methods); // protect from GC
1679  kernel_methods->put(new RexxMethod(getGlobalName(CHAR_LOCAL), CPPCode::resolveExportedMethod(CHAR_LOCAL, CPPM(RexxLocal::local), 0, false)), getGlobalName(CHAR_LOCAL));
1680 
1681  /* create the BaseClasses method and run it*/
1682  RexxString *symb = getGlobalName(BASEIMAGELOAD); /* get a name version of the string */
1683  /* go resolve the program name */
1685  // create a new stack frame to run under
1687  try
1688  {
1689  /* create a method object out of this*/
1690  RoutineClass *loader = new RoutineClass(programName);
1691 
1692 
1693  // RexxObject *args = kernel_methods; // temporary to avoid type-punning warnings
1694  RexxObject *args[2];
1695  args[0] = kernel_methods; // 1st positional argument
1696  // we pass the internal Rexx package as an argument to the setup program.
1697  args[1] = TheRexxPackage; // ooRexx5
1698  ProtectedObject result;
1699  /* now call BaseClasses to finish the image*/
1700  loader->runProgram(ActivityManager::currentActivity, OREF_PROGRAM, OREF_NULL, (RexxObject **)&args, 2, 0, result);
1701  }
1702  catch (ActivityException )
1703  {
1704  ActivityManager::currentActivity->error(); /* do error cleanup */
1705  Interpreter::logicError("Error building kernel image. Image not saved.");
1706  }
1707 
1708  }
1709 
1710  // TheRexxPackage has no classes after RESTORINGIMAGE
1711  // Don't know why... Here, it has classes.
1712  RexxDirectory *classes = TheRexxPackage->getClasses();
1713  printf("********** TheRexxPackage classes=%zu\n", classes->items());
1714 
1715  /* define and suppress methods in the nil object */
1716  TheNilObject->defMethod(getGlobalName(CHAR_COPY), (RexxMethod *)TheNilObject);
1717  TheNilObject->defMethod(getGlobalName(CHAR_START), (RexxMethod *)TheNilObject);
1718  TheNilObject->defMethod(getGlobalName(CHAR_OBJECTNAMEEQUALS), (RexxMethod *)TheNilObject);
1719 
1720  // ok, .NIL has been constructed. As a last step before saving the image, we need to change
1721  // the type identifier in the behaviour so that this will get the correct virtual function table
1722  // restored when the image reloads.
1723  TheNilObject->behaviour->setClassType(T_NilObject);
1724 
1725  RexxClass *ordered = (RexxClass *)TheEnvironment->get(getGlobalName(CHAR_ORDEREDCOLLECTION));
1726 
1727  TheArrayClass->inherit(ordered, OREF_NULL);
1728  TheArrayClass->setRexxDefined();
1729 
1730  TheQueueClass->inherit(ordered, OREF_NULL);
1731  TheQueueClass->setRexxDefined();
1732 
1733  TheListClass->inherit(ordered, OREF_NULL);
1734  TheListClass->setRexxDefined();
1735 
1736  RexxClass *map = (RexxClass *)TheEnvironment->get(getGlobalName(CHAR_MAPCOLLECTION));
1737 
1738  TheTableClass->inherit(map, OREF_NULL);
1739  TheTableClass->setRexxDefined();
1740 
1741  TheIdentityTableClass->inherit(map, OREF_NULL);
1742  TheIdentityTableClass->setRexxDefined();
1743 
1744  TheRelationClass->inherit(map, OREF_NULL);
1745  TheRelationClass->setRexxDefined();
1746 
1747  TheDirectoryClass->inherit(map, OREF_NULL);
1748  TheDirectoryClass->setRexxDefined();
1749 
1750  TheStemClass->inherit(map, OREF_NULL);
1751  TheStemClass->setRexxDefined();
1752 
1753  RexxClass *comparable = (RexxClass *)TheEnvironment->get(getGlobalName(CHAR_COMPARABLE));
1754 
1755  TheStringClass->inherit(comparable, OREF_NULL);
1756  TheStringClass->setRexxDefined();
1757 
1758  // disable the special class methods we only use during the image build phase.
1759  // this removes this from all of the subclasses as well
1760  TheObjectClass->removeClassMethod(new_string(CHAR_DEFINE_METHODS));
1761  TheObjectClass->removeClassMethod(new_string(CHAR_SHRIEKREXXDEFINED));
1762  TheObjectClass->removeClassMethod(new_string("!DEFINE_CLASS_METHOD"));
1763 
1764  // now save the image
1765  memoryObject.saveImage(imageTarget);
1767  exit(RC_OK); // successful build
1768 }
@ T_NilObject
RexxDirectory * new_directory()
RexxInteger * new_integer(wholenumber_t v)
#define CPPM(n)
RexxObject *(RexxObject::* PCPPM)()
#define TheStackFrameClassBehaviour
#define TheStringBehaviour
#define TheObjectClassBehaviour
#define TheRexxTextClassBehaviour
#define ThePointerClassBehaviour
#define TheNumberStringBehaviour
#define ThePointerBehaviour
#define TheStemBehaviour
#define TheMutableBufferBehaviour
#define TheIdentityTableClassBehaviour
#define TheUnicodeClassBehaviour
#define TheNumberStringClassBehaviour
#define TheBufferBehaviour
#define TheIntegerBehaviour
#define TheListClassBehaviour
#define TheRexxContextClassBehaviour
#define TheUnicodeBehaviour
#define TheRexxBlockClassBehaviour
#define TheWeakReferenceBehaviour
#define TheRoutineBehaviour
#define TheRelationBehaviour
#define TheArrayBehaviour
#define TheMessageBehaviour
#define TheWeakReferenceClassBehaviour
#define TheIdentityTableBehaviour
#define TheMethodClassBehaviour
#define TheRexxBlockBehaviour
#define TheListBehaviour
#define TheSupplierBehaviour
#define TheClassBehaviour
#define ThePackageBehaviour
#define TheIntegerClassBehaviour
#define TheRoutineClassBehaviour
#define TheStackFrameBehaviour
#define TheMessageClassBehaviour
#define TheDirectoryClassBehaviour
#define TheTableBehaviour
#define TheBufferClassBehaviour
#define TheRexxContextBehaviour
#define TheClassClassBehaviour
#define TheMutableBufferClassBehaviour
#define TheQueueBehaviour
#define TheStringClassBehaviour
#define ThePackageClassBehaviour
#define TheRelationClassBehaviour
#define TheObjectBehaviour
#define TheQueueClassBehaviour
#define TheSupplierClassBehaviour
#define TheTableClassBehaviour
#define TheRexxTextBehaviour
#define TheArrayClassBehaviour
#define TheStemClassBehaviour
#define TheMethodBehaviour
#define TheDirectoryBehaviour
ActivityException
#define TheRexxPackage
Definition: RexxCore.h:189
const size_t A_COUNT
Definition: RexxCore.h:262
#define ThePackageClass
Definition: RexxCore.h:163
#define TheWeakReferenceClass
Definition: RexxCore.h:177
#define TheUnicodeClass
Definition: RexxCore.h:181
#define OREF_NULL
Definition: RexxCore.h:61
#define TheStackFrameClass
Definition: RexxCore.h:178
#define IntegerThree
Definition: RexxCore.h:202
#define TheObjectClass
Definition: RexxCore.h:166
#define IntegerSeven
Definition: RexxCore.h:206
#define TheStemClass
Definition: RexxCore.h:168
#define TheSystem
Definition: RexxCore.h:188
#define TheKernel
Definition: RexxCore.h:187
#define TheNullText
Definition: RexxCore.h:211
#define IntegerFour
Definition: RexxCore.h:203
#define TheTableClass
Definition: RexxCore.h:172
#define TheRexxTextClass
Definition: RexxCore.h:180
#define IntegerFive
Definition: RexxCore.h:204
#define TheNullArray
Definition: RexxCore.h:193
#define IntegerOne
Definition: RexxCore.h:200
#define TheEnvironment
Definition: RexxCore.h:183
#define TheClassClass
Definition: RexxCore.h:156
#define TheStringClass
Definition: RexxCore.h:169
#define IntegerEight
Definition: RexxCore.h:207
#define TheSupplierClass
Definition: RexxCore.h:171
#define TheCommonRetrievers
Definition: RexxCore.h:186
#define TheTrueObject
Definition: RexxCore.h:196
#define TheRelationClass
Definition: RexxCore.h:174
#define TheIntegerClass
Definition: RexxCore.h:158
#define TheListClass
Definition: RexxCore.h:159
#define TheNullPointer
Definition: RexxCore.h:197
#define TheBufferClass
Definition: RexxCore.h:176
#define TheFunctionsDirectory
Definition: RexxCore.h:185
#define IntegerTwo
Definition: RexxCore.h:201
#define IntegerSix
Definition: RexxCore.h:205
#define TheRexxContextClass
Definition: RexxCore.h:164
#define TheArrayClass
Definition: RexxCore.h:155
#define ThePointerClass
Definition: RexxCore.h:175
#define TheDirectoryClass
Definition: RexxCore.h:157
#define TheNilObject
Definition: RexxCore.h:191
#define TheMessageClass
Definition: RexxCore.h:160
const int RC_OK
Definition: RexxCore.h:268
#define TheFalseObject
Definition: RexxCore.h:195
#define TheQueueClass
Definition: RexxCore.h:167
#define TheMethodClass
Definition: RexxCore.h:161
#define IntegerNine
Definition: RexxCore.h:208
#define TheRoutineClass
Definition: RexxCore.h:162
#define TheNumberStringClass
Definition: RexxCore.h:165
#define IntegerZero
Definition: RexxCore.h:199
#define TheIdentityTableClass
Definition: RexxCore.h:173
#define TheRexxBlockClass
Definition: RexxCore.h:179
#define TheMutableBufferClass
Definition: RexxCore.h:170
#define IntegerMinusOne
Definition: RexxCore.h:209
#define VARIABLE_SUPER
#define VARIABLE_RESULT
#define VARIABLE_RC
#define VARIABLE_SIGL
#define VARIABLE_SELF
RexxMemory memoryObject
Definition: RexxMemory.cpp:86
#define CLASS_CREATE(name, id, className)
Definition: RexxMemory.hpp:503
#define kernel_public(name, object, dir)
RexxString * new_string(const char *s, stringsize_t l)
RexxText * new_text(RexxString *s)
Definition: TextClass.hpp:105
static void init()
static void returnActivity(RexxActivity *)
static RexxActivity *volatile currentActivity
PackageClass * getPackage()
RexxArray * source()
static CPPCode * resolveExportedMethod(const char *, PCPPM targetMethod, size_t argcount, bool passNamedArgs)
Definition: CPPCode.cpp:1218
static void logicError(const char *desc, const char *info1=NULL, size_t info2=0)
static void init()
Definition: Interpreter.cpp:77
static RexxString * getVersionNumber()
Definition: Version.cpp:52
static InterpreterInstance * createInterpreterInstance()
Definition: Interpreter.hpp:95
RexxString * getSourceLineRexx(RexxObject *)
RexxObject * loadLibrary(RexxString *name)
RexxObject * setEncodingRexx(RexxObject *e)
RexxObject * addClass(RexxString *name, RexxClass *clazz)
RexxObject * findProgramRexx(RexxObject *name)
RexxArray * getImportedPackages()
RexxObject * form()
RexxObject * addPublicClass(RexxString *name, RexxClass *clazz)
RexxObject * trace()
RexxObject * digits()
RexxDirectory * getImportedRoutines()
RexxClass * findClassRexx(RexxString *name)
RexxDirectory * getRoutines()
RexxDirectory * getMethods()
PackageClass * loadPackage(RexxString *name, RexxArray *source)
RexxObject * addPackage(PackageClass *package)
RoutineClass * findRoutineRexx(RexxString *name)
RexxObject * fuzz()
RexxDirectory * getClasses()
RexxObject * addRoutine(RexxString *name, RoutineClass *routine)
RexxDirectory * getPublicClasses()
RexxString * getName()
PackageClass * newRexx(RexxObject **init_args, size_t argCount, size_t named_argCount)
RexxArray * getSource()
RexxInteger * getSourceSize()
RexxObject * setSecurityManager(RexxObject *)
RexxObject * addPublicRoutine(RexxString *name, RoutineClass *routine)
RexxDirectory * getImportedClasses()
static void createInstance()
RexxDirectory * getPublicRoutines()
static void initialize()
static void initializeThreadContext()
wholenumber_t error()
void createNewActivationStack()
RexxString * resolveProgramName(RexxString *, RexxString *, RexxString *)
RexxObject * lastItem()
RexxObject * isEmpty()
Definition: ArrayClass.cpp:301
RexxObject * getRexx(RexxObject **, size_t, size_t)
Definition: ArrayClass.cpp:506
static void createInstance()
Definition: ArrayClass.cpp:95
RexxObject * insertRexx(RexxObject *_value, RexxObject *index)
Definition: ArrayClass.cpp:344
RexxObject * of(RexxObject **, size_t, size_t)
RexxObject * supplier(RexxObject *maxItems=OREF_NULL)
Definition: ArrayClass.cpp:786
RexxObject * firstRexx()
RexxInteger * sizeRexx()
RexxObject * putRexx(RexxObject **, size_t, size_t)
Definition: ArrayClass.cpp:228
RexxObject * newRexx(RexxObject **, size_t, size_t)
RexxArray * allItems(RexxObject *maxItems=OREF_NULL)
RexxObject * nextRexx(RexxObject **, size_t, size_t)
RexxArray * allIndexes(RexxObject *maxIndexes=OREF_NULL)
RexxObject * deleteRexx(RexxObject *index)
Definition: ArrayClass.cpp:385
RexxObject * appendRexx(RexxObject *)
Definition: ArrayClass.cpp:314
RexxObject * itemsRexx()
Definition: ArrayClass.cpp:685
RexxObject * empty()
Definition: ArrayClass.cpp:273
RexxObject * index(RexxObject *)
RexxArray * stableSortRexx()
RexxObject * removeItem(RexxObject *)
RexxObject * hasItem(RexxObject *)
RexxObject * removeRexx(RexxObject **, size_t, size_t)
Definition: ArrayClass.cpp:626
RexxObject * lastRexx()
RexxObject * fill(RexxObject *)
Definition: ArrayClass.cpp:253
RexxObject * getDimensions()
Definition: ArrayClass.cpp:714
RexxArray * stableSortWithRexx(RexxObject *comparator)
RexxObject * dimension(RexxObject *)
Definition: ArrayClass.cpp:729
RexxObject * hasIndexRexx(RexxObject **, size_t, size_t)
RexxObject * sectionRexx(RexxObject *, RexxObject *)
RexxObject * previousRexx(RexxObject **, size_t, size_t)
RexxString * toString(RexxString *, RexxString *)
RexxObject * firstItem()
RexxObject * define(RexxString *, RexxMethod *)
RexxString * getKind()
Definition: BlockClass.hpp:105
static void createInstance()
Definition: BlockClass.cpp:189
RexxObject * newRexx(RexxObject **args, size_t argc, size_t named_argc)
Definition: BlockClass.cpp:254
RexxObject * getVariables()
Definition: BlockClass.hpp:104
RexxObject * getRawExecutable()
Definition: BlockClass.hpp:106
PackageClass * getPackage()
Definition: BlockClass.hpp:103
RexxObject * copyRexx()
Definition: BlockClass.cpp:268
RexxArray * getSource()
Definition: BlockClass.hpp:102
static void createInstance()
Definition: BufferClass.cpp:54
RexxObject * newRexx(RexxObject **args, size_t argc, size_t named_argc)
RexxClass * newRexx(RexxObject **args, size_t argCount, size_t named_argCount)
RexxObject * deleteMethod(RexxString *)
Definition: ClassClass.cpp:821
RexxClass * getSuperClass()
Definition: ClassClass.cpp:333
RexxClass * subclassRexx(RexxString *, RexxClass *, RexxObject *)
PackageClass * getPackage()
RexxMethod * method(RexxString *)
Definition: ClassClass.cpp:850
RexxClass * getMetaClass()
Definition: ClassClass.cpp:309
RexxObject * inherit(RexxClass *, RexxClass *)
RexxString * defaultNameRexx()
RexxObject * isMetaClassRexx()
Definition: ClassClass.cpp:267
RexxObject * notEqual(RexxObject *)
Definition: ClassClass.cpp:231
RexxArray * getSubClasses()
Definition: ClassClass.cpp:358
RexxClass * getBaseClass()
Definition: ClassClass.cpp:301
RexxObject * defineMethod(RexxString *, RexxMethod *)
Definition: ClassClass.cpp:653
RexxArray * getSuperClasses()
Definition: ClassClass.cpp:348
RexxObject * isAbstractRexx()
Definition: ClassClass.cpp:278
RexxObject * isSubclassOf(RexxClass *other)
RexxObject * enhanced(RexxObject **, size_t, size_t)
RexxInteger * queryMixinClass()
Definition: ClassClass.cpp:253
RexxObject * equal(RexxObject *)
Definition: ClassClass.cpp:209
RexxObject * defineMethods(RexxTable *)
Definition: ClassClass.cpp:725
RexxObject * setRexxDefined()
Definition: ClassClass.cpp:292
RexxObject * defineClassMethod(RexxString *method_name, RexxMethod *newMethod)
Definition: ClassClass.cpp:772
RexxSupplier * methods(RexxClass *)
Definition: ClassClass.cpp:869
RexxClass * mixinClassRexx(RexxString *, RexxClass *, RexxObject *)
RexxObject * strictEqual(RexxObject *)
Definition: ClassClass.cpp:172
RexxObject * uninherit(RexxClass *)
RexxString * getId()
Definition: ClassClass.cpp:284
RexxObject * getFuzz()
RexxObject * copyRexx()
RexxObject * getDigits()
RexxObject * getForm()
RexxObject * getArgs()
RexxObject * getLine()
RexxObject * setArgs(RexxObject *, RexxObject **, size_t)
RexxObject * getRS()
PackageClass * getPackage()
RexxObject * getName()
RexxObject * newRexx(RexxObject **args, size_t argc, size_t named_argc)
static void createInstance()
RexxObject * getExecutable()
RexxObject * getDigitsPropagate()
RexxObject * getVariables()
RexxObject * getParentContextObject()
RexxObject * getStackFrames()
RexxObject * getCondition()
RexxObject * getNamedArgs()
RexxObject * hasItem(RexxObject *)
RexxArray * allIndexes()
RexxObject * setMethod(RexxString *, RexxMethod *)
RexxObject * indexRexx(RexxObject *)
RexxArray * allItems()
RexxObject * setEntry(RexxString *, RexxObject *)
RexxObject * removeItem(RexxObject *)
RexxObject * hasEntry(RexxString *)
RexxObject * put(RexxObject *, RexxString *)
RexxObject * isEmpty()
RexxObject * newRexx(RexxObject **init_args, size_t, size_t)
RexxSupplier * supplier()
RexxObject * empty()
RexxObject * atRexx(RexxString *)
RexxObject * entryRexx(RexxString *)
RexxObject * itemsRexx()
static void createInstance()
RexxObject * hasIndex(RexxString *)
RexxObject * removeRexx(RexxString *)
RexxObject * removeRexx(RexxObject *)
RexxObject * getRexx(RexxObject *)
RexxObject * hasItemRexx(RexxObject *)
RexxObject * allAt(RexxObject *)
RexxObject * indexRexx(RexxObject *value)
RexxSupplier * supplier()
RexxObject * hasIndexRexx(RexxObject *)
RexxObject * putRexx(RexxObject *, RexxObject *)
RexxObject * removeItemRexx(RexxObject *value)
RexxObject * newRexx(RexxObject **, size_t, size_t)
static void createInstance()
RexxInteger * isLessOrEqual(RexxObject *)
RexxObject * xorOp(RexxObject *)
RexxInteger * equal(RexxObject *)
RexxInteger * isLessThan(RexxObject *)
RexxInteger * strictGreaterOrEqual(RexxObject *)
RexxInteger * isGreaterThan(RexxObject *)
RexxInteger * notEqual(RexxObject *)
RexxObject * power(RexxObject *)
RexxObject * plus(RexxInteger *)
RexxObject * remainder(RexxInteger *)
RexxObject * minus(RexxInteger *)
RexxObject * notOp()
RexxObject * ceiling()
RexxObject * Max(RexxObject **, size_t, size_t)
RexxObject * round()
RexxObject * d2x(RexxObject *)
RexxInteger * strictGreaterThan(RexxObject *)
RexxInteger * strictLessOrEqual(RexxObject *)
RexxInteger * strictLessThan(RexxObject *)
RexxObject * trunc(RexxObject *)
RexxObject * Min(RexxObject **, size_t, size_t)
RexxInteger * isGreaterOrEqual(RexxObject *)
RexxObject * d2c(RexxObject *)
RexxClass * classObject()
RexxObject * andOp(RexxObject *)
RexxObject * multiply(RexxInteger *)
RexxInteger * strictNotEqual(RexxObject *)
RexxObject * orOp(RexxObject *)
RexxObject * hashCode()
RexxObject * sign()
RexxObject * abs()
RexxObject * format(RexxObject *, RexxObject *, RexxObject *, RexxObject *)
RexxInteger * strictEqual(RexxObject *)
RexxObject * integerDivide(RexxInteger *)
RexxObject * floor()
RexxObject * divide(RexxInteger *)
RexxBehaviour * behaviour
RexxObject * lastRexx()
Definition: ListClass.cpp:728
RexxObject * append(RexxObject *)
Definition: ListClass.cpp:538
RexxObject * value(RexxObject *)
Definition: ListClass.cpp:246
RexxArray * allIndexes()
Definition: ListClass.cpp:938
RexxArray * allItems()
Definition: ListClass.cpp:888
RexxObject * next(RexxObject *)
Definition: ListClass.cpp:744
RexxObject * hasIndex(RexxObject *)
Definition: ListClass.cpp:845
RexxObject * lastItem()
Definition: ListClass.cpp:697
RexxObject * previous(RexxObject *)
Definition: ListClass.cpp:769
RexxObject * removeItem(RexxObject *)
Definition: ListClass.cpp:1023
RexxList * classOf(RexxObject **, size_t, size_t)
Definition: ListClass.cpp:1261
RexxObject * hasItem(RexxObject *)
Definition: ListClass.cpp:994
RexxObject * put(RexxObject *, RexxObject *)
Definition: ListClass.cpp:289
RexxObject * itemsRexx()
Definition: ListClass.cpp:1148
RexxObject * index(RexxObject *)
Definition: ListClass.cpp:964
RexxObject * firstRexx()
Definition: ListClass.cpp:712
RexxObject * remove(RexxObject *)
Definition: ListClass.cpp:630
RexxList * newRexx(RexxObject **, size_t, size_t)
Definition: ListClass.cpp:1226
RexxObject * isEmpty()
Definition: ListClass.cpp:926
RexxObject * section(RexxObject *, RexxObject *)
Definition: ListClass.cpp:309
RexxObject * empty()
Definition: ListClass.cpp:908
static void createInstance()
Definition: ListClass.cpp:60
RexxObject * insertRexx(RexxObject *, RexxObject *)
Definition: ListClass.cpp:518
RexxObject * firstItem()
Definition: ListClass.cpp:682
RexxSupplier * supplier()
Definition: ListClass.cpp:1131
RexxDirectory * local()
Definition: RexxMisc.cpp:63
static void definePrivateKernelMethod(const char *name, RexxBehaviour *behaviour, PCPPM entryPoint, size_t arguments, bool named_arguments=false)
Definition: Setup.cpp:124
static void createRexxPackage()
Definition: Setup.cpp:205
void saveImage(const char *imageTarget)
static void createStrings()
Definition: GlobalNames.cpp:47
static void createImage(const char *imageTarget)
Definition: Setup.cpp:219
void setMarkTable(RexxTable *marktable)
Definition: RexxMemory.hpp:225
static void completeSystemClass(const char *name, RexxClass *classObj)
Definition: Setup.cpp:173
static void defineKernelMethod(const char *name, RexxBehaviour *behaviour, PCPPM entryPoint, size_t arguments, bool named_arguments=false)
Definition: Setup.cpp:94
static PackageClass * rexxPackage
Definition: RexxMemory.hpp:314
static void addToSystem(const char *name, RexxInternalObject *classObj)
Definition: Setup.cpp:148
static void defineProtectedKernelMethod(const char *name, RexxBehaviour *behaviour, PCPPM entryPoint, size_t arguments, bool named_arguments=false)
Definition: Setup.cpp:108
static RexxString * getGlobalName(const char *value)
void enableOrefChecks()
Definition: RexxMemory.hpp:268
static void create()
RexxString * messageName()
RexxObject * completed()
RexxObject * messageTarget()
static void createInstance()
RexxObject * result()
RexxObject * newRexx(RexxObject **, size_t, size_t)
RexxObject * notify(RexxMessage *)
RexxObject * start(RexxObject *)
RexxArray * arguments()
RexxObject * send(RexxObject *)
RexxObject * hasError()
RexxObject * errorCondition()
RexxMethod * newRexx(RexxObject **, size_t, size_t)
static void createInstance()
Definition: MethodClass.cpp:74
RexxObject * isPrivateRexx()
RexxObject * setPrivateRexx()
void setPrivate()
RexxObject * isAttributeRexx()
RexxObject * setUnguardedRexx()
RexxObject * setProtectedRexx()
RexxObject * setSecurityManager(RexxObject *)
RexxObject * isProtectedRexx()
RexxObject * isAbstractRexx()
RexxMethod * newFileRexx(RexxString *)
RexxObject * getScopeRexx()
RexxObject * isGuardedRexx()
RexxMethod * loadExternalMethod(RexxString *name, RexxString *descriptor)
RexxObject * isPackageRexx()
RexxObject * isConstantRexx()
void setProtected()
RexxObject * setGuardedRexx()
RexxMutableBuffer * newRexx(RexxObject **, size_t, size_t)
RexxInteger * isASCIIRexx()
RexxInteger * caselessLastPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
RexxMutableBuffer * caselessChangeStr(RexxString *needle, RexxString *newNeedle, RexxInteger *countArg)
RexxMutableBuffer * translate(RexxString *tableo, RexxString *tablei, RexxString *pad, RexxInteger *, RexxInteger *)
RexxString * subchar(RexxInteger *startPosition)
RexxMutableBuffer * mydelete(RexxObject *, RexxObject *)
RexxArray * subWords(RexxInteger *, RexxInteger *)
RexxObject * setEncodingRexx(RexxObject *e)
RexxMutableBuffer * changeStr(RexxString *needle, RexxString *newNeedle, RexxInteger *countArg)
RexxInteger * verify(RexxString *, RexxString *, RexxInteger *, RexxInteger *)
RexxMutableBuffer * lower(RexxInteger *_start, RexxInteger *_length)
static void createInstance()
RexxMutableBuffer * append(RexxObject *)
RexxInteger * posRexx(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
RexxMutableBuffer * space(RexxInteger *space_count, RexxString *pad)
RexxMutableBuffer * delWord(RexxInteger *position, RexxInteger *plength)
RexxInteger * wordPos(RexxString *, RexxInteger *)
RexxInteger * caselessWordPos(RexxString *, RexxInteger *)
RexxInteger * caselessMatch(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_)
RexxMutableBuffer * upper(RexxInteger *_start, RexxInteger *_length)
RexxInteger * countStrRexx(RexxString *needle)
RexxInteger * matchChar(RexxInteger *position_, RexxString *matchSet)
RexxObject * lengthRexx()
RexxInteger * caselessCountStrRexx(RexxString *needle)
RexxInteger * getBufferSize()
RexxInteger * wordLength(RexxInteger *)
RexxInteger * wordIndex(RexxInteger *)
RexxObject * setBufferSize(RexxInteger *)
RexxInteger * lastPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
RexxMutableBuffer * overlay(RexxObject *, RexxObject *, RexxObject *, RexxObject *)
RexxInteger * caselessMatchChar(RexxInteger *position_, RexxString *matchSet)
RexxMutableBuffer * replaceAt(RexxObject *str, RexxObject *pos, RexxObject *len, RexxObject *pad)
RexxString * subWord(RexxInteger *, RexxInteger *)
RexxInteger * match(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_)
RexxInteger * caselessPos(RexxString *needle, RexxInteger *_start, RexxInteger *_range)
RexxString * word(RexxInteger *)
RexxString * substr(RexxInteger *startPosition, RexxInteger *len, RexxString *pad)
RexxMutableBuffer * insert(RexxObject *, RexxObject *, RexxObject *, RexxObject *)
RexxInteger * strictGreaterThan(RexxObject *)
RexxObject * xorOp(RexxObject *)
RexxInteger * isLessThan(RexxObject *)
RexxInteger * strictEqual(RexxObject *)
RexxInteger * strictLessThan(RexxObject *)
RexxInteger * isGreaterThan(RexxObject *)
RexxNumberString * multiply(RexxObject *)
RexxNumberString * minus(RexxObject *)
RexxNumberString * Max(RexxObject **, size_t, size_t)
static void createInstance()
RexxString * formatRexx(RexxObject *, RexxObject *, RexxObject *, RexxObject *)
RexxClass * classObject()
RexxInteger * Sign()
RexxNumberString * Min(RexxObject **, size_t, size_t)
RexxNumberString * abs()
RexxString * d2c(RexxObject *)
RexxInteger * strictLessOrEqual(RexxObject *)
RexxObject * ceiling()
RexxObject * hashCode()
RexxObject * andOp(RexxObject *)
RexxNumberString * integerDivide(RexxObject *)
RexxObject * orOp(RexxObject *)
RexxObject * trunc(RexxObject *)
RexxInteger * strictNotEqual(RexxObject *)
RexxNumberString * power(RexxObject *)
RexxNumberString * remainder(RexxObject *)
RexxInteger * strictGreaterOrEqual(RexxObject *)
RexxInteger * equal(RexxObject *)
RexxInteger * isGreaterOrEqual(RexxObject *)
RexxString * d2x(RexxObject *)
RexxInteger * isLessOrEqual(RexxObject *)
RexxNumberString * plus(RexxObject *)
RexxNumberString * divide(RexxObject *)
RexxInteger * notEqual(RexxObject *)
RexxObject * isInstanceOfRexx(RexxClass *)
RexxString * stringRexx()
RexxString * defaultNameRexx()
RexxMessage * start(RexxObject **, size_t, size_t)
RexxString * objectName()
RexxObject * requestRexx(RexxString *)
RexxObject * dynamicTargetRexx(RexxObject **arguments, size_t argCount, size_t named_argCount)
RexxObject * sendWith(RexxObject *, RexxArray *, RexxObject **, size_t)
RexxString * concatRexx(RexxObject *)
RexxObject * unknownRexx(RexxString *, RexxArray *, RexxObject **, size_t)
RexxObject * hasMethodRexx(RexxString *)
RexxMethod * instanceMethodRexx(RexxString *)
RexxObject * unsetMethod(RexxString *)
static void createInstance()
Definition: ObjectClass.cpp:73
RexxObject * strictEqual(RexxObject *)
RexxMessage * startWith(RexxObject *, RexxArray *, RexxObject **, size_t)
RexxObject * setMethod(RexxString *, RexxMethod *, RexxString *a=OREF_NULL)
RexxString * makeString()
RexxObject * send(RexxObject **, size_t, size_t)
RexxObject * objectNameEquals(RexxObject *)
RexxObject * equal(RexxObject *)
RexxObject * isNilRexx()
RexxObject * notEqual(RexxObject *other)
RexxInteger * identityHashRexx()
RexxObject * makeStringRexx()
RexxObject * newRexx(RexxObject **arguments, size_t argCount, size_t named_argCount)
RexxString * concatBlank(RexxObject *)
RexxSupplier * instanceMethodsRexx(RexxClass *)
RexxClass * classObject()
RexxObject * copyRexx()
RexxObject * run(RexxObject **, size_t, size_t)
RexxObject * makeArrayRexx()
RexxObject * strictNotEqual(RexxObject *other)
RexxObject * hashCode()
RexxObject * init()
RexxObject * notEqual(RexxObject *other)
static void createInstance()
RexxObject * newRexx(RexxObject **args, size_t argc, size_t named_argc)
RexxObject * equal(RexxObject *)
RexxObject * isNull()
RexxObject * next(RexxObject *)
Definition: QueueClass.cpp:427
RexxObject * insert(RexxObject *, RexxObject *)
Definition: QueueClass.cpp:211
RexxObject * peek()
Definition: QueueClass.cpp:317
RexxObject * remove(RexxObject *)
Definition: QueueClass.cpp:294
RexxObject * lastRexx()
Definition: QueueClass.cpp:410
static void createInstance()
Definition: QueueClass.cpp:58
RexxObject * index(RexxObject *)
Definition: QueueClass.cpp:370
RexxObject * firstRexx()
Definition: QueueClass.cpp:393
RexxObject * pushRexx(RexxObject *)
Definition: QueueClass.cpp:78
RexxObject * hasindex(RexxObject *)
Definition: QueueClass.cpp:305
RexxObject * supplier()
Definition: QueueClass.cpp:326
RexxObject * at(RexxObject *)
Definition: QueueClass.cpp:181
RexxObject * previous(RexxObject *)
Definition: QueueClass.cpp:453
RexxObject * section(RexxObject *, RexxObject *)
Definition: QueueClass.cpp:512
RexxObject * pullRexx()
Definition: QueueClass.cpp:64
RexxArray * allIndexes()
Definition: QueueClass.cpp:345
RexxObject * put(RexxObject *, RexxObject *)
Definition: QueueClass.cpp:162
RexxObject * newRexx(RexxObject **, size_t, size_t)
Definition: QueueClass.cpp:586
RexxQueue * ofRexx(RexxObject **, size_t, size_t)
Definition: QueueClass.cpp:611
RexxObject * append(RexxObject *)
Definition: QueueClass.cpp:99
RexxObject * queueRexx(RexxObject *)
Definition: QueueClass.cpp:109
RexxObject * hasItem(RexxObject *, RexxObject *)
static void createInstance()
RexxObject * removeItemRexx(RexxObject *, RexxObject *)
RexxObject * removeAll(RexxObject *)
RexxObject * put(RexxObject *, RexxObject *)
RexxObject * allIndex(RexxObject *)
RexxObject * newRexx(RexxObject **, size_t, size_t)
RexxObject * itemsRexx()
Definition: StemClass.cpp:384
RexxObject * remove(RexxObject **, size_t, size_t)
Definition: StemClass.cpp:296
RexxObject * newRexx(RexxObject **, size_t, size_t)
Definition: StemClass.cpp:538
RexxObject * isEmpty()
Definition: StemClass.cpp:999
static void createInstance()
Definition: StemClass.cpp:63
RexxObject * index(RexxObject *)
Definition: StemClass.cpp:368
RexxArray * allItems()
Definition: StemClass.cpp:913
RexxSupplier * supplier()
Definition: StemClass.cpp:1023
RexxObject * bracketEqual(RexxObject **, size_t, size_t)
Definition: StemClass.cpp:390
RexxObject * empty()
Definition: StemClass.cpp:987
RexxObject * bracket(RexxObject **, size_t, size_t)
Definition: StemClass.cpp:236
RexxDirectory * toDirectory()
Definition: StemClass.cpp:1066
RexxObject * removeItem(RexxObject *)
Definition: StemClass.cpp:345
RexxObject * request(RexxString *)
Definition: StemClass.cpp:509
RexxObject * hasIndex(RexxObject **, size_t, size_t)
Definition: StemClass.cpp:265
RexxObject * hasItem(RexxObject *)
Definition: StemClass.cpp:330
RexxArray * allIndexes()
Definition: StemClass.cpp:1011
RexxInteger * isLessOrEqual(RexxObject *)
RexxArray * subWords(RexxInteger *, RexxInteger *)
RexxInteger * isLessThan(RexxObject *)
RexxString * concatRexx(RexxObject *)
static void createInstance()
Definition: StringClass.cpp:71
RexxInteger * strictEqual(RexxObject *)
RexxString * c2x()
RexxInteger * caselessEquals(RexxString *other)
RexxObject * trunc(RexxInteger *decimals)
RexxString * changeStr(RexxString *, RexxString *, RexxInteger *)
RexxInteger * caselessLastPosRexx(RexxString *, RexxInteger *, RexxInteger *)
RexxObject * xorOp(RexxObject *)
RexxString * translate(RexxString *, RexxString *, RexxString *, RexxInteger *, RexxInteger *)
RexxObject * Min(RexxObject **args, size_t argCount, size_t named_argCount)
RexxString * bitOr(RexxString *, RexxString *)
RexxInteger * strictGreaterThan(RexxObject *)
RexxString * delstr(RexxInteger *, RexxInteger *)
RexxString * upperRexx(RexxInteger *, RexxInteger *)
RexxString * bitAnd(RexxString *, RexxString *)
RexxInteger * wordIndex(RexxInteger *)
RexxInteger * notEqual(RexxObject *)
RexxInteger * strictLessOrEqual(RexxObject *)
RexxString * overlay(RexxString *, RexxInteger *, RexxInteger *, RexxString *)
RexxObject * lengthRexx()
RexxInteger * abbrev(RexxString *, RexxInteger *)
RexxObject * format(RexxObject *Integers, RexxObject *Decimals, RexxObject *MathExp, RexxObject *ExpTrigger)
RexxString * b2x()
RexxInteger * caselessMatchChar(RexxInteger *position_, RexxString *matchSet)
RexxString * subWord(RexxInteger *, RexxInteger *)
RexxInteger * verify(RexxString *, RexxString *, RexxInteger *, RexxInteger *)
RexxInteger * caselessMatch(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_)
RexxString * caselessChangeStr(RexxString *, RexxString *, RexxInteger *)
RexxString * space(RexxInteger *, RexxString *)
RexxString * encodeBase64()
RexxInteger * caselessPosRexx(RexxString *, RexxInteger *, RexxInteger *)
RexxObject * integerDivide(RexxObject *right)
RexxObject * remainder(RexxObject *right)
RexxString * d2x(RexxInteger *)
RexxObject * Max(RexxObject **args, size_t argCount, size_t named_argCount)
RexxObject * ceiling()
RexxInteger * match(RexxInteger *start_, RexxString *other, RexxInteger *offset_, RexxInteger *len_)
RexxString * concatBlank(RexxObject *)
RexxInteger * caselessCountStrRexx(RexxString *)
RexxString * d2c(RexxInteger *)
RexxInteger * lastPosRexx(RexxString *, RexxInteger *, RexxInteger *)
RexxObject * setTextRexx(RexxObject *t)
RexxInteger * compareToRexx(RexxString *other, RexxInteger *start_, RexxInteger *len_)
RexxInteger * compare(RexxString *, RexxString *)
RexxObject * plus(RexxObject *right)
RexxInteger * caselessCompare(RexxString *, RexxString *)
RexxInteger * strictLessThan(RexxObject *)
RexxInteger * strictGreaterOrEqual(RexxObject *)
RexxString * bitXor(RexxString *, RexxString *)
RexxString * word(RexxInteger *)
RexxString * x2d(RexxInteger *)
RexxString * left(RexxInteger *, RexxString *)
RexxInteger * words()
RexxInteger * matchChar(RexxInteger *position_, RexxString *matchSet)
RexxObject * notOp()
RexxInteger * equal(RexxObject *)
RexxObject * multiply(RexxObject *right)
RexxString * subchar(RexxInteger *)
RexxString * substr(RexxInteger *, RexxInteger *, RexxString *)
RexxString * replaceAt(RexxString *, RexxInteger *, RexxInteger *, RexxString *)
RexxObject * dataType(RexxString *)
RexxObject * setEncodingRexx(RexxObject *e)
RexxObject * andOp(RexxObject *)
RexxInteger * caselessWordPos(RexxString *, RexxInteger *)
RexxString * c2d(RexxInteger *)
RexxInteger * caselessCompareToRexx(RexxString *other, RexxInteger *start_, RexxInteger *len_)
RexxObject * round()
RexxInteger * posRexx(RexxString *, RexxInteger *, RexxInteger *)
RexxInteger * wordLength(RexxInteger *)
RexxString * copies(RexxInteger *)
RexxString * right(RexxInteger *, RexxString *)
RexxString * x2b()
RexxString * x2c()
RexxString * reverse()
RexxInteger * isASCIIRexx()
RexxInteger * countStrRexx(RexxString *)
RexxInteger * wordPos(RexxString *, RexxInteger *)
RexxObject * floor()
RexxInteger * caselessAbbrev(RexxString *, RexxInteger *)
RexxInteger * isGreaterOrEqual(RexxObject *)
RexxObject * orOp(RexxObject *)
RexxString * newRexx(RexxObject **, size_t, size_t)
RexxObject * divide(RexxObject *right)
RexxString * insert(RexxString *, RexxInteger *, RexxInteger *, RexxString *)
RexxString * strip(RexxString *, RexxString *)
RexxString * delWord(RexxInteger *, RexxInteger *)
RexxInteger * equals(RexxString *other)
RexxObject * abs()
RexxInteger * isGreaterThan(RexxObject *)
RexxObject * power(RexxObject *right)
RexxString * decodeBase64()
RexxString * lowerRexx(RexxInteger *, RexxInteger *)
RexxInteger * strictNotEqual(RexxObject *)
RexxString * center(RexxInteger *, RexxString *)
RexxObject * sign()
RexxObject * minus(RexxObject *right)
RexxObject * newRexx(RexxObject **, size_t, size_t)
RexxObject * next()
RexxInteger * available()
RexxObject * value()
RexxObject * index()
RexxObject * initRexx(RexxArray *values, RexxArray *indexes)
static void createInstance()
RexxObject * newRexx(RexxObject **, size_t, size_t)
Definition: TableClass.cpp:187
static void createInstance()
Definition: TableClass.cpp:58
RexxObject * itemsRexx()
Definition: TableClass.cpp:147
static void createInstance()
Definition: TextClass.cpp:56
RexxObject * newRexx(RexxObject **, size_t, size_t)
Definition: TextClass.cpp:126
RexxObject * callRexx(RexxObject **, size_t, size_t)
RexxObject * setSecurityManager(RexxObject *)
RoutineClass * loadExternalRoutine(RexxString *name, RexxString *descriptor)
RexxObject * callWithRexx(RexxArray *, RexxObject **, size_t)
RoutineClass * newRexx(RexxObject **, size_t, size_t)
RoutineClass * newFileRexx(RexxString *)
static void createInstance()
RexxString * getType()
RexxObject * newRexx(RexxObject **args, size_t argc, size_t named_argc)
RexxString * getTraceLine()
RexxArray * getArguments()
static void createInstance()
RexxObject * getLine()
RexxString * getName()
RexxObject * getTarget()
RexxObject * getExecutable()
static RexxString * getSystemName()
RexxObject * copyRexx()
Definition: TextClass.cpp:330
RexxObject * utf8proc_transform(RexxString *str, RexxObject **named_arglist, size_t named_argcount)
Definition: TextClass.cpp:681
RexxInteger * utf8proc_graphemeBreak(RexxArray *)
Definition: TextClass.cpp:410
RexxInteger * utf8proc_codepointCharWidth(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:573
RexxInteger * utf8proc_codepointCategory(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:422
RexxInteger * utf8proc_codepointBidiClass(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:473
RexxInteger * utf8proc_codepointToTitleSimple(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:639
static void createInstance()
Definition: TextClass.cpp:318
RexxString * utf8proc_version()
Definition: TextClass.cpp:393
RexxInteger * utf8proc_codepointControlBoundary(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:565
RexxInteger * utf8proc_codepointToUpperSimple(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:632
RexxInteger * utf8proc_codepointIsLower(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:646
RexxString * unialgo_version()
Definition: TextClass.cpp:800
RexxInteger * utf8proc_codepointToLowerSimple(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:625
RexxInteger * utf8proc_codepointDecompositionType(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:517
RexxInteger * systemIsLittleEndian()
Definition: TextClass.cpp:359
RexxInteger * utf8proc_codepointBoundClass(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:585
RexxInteger * utf8proc_codepointIsUpper(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:654
RexxInteger * utf8proc_codepointIgnorable(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:557
RexxInteger * utf8proc_codepointBidiMirrored(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:509
RexxObject * newRexx(RexxObject **, size_t, size_t)
Definition: TextClass.cpp:323
RexxInteger * utf8proc_codepointCombiningClass(RexxObject *rexxCodepoint)
Definition: TextClass.cpp:465
static void createInstance()
RexxObject * newRexx(RexxObject **args, size_t argc, size_t named_argc)
RexxObject * value()
void RexxEntry loader(RexxThreadContext *context)
Definition: rxsock.cpp:623
#define BASEIMAGELOAD