XPCOMGC/Stack Pointers: Difference between revisions
< XPCOMGC
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 12: | Line 12: | ||
<pre> nsFoo::Function(nsISupports* gah) | <pre> nsFoo::Function(nsISupports* gah) | ||
{ | { | ||
//rewrite stack declarations | |||
- nsCOMPtr<nsIBar> bar; | - nsCOMPtr<nsIBar> bar; | ||
+ nsIBar* bar; | + nsIBar* bar; | ||
// support multi-var declarations | |||
- nsCOMPtr<nsIBaz> boo, gahbaz = do_QueryInterface(gah); | - nsCOMPtr<nsIBaz> boo, gahbaz = do_QueryInterface(gah); | ||
+ nsIBaz* boo, *gahbaz = do_QueryInterface(gah); | + nsIBaz* boo, *gahbaz = do_QueryInterface(gah); | ||
// Don't use getter_AddRefs for stack variables | |||
- nsresult rv = gahbaz->GetBar(getter_AddRefs(bar)); | - nsresult rv = gahbaz->GetBar(getter_AddRefs(bar)); | ||
+ nsresult rv = gahbaz->GetBar(&bar); | + nsresult rv = gahbaz->GetBar(&bar); | ||
// Make the getter_AddRefs downcasting magic explicit | |||
- Function(getter_AddRefs(boo)); | |||
+ Function((nsISupports**)&boo); | |||
// keep heap-allocated variables untouched | |||
gahbaz->GetBar(getter_AddRefs(mClassMember)); | |||
}</pre> | }</pre> | ||
Revision as of 22:16, 12 October 2007
Automatic rewriting spec for XPCOMGC:
Detect every instance of nsCOMPtr that is used as a stack variable, and rewrite it to be a raw pointer.
- Remove use of getter_AddRefs with these objects.
- Rewrite nsCOMPtr::swap()
- Remove nsCOMPtr::get() for stack vars
- Function return values & parameters are part of the stack
- Rewrite already_AddRefed<Foo> return values
- Rewrite nsCOMPtr &bla parameters
e.g.
nsFoo::Function(nsISupports* gah)
{
//rewrite stack declarations
- nsCOMPtr<nsIBar> bar;
+ nsIBar* bar;
// support multi-var declarations
- nsCOMPtr<nsIBaz> boo, gahbaz = do_QueryInterface(gah);
+ nsIBaz* boo, *gahbaz = do_QueryInterface(gah);
// Don't use getter_AddRefs for stack variables
- nsresult rv = gahbaz->GetBar(getter_AddRefs(bar));
+ nsresult rv = gahbaz->GetBar(&bar);
// Make the getter_AddRefs downcasting magic explicit
- Function(getter_AddRefs(boo));
+ Function((nsISupports**)&boo);
// keep heap-allocated variables untouched
gahbaz->GetBar(getter_AddRefs(mClassMember));
}