⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exprnbin.c

📁 clips源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
           break;         case FLOAT           :           DecrementFloatCount(theEnv,(FLOAT_HN *) ExpressionData(theEnv)->ExpressionArray[i].value);           break;         case INTEGER         :           DecrementIntegerCount(theEnv,(INTEGER_HN *) ExpressionData(theEnv)->ExpressionArray[i].value);           break;#if DEFTEMPLATE_CONSTRUCT         case FACT_ADDRESS    :           EnvDecrementFactCount(theEnv,ExpressionData(theEnv)->ExpressionArray[i].value);           break;#endif#if OBJECT_SYSTEM         case INSTANCE_ADDRESS :           EnvDecrementInstanceCount(theEnv,ExpressionData(theEnv)->ExpressionArray[i].value);           break;#endif         case RVOID:           break;         default:           if (EvaluationData(theEnv)->PrimitivesArray[ExpressionData(theEnv)->ExpressionArray[i].type] == NULL) break;           if (EvaluationData(theEnv)->PrimitivesArray[ExpressionData(theEnv)->ExpressionArray[i].type]->bitMap)             { DecrementBitMapCount(theEnv,(BITMAP_HN *) ExpressionData(theEnv)->ExpressionArray[i].value); }           break;        }     }   /*===================================*/   /* Free the binary expression array. */   /*===================================*/   space = ExpressionData(theEnv)->NumberOfExpressions * sizeof(struct expr);   if (space != 0) genfree(theEnv,(void *) ExpressionData(theEnv)->ExpressionArray,space);   ExpressionData(theEnv)->ExpressionArray = 0;  }#if BLOAD_AND_BSAVE/***************************************************  NAME         : FindHashedExpressions  DESCRIPTION  : Sets the bsave expression array                 indices for hashed expression nodes                 and marks the items needed by                 these expressions  INPUTS       : None  RETURNS      : Nothing useful  SIDE EFFECTS : Atoms marked and ids set  NOTES        : None ***************************************************/globle void FindHashedExpressions(  void *theEnv)  {   register unsigned i;   EXPRESSION_HN *exphash;   for (i = 0 ; i < EXPRESSION_HASH_SIZE ; i++)     for (exphash = ExpressionData(theEnv)->ExpressionHashTable[i] ; exphash != NULL ; exphash = exphash->next)       {        MarkNeededItems(theEnv,exphash->exp);        exphash->bsaveID = ExpressionData(theEnv)->ExpressionCount;        ExpressionData(theEnv)->ExpressionCount += ExpressionSize(exphash->exp);       }  }/***************************************************  NAME         : BsaveHashedExpressions  DESCRIPTION  : Writes out hashed expressions  INPUTS       : Bsave file stream pointer  RETURNS      : Nothing useful  SIDE EFFECTS : Expressions written  NOTES        : None ***************************************************/globle void BsaveHashedExpressions(  void *theEnv,  FILE *fp)  {   register unsigned i;   EXPRESSION_HN *exphash;   for (i = 0 ; i < EXPRESSION_HASH_SIZE ; i++)     for (exphash = ExpressionData(theEnv)->ExpressionHashTable[i] ; exphash != NULL ; exphash = exphash->next)       BsaveExpression(theEnv,exphash->exp,fp);  }/***************************************************************//* BsaveConstructExpressions: Writes all expression needed by  *//*   constructs for this binary image to the binary save file. *//***************************************************************/globle void BsaveConstructExpressions(  void *theEnv,  FILE *fp)  {   struct BinaryItem *biPtr;   for (biPtr = BsaveData(theEnv)->ListOfBinaryItems;        biPtr != NULL;        biPtr = biPtr->next)     {      if (biPtr->expressionFunction != NULL)        { (*biPtr->expressionFunction)(theEnv,fp); }     }  }/***************************************//* BsaveExpression: Recursively saves  *//*   an expression to the binary file. *//***************************************/globle void BsaveExpression(  void *theEnv,  struct expr *testPtr,  FILE *fp)  {   BSAVE_EXPRESSION newTest;   long int newIndex;   while (testPtr != NULL)     {      ExpressionData(theEnv)->ExpressionCount++;      /*================*/      /* Copy the type. */      /*================*/      newTest.type = testPtr->type;      /*=======================================*/      /* Convert the argList slot to an index. */      /*=======================================*/      if (testPtr->argList == NULL)        { newTest.argList = -1L; }      else        { newTest.argList = ExpressionData(theEnv)->ExpressionCount; }      /*========================================*/      /* Convert the nextArg slot to an index. */      /*========================================*/      if (testPtr->nextArg == NULL)        { newTest.nextArg = -1L; }      else        {         newIndex = ExpressionData(theEnv)->ExpressionCount + ExpressionSize(testPtr->argList);         newTest.nextArg = newIndex;        }      /*=========================*/      /* Convert the value slot. */      /*=========================*/      switch(testPtr->type)        {         case FLOAT:           newTest.value = (long) ((FLOAT_HN *) testPtr->value)->bucket;           break;         case INTEGER:           newTest.value = (long) ((INTEGER_HN *) testPtr->value)->bucket;           break;         case FCALL:           newTest.value = (long) ((struct FunctionDefinition *)                                   testPtr->value)->bsaveIndex;           break;         case GCALL:#if DEFGENERIC_CONSTRUCT           if (testPtr->value != NULL)             newTest.value = ((struct constructHeader *) testPtr->value)->bsaveID;           else#endif             newTest.value = -1L;           break;         case PCALL:#if DEFFUNCTION_CONSTRUCT           if (testPtr->value != NULL)             newTest.value = ((struct constructHeader *) testPtr->value)->bsaveID;           else#endif             newTest.value = -1L;           break;         case DEFTEMPLATE_PTR:#if DEFTEMPLATE_CONSTRUCT           if (testPtr->value != NULL)             newTest.value = ((struct constructHeader *) testPtr->value)->bsaveID;           else#endif             newTest.value = -1L;           break;         case DEFCLASS_PTR:#if OBJECT_SYSTEM           if (testPtr->value != NULL)             newTest.value = ((struct constructHeader *) testPtr->value)->bsaveID;           else#endif             newTest.value = -1L;           break;         case DEFGLOBAL_PTR:#if DEFGLOBAL_CONSTRUCT           if (testPtr->value != NULL)             newTest.value = ((struct defglobal *) testPtr->value)->header.bsaveID;           else#endif             newTest.value = -1L;           break;#if OBJECT_SYSTEM         case INSTANCE_NAME:#endif         case SYMBOL:         case GBL_VARIABLE:         case STRING:           newTest.value = (long) ((SYMBOL_HN *) testPtr->value)->bucket;           break;         case FACT_ADDRESS:         case INSTANCE_ADDRESS:         case EXTERNAL_ADDRESS:           newTest.value = -1L;           break;         case RVOID:           break;         default:           if (EvaluationData(theEnv)->PrimitivesArray[testPtr->type] == NULL) break;           if (EvaluationData(theEnv)->PrimitivesArray[testPtr->type]->bitMap)             { newTest.value = (long) ((BITMAP_HN *) testPtr->value)->bucket; }           break;        }     /*===========================*/     /* Write out the expression. */     /*===========================*/     GenWrite(&newTest,(unsigned long) sizeof(BSAVE_EXPRESSION),fp);     /*==========================*/     /* Write out argument list. */     /*==========================*/     if (testPtr->argList != NULL)       {        BsaveExpression(theEnv,testPtr->argList,fp);       }     testPtr = testPtr->nextArg;    }  }#endif /* BLOAD_AND_BSAVE */#endif /* (BLOAD || BLOAD_ONLY || BLOAD_AND_BSAVE) */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -