83 lines
2.7 KiB
Plaintext
83 lines
2.7 KiB
Plaintext
MODE MYDATA = STRUCT(
|
|
INT name1
|
|
);
|
|
STRUCT(
|
|
INT name2,
|
|
PROC (REF MYDATA)REF MYDATA new,
|
|
PROC (REF MYDATA)VOID init,
|
|
PROC (REF MYDATA)VOID some method
|
|
) class my data;
|
|
class my data := (
|
|
# name2 := # 2, # Class attribute #
|
|
|
|
# PROC new := # (REF MYDATA new)REF MYDATA:(
|
|
(init OF class my data)(new);
|
|
new
|
|
),
|
|
|
|
# PROC init := # (REF MYDATA self)VOID:(
|
|
""" Constructor (Technically an initializer rather than a true 'constructor') """;
|
|
name1 OF self := 0 # Instance attribute #
|
|
),
|
|
|
|
# PROC some method := # (REF MYDATA self)VOID:(
|
|
""" Method """;
|
|
name1 OF self := 1;
|
|
name2 OF class my data := 3
|
|
)
|
|
);
|
|
|
|
# class name, invoked as a function is the constructor syntax #
|
|
REF MYDATA my data = (new OF class my data)(LOC MYDATA);
|
|
|
|
MODE GENDEROPT = UNION(STRING, VOID);
|
|
MODE AGEOPT = UNION(INT, VOID);
|
|
|
|
MODE MYOTHERDATA = STRUCT(
|
|
STRING name,
|
|
GENDEROPT gender,
|
|
AGEOPT age
|
|
);
|
|
STRUCT (
|
|
INT count,
|
|
PROC (REF MYOTHERDATA, STRING, GENDEROPT, AGEOPT)REF MYOTHERDATA new,
|
|
PROC (REF MYOTHERDATA, STRING, GENDEROPT, AGEOPT)VOID init,
|
|
PROC (REF MYOTHERDATA)VOID del
|
|
) class my other data;
|
|
class my other data := (
|
|
# count := # 0, # Population of "(init OF class my other data)" objects #
|
|
# PROC new := # (REF MYOTHERDATA new, STRING name, GENDEROPT gender, AGEOPT age)REF MYOTHERDATA:(
|
|
(init OF class my other data)(new, name, gender, age);
|
|
new
|
|
),
|
|
|
|
# PROC init := # (REF MYOTHERDATA self, STRING name, GENDEROPT gender, AGEOPT age)VOID:(
|
|
""" One initializer required, others are optional (with different defaults) """;
|
|
count OF class my other data +:= 1;
|
|
name OF self := name;
|
|
gender OF self := gender;
|
|
CASE gender OF self IN
|
|
(VOID):gender OF self := "Male"
|
|
ESAC;
|
|
age OF self := age
|
|
),
|
|
|
|
# PROC del := # (REF MYOTHERDATA self)VOID:(
|
|
count OF class my other data -:= 1
|
|
)
|
|
);
|
|
|
|
PROC attribute error := STRING: error char; # mend the error with the "error char" #
|
|
|
|
# Allocate the instance from HEAP #
|
|
REF MYOTHERDATA person1 = (new OF class my other data)(HEAP MYOTHERDATA, "John", EMPTY, EMPTY);
|
|
print (((name OF person1), ": ",
|
|
(gender OF person1|(STRING gender):gender|attribute error), " ")); # "John Male" #
|
|
print (((age OF person1|(INT age):age|attribute error), new line)); # Raises AttributeError exception! #
|
|
|
|
# Allocate the instance from LOC (stack) #
|
|
REF MYOTHERDATA person2 = (new OF class my other data)(LOC MYOTHERDATA, "Jane", "Female", 23);
|
|
print (((name OF person2), ": ",
|
|
(gender OF person2|(STRING gender):gender|attribute error), " "));
|
|
print (((age OF person2|(INT age):age|attribute error), new line)) # "Jane Female 23" #
|