const type: category is newtype;
IN_PARAM_IS_VALUE(category);
const proc: (ref category: dest) ::= (ref category: source) is action "INT_CREATE";
const proc: destroy (ref category: aValue) is action "GEN_DESTR";
const proc: (inout category: dest) := (in category: source) is action "INT_CPY";
const func category: category (in string: catName) is action "REF_CAT_PARSE";
const category: (attr category) . value is category("SYMBOLOBJECT");
const func boolean: (in category: cat1) = (in category: cat2) is action "INT_EQ";
const func boolean: (in category: cat1) <> (in category: cat2) is action "INT_NE";
const func integer: ord (in category: aCategory) is action "INT_ICONV1";
const func category: (attr category) conv (in integer: number) is action "INT_ICONV3";
const func category: category (in integer: number) is action "INT_ICONV1";
const func string: str (in category: aCategory) is action "REF_CAT_STR";
const func category: (attr category) parse (in string: catName) is
return category(catName);
const category: SYMBOLOBJECT is category("SYMBOLOBJECT");
const category: DECLAREDOBJECT is category("DECLAREDOBJECT");
const category: FORWARDOBJECT is category("FORWARDOBJECT");
const category: FWDREFOBJECT is category("FWDREFOBJECT");
const category: BLOCKOBJECT is category("BLOCKOBJECT");
const category: CALLOBJECT is category("CALLOBJECT");
const category: MATCHOBJECT is category("MATCHOBJECT");
const category: TYPEOBJECT is category("TYPEOBJECT");
const category: FORMPARAMOBJECT is category("FORMPARAMOBJECT");
const category: INTOBJECT is category("INTOBJECT");
const category: BIGINTOBJECT is category("BIGINTOBJECT");
const category: CHAROBJECT is category("CHAROBJECT");
const category: STRIOBJECT is category("STRIOBJECT");
const category: BSTRIOBJECT is category("BSTRIOBJECT");
const category: ARRAYOBJECT is category("ARRAYOBJECT");
const category: HASHOBJECT is category("HASHOBJECT");
const category: HASHELEMOBJECT is category("HASHELEMOBJECT");
const category: STRUCTOBJECT is category("STRUCTOBJECT");
const category: CLASSOBJECT is category("CLASSOBJECT");
const category: INTERFACEOBJECT is category("INTERFACEOBJECT");
const category: SETOBJECT is category("SETOBJECT");
const category: FILEOBJECT is category("FILEOBJECT");
const category: SOCKETOBJECT is category("SOCKETOBJECT");
const category: POLLOBJECT is category("POLLOBJECT");
const category: LISTOBJECT is category("LISTOBJECT");
const category: FLOATOBJECT is category("FLOATOBJECT");
const category: WINOBJECT is category("WINOBJECT");
const category: POINTLISTOBJECT is category("POINTLISTOBJECT");
const category: PROCESSOBJECT is category("PROCESSOBJECT");
const category: ENUMLITERALOBJECT is category("ENUMLITERALOBJECT");
const category: CONSTENUMOBJECT is category("CONSTENUMOBJECT");
const category: VARENUMOBJECT is category("VARENUMOBJECT");
const category: REFOBJECT is category("REFOBJECT");
const category: REFLISTOBJECT is category("REFLISTOBJECT");
const category: EXPROBJECT is category("EXPROBJECT");
const category: ACTOBJECT is category("ACTOBJECT");
const category: VALUEPARAMOBJECT is category("VALUEPARAMOBJECT");
const category: REFPARAMOBJECT is category("REFPARAMOBJECT");
const category: RESULTOBJECT is category("RESULTOBJECT");
const category: LOCALVOBJECT is category("LOCALVOBJECT");
const category: DATABASEOBJECT is category("DATABASEOBJECT");
const category: SQLSTMTOBJECT is category("SQLSTMTOBJECT");
const category: PROGOBJECT is category("PROGOBJECT");
const proc: for (inout category: forVar) range (in category: startValue) to (in category: endValue) do
(in proc: statements)
end for is action "PRC_FOR_TO";
const proc: for (inout category: forVar) range (in category: startValue) downto (in category: endValue) do
(in proc: statements)
end for is action "PRC_FOR_DOWNTO";
DECLARE_TERNARY(category);
CASE_DECLS(category);