int XPCE_define_classes(const XPCE_class_definition_t *classes) { for(; classes->name; classes++) { Class class = defineClass(CtoName(classes->name), CtoName(classes->super), staticCtoString(classes->summary), classes->makefunction); if ( classes->global ) *classes->global = class; } numberTreeClass(ClassObject, 0); succeed; }
void initClassDefs() { defineClasses(classdefs); #define defClass(n, s, mf, cp, summ) \ (cp) = defineClass(n, s, CtoString(summ), mf); defClass(CtoName("*"), NAME_binaryExpression, makeClassTimes, ClassTimes, "Multiplication expression"); defClass(CtoName("-"), NAME_binaryExpression, makeClassMinus, ClassMinus, "Subtraction expression"); defClass(CtoName("+"), NAME_binaryExpression, makeClassPlus, ClassPlus, "Addition expression"); defClass(CtoName("/"), NAME_binaryExpression, makeClassDivide, ClassDivide, "Division expression"); defClass(CtoName(":="), NAME_object, makeClassBinding, ClassBinding, "Name-value pair for argument-list"); defClass(CtoName("<"), NAME_binaryCondition, makeClassLess, ClassLess, "Compare expressions on less-then"); defClass(CtoName("="), NAME_binaryCondition, makeClassEquation, ClassEquation, "Identity between two expressions"); defClass(CtoName("=<"), NAME_binaryCondition, makeClassLessEqual, ClassLessEqual, "Compare expressions on less-or-equal"); defClass(CtoName("=="), NAME_code, makeClassEqual, ClassEqual, "Test equivalence of arguments"); defClass(CtoName(">"), NAME_binaryCondition, makeClassGreater, ClassGreater, "Test equivalence of arguments"); defClass(CtoName(">="), NAME_binaryCondition, makeClassGreaterEqual, ClassGreaterEqual, "Compare expressions on greater-or-equal"); defClass(CtoName("?"), NAME_function, makeClassObtain, ClassObtain, "Invoke a get method"); defClass(CtoName("\\=="), NAME_code, makeClassNonEqual, ClassNonEqual, "Test non-equivalence of arguments"); defClass(CtoName("@="), NAME_code, makeClassAssoc, ClassAssoc, "Assign named reference to object"); initBoxes(); numberTreeClass(ClassObject, 0); }