Hi, We sometimes see offers to contribute, asking what needs to be done. If they know C, how about the 111 FIXMEs? But which ones would be most useful to fix? Which are difficult and which are easy? Does R-core have a process to list and prioritise the FIXMEs? ~/R/Rtrunk/src/main$ grep "[^/]FIXME" * | wc -l 111 ~/R/Rtrunk/src/main$ grep -A 1 "[^/]FIXME" * arithmetic.c:/* FIXME: consider using arithmetic.c- tmp = (long double)x1 - floor(q) * (long double)x2; -- arithmetic.c:/* FIXME: with the y == 2.0 test now at the top that case isn't arithmetic.c- reached here, but i have left it for someone who understands the -- arithmetic.c: /* FIXME: Danger Will Robinson. arithmetic.c- * ----- We might be trashing arguments here. -- array.c: /* FIXME: the following is desirable, but pointless as long as array.c- subset.c & others have a contrary version that leaves the -- attrib.c: /* FIXME: 1.e-5 should rather be == option('ts.eps') !! */ attrib.c- if (fabs(end - start - (n - 1)/frequency) > 1.e-5) -- attrib.c: /* FIXME : The whole "classgets" may as well die. */ attrib.c- -- attrib.c: /* FIXME */ attrib.c- if (nvalues <= 0) -- attrib.c: /* FIXME */ attrib.c- PROTECT(namesattr); -- attrib.c: /* FIXME: the code below treats pair-based structures */ attrib.c- /* in a special way. This can probably be dropped down */ -- base.c:/* FIXME: Make this a macro to avoid function call overhead? base.c- Inline it if you really think it matters. -- bind.c:/* FIXME : is there another possibility? */ bind.c- -- bind.c: /* FIXME: I'm not sure what the author intended when the sequence was bind.c- defined as raw < logical -- it is possible to represent logical as -- builtin.c: /* FIXME -- Rstrlen allows for double-width chars */ builtin.c- width += Rstrlen(STRING_ELT(labs, nlines % lablen), 0) + 1; -- builtin.c: /* FIXME: call EncodeElement() for every element of s. builtin.c- -- builtin.c: /* FIXME : cat(...) should handle ANYTHING */ builtin.c- w = strlen(p); -- character.c: slen = strlen(ss); /* FIXME -- should handle embedded nuls */ character.c- buf = R_AllocStringBuffer(slen+1, &cbuff); -- character.c: FIXME: could prefer UTF-8 here character.c- */ -- character.c: /* FIXME: could use R_Realloc instead */ character.c- cbuf = CallocCharBuf(strlen(tmp) + 1); -- character.c: /* FIXME use this buffer for new string as well */ character.c- wc = (wchar_t *) -- coerce.c:/* FIXME: Use coerce.c- ====-- complex.c:/* FIXME: maybe add full IEC60559 support */ complex.c-static double complex clog(double complex x) -- complex.c:/* FIXME: check/add full IEC60559 support */ complex.c-static double complex cexp(double complex x) -- connections.c: /* FIXME: is this correct for consoles? */ connections.c- checkArity(op, args); -- connections.c:/* FIXME: could do any MBCS locale, but would need pushback */ connections.c-static SEXP -- connections.c: outlen = 1.01 * inlen + 600; /* FIXME, copied from bzip2 */ connections.c- buf = (unsigned char *) R_alloc(outlen, sizeof(unsigned char)); -- datetime.c: /* FIXME some of this should be outside the loop */ datetime.c- int ns, nused = 4; -- dcf.c: /* FIXME: dcf.c- Why are we doing this? -- debug.c: /* FIXME: previous will have <0x....> whereas other values are debug.c- without the < > */ -- deriv.c: /* FIXME: simplify exp(lgamma( E )) = gamma( E ) */ deriv.c- ans = lang2(ExpSymbol, arg1); -- deriv.c: /* FIXME: simplify log(gamma( E )) = lgamma( E ) */ deriv.c- ans = lang2(LogSymbol, arg1); -- deriv.c: /* FIXME */ deriv.c-#ifdef NOTYET -- devices.c: /* <FIXME> Disable this for now */ devices.c- /* -- devices.c: /* FIXME: There should really be a formal graphics finaliser devices.c- * but this is a good proxy for now. -- devices.c: /* FIXME: there should be a way for a device to declare its own devices.c- events, and return information on how to set them */ -- dounzip.c: filename is in UTF-8, so FIXME */ dounzip.c- SET_STRING_ELT(names, i, mkChar(filename_inzip)); -- duplicate.c: <FIXME>: surely memcpy would be faster here? duplicate.c-*/ -- engine.c: /* FIXME: what about clipping? (if the device can't) engine.c- */ -- engine.c: /* FIXME: what about clipping? (if the device can't) engine.c- * Maybe not too bad because it is just a matter of shaving off -- engine.c: /* FIXME: This assumes that wchar_t is UCS-2/4, engine.c- since that is what GEMetricInfo expects */ -- engine.c:/* FIXME: should we warn on more than one character here? */ engine.c-int GEstring_to_pch(SEXP pch) -- envir.c: FIXME ? should this also unbind the symbol value slot when rho is envir.c- R_BaseEnv. -- envir.c: /* FIXME: This does not behave as described */ envir.c- R_ObjectTable *table; -- envir.c: /* FIXME: should we install them all?) */ envir.c- -- envir.c: /* FIXME: duplicate the hash table and assign here */ envir.c- } else { -- envir.c: /* FIXME: A little inefficient */ envir.c- while (R_HashSizeCheck(HASHTAB(s))) -- errors.c: /**** FIXME: should probably pre-allocate this */ errors.c- SEXP cond, klass; -- eval.c: /* Use the default code for unbound formals. FIXME: It looks like eval.c- this code should preceed the building of the environment so that -- eval.c: /* The default return value is NULL. FIXME: Is this really needed eval.c- or do we always get a sensible value returned? */ -- eval.c:/* **** FIXME: This code is factored out of applyClosure. If we keep eval.c- **** it we should change applyClosure to run through this routine -- eval.c: /* The default return value is NULL. FIXME: Is this really needed eval.c- or do we always get a sensible value returned? */ -- eval.c:/* **** FIXME: Temporary code to execute S4 methods in a way that eval.c- **** preserves lexical scope. */ -- eval.c: /* FIXME: We need to ensure that this works for hashed eval.c- environments. This code only works for unhashed ones. the -- eval.c: /* FIXME: This strategy will not work when we are working in the eval.c- data frame defined by the system hash table. The structure there -- format.c: /* FIXME: we should really test for floorl, also C99. format.c- But FreeBSD 7.x does have it, but not nearbyintl */ -- gram.c: f = R_atof(s); /* FIXME: make certain the value is legitimate. */ gram.c- -- gramLatex.c: /* FIXME: check that begin and end match */ gramLatex.c- setAttrib(ans, R_SrcrefSymbol, makeSrcref(lloc, SrcFile)); -- gramLatex.y: /* FIXME: check that begin and end match */ gramLatex.y- setAttrib(ans, R_SrcrefSymbol, makeSrcref(lloc, SrcFile)); -- gram.y: f = R_atof(s); /* FIXME: make certain the value is legitimate. */ gram.y- -- graphics.c: case 's':/* FIXME --- implement 's' and 'e' axis styles ! */ graphics.c- case 'e': -- graphics.c:/* FIXME: reorganize this as a memcpy */ graphics.c- -- grep.c:/* FIXME: make more robust, and public */ grep.c-static SEXP mkCharWLen(const wchar_t *wc, int nc) -- grep.c: strings, but <MBCS-FIXME> it would be more grep.c- efficient to skip along by chars. -- grep.c: if (ptag.rm_eo == 0) { /* empty string matched => trouble; FIXME: we may want to consider just advancing anyway */ grep.c- int infinite_match = 1; -- grep.c:/* FIXME: use UCP for upper/lower conversion */ grep.c-static -- grep.c: /* FIXME perhaps we ought to check validity here */ grep.c- len = strlen(string); -- inspect.c:/* FIXME: envir.c keeps this private - it should probably go to Defn.h */ inspect.c-#define FRAME_LOCK_MASK (1<<14) -- main.c:/* FIXME: this should be re-written to use Rf_ReplIteration main.c- since it gets out of sync with it over time */ -- main.c: /* <FIXME> may need to reinstall this if we do recover. */ main.c- struct sigaction sa; -- memory.c:/* FIXME: consider inlining here */ memory.c-/* this has NA_STRING = NA_STRING */ -- model.c: /* FIXME: this includes specials in the model */ model.c- /* There perhaps needs to be a an extra pass */ -- model.c: /* FIXME: this is also the point where nesting */ model.c- /* needs to be taken care of. */ -- model.c: /* FIXME: We need to allow a third argument to this function */ model.c- /* which allows us to specify contrasts directly. That argument */ -- model.c: /* FIXME : The body within these two loops should be embedded */ model.c- /* in its own function. */ -- objects.c: // FIXME: fails if 'methods' is not attached. objects.c- PROTECT(clEnvCall = lang2(meth_classEnv, cl)); -- par.c:/* <FIXME> do not need separate macros for a = b = c and b = a c */ par.c-#define R_DEV__(_P_) dpptr(dd)->_P_ = gpptr(dd)->_P_ -- platform.c: /* FIXME convert to UTF-8 on Windows */ platform.c- for (i = 0; i < n; i++) { -- platform.c: /* FIXME: there are higher-resolution ways to do this on Windows */ platform.c- REAL(mtime)[i] = (double) sb.st_mtime; -- platform.c: if (over || !R_WFileExists(dest)) { /* FIXME */ platform.c- if ((fp1 = _wfopen(this, L"rb")) == NULL || -- platform.c: /* FIXME: perhaps manipulate mode as we do in Sys.chmod? */ platform.c- if(perms) _wchmod(dest, sb.st_mode & 0777); -- plot3d.c:/* FIXME - This could pretty easily be adapted to handle NA */ plot3d.c-/* values on the grid. Just search the diagonals for cutpoints */ -- plot3d.c:/* FIXME: [Code consistency] Use macro for the parallel parts of plot3d.c- do_contour, do_filledcontour & do_image ... -- plot.c: FIXME: bg needs similar change, but that requires changes to plot.c- the specific drivers. */ -- plot.c: /* FIXME: should this skip 0-sized symbols? */ plot.c- thiscol = INTEGER(col)[i % ncol]; -- plot.c: /* FIXME? plot.c- * Seems like the logic here is just draw from xmin to xmax -- plot.c: /* FIXME: should this skip 0-sized symbols? */ plot.c- GRect(xx - rx, yy - rx, xx + rx, yy + rx, DEVICE, -- plot.c: /* FIXME: should this skip 0-sized symbols? */ plot.c- GRect(xx - rx, yy - ry, xx + rx, yy + ry, DEVICE, -- plot.c: /* FIXME: should this skip 0-sized symbols? */ plot.c- for(j = 0; j < nc; j++) { -- printarray.c:/* FIXME: sort out encodings */ printarray.c-/* We need display width of a string */ -- printarray.c: if(r_pr < r) /* FIXME? use _P() and "Defn.h" ? */ printarray.c- Rprintf(ngettext(" [ reached getOption(\"max.print\") -- omitted last row ]]\n", -- printarray.c: if(r_pr < r) /* FIXME? use _P() and "Defn.h" ? */ printarray.c- Rprintf(" [ reached getOption(\"max.print\") -- omitted %d rows ]]\n", -- print.c: * <FIXME> These routines are not re-entrant: they reset the print.c- * global R_print. -- print.c:/* FIXME : We need a general mechanism for "rendering" symbols. */ print.c-/* It should make sure that it quotes when there are special */ -- print.c: /* FIXME: check (ns <= R_print.max +1) ? ns : R_print.max; */ print.c- for (i = 0; i < ns; i++) { -- printutils.c:/* <FIXME> printutils.c- encodeString and Rstrwid assume that the wchar_t representation -- saveload.c: /* FIXME: rather than use strlen, use actual length of string when saveload.c- * sized strings get implemented in R's save/load code. */ -- saveload.c: /* FIXME : Ultimately we need to replace */ saveload.c- /* this with a real string allocation. */ -- scan.c: goto inquote; /* FIXME: Ick! Clean up logic */ scan.c- } -- seq.c: /* FIXME: possibly UTF-8 version */ seq.c- for (i = 0; i < nls; i++) { -- serialize.c: stream->OutBytes(stream, (void *)s, length); /* FIXME: is this case right? */ serialize.c-} -- subassign.c: /* FIXME : this should be a shallow copy for list */ subassign.c- /* objects. A full duplication is wasteful. */ -- subassign.c: /* FIXME : this should be a shallow copy for list */ subassign.c- /* objects. A full duplication is wasteful. */ -- subassign.c: /* FIXME : this should be a shallow copy for list */ subassign.c- /* objects. A full duplication is wasteful. */ -- subassign.c: /* FIXME: add name */ subassign.c- UNPROTECT(1); -- subset.c: /* FIXME: this is wrong, because the slots are gone, so result is an invalid object of the S4 class! JMC 3/3/09 */ subset.c-#ifdef _S4_subsettable -- subset.c: /* FIXME: replace the test by isNull ... ? */ subset.c- -- summary.c: /* FIXME : Need to be careful with the use of isVector() */ summary.c- /* since this includes lists and expressions. */ -- summary.c: /* FIXME : there is a lot of shared code here for vectors. */ summary.c- /* It should be abstracted out and optimized. */ -- summary.c: /* FIXME : using mod like this causes */ summary.c- /* a potential performance hit. */ -- sysutils.c: /* FIXME, is Cocoa's interface not const char*? */ sysutils.c- cmdcpy = acopy_string(command); -- unique.c: <FIXME> Integer keys are wasteful for logical and raw vectors, unique.c- but the tables are small in that case. -- unique.c: /* <FIXME> unique.c- Currently no hashing when using bytes. $