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

📄 gen-free.c

📁 asn to c编译器 源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
*/}  /*  PrintCFreeDefine */static voidPrintCFreeLocals PARAMS ((src, td),    FILE *src _AND_    TypeDef *td){    fprintf (src, "\n");    if((td->type->basicType->choiceId == BASICTYPE_SETOF) ||        (td->type->basicType->choiceId == BASICTYPE_SEQUENCEOF))    {        fprintf (src,"\tAsnListNode *l;\n");        fprintf (src,"\tAsnListNode *tmp;\n");    }}  /*  PrintCFreeLocals */static voidPrintCFreeElmts PARAMS ((src, td, parent, elmts, varName),    FILE *src _AND_    TypeDef *td _AND_    Type *parent _AND_    NamedTypeList *elmts _AND_    char *varName){    NamedType *e;    if(elmts == NULL)    {        fprintf (src,"/* ERROR? - expected elmts for this type*/\n");        return;    }    FOR_EACH_LIST_ELMT (e, elmts)        PrintCElmtFree (src, td, parent, e->type, varName);}  /* PrintCFreeElmts *//* * Prints code for encoding the elmts of a SEQ or SET */static voidPrintCElmtFree PARAMS ((src, td, parent, e, varName),    FILE *src _AND_    TypeDef *td _AND_    Type *parent _AND_    Type *e _AND_    char *varName){    CTRI *ctri;    char elmtVarRef[MAX_VAR_REF];    if((e == NULL) || (e->cTypeRefInfo == NULL))        return;    ctri =  e->cTypeRefInfo;    /* build ref to the elmt */    MakeVarPtrRef (genFreeCRulesG, td, parent, e, varName, elmtVarRef);    /* if optional then put in NULL check */    if(e->optional || (e->defaultVal != NULL))        fprintf (src, "\tif(%s (%s))\n    {\n", ctri->optTestRoutineName, elmtVarRef);    /* free contents of elmt first */    switch(ctri->cTypeId)    {        case C_ANY:        case C_ANYDEFINEDBY:        case C_LIB:        case C_TYPEREF:            fprintf (src,"\t%s%s;", ctri->freeRoutineName, elmtVarRef);            break;        case C_LIST:            PrintCFreeListElmts (src, td, e, elmtVarRef);            break;        /*         * this  follwing shouldn't happen since embedded         * choices/struct are moved to separate typedefs         * in normalize.c.         */        case C_CHOICE:            PrintCFreeChoiceElmts (src, td, e, elmtVarRef);            break;        case C_STRUCT:            PrintCFreeElmts (src, td, e, e->basicType->a.set, elmtVarRef);            break;		case C_MACROTYPE:            break;        case C_NO_TYPE:            break;        default:            fprintf (errFileG, "PrintCElmtFree: ERROR - unknown c type id\n");            break;    }    /* free elmt itself if it is ref'd by ptr */    if(ctri->isPtr)        fprintf (src,"\n\tAsn1Free (%s);\n",elmtVarRef);    /* write closing brkt for NULL check for optional elmts */    if(e->optional || (e->defaultVal != NULL))        fprintf (src, "\n\t}\n");    fprintf (src,"\n");}  /*  PrintCElmtFree *//*static voidPrintCFreeListDefine PARAMS ((hdr, td),    FILE *hdr _AND_    TypeDef *td){    fprintf(hdr, "#define %s(v)  ", td->cTypeDefInfo->freeRoutineName);    fprintf (hdr, "ASN1_FREE_LIST (v, %s)", td->type->cTypeRefInfo->freeRoutineName);}*/static voidPrintCFreeListRoutineBody PARAMS ((src, td, t, varName),    FILE *src _AND_    TypeDef *td _AND_    Type *t _AND_    char *varName){    Type *e;    CTRI *ctri;    char *elmtVarRef;    fprintf (src,"\tfor (l = FIRST_LIST_NODE (%s); l != NULL; )\n", varName);    fprintf (src,"\t{\n");    e = t->basicType->a.setOf;    ctri = e->cTypeRefInfo;    elmtVarRef = "(l->data)";    switch(ctri->cTypeId)    {		case C_ANY:        case C_LIB:        case C_TYPEREF:            fprintf (src,"\t\t%s (%s);\n", ctri->freeRoutineName, elmtVarRef);            break;        case C_LIST:            PrintCFreeListElmts (src, td, e, elmtVarRef);            break;        /*         * this  follwing shouldn't happen since embedded         * choices/struct are moved to separate typedefs         * in normalize.c.         */        case C_CHOICE:            PrintCFreeChoiceElmts (src, td, e, elmtVarRef);            break;        case C_STRUCT:            PrintCFreeElmts (src, td, e, e->basicType->a.set, elmtVarRef);            break;		case C_MACROTYPE:            break;        case C_NO_TYPE:            break;        default:            fprintf (errFileG, "PrintCElmtFree: ERROR - unknown c type id\n");            break;    }    fprintf (src,"\t\ttmp = l->next;\n");    fprintf (src,"\t\tAsn1Free (l->data);\n");    fprintf (src,"\t\tAsn1Free (l);\n");    fprintf (src,"\t\tl = tmp;\n");    fprintf (src,"\t}\n");}static voidPrintCFreeListElmts PARAMS ((src, td, t, varName),    FILE *src _AND_    TypeDef *td _AND_    Type *t _AND_    char *varName){    Type *e;    CTRI *ctri;    char *elmtVarRef;    fprintf (src,"\t{\n");    fprintf (src,"\t\tAsnListNode *l;\n");    fprintf (src,"\t\tAsnListNode *tmp;\n");    fprintf (src,"\t\tfor (l = FIRST_LIST_NODE (%s); l != NULL; )\n", varName);    fprintf (src,"\t\t{\n");    e = t->basicType->a.setOf;    ctri = e->cTypeRefInfo;    elmtVarRef = "(l->data)";    switch(ctri->cTypeId)    {        case C_LIB:        case C_TYPEREF:            fprintf (src,"\t\t%s (%s);\n", ctri->freeRoutineName, elmtVarRef);            break;        case C_LIST:            PrintCFreeListElmts (src, td, e, elmtVarRef);            break;        /*         * this  follwing shouldn't happen since embedded         * choices/struct are moved to separate typedefs         * in normalize.c.         */        case C_CHOICE:            PrintCFreeChoiceElmts (src, td, e, elmtVarRef);            break;        case C_STRUCT:            PrintCFreeElmts (src, td, e, e->basicType->a.set, elmtVarRef);            break;		case C_MACROTYPE:            break;        case C_NO_TYPE:            break;        default:            fprintf (errFileG, "PrintCElmtFree: ERROR - unknown c type id\n");            break;    }    fprintf (src,"\t\t   tmp = l->next;\n");    fprintf (src,"\t\t   Asn1Free (l->data);\n");    fprintf (src,"\t\t   Asn1Free (l);\n");    fprintf (src,"\t\t   l = tmp;\n");    fprintf (src,"\t\t}\n");    fprintf (src,"\t}\n");} /* PrintCFreeListELmts */static voidPrintCFreeChoiceElmts PARAMS ((src, td, t, varName),    FILE *src _AND_    TypeDef *td _AND_    Type *t _AND_    char *varName){    NamedType *e;    CTRI *ctri;    void *tmp;    ctri =  t->cTypeRefInfo;    fprintf (src,"\tswitch(%s->%s)\n    {\n", varName, ctri->choiceIdEnumFieldName);    FOR_EACH_LIST_ELMT (e, t->basicType->a.choice)    {        tmp = (void*)CURR_LIST_NODE (t->basicType->a.choice);        if(e->type == NULL)            continue;        ctri =  e->type->cTypeRefInfo;        if(e->type->cTypeRefInfo == NULL)            fprintf (src, "\t   case ????:\n");        else if(ctri->isPtr)        {            fprintf (src, "\t   case %s:\n", ctri->choiceIdSymbol);            PrintCElmtFree (src, td, t, e->type, varName);            fprintf (src,"\tbreak;\n\n");        }        SET_CURR_LIST_NODE (t->basicType->a.choice, tmp);    }    fprintf (src, "\t}\n");}

⌨️ 快捷键说明

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