STATIC data
The STATIC
keyword is used to define tables or strings of data.
STATIC mystring = 'hello universe!!',
mylongstring = 'this string is so very..' +
'very very very very very ' +
'..long!!'
OBJECT myobj
w,x,y,z
ENDOBJECT
STATIC mylist = [1,2,3,4],
myobj = [4,5,6,7]:myobj,
myarray = [3,4,5]:INT
List/array elements can be constant expressions, strings, code labels / statics and other lists.
STATIC mycomplexlist =
[1,2,3,[myfunction, mylist,'hello!',
[-1, 10*MYCONST, 9.999]:someobj]:PTR,NIL]
Note that static lists has no problems being typed with object containing arrays (or other objects):
OBJECT blaha
a,b,c
array[2]:ARRAY OF REAL
ENDOBJECT
STATIC myobj2 = [1,2,3,[10.0,-150.5]:REAL]:blaha
Dereferencing of static data is much like normal dereferencing of variables/members. Difference is you cannot make assignments, increment/decrement, NEW/END etc. A (derefenced) label is always an expression.
WriteF('\\s', mystring) -> prints 'hello universe!!'
WriteF('\\c', mystring[4]) -> prints 'o'
WriteF('\\d', myobj.z) -> prints '7'
WriteF('\\d', myarray[1]) -> prints '4'
Selection (.), indexing ([]) and pointer typing (::) can be used to dereference a static label.