160 return id->getHashValue();
170 return this->
equal(other);
664 method_object = method_object->
newScope(
this);
671 p_method_object = method_object;
755 for (
size_t i = 1; i < subclass_list->
size(); i++)
776 for (
size_t i = 1; i < subclass_list->
size(); i++)
828 return method_object;
895 for (
size_t index = 1; index <= subClassList->
size(); index++)
917 for (
size_t index = 1; index <= subClassList->
size(); index++)
954 if (!target_class_behaviour->
checkScope(
this))
974 for (
size_t i = addedScopes->
size(); i > 0; i--)
994 target_class_behaviour->
addScope(
this);
1026 if (!target_instance_behaviour->
checkScope(
this))
1033 target_instance_behaviour->
addScope(
this);
1059 if (!target_instance_behaviour->
checkScope(
this))
1066 target_instance_behaviour->
addScope(
this);
1093 target_mdict->
stringAdd(method_instance, method_name);
1118 sourceCollection->
sendMessage(OREF_SUPPLIERSYM, p2);
1141 newMethod = newMethod->
newScope(scope);
1145 newDictionary->
stringAdd(newMethod, method_name);
1147 return newDictionary;
1179 if (
this == mixin_class )
1230 if (class_index == 0 || instance_index == 0)
1277 ((instance_index = this->instanceSuperClasses->indexOf(mixin_class)) > 1))
1325 size_t named_argCount)
1357 dummy_subclass->
sendMessage(OREF_NEW, args + 1, argCount - 1, named_argCount, r);
1366 return enhanced_object;
1380 RexxClass *mixin_subclass = this->
subclass(mixin_id, meta_class, enhancing_class_methods);
1390 return mixin_subclass;
1578 void *RexxClass::operator
new(
size_t size,
1580 const char *className,
1613 return(
void *)new_class;
1639 OrefSet(new_class, new_class->
id, class_id);
1713 new_class->
sendMessage(OREF_INIT, args + 1, argCount - 1, named_argCount);
1744 size_t *remainderSize,
1755 *argument1 = arg_array[0];
1761 *argument2 = arg_array[1];
1769 *init_args = arg_array + required;
1772 if (argCount >= required)
1774 *remainderSize = argCount - required;
void reportNomethod(RexxString *message, RexxObject *receiver)
void reportException(wholenumber_t error)
RexxString * lastMessageName()
RexxArray * new_array(size_t s)
RexxIdentityTable * new_identity_table()
#define TheClassBehaviour
#define TheClassClassBehaviour
#define TheObjectBehaviour
RexxString * stringArgument(RexxObject *object, RexxString *kind, size_t position)
RexxString * REQUEST_STRING(RexxObject *object)
#define TheNumberStringClass
void requiredArgument(RexxObject *object, RexxString *kind, size_t position)
#define Error_Logical_value_method
#define Error_Execution_mixinclass
#define Error_No_result_object_message
#define Error_Translation_bad_metaclass
#define Error_Execution_uninherit
#define Error_Incorrect_method_minarg
#define Error_No_method_name
#define Error_Execution_recursive_inherit
#define Error_Execution_baseclass
#define memory_mark(oref)
RexxObject * new_object(size_t s)
#define memory_mark_general(oref)
RexxString * new_proxy(const char *name)
RexxString * new_string(const char *s, stringsizeB_t bl, sizeC_t cl=-1)
size_t addFirst(RexxObject *item)
size_t insertAfter(RexxObject *item, size_t index)
size_t indexOf(RexxObject *)
size_t addLast(RexxObject *item)
RexxObject * deleteItem(size_t index)
RexxObject * get(size_t pos)
RexxTable * getMethodDictionary()
void merge(RexxBehaviour *)
RexxObject * mergeScope(RexxObject *)
RexxObject * addScope(RexxObject *)
void methodDictionaryMerge(RexxTable *)
RexxObject * define(RexxString *, RexxMethod *)
void setMethodDictionary(RexxTable *m)
RexxObject * deleteMethod(RexxString *)
RexxObject * setScopes(RexxIdentityTable *)
bool checkScope(RexxObject *)
RexxIdentityTable * getScopes()
void subclass(RexxBehaviour *)
void setInstanceMethodDictionary(RexxTable *m)
void setOwningClass(RexxClass *c)
void removeSubclass(RexxClass *c)
void createClassBehaviour(RexxBehaviour *)
void setHasUninitDefined()
RexxClass * newRexx(RexxObject **args, size_t argCount, size_t named_argCount)
void setInstanceBehaviour(RexxBehaviour *)
RexxObject * deleteMethod(RexxString *)
RexxClass * getSuperClass()
RexxTable * methodDictionaryCreate(RexxTable *, RexxClass *)
static void createInstance()
void mergeSuperClassScopes(RexxBehaviour *target_instance_behaviour)
void addSubClass(RexxClass *)
static RexxClass * classInstance
void updateInstanceSubClasses()
void methodDictionaryMerge(RexxTable *, RexxTable *)
void setInitialFlagState()
RexxTable * instanceMethodDictionary
RexxMethod * method(RexxString *)
void setMetaClass(RexxClass *)
RexxClass * getMetaClass()
RexxArray * instanceSuperClasses
RexxTable * getInstanceBehaviourDictionary()
static void processNewArgs(RexxObject **, size_t, RexxObject ***, size_t *, size_t, RexxObject **, RexxObject **)
RexxObject * inherit(RexxClass *, RexxClass *)
void defmeths(RexxTable *)
RexxString * defaultNameRexx()
RexxObject * notEqual(RexxObject *)
RexxArray * getSubClasses()
void liveGeneral(int reason)
RexxIdentityTable * metaClassScopes
void removeClassMethod(RexxString *method_name)
RexxClass * getBaseClass()
RexxTable * classMethodDictionary
RexxObject * defineMethod(RexxString *, RexxMethod *)
RexxArray * getSuperClasses()
RexxObject * isSubclassOf(RexxClass *other)
RexxObject * enhanced(RexxObject **, size_t, size_t)
RexxObject * unflatten(RexxEnvelope *)
RexxInteger * queryMixinClass()
RexxTable * getBehaviourDictionary()
RexxObject * equal(RexxObject *)
void setParentHasUninitDefined()
bool parentHasUninitDefined()
RexxObject * defineMethods(RexxTable *)
RexxObject * setRexxDefined()
bool isCompatibleWith(RexxClass *other)
RexxObject * defineClassMethod(RexxString *method_name, RexxMethod *newMethod)
RexxSupplier * methods(RexxClass *)
void flatten(RexxEnvelope *)
RexxBehaviour * instanceBehaviour
RexxObject * strictEqual(RexxObject *)
bool isEqual(RexxObject *)
RexxObject * uninherit(RexxClass *)
RexxClass * mixinclass(RexxString *, RexxClass *, RexxTable *)
RexxArray * classSuperClasses
RexxString * defaultName()
RexxClass * subclass(RexxString *, RexxClass *, RexxTable *)
void createInstanceBehaviour(RexxBehaviour *)
RexxObject * makeProxy(RexxEnvelope *)
RexxArray * metaClassMethodDictionary
bool available(HashLink pos)
RexxObject * value(HashLink pos)
HashLink next(HashLink pos)
virtual RexxObject * remove(RexxObject *key)
RexxObject * index(HashLink pos)
RexxSupplier * supplier()
RexxArray * allAt(RexxObject *key)
virtual RexxObject * get(RexxObject *key)
virtual RexxObject * add(RexxObject *, RexxObject *)
void setBehaviour(RexxBehaviour *b)
RexxBehaviour * behaviour
RexxObject * removeIndex(size_t i)
size_t nextIndex(size_t i)
RexxArray * weakReferenceArray()
RexxObject * getValue(size_t i)
void addFirst(RexxObject *value)
void setScope(RexxClass *)
static RexxMethod * newMethodObject(RexxString *, RexxObject *, RexxObject *, RexxSource *a, bool isBlock=false)
RexxMethod * newScope(RexxClass *)
void sendMessage(RexxString *, RexxArray *, RexxDirectory *, ProtectedObject &)
bool isInstanceOf(RexxClass *)
const char * getStringData()
RexxString * concatWithCstring(const char *)
RexxString * concatToCstring(const char *)
bool strCompare(const char *s)
RexxInteger * available()
RexxObject * stringAdd(RexxObject *, RexxString *)
RexxObject * stringPut(RexxObject *, RexxString *)
RexxObject * stringGet(RexxString *key)