CONTENTS | PREV | NEXT
8F. the compound type (OBJECT)
------------------------------
OBJECTs are like a struct/class in C/C++ or a RECORD in pascal. Example:
OBJECT myobj
a:LONG
b:CHAR
c:INT
ENDOBJECT
This defines a data structure consisting of three elements. Syntax:
OBJECT <objname>
<membername> [ : <type> ] /* any number of these */
ENDOBJECT
where type is one of the following:
CHAR/INT/LONG/<object>
PTR TO CHAR/INT/LONG/<object>
ARRAY OF CHAR/INT/LONG/<object>
(ARRAY is short for ARRAY OF CHAR)
like DEF declarations, omitting the type means :LONG.
Note that <membername> need not be a unique identifier,
it may be in other objects too. There are lots of ways to use objects:
DEF x:myobj /* x is a structure */
DEF y:PTR TO myobj /* y is just a pointer to it */
DEF z[10]:ARRAY OF myobj
y:=[-1,"a",100]:myobj /* typed lists */
IF y.b="a" THEN /* ... */
z[4].c:=z[d+1].b++
(see 4F and other parts of chapter 4 for these)
ARRAYs in objects are always rounded to even sizes, and put on
even offsets:
OBJECT mystring
len:CHAR, data[9]:ARRAY
ENDOBJECT
SIZEOF mystring is 12, and "data" starts at offset 2.
'PTR TO' is the only type in OBJECTs that may refer to yet undeclared
other objects.
(see 14A for all other OBJECT features that are somehow OO related)