18.06.2011, в 22:15, Maciej Stachowiak написал(а): > - I think having a rule for using PassRefPtr for arguments that depends on > how callers use the function is likely to be hard to use in practice, since > it requires global knowledge of all callers to pick the right function > signature. The rule I prefer is that if a function takes ownership of the > argument, whether or not we currently have a caller that gives away > ownership, the function should take PassRefPtr. If it does not take > ownership, it should take a raw pointer. That way you can decide the right > thing to do based solely on the definition of the function itself.
Using PassRefPtr for arguments is a fairly common source of bugs. The way it's zeroed out after being used has caused crashes in code paths that weren't tested before commit for some reason (see e.g. <https://bugs.webkit.org/show_bug.cgi?id=52981>). Another example that we've just seen (<https://bugs.webkit.org/show_bug.cgi?id=62836>) was when a different compiler had a different order of evaluation, so building with it suddenly exposed a crash that we didn't need to have. Looking at either bug, using PassRefPtr is pointless. For trace(), we could theoretically pass ownership from jsConsolePrototypeFunctionTrace(), but we do not, and micro-optimizing Console functions for performance isn't worth the cost of having had this crasher bug in my opinion. For bug 62836, it's quite clearly impossible to pass ownership to HTMLTableRowsCollection. - WBR, Alexey Proskuryakov _______________________________________________ webkit-dev mailing list webkit-dev@lists.webkit.org http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev