+ case 'c': /* cost centre label select */
+ case 'm': /* cost centre module select */
+ case 'd': /* closure descr select */
+ case 'y': /* closure type select */
+ {char *left = strchr(rts_argv[arg], '{');
+ char *right = strrchr(rts_argv[arg], '}');
+ if (! left || ! right ||
+ strrchr(rts_argv[arg], '{') != left ||
+ strchr(rts_argv[arg], '}') != right) {
+ prog_belch(
+ "Invalid heap profiling selection bracketing\n %s\n",
+ rts_argv[arg]);
+ error = rtsTrue;
+ } else {
+ *right = '\0';
+ switch (rts_argv[arg][2]) {
+ case 'c': /* cost centre label select */
+ RtsFlags.ProfFlags.ccSelector = left + 1;
+ break;
+ case 'm': /* cost centre module select */
+ RtsFlags.ProfFlags.modSelector = left + 1;
+ break;
+ case 'd': /* closure descr select */
+ RtsFlags.ProfFlags.descrSelector = left + 1;
+ break;
+ case 'y': /* closure type select */
+ RtsFlags.ProfFlags.typeSelector = left + 1;
+ break;
+ }
+ }
+ }
+ break;