/** @brief callback function called on definition of the union case labels in the IDL input file. * * Generate code for the following IDL construct: * @verbatim union <union-name> switch(<switch-type>) { => case label1.1; .. case label1.n; <union-case-1>; => case label2.1; .. case label2.n; ... ... => case labeln.1; .. case labeln.n; <union-case-n>; default: <union-case-m>; }; @endverbatim * * @param scope Current scope (the union the labels are defined in) * @param labelSpec Specifies the number of labels of the union case */ static void idl_unionLabelOpenClose( idl_scope ownScope, idl_labelVal labelVal, void *userData) { if (idl_labelValType(labelVal) != idl_ldefault) { caseIsDefault = FALSE; labelIter = os_iterAppend(labelIter, idl_valueFromLabelVal(labelVal)); labelsUsedIter = os_iterAppend(labelsUsedIter, idl_valueFromLabelVal(labelVal)); } else { caseIsDefault = TRUE; labelIter = os_iterAppend(labelIter, idl_valueFromLabelVal(idl_labelDefaultAlternative(idl_labelDefault(labelVal)))); } }
os_iter os_iterCopy( os_iter iter) { os_iterNode n; os_iter l = NULL; if (iter == NULL) { return NULL; } n = iter->head; while (n != NULL) { l = os_iterAppend(l,n->object); n = n->next; } if(l){ l->tail = iter->tail; } return l; }
static void newMeta( idl_scope scope, const char *name, idl_typeSpec typeSpec) { idl_meta meta; meta = os_malloc(C_SIZEOF(idl_meta)); if (meta) { meta->scope = idl_scopeDup(scope); meta->name = os_strdup(name); if (idl_typeSpecType(typeSpec) == idl_ttypedef) { meta->actual_name = idl_typeSpecName(idl_typeDefActual(idl_typeDef(typeSpec))); } else { meta->actual_name = idl_typeSpecName(typeSpec); } meta->type = idl_typeSpecDef(typeSpec); } idlpp_metaList = os_iterAppend(idlpp_metaList, meta); }
os_result idl_genJavaHelperAddPackageRedirect ( const os_char *optarg) { idl_packageRedirect exists, redirect = NULL; os_char *colon; os_char *module = NULL; os_char *package = NULL; os_char *trim = NULL; os_result result = os_resultSuccess; assert (optarg != NULL); colon = os_index (optarg, ':'); if (colon != NULL) { if (colon == optarg) { module = NULL; } else { module = os_strndup (optarg, (size_t) (colon - optarg)); if (module != NULL) { if ((trim = os_str_trim (module, "./:")) != module) { os_free (module); } module = trim; } if (module == NULL) { result = os_resultFail; } else if (strlen (module) == 0) { os_free (module); module = NULL; } } package = os_strdup (colon + 1); if ((trim = os_str_trim (package, "./:")) != package) { os_free (package); } package = trim; if (strlen (package) == 0) { result = os_resultInvalid; } redirect = os_malloc (OS_SIZEOF (idl_packageRedirect)); if (result == os_resultSuccess) { redirect->module = module; redirect->package = package; exists = os_iterResolve ( idl_genJavaHelperPackageRedirects, &idl_genJavaHelperComparePackageRedirect, redirect); if (exists != NULL) { result = os_resultInvalid; } else { idl_genJavaHelperPackageRedirects = os_iterAppend ( idl_genJavaHelperPackageRedirects, redirect); /* idl_genJavaHelperPackageRedirect must be sorted */ os_iterSort ( idl_genJavaHelperPackageRedirects, &idl_genJavaHelperComparePackageRedirect, OS_FALSE); } } if (result != os_resultSuccess) { os_free (module); os_free (package); os_free (redirect); } } else { result = os_resultInvalid; } return result; }