Next: Attributes, Previous: Control structures, Up: C [Index]
OBJECT typedefAt the lowest level, ctalk declares objects as pointers to an
OBJECT struct. You can access an object’s members if you
assign an object’s value to a C variable of the type OBJECT *,
as in this example.
Object new myObject;
OBJECT *myObjectValue;
myObjectValue = myObject value;
if (!strcmp (myObjectValue -> CLASSNAME, "Object"))
printf ("myObjectValues class is, \"Object.\"\n");
The declaration of the OBJECT type is contained in include/object.h.
typedef struct _object OBJECT;
. . .
struct _object {
char sig[16];
char __o_name[MAXLABEL];
char __o_classname[MAXLABEL];
OBJECT *__o_class;
char __o_superclassname[MAXLABEL];
OBJECT *__o_superclass;
OBJECT *__o_p_obj;
VARTAG *__o_vartags;
char *__o_value;
METHOD *instance_methods,
*class_methods;
int scope;
int nrefs;
int attrs
struct _object *classvars;
struct _object *instancevars;
struct _object *next;
struct _object *prev;
};
Note that __o_name, __o_classname,
__o_superclassname, and __o_value are all char *,
even if the object belongs to a class like Integer or
Float. The struct members __o_class and
__o_superclass contain pointers to the library class and
superclass entries, which are also objects.
For numeric classes, the value member contains a formatted
representation of a numeric value. Examples of directly assigning
values to objects are given in the section about writing methods.
See Method API.
Ctalk uses the members instance_methods, class_methods,
classvars for class objects.
The sig member contains a numeric stamp that verifies
that the OBJECT * refers to a valid object.
The scope member describes an object’s scope. The scope can be
one of GLOBAL_VAR, LOCAL_VAR, ARG_VAR,
RECEIVER_VAR, PROTOTYPE_VAR, or BLOCK_VAR.
The nrefs member keeps track of the number of references that
exist to an object at run time. Every time ctalk creates a reference
to an object, internally ctalk increments nrefs. When ctalk
deletes a reference, it decrements nrefs. When
nrefs drops to zero, ctalk deletes the object.
The attrs member is a combination of one or more object attributes.
The next section describes object attributes in more detail.
The tag member is an abbreviation for the
__o_vartags -> tag -> var_decl -> name member; that is,
the object’s primary label.
Next: Attributes, Previous: Control structures, Up: C [Index]