📄 gen-print.c
字号:
const char* tabStr = "\t"; ctri = e->type->cTypeRefInfo; /* this assumes the elmts->curr == e */ inTailOpts = IsTailOptional (elmts); /* build ref to the elmt */ MakeVarPtrRef (genPrintCRulesG, td, parent, e->type, varName, elmtVarRef); /* if optional then put in NULL check */ if (e->type->optional || (e->type->defaultVal != NULL)) { fprintf (src, "\tif (%s (%s))\n {\n", ctri->optTestRoutineName, elmtVarRef); tabStr = "\t\t"; } if (allOpt) { if (e != FIRST_LIST_ELMT (elmts)) { fprintf (src, "%sif (!nonePrinted)\n", tabStr); fprintf (src, "%s\tfprintf (f, \",\\n\");\n", tabStr); } fprintf (src, "%snonePrinted = FALSE;\n", tabStr); } else if ((inTailOpts) && (e != FIRST_LIST_ELMT (elmts))) fprintf (src, "%sfprintf (f, \",\\n\");\n", tabStr); fprintf (src, "%sIndent (f, indent + 1);\n", tabStr); if (e->fieldName != NULL) fprintf (src, "%sfprintf (f, \"%s \");\n", tabStr, e->fieldName); fprintf (src, "%s%s (f, %s, indent + 1);\n", tabStr, e->type->cTypeRefInfo->printRoutineName, elmtVarRef); if ((e != LAST_LIST_ELMT (elmts)) && (!inTailOpts) && (!NextIsTailOptional (elmts))) fprintf (src, "%sfprintf (f, \",\\n\");\n", tabStr); /* write closing brkt for NULL check for optional elmts */ if (e->type->optional || (e->type->defaultVal != NULL)) fprintf (src, "\t}\n");} /* PrintCElmtPrintWithIndent */static voidPrintCChoicePrintRoutine PARAMS ((src, hdr, r, mods, m, td), FILE *src _AND_ FILE *hdr _AND_ CRules *r _AND_ ModuleList *mods _AND_ Module *m _AND_ TypeDef *td){ NamedType *e; PrintCPrintPrototype (hdr, td); PrintCPrintDeclaration (src, td); fprintf (src, "{\n"); PrintCPrintLocals (src, td); fprintf (src, "\tswitch (%s->%s)\n", valueArgNameG, td->type->cTypeRefInfo->choiceIdEnumFieldName); fprintf (src, "\t{\n"); FOR_EACH_LIST_ELMT (e, td->type->basicType->a.choice) { fprintf (src, "\tcase %s:\n",e->type->cTypeRefInfo->choiceIdSymbol); PrintCChoiceElmtPrint (src, td, td->type, td->type->basicType->a.choice, e, valueArgNameG); fprintf (src, "\t\tbreak;\n\n"); } fprintf (src, "\t}\n"); fprintf (src,"} /* %s */\n\n", td->cTypeDefInfo->printRoutineName); m = m; mods = mods; r = r; /*AVOIDS warning.*/} /* PrintCChoicePrintRoutine */static voidPrintCSetPrintRoutine PARAMS ((src, hdr, r, mods, m, td), FILE *src _AND_ FILE *hdr _AND_ CRules *r _AND_ ModuleList *mods _AND_ Module *m _AND_ TypeDef *td){ NamedType *e; int allOpt; PrintCPrintPrototype (hdr, td); PrintCPrintDeclaration (src, td); fprintf (src, "{\n"); PrintCPrintLocals (src, td); allOpt = AllElmtsOptional (td->type->basicType->a.set); /* * print extra local variable so commas are handled correctly * when all elements are optional */ if (allOpt) fprintf (src, "\tint nonePrinted = TRUE;\n\n"); fprintf (src, "\tif (%s == NULL)\n", valueArgNameG); fprintf (src, "\t\treturn;\n\n"); fprintf (src, "\tfprintf (f,\"{ -- SET --\\n\");\n\n"); FOR_EACH_LIST_ELMT (e, td->type->basicType->a.set) { PrintCElmtPrintWithIndent (src, td, td->type, td->type->basicType->a.set, e, valueArgNameG, allOpt); } fprintf (src, "\tfprintf (f, \"\\n\");\n"); fprintf (src, "\tIndent (f, indent);\n"); fprintf (src, "\tfprintf (f, \"}\");\n"); fprintf (src, "} /* %s */\n\n", td->cTypeDefInfo->printRoutineName); m = m; mods = mods;r = r; /*AVOIDS warning.*/} /* PrintCSetPrintRoutine */static voidPrintCSeqPrintRoutine PARAMS ((src, hdr, r, mods, m, td), FILE *src _AND_ FILE *hdr _AND_ CRules *r _AND_ ModuleList *mods _AND_ Module *m _AND_ TypeDef *td){ NamedType *e; int allOpt; PrintCPrintPrototype (hdr, td); PrintCPrintDeclaration (src, td); fprintf (src, "{\n"); PrintCPrintLocals (src, td); allOpt = AllElmtsOptional (td->type->basicType->a.set); /* * print extra local variable so commas are handled correctly * when all elements are optional */ if (allOpt) fprintf (src, "\tint nonePrinted = TRUE;\n\n"); fprintf (src, "\tif (%s == NULL)\n", valueArgNameG); fprintf (src, "\t\treturn;\n\n"); fprintf (src, "\tfprintf (f, \"{ -- SEQUENCE --\\n\");\n\n"); FOR_EACH_LIST_ELMT (e, td->type->basicType->a.sequence) { PrintCElmtPrintWithIndent (src, td, td->type, td->type->basicType->a.sequence, e, valueArgNameG, allOpt); } fprintf (src, "\tfprintf (f, \"\\n\");\n"); fprintf (src, "\tIndent (f, indent);\n"); fprintf (src, "\tfprintf (f, \"}\");\n"); fprintf (src, "} /* %s */\n\n", td->cTypeDefInfo->printRoutineName); m = m;mods = mods;r = r; /*AVOIDS warning.*/} /* PrintCSeqPrintRoutine */static voidPrintCSetOfPrintRoutine PARAMS ((src, hdr, r, mods, m, td), FILE *src _AND_ FILE *hdr _AND_ CRules *r _AND_ ModuleList *mods _AND_ Module *m _AND_ TypeDef *td){ PrintCPrintPrototype (hdr, td); PrintCPrintDeclaration (src, td); fprintf (src, "{\n"); PrintCPrintLocals (src, td); fprintf (src, "\t%s *tmp;\n", td->type->basicType->a.setOf->cTypeRefInfo->cTypeName); fprintf (src, "\tif (%s == NULL)\n", valueArgNameG); fprintf (src, "\t\treturn;\n"); fprintf (src, "\tfprintf (f, \"{ -- SET OF -- \\n\");\n"); fprintf (src, "\tFOR_EACH_LIST_ELMT (tmp, %s)\n", valueArgNameG); fprintf (src, "\t{\n"); fprintf (src, "\t\tIndent (f, indent + 1);\n"); fprintf (src, "\t\t%s (f, tmp, indent + 1);\n", td->type->basicType->a.setOf->cTypeRefInfo->printRoutineName); fprintf (src, "\t\tif (tmp != (%s*)LAST_LIST_ELMT (%s))\n", td->type->basicType->a.setOf->cTypeRefInfo->cTypeName, valueArgNameG); fprintf (src, "\t\t\tfprintf (f, \",\\n\");\n"); fprintf (src, "\t}\n"); fprintf (src, "\tfprintf (f, \"\\n\");\n"); fprintf (src, "\tIndent (f, indent);\n"); fprintf (src, "\tfprintf (f, \"}\");\n"); fprintf (src, "} /* %s */\n\n", td->cTypeDefInfo->printRoutineName); m = m;mods = mods;r = r; /*AVOIDS warning.*/} /* PrintCSetOfPrintRoutine */static voidPrintCSeqOfPrintRoutine PARAMS ((src, hdr, r, mods, m, td), FILE *src _AND_ FILE *hdr _AND_ CRules *r _AND_ ModuleList *mods _AND_ Module *m _AND_ TypeDef *td){ PrintCPrintPrototype (hdr, td); PrintCPrintDeclaration (src, td); fprintf (src, "{\n"); PrintCPrintLocals (src, td); fprintf (src, "\t%s *tmp;\n", td->type->basicType->a.setOf->cTypeRefInfo->cTypeName); fprintf (src, "\tif (%s == NULL)\n", valueArgNameG); fprintf (src, "\t\treturn;\n"); fprintf (src, "\tfprintf (f, \"{ -- SEQUENCE OF -- \\n\");\n"); fprintf (src, "\tFOR_EACH_LIST_ELMT (tmp, %s)\n", valueArgNameG); fprintf (src, "\t{\n"); fprintf (src, "\t\tIndent (f, indent+ 1);\n"); fprintf (src, "\t\t%s (f, tmp, indent + 1);\n", td->type->basicType->a.setOf->cTypeRefInfo->printRoutineName); fprintf (src, "\t\tif (tmp != (%s*)LAST_LIST_ELMT (%s))\n", td->type->basicType->a.setOf->cTypeRefInfo->cTypeName, valueArgNameG); fprintf (src, "\t\t\tfprintf (f, \",\\n\");\n"); fprintf (src, "\t}\n"); fprintf (src, "\tfprintf (f, \"\\n\");\n"); fprintf (src, "\tIndent (f, indent);\n"); fprintf (src, "\tfprintf (f, \"}\");\n"); fprintf (src, "} /* %s */\n\n", td->cTypeDefInfo->printRoutineName); m=m;mods=mods;r=r; /*AVOIDS warning.*/} /* PrintCSeqOfPrintRoutine */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -