globle void EnvSlotCardinality( void *theEnv, void *clsptr, const char *sname, DATA_OBJECT *result) { register SLOT_DESC *sp; if ((sp = SlotInfoSlot(theEnv,result,(DEFCLASS *) clsptr,sname,"slot-cardinality")) == NULL) return; if (sp->multiple == 0) { EnvSetMultifieldErrorValue(theEnv,result); return; } result->end = 1; result->value = EnvCreateMultifield(theEnv,2L); if (sp->constraint != NULL) { SetMFType(result->value,1,sp->constraint->minFields->type); SetMFValue(result->value,1,sp->constraint->minFields->value); SetMFType(result->value,2,sp->constraint->maxFields->type); SetMFValue(result->value,2,sp->constraint->maxFields->value); } else { SetMFType(result->value,1,INTEGER); SetMFValue(result->value,1,SymbolData(theEnv)->Zero); SetMFType(result->value,2,SYMBOL); SetMFValue(result->value,2,SymbolData(theEnv)->PositiveInfinity); } }
globle void EnvSlotAllowedClasses( void *theEnv, void *clsptr, const char *sname, DATA_OBJECT *result) { register int i; register SLOT_DESC *sp; register EXPRESSION *theExp; if ((sp = SlotInfoSlot(theEnv,result,(DEFCLASS *) clsptr,sname,"slot-allowed-classes")) == NULL) return; if ((sp->constraint != NULL) ? (sp->constraint->classList == NULL) : TRUE) { result->type = SYMBOL; result->value = EnvFalseSymbol(theEnv); return; } result->end = ExpressionSize(sp->constraint->classList) - 1; result->value = EnvCreateMultifield(theEnv,(unsigned long) (result->end + 1)); i = 1; theExp = sp->constraint->classList; while (theExp != NULL) { SetMFType(result->value,i,theExp->type); SetMFValue(result->value,i,theExp->value); theExp = theExp->nextArg; i++; } }
globle void EnvSlotRange( void *theEnv, void *clsptr, const char *sname, DATA_OBJECT *result) { register SLOT_DESC *sp; if ((sp = SlotInfoSlot(theEnv,result,(DEFCLASS *) clsptr,sname,"slot-range")) == NULL) return; if ((sp->constraint == NULL) ? FALSE : (sp->constraint->anyAllowed || sp->constraint->floatsAllowed || sp->constraint->integersAllowed)) { result->end = 1; result->value = EnvCreateMultifield(theEnv,2L); SetMFType(result->value,1,sp->constraint->minValue->type); SetMFValue(result->value,1,sp->constraint->minValue->value); SetMFType(result->value,2,sp->constraint->maxValue->type); SetMFValue(result->value,2,sp->constraint->maxValue->value); } else { result->type = SYMBOL; result->value = EnvFalseSymbol(theEnv); return; } }
globle void SlotAllowedValues( void *clsptr, char *sname, DATA_OBJECT *result) { register int i; register SLOT_DESC *sp; register EXPRESSION *exp; if ((sp = SlotInfoSlot(result,(DEFCLASS *) clsptr,sname,"slot-allowed-values")) == NULL) return; if ((sp->constraint != NULL) ? (sp->constraint->restrictionList == NULL) : TRUE) { result->type = SYMBOL; result->value = FalseSymbol; return; } result->end = ExpressionSize(sp->constraint->restrictionList) - 1; result->value = CreateMultifield(result->end + 1); i = 1; exp = sp->constraint->restrictionList; while (exp != NULL) { SetMFType(result->value,i,exp->type); SetMFValue(result->value,i,exp->value); exp = exp->nextArg; i++; } }
globle void EnvSlotSources( void *theEnv, void *clsptr, const char *sname, DATA_OBJECT *result) { register unsigned i; register int classi; register SLOT_DESC *sp,*csp; CLASS_LINK *ctop,*ctmp; DEFCLASS *cls; if ((sp = SlotInfoSlot(theEnv,result,(DEFCLASS *) clsptr,sname,"slot-sources")) == NULL) return; i = 1; ctop = get_struct(theEnv,classLink); ctop->cls = sp->cls; ctop->nxt = NULL; if (sp->composite) { for (classi = 1 ; classi < sp->cls->allSuperclasses.classCount ; classi++) { cls = sp->cls->allSuperclasses.classArray[classi]; csp = FindClassSlot(cls,sp->slotName->name); if ((csp != NULL) ? (csp->noInherit == 0) : FALSE) { ctmp = get_struct(theEnv,classLink); ctmp->cls = cls; ctmp->nxt = ctop; ctop = ctmp; i++; if (csp->composite == 0) break; } } } SetpDOEnd(result,i); result->value = (void *) EnvCreateMultifield(theEnv,i); for (ctmp = ctop , i = 1 ; ctmp != NULL ; ctmp = ctmp->nxt , i++) { SetMFType(result->value,i,SYMBOL); SetMFValue(result->value,i,GetDefclassNamePointer((void *) ctmp->cls)); } DeleteClassLinks(theEnv,ctop); }
globle void EnvSlotTypes( void *theEnv, void *clsptr, const char *sname, DATA_OBJECT *result) { register unsigned i,j; register SLOT_DESC *sp; char typemap[2]; unsigned msize; if ((sp = SlotInfoSlot(theEnv,result,(DEFCLASS *) clsptr,sname,"slot-types")) == NULL) return; if ((sp->constraint != NULL) ? sp->constraint->anyAllowed : TRUE) { typemap[0] = typemap[1] = (char) 0xFF; ClearBitMap(typemap,MULTIFIELD); msize = 8; } else { typemap[0] = typemap[1] = (char) 0x00; msize = 0; if (sp->constraint->symbolsAllowed) { msize++; SetBitMap(typemap,SYMBOL); } if (sp->constraint->stringsAllowed) { msize++; SetBitMap(typemap,STRING); } if (sp->constraint->floatsAllowed) { msize++; SetBitMap(typemap,FLOAT); } if (sp->constraint->integersAllowed) { msize++; SetBitMap(typemap,INTEGER); } if (sp->constraint->instanceNamesAllowed) { msize++; SetBitMap(typemap,INSTANCE_NAME); } if (sp->constraint->instanceAddressesAllowed) { msize++; SetBitMap(typemap,INSTANCE_ADDRESS); } if (sp->constraint->externalAddressesAllowed) { msize++; SetBitMap(typemap,EXTERNAL_ADDRESS); } if (sp->constraint->factAddressesAllowed) { msize++; SetBitMap(typemap,FACT_ADDRESS); } } SetpDOEnd(result,msize); result->value = EnvCreateMultifield(theEnv,msize); i = 1; j = 0; while (i <= msize) { if (TestBitMap(typemap,j)) { SetMFType(result->value,i,SYMBOL); SetMFValue(result->value,i, (void *) GetDefclassNamePointer((void *) DefclassData(theEnv)->PrimitiveClassMap[j])); i++; } j++; } }
globle void EnvSlotFacets( void *theEnv, void *clsptr, const char *sname, DATA_OBJECT *result) { register int i; register SLOT_DESC *sp; if ((sp = SlotInfoSlot(theEnv,result,(DEFCLASS *) clsptr,sname,"slot-facets")) == NULL) return; #if DEFRULE_CONSTRUCT result->end = 9; result->value = (void *) EnvCreateMultifield(theEnv,10L); for (i = 1 ; i <= 10 ; i++) SetMFType(result->value,i,SYMBOL); #else result->end = 8; result->value = (void *) EnvCreateMultifield(theEnv,9L); for (i = 1 ; i <= 9 ; i++) SetMFType(result->value,i,SYMBOL); #endif if (sp->multiple) SetMFValue(result->value,1,EnvAddSymbol(theEnv,"MLT")); else SetMFValue(result->value,1,EnvAddSymbol(theEnv,"SGL")); if (sp->noDefault) SetMFValue(result->value,2,EnvAddSymbol(theEnv,"NIL")); else { if (sp->dynamicDefault) SetMFValue(result->value,2,EnvAddSymbol(theEnv,"DYN")); else SetMFValue(result->value,2,EnvAddSymbol(theEnv,"STC")); } if (sp->noInherit) SetMFValue(result->value,3,EnvAddSymbol(theEnv,"NIL")); else SetMFValue(result->value,3,EnvAddSymbol(theEnv,"INH")); if (sp->initializeOnly) SetMFValue(result->value,4,EnvAddSymbol(theEnv,"INT")); else if (sp->noWrite) SetMFValue(result->value,4,EnvAddSymbol(theEnv,"R")); else SetMFValue(result->value,4,EnvAddSymbol(theEnv,"RW")); if (sp->shared) SetMFValue(result->value,5,EnvAddSymbol(theEnv,"SHR")); else SetMFValue(result->value,5,EnvAddSymbol(theEnv,"LCL")); #if DEFRULE_CONSTRUCT if (sp->reactive) SetMFValue(result->value,6,EnvAddSymbol(theEnv,"RCT")); else SetMFValue(result->value,6,EnvAddSymbol(theEnv,"NIL")); if (sp->composite) SetMFValue(result->value,7,EnvAddSymbol(theEnv,"CMP")); else SetMFValue(result->value,7,EnvAddSymbol(theEnv,"EXC")); if (sp->publicVisibility) SetMFValue(result->value,8,EnvAddSymbol(theEnv,"PUB")); else SetMFValue(result->value,8,EnvAddSymbol(theEnv,"PRV")); SetMFValue(result->value,9,EnvAddSymbol(theEnv,GetCreateAccessorString((void *) sp))); SetMFValue(result->value,10,sp->noWrite ? EnvAddSymbol(theEnv,"NIL") : (void *) sp->overrideMessage); #else if (sp->composite) SetMFValue(result->value,6,EnvAddSymbol(theEnv,"CMP")); else SetMFValue(result->value,6,EnvAddSymbol(theEnv,"EXC")); if (sp->publicVisibility) SetMFValue(result->value,7,EnvAddSymbol(theEnv,"PUB")); else SetMFValue(result->value,7,EnvAddSymbol(theEnv,"PRV")); SetMFValue(result->value,8,EnvAddSymbol(theEnv,GetCreateAccessorString((void *) sp))); SetMFValue(result->value,9,sp->noWrite ? EnvAddSymbol(theEnv,"NIL") : (void *) sp->overrideMessage); #endif }
globle void SlotFacets( void *clsptr, char *sname, DATA_OBJECT *result) { register int i; register SLOT_DESC *sp; if ((sp = SlotInfoSlot(result,(DEFCLASS *) clsptr,sname,"slot-facets")) == NULL) return; #if INSTANCE_PATTERN_MATCHING result->end = 9; result->value = (void *) CreateMultifield(10L); for (i = 1 ; i <= 10 ; i++) SetMFType(result->value,i,SYMBOL); #else result->end = 8; result->value = (void *) CreateMultifield(9L); for (i = 1 ; i <= 9 ; i++) SetMFType(result->value,i,SYMBOL); #endif if (sp->multiple) SetMFValue(result->value,1,AddSymbol("MLT")); else SetMFValue(result->value,1,AddSymbol("SGL")); if (sp->noDefault) SetMFValue(result->value,2,AddSymbol("NIL")); else { if (sp->dynamicDefault) SetMFValue(result->value,2,AddSymbol("DYN")); else SetMFValue(result->value,2,AddSymbol("STC")); } if (sp->noInherit) SetMFValue(result->value,3,AddSymbol("NIL")); else SetMFValue(result->value,3,AddSymbol("INH")); if (sp->initializeOnly) SetMFValue(result->value,4,AddSymbol("INT")); else if (sp->noWrite) SetMFValue(result->value,4,AddSymbol("R")); else SetMFValue(result->value,4,AddSymbol("RW")); if (sp->shared) SetMFValue(result->value,5,AddSymbol("SHR")); else SetMFValue(result->value,5,AddSymbol("LCL")); #if INSTANCE_PATTERN_MATCHING if (sp->reactive) SetMFValue(result->value,6,AddSymbol("RCT")); else SetMFValue(result->value,6,AddSymbol("NIL")); if (sp->composite) SetMFValue(result->value,7,AddSymbol("CMP")); else SetMFValue(result->value,7,AddSymbol("EXC")); if (sp->publicVisibility) SetMFValue(result->value,8,AddSymbol("PUB")); else SetMFValue(result->value,8,AddSymbol("PRV")); SetMFValue(result->value,9,AddSymbol(GetCreateAccessorString((void *) sp))); SetMFValue(result->value,10,sp->noWrite ? AddSymbol("NIL") : (void *) sp->overrideMessage); #else if (sp->composite) SetMFValue(result->value,6,AddSymbol("CMP")); else SetMFValue(result->value,6,AddSymbol("EXC")); if (sp->publicVisibility) SetMFValue(result->value,7,AddSymbol("PUB")); else SetMFValue(result->value,7,AddSymbol("PRV")); SetMFValue(result->value,8,AddSymbol(GetCreateAccessorString((void *) sp))); SetMFValue(result->value,9,sp->noWrite ? AddSymbol("NIL") : (void *) sp->overrideMessage); #endif }