RexxCore.h
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 RexxCore.h */
40 /* */
41 /* Global Declarations */
42 /******************************************************************************/
43 
44 /******************************************************************************/
45 /* Globally required include files */
46 /******************************************************************************/
47 #ifndef RexxCore_INCLUDED
48 #define RexxCore_INCLUDED
49 
50 #include "oorexxapi.h" // this is the core to everything
51 
52 /* ANSI C definitions */
53 #include <stdio.h>
54 #include <stdarg.h>
55 #include <string.h>
56 #include <ctype.h>
57 #include <limits.h>
58 
59 /* REXX Library definitions */
60 #define OREF_NULL NULL /* definition of a NULL REXX object */
61 
63 
64 /******************************************************************************/
65 /* Literal definitions */
66 /******************************************************************************/
67 #include "RexxConstants.hpp"
68 
69 /******************************************************************************/
70 /* Kernel Internal Limits */
71 /******************************************************************************/
72 
73 const int MAX_ERROR_NUMBER = 99999; /* maximum error code number */
74 const int MAX_SYMBOL_LENGTH = 250; /* length of a symbol name */
75 
76 /******************************************************************************/
77 /* Defines for argument error reporting */
78 /******************************************************************************/
79 
80 const int ARG_ONE = 1;
81 const int ARG_TWO = 2;
82 const int ARG_THREE = 3;
83 const int ARG_FOUR = 4;
84 const int ARG_FIVE = 5;
85 const int ARG_SIX = 6;
86 const int ARG_SEVEN = 7;
87 const int ARG_EIGHT = 8;
88 const int ARG_NINE = 9;
89 const int ARG_TEN = 10;
90 
91 
92 /* Object Reference Assignment */
93 #ifndef CHECKOREFS
94 #define OrefSet(o,r,v) ((o)->isOldSpace() ? memoryObject.setOref((void *)&(r),(RexxObject *)v) : (RexxObject *)(r=v))
95 #else
96 #define OrefSet(o,r,v) memoryObject.checkSetOref((RexxObject *)o, (RexxObject **)&(r), (RexxObject *)v, __FILE__, __LINE__)
97 #endif
98 
99 
100 // forward declaration of commonly used classes
101 class RexxExpressionStack;
102 class RexxActivation;
103 class RexxObject;
104 class RexxClass;
105 class RexxDirectory;
106 class RexxIntegerClass;
107 class RexxArray;
108 class RexxMemory;
109 class RexxString;
110 
111 /******************************************************************************/
112 /* Change EXTERN definition if not already created by GDATA */
113 /******************************************************************************/
114 
115 #ifndef INITGLOBALPTR // if not the global, this is a NOP.
116 #define INITGLOBALPTR
117 #endif
118 #ifndef EXTERN
119 #define EXTERN extern /* turn into external definition */
120 #endif
121 
122 #ifndef EXTERNMEM
123 #define EXTERNMEM extern /* turn into external definition */
124 #endif
125 
126 /******************************************************************************/
127 /* Primitive Method Type Definition Macros */
128 /******************************************************************************/
129  /* following two are used by OKINIT */
130  /* to build the VFT Array. */
131 #define CLASS_EXTERNAL(b,c)
132 #define CLASS_INTERNAL(b,c)
133 
134 #define koper(name) RexxObject *name(RexxObject *);
135 
136 
137 /******************************************************************************/
138 /* Global Objects - General */
139 /******************************************************************************/
140 
141 
142 // this one is special, and is truly global.
143 EXTERNMEM RexxMemory memoryObject; /* memory object */
144 
145 // TODO: make these into statics inside classes.
146 
147 #define TheArrayClass RexxArray::classInstance
148 #define TheClassClass RexxClass::classInstance
149 #define TheDirectoryClass RexxDirectory::classInstance
150 #define TheIntegerClass RexxInteger::classInstance
151 #define TheListClass RexxList::classInstance
152 #define TheMessageClass RexxMessage::classInstance
153 #define TheMethodClass RexxMethod::classInstance
154 #define TheRoutineClass RoutineClass::classInstance
155 #define ThePackageClass PackageClass::classInstance
156 #define TheRexxContextClass RexxContext::classInstance
157 #define TheNumberStringClass RexxNumberString::classInstance
158 #define TheObjectClass RexxObject::classInstance
159 #define TheQueueClass RexxQueue::classInstance
160 #define TheStemClass RexxStem::classInstance
161 #define TheStringClass RexxString::classInstance
162 #define TheMutableBufferClass RexxMutableBuffer::classInstance
163 #define TheSupplierClass RexxSupplier::classInstance
164 #define TheTableClass RexxTable::classInstance
165 #define TheIdentityTableClass RexxIdentityTable::classInstance
166 #define TheRelationClass RexxRelation::classInstance
167 #define ThePointerClass RexxPointer::classInstance
168 #define TheBufferClass RexxBuffer::classInstance
169 #define TheWeakReferenceClass WeakReference::classInstance
170 #define TheStackFrameClass StackFrameClass::classInstance
171 #define TheRexxBlockClass RexxBlock::classInstance
172 #define TheRexxTextClass RexxText::classInstance
173 
174 #define TheEnvironment RexxMemory::environment
175 #define TheStaticRequires RexxMemory::staticRequires
176 #define TheFunctionsDirectory RexxMemory::functionsDir
177 #define TheCommonRetrievers RexxMemory::commonRetrievers
178 #define TheKernel RexxMemory::kernel
179 #define TheSystem RexxMemory::system
180 
181 #define TheNilObject RexxNilObject::nilObject
182 
183 #define TheNullArray RexxArray::nullArray
184 
185 #define TheFalseObject RexxInteger::falseObject
186 #define TheTrueObject RexxInteger::trueObject
187 #define TheNullPointer RexxPointer::nullPointer
188 
189 #define IntegerZero RexxInteger::integerZero
190 #define IntegerOne RexxInteger::integerOne
191 #define IntegerTwo RexxInteger::integerTwo
192 #define IntegerThree RexxInteger::integerThree
193 #define IntegerFour RexxInteger::integerFour
194 #define IntegerFive RexxInteger::integerFive
195 #define IntegerSix RexxInteger::integerSix
196 #define IntegerSeven RexxInteger::integerSeven
197 #define IntegerEight RexxInteger::integerEight
198 #define IntegerNine RexxInteger::integerNine
199 #define IntegerMinusOne RexxInteger::integerMinusOne
200 
201 #include "ClassTypeCodes.h"
202 
203 
204 
205 /******************************************************************************/
206 /* Utility Macros */
207 /******************************************************************************/
208 
209 #define RXROUNDUP(n,to) ((((n)+(to-1))/(to))*to)
210 #define rounddown(n,to) (((n)/(to))*to)
211 
212 #define isOfClass(t,r) (r)->isObjectType(The##t##Behaviour)
213 #define isOfClassType(t,r) (r)->isObjectType(T_##t)
214 
215 /******************************************************************************/
216 /* Utility Functions */
217 /******************************************************************************/
218 
219  /* find an environment symbol */
220 #define env_find(s) (TheEnvironment->entry(s))
221 
222 /******************************************************************************/
223 /* Thread constants */
224 /******************************************************************************/
225 
226 #define NO_THREAD -1
227 
228 /******************************************************************************/
229 /* Global Objects - Names */
230 /******************************************************************************/
231 #undef GLOBAL_NAME
232 #define GLOBAL_NAME(name, value) EXTERN RexxString * OREF_##name INITGLOBALPTR;
233 #include "GlobalNames.h"
234 
235 #include "ObjectClass.hpp" /* get real definition of Object */
236 
237  #include "TableClass.hpp"
238  #include "StackClass.hpp"
239  #include "RexxMemory.hpp" /* memory next, to get OrefSet */
240  #include "RexxBehaviour.hpp" /* now behaviours and */
241  #include "ClassClass.hpp" /* classes, which everything needs */
242  #include "RexxEnvelope.hpp" /* envelope is needed for flattens */
243  #include "RexxActivity.hpp" /* activity is needed for errors */
244  #include "NumberStringClass.hpp" /* added to make 'number_digits()' */
245  /* in 'ArrayClass.c' visible */
246 /******************************************************************************/
247 /* Method arguments special codes */
248 /******************************************************************************/
249 
250 const size_t A_COUNT = 127; /* pass arguments as pointer/count pair */
251 
252 /******************************************************************************/
253 /* Return codes */
254 /******************************************************************************/
255 
256 const int RC_OK = 0;
257 const int RC_LOGIC_ERROR = 2;
258 
259 const int POSITIVE = 1; /* integer must be positive */
260 const int NONNEGATIVE = 2; /* integer must be non-negative */
261 const int WHOLE = 3; /* integer must be whole */
262 
263 
264 /******************************************************************************/
265 /* Argument helpers */
266 /******************************************************************************/
267 
268 // some very common class tests
269 inline bool isString(RexxObject *o) { return isOfClass(String, o); }
270 inline bool isInteger(RexxObject *o) { return isOfClass(Integer, o); }
271 inline bool isNumberString(RexxObject *o) { return isOfClass(NumberString, o); }
272 inline bool isPolymorphicString(RexxObject *o) { return isInteger(o) || isNumberString(o) || isString(o); }
273 inline bool isArray(RexxObject *o) { return isOfClass(Array, o); }
274 inline bool isStem(RexxObject *o) { return isOfClass(Stem, o); }
275 inline bool isActivation(RexxObject *o) { return isOfClass(Activation, o); }
276 inline bool isMethod(RexxObject *o) { return isOfClass(Method, o); }
277 
278 #include "ActivityManager.hpp"
279 
280 /* The next macro is specifically for REQUESTing a STRING, since there are */
281 /* four primitive classes that are equivalents for strings. It will trap on */
282 /* OREF_NULL. */
284 {
285  return (isOfClass(String, object) ? (RexxString *)object : (object)->requestString());
286 }
287 
288 
289 // The next routine checks for required arguments and raises a missing argument
290 // error for the given position.
291 inline void requiredArgument(RexxObject *object, RexxString *kind, size_t position)
292 {
293  if (object == OREF_NULL) /* missing argument? */
294  {
295  missingArgument(kind, position); /* raise an error */
296  }
297 }
298 
299 
300 /* The next routine is specifically for REQUESTing a STRING needed as a method*/
301 /* argument. This raises an error if the object cannot be converted to a */
302 /* string value. */
303 inline RexxString * stringArgument(RexxObject *object, RexxString *kind, size_t position)
304 {
305  if (object == OREF_NULL) /* missing argument? */
306  {
307  missingArgument(kind, position); /* raise an error */
308  }
309  /* force to a string value */
310  return object->requiredString(kind, position);
311 }
312 
313 
314 /* The next routine is specifically for REQUESTing a STRING needed as a method*/
315 /* argument. This raises an error if the object cannot be converted to a */
316 /* string value. */
317 inline RexxString * stringArgument(RexxObject *object, RexxString *kind, const char *name)
318 {
319  if (object == OREF_NULL) /* missing argument? */
320  {
322  }
323  /* force to a string value */
324  return object->requiredString(kind, name);
325 }
326 
327 
329 {
330  return (o == OREF_NULL ? d : stringArgument(o, kind, p));
331 }
332 
333 
334 inline RexxString *optionalStringArgument(RexxObject *o, RexxString *d, RexxString *kind, const char *p)
335 {
336  return (o == OREF_NULL ? d : stringArgument(o, kind, p));
337 }
338 
339 
340 // resides in the string class util
341 size_t lengthArgument(RexxObject *o, size_t p);
342 
343 inline size_t optionalLengthArgument(RexxObject *o, size_t d, size_t p)
344 {
345  return (o == OREF_NULL ? d : lengthArgument(o, p));
346 }
347 
348 #ifdef STRONG_TYPES
350 {
351  return sizeB_v(optionalLengthArgument(o, size_v(d), size_v(p)));
352 }
353 
355 {
356  return sizeC_v(optionalLengthArgument(o, size_v(d), size_v(p)));
357 }
358 #endif
359 
360 // resides in the string class util
361 size_t positionArgument(RexxObject *o, size_t p);
362 
363 inline size_t optionalPositionArgument(RexxObject *o, size_t d, size_t p)
364 {
365  return (o == OREF_NULL ? d : positionArgument(o, p));
366 }
367 
368 #ifdef STRONG_TYPES
370 {
371  return sizeB_v(optionalPositionArgument(o, size_v(d), size_v(p)));
372 }
373 
375 {
376  return sizeC_v(optionalPositionArgument(o, size_v(d), size_v(p)));
377 }
378 #endif
379 
380 codepoint_t padArgument(RexxObject *o, size_t p);
381 
383 {
384  return (o == OREF_NULL ? d : padArgument(o, p));
385 }
386 
387 char optionArgument(RexxObject *o, size_t p);
388 
389 inline char optionalOptionArgument(RexxObject *o, char d, size_t p)
390 {
391  return (o == OREF_NULL ? d : optionArgument(o, p));
392 }
393 
394 inline size_t optionalNonNegative(RexxObject *o, size_t d, RexxString *kind, size_t p)
395 {
396  return (o == OREF_NULL ? d : o->requiredNonNegative(kind, p));
397 }
398 
399 inline size_t optionalPositive(RexxObject *o, size_t d, RexxString *kind, size_t p)
400 {
401  return (o == OREF_NULL ? d : o->requiredPositive(kind, p));
402 }
403 
404 /* The next routine is specifically for REQUESTing an ARRAY needed as a method*/
405 /* argument. This raises an error if the object cannot be converted to a */
406 /* single dimensional array item */
407 inline RexxArray *arrayArgument(RexxObject *object, RexxString *kind, size_t position)
408 {
409  if (object == OREF_NULL) /* missing argument? */
410  {
411  missingArgument(kind, position); /* raise an error */
412  }
413  /* force to array form */
414  RexxArray *array = object->requestArray();
415  /* not an array? */
416  if (array == TheNilObject || array->getDimension() != 1)
417  {
418  /* raise an error */
419  // reportException(Error_Execution_noarray, object);
420  // jlf: don't impact Error_Execution_noarray with kind, because used in several places where kind has no meaning
421  // jlf: instead, use Error_Invalid_argument_noarray (where I added a 3rd parameter: object)
422  // jlf: drawback, some test cases may fail because of this change, will see...
423  // jlf: about new_integer, few risks to create a new instance, so no need to protect it against GC
425  }
426  return array;
427 }
428 
429 
430 inline RexxArray * arrayArgument(RexxObject *object, RexxString *kind, RexxString *name)
431 {
432  if (object == OREF_NULL) /* missing argument? */
433  {
435  }
436 
437  /* force to array form */
438  RexxArray *array = object->requestArray();
439  /* not an array? */
440  if (array == TheNilObject || array->getDimension() != 1)
441  {
442  /* raise an error */
443  reportException(Error_Invalid_argument_noarray, kind, name, object);
444  }
445  return array;
446 }
447 
448 
449 /* The next routine is specifically for REQUESTing a STRING needed as a method*/
450 /* argument. This raises an error if the object cannot be converted to a */
451 /* string value. */
452 inline void classArgument(RexxObject *object, RexxClass *clazz, RexxString *kind, RexxString *name)
453 {
454  if (object == OREF_NULL) /* missing argument? */
455  {
457  }
458 
459  if (!object->isInstanceOf(clazz))
460  {
462  }
463 }
464 
465 
466 /* The next macro is specifically for REQUESTing an ARRAY, since there are */
467 /* six primitive classes that can produce array equivalents. It will trap on */
468 /* OREF_NULL. */
469 inline RexxArray * REQUEST_ARRAY(RexxObject *obj) { return ((obj)->requestArray()); }
470 
471 /* The next macro is specifically for REQUESTing an INTEGER, */
473 
474 
475 /******************************************************************************/
476 /* Named argument helpers */
477 /******************************************************************************/
478 
480 {
483 
484  const char *name; // name to search
485  ssize_t minimumLength; // abbreviation supported, pass -1 if no abbreviation
486  RexxObject *value; // you can pass OREF_NULL or a default value
487  bool assigned; // true if already assigned
488 };
489 
491 {
492  public:
494  {
495  this->namedArguments = new NamedArgument[count];
496  }
497 
499  {
500  delete[] this->namedArguments;
501  this->namedArguments = NULL;
502  }
503 
504  NamedArgument &operator[](size_t index)
505  {
506  return this->namedArguments[index];
507  }
508 
509  // Resides in UseStrictInstruction.cpp.
510  void check(RexxObject **namedArglist, size_t namedArgCount, bool strict, bool extraAllowed, size_t minimumRequired=0);
511 
512  // name: name of the argument passed by the caller, to search in expectedNamedArguments. Can be null.
513  // value: value of the argument passed by the caller, to store in expectedNamedArguments if name is found. Can be null.
514  // strict: raise error if true and name not null and name not found.
515  // name_minimumLength: passed when checking at parsetime the unicity of the names in the USE instruction
516  // @parsetime: check each name <N> declared in the USE instruction with all other names <ON> in this USE instruction.
517  // name_minimumLength is the minimumLength of the name <N>.
518  // @runtime : check the name passed by the caller (no abbreviation on caller side, name_minimumLength is always -1).
519  bool check(RexxString *name, RexxObject *value, bool strict = true, ssize_t name_minimumLength = -1, size_t from=0);
520  bool check(const char *name, RexxObject *value, bool strict = true, ssize_t name_minimumLength = -1, size_t from=0);
521 
522  const size_t count;
523 
524  private:
526 };
527 
528 
529 /******************************************************************************/
530 /* Typed method invocation macros */
531 /******************************************************************************/
532 
533 inline RexxObject * callOperatorMethod(RexxObject *object, size_t methodOffset, RexxObject *argument) {
534  /* get the entry point */
535  PCPPM cppEntry = object->behaviour->getOperatorMethod(methodOffset);
536  /* go issue the method */
537  return (object->*((PCPPM1)cppEntry))(argument);
538 }
539 
540 #endif
void reportException(wholenumber_t error)
void missingArgument(RexxString *kind, size_t argumentPosition)
RexxInteger * new_integer(wholenumber_t v)
RexxObject *(RexxObject::* PCPPM1)(RexxObject *)
RexxObject *(RexxObject::* PCPPM)()
const int POSITIVE
Definition: RexxCore.h:259
const size_t A_COUNT
Definition: RexxCore.h:250
bool isInteger(RexxObject *o)
Definition: RexxCore.h:270
bool isStem(RexxObject *o)
Definition: RexxCore.h:274
codepoint_t optionalPadArgument(RexxObject *o, codepoint_t d, size_t p)
Definition: RexxCore.h:382
EXTERNMEM RexxMemory memoryObject
Definition: RexxCore.h:143
#define OREF_NULL
Definition: RexxCore.h:60
const int ARG_FIVE
Definition: RexxCore.h:84
RexxString * stringArgument(RexxObject *object, RexxString *kind, size_t position)
Definition: RexxCore.h:303
const int ARG_NINE
Definition: RexxCore.h:88
const int ARG_SIX
Definition: RexxCore.h:85
RexxArray * REQUEST_ARRAY(RexxObject *obj)
Definition: RexxCore.h:469
const int ARG_FOUR
Definition: RexxCore.h:83
const int ARG_TEN
Definition: RexxCore.h:89
const int WHOLE
Definition: RexxCore.h:261
bool isNumberString(RexxObject *o)
Definition: RexxCore.h:271
RexxString * REQUEST_STRING(RexxObject *object)
Definition: RexxCore.h:283
bool isPolymorphicString(RexxObject *o)
Definition: RexxCore.h:272
const int MAX_SYMBOL_LENGTH
Definition: RexxCore.h:74
#define EXTERNMEM
Definition: RexxCore.h:123
size_t lengthArgument(RexxObject *o, size_t p)
const int ARG_THREE
Definition: RexxCore.h:82
const int ARG_EIGHT
Definition: RexxCore.h:87
size_t optionalPositive(RexxObject *o, size_t d, RexxString *kind, size_t p)
Definition: RexxCore.h:399
bool isString(RexxObject *o)
Definition: RexxCore.h:269
const int ARG_TWO
Definition: RexxCore.h:81
bool isMethod(RexxObject *o)
Definition: RexxCore.h:276
#define isOfClass(t, r)
Definition: RexxCore.h:212
const int ARG_SEVEN
Definition: RexxCore.h:86
size_t optionalNonNegative(RexxObject *o, size_t d, RexxString *kind, size_t p)
Definition: RexxCore.h:394
codepoint_t padArgument(RexxObject *o, size_t p)
size_t optionalLengthArgument(RexxObject *o, size_t d, size_t p)
Definition: RexxCore.h:343
char optionalOptionArgument(RexxObject *o, char d, size_t p)
Definition: RexxCore.h:389
#define TheNilObject
Definition: RexxCore.h:181
const int RC_OK
Definition: RexxCore.h:256
size_t optionalPositionArgument(RexxObject *o, size_t d, size_t p)
Definition: RexxCore.h:363
const int MAX_ERROR_NUMBER
Definition: RexxCore.h:73
void classArgument(RexxObject *object, RexxClass *clazz, RexxString *kind, RexxString *name)
Definition: RexxCore.h:452
bool isActivation(RexxObject *o)
Definition: RexxCore.h:275
size_t positionArgument(RexxObject *o, size_t p)
RexxObject * callOperatorMethod(RexxObject *object, size_t methodOffset, RexxObject *argument)
Definition: RexxCore.h:533
const int ARG_ONE
Definition: RexxCore.h:80
const int RC_LOGIC_ERROR
Definition: RexxCore.h:257
RexxArray * arrayArgument(RexxObject *object, RexxString *kind, size_t position)
Definition: RexxCore.h:407
RexxString * optionalStringArgument(RexxObject *o, RexxString *d, RexxString *kind, size_t p)
Definition: RexxCore.h:328
char optionArgument(RexxObject *o, size_t p)
const int NONNEGATIVE
Definition: RexxCore.h:260
void requiredArgument(RexxObject *object, RexxString *kind, size_t position)
Definition: RexxCore.h:291
bool isArray(RexxObject *o)
Definition: RexxCore.h:273
RexxInteger * REQUEST_INTEGER(RexxObject *obj)
Definition: RexxCore.h:472
#define Error_Invalid_argument_noarray
#define Error_Invalid_argument_noarg
#define Error_Invalid_argument_noclass
void check(RexxObject **namedArglist, size_t namedArgCount, bool strict, bool extraAllowed, size_t minimumRequired=0)
NamedArgument * namedArguments
Definition: RexxCore.h:525
const size_t count
Definition: RexxCore.h:522
NamedArguments(size_t count)
Definition: RexxCore.h:493
NamedArgument & operator[](size_t index)
Definition: RexxCore.h:504
static const size_t ARGUMENT_DIGITS
Definition: Numerics.hpp:68
size_t getDimension()
Definition: ArrayClass.cpp:693
PCPPM getOperatorMethod(size_t index)
RexxString * getId()
Definition: ClassClass.cpp:254
RexxBehaviour * behaviour
stringsize_t requiredPositive(RexxString *kind, size_t position, size_t precision=Numerics::ARGUMENT_DIGITS)
stringsize_t requiredNonNegative(RexxString *kind, size_t position, size_t precision=Numerics::ARGUMENT_DIGITS)
RexxInteger * requestInteger(size_t)
RexxArray * requestArray()
RexxString * requestString()
bool isInstanceOf(RexxClass *)
RexxNumberString * NumberString
stringsizeC_t sizeC_t
Definition: rexx.h:242
ssize_t codepoint_t
Definition: rexx.h:232
#define sizeB_v(X)
Definition: rexx.h:250
#define size_v(X)
Definition: rexx.h:237
stringsizeB_t sizeB_t
Definition: rexx.h:248
#define sizeC_v(X)
Definition: rexx.h:244
bool assigned
Definition: RexxCore.h:487
const char * name
Definition: RexxCore.h:482
RexxObject * value
Definition: RexxCore.h:486
ssize_t minimumLength
Definition: RexxCore.h:485
NamedArgument(const char *name=NULL, ssize_t minimumLength=-1, RexxObject *value=OREF_NULL, bool assigned=false)
Definition: RexxCore.h:481
SSIZE_T ssize_t