Compare Revisions

Using RAII classes in Mozilla

Change Revisions

Revision 510635:

Revision 510635 by Dholbert on

Revision 510637:

Revision 510637 by Dholbert on

Title:
Using RAII classes in Mozilla
Using RAII classes in Mozilla
Slug:
Using_RAII_classes_in_Mozilla
Using_RAII_classes_in_Mozilla
Content:

Revision 510635
Revision 510637
n46  nsAutoScriptBlocker(JSContext *cx <span style="background:yellon46  nsAutoScriptBlocker(JSContext *cx <span style="background:yello
>w">MOZILLA_GUARD_OBJECT_NOTIFIER_PARAM</span>) {//Note: No ',' be>w">MOZ_GUARD_OBJECT_NOTIFIER_PARAM</span>) {//Note: No ',' before
>fore macro> macro
47    <span style="background:yellow">MOZILLA_GUARD_OBJECT_NOTIFIER47    <span style="background:yellow">MOZ_GUARD_OBJECT_NOTIFIER_INI
>_INIT;</span>>T;</span>
n54  <span style="background:yellow">MOZILLA_DECL_USE_GUARD_OBJECT_Nn54  <span style="background:yellow">MOZ_DECL_USE_GUARD_OBJECT_NOTIF
>OTIFIER</span>>IER</span>
n58      MOZILLA_GUARD_OBJECT_NOTIFIER_PARAM is added to the end of n58      MOZ_GUARD_OBJECT_NOTIFIER_PARAM is added to the end of the 
>the constructor's parameter list. MOZILLA_GUARD_OBJECT_NOTIFIER_I>constructor's parameter list. MOZ_GUARD_OBJECT_NOTIFIER_INIT is a
>NIT is added as a statement in the constructor. MOZILLA_DECL_USE_>dded as a statement in the constructor. MOZ_DECL_USE_GUARD_OBJECT
>GUARD_OBJECT_NOTIFIER is added where private members should be de>_NOTIFIER is added where private members should be declared.
>clared. 
n64      First, if the constructor (otherwise) takes no arguments, tn64      First, if the constructor (otherwise) takes no arguments, t
>hen you have to use the MOZILLA_GUARD_OBJECT_NOTIFIER_ONLY_PARAM >hen you have to use the MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM macr
>macro instead. (This is needed because the macro adds a parameter>o instead. (This is needed because the macro adds a parameter onl
> only when DEBUG is defined, and in this case, it can't add the l>y when DEBUG is defined, and in this case, it can't add the leadi
>eading comma.)>ng comma.)
n69  nsAutoScriptBlocker(<span style="background:yellow">MOZILLA_GUAn69  nsAutoScriptBlocker(<span style="background:yellow">MOZ_GUARD_O
>RD_OBJECT_NOTIFIER_ONLY_PARAM</span>) {>BJECT_NOTIFIER_ONLY_PARAM</span>) {
70    <span style="background:yellow">MOZILLA_GUARD_OBJECT_NOTIFIER70    <span style="background:yellow">MOZ_GUARD_OBJECT_NOTIFIER_INI
>_INIT;</span>>T;</span>
n77  <span style="background:yellow">MOZILLA_DECL_USE_GUARD_OBJECT_Nn77  <span style="background:yellow">MOZ_DECL_USE_GUARD_OBJECT_NOTIF
>OTIFIER</span>>IER</span>
n81      Second, if the constructor is not inline, it needs the paran81      Second, if the constructor is not inline, it needs the para
>meter added in its implementation as well. In this case, the impl>meter added in its implementation as well. In this case, the impl
>ementation must use the MOZILLA_GUARD_OBJECT_NOTIFIER_PARAM_IN_IM>ementation must use the MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL m
>PL macro to add to the implementation:>acro to add to the implementation:
n84nsAutoScriptBlocker::nsAutoScriptBlocker(JSContext *cx <span styln84nsAutoScriptBlocker::nsAutoScriptBlocker(JSContext *cx <span styl
>e="background:yellow">MOZILLA_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL>e="background:yellow">MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL</sp
></span>)>an>)
n86    <span style="background:yellow">MOZILLA_GUARD_OBJECT_NOTIFIERn86    <span style="background:yellow">MOZ_GUARD_OBJECT_NOTIFIER_INI
>_INIT;</span>>T;</span>
n94nsAutoScriptBlocker::nsAutoScriptBlocker(<span style="background:n94nsAutoScriptBlocker::nsAutoScriptBlocker(<span style="background:
>yellow">MOZILLA_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_IN_IMPL</span>)>yellow">MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_IN_IMPL</span>)
n96    <span style="background:yellow">MOZILLA_GUARD_OBJECT_NOTIFIERn96    <span style="background:yellow">MOZ_GUARD_OBJECT_NOTIFIER_INI
>_INIT;</span>>T;</span>
n101      Finally, if an RAII class that uses these macros has deriven101      Finally, if an RAII class that uses these macros has derive
>d classes, the derived classes must also use some of the macros i>d classes, the derived classes must also use some of the macros i
>n order to get the benefit of the assertions. In particular, a cl>n order to get the benefit of the assertions. In particular, a cl
>ass derived from a class using these macros does not use MOZILLA_>ass derived from a class using these macros does not use MOZ_GUAR
>GUARD_OBJECT_NOTIFIER_INIT or MOZILLA_DECL_USE_GUARD_OBJECT_NOTIF>D_OBJECT_NOTIFIER_INIT or MOZ_DECL_USE_GUARD_OBJECT_NOTIFIER, but
>IER, but instead uses either MOZILLA_GUARD_OBJECT_NOTIFIER_PARAM_> instead uses either MOZ_GUARD_OBJECT_NOTIFIER_PARAM_TO_PARENT or
>TO_PARENT or MOZILLA_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_TO_PARENT:> MOZ_GUARD_OBJECT_NOTIFIER_ONLY_PARAM_TO_PARENT:
t104nsSpecialAutoScriptBlocker::nsSpecialAutoScriptBlocker(<span stylt104nsSpecialAutoScriptBlocker::nsSpecialAutoScriptBlocker(<span styl
>e="background:yellow">MOZILLA_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL>e="background:yellow">MOZ_GUARD_OBJECT_NOTIFIER_PARAM_IN_IMPL</sp
></span>)>an>)
105  :  nsAutoScriptBlocker(<span style="background:yellow">MOZILLA_105  :  nsAutoScriptBlocker(<span style="background:yellow">MOZ_GUAR
>GUARD_OBJECT_NOTIFIER_ONLY_PARAM_TO_PARENT</span>)>D_OBJECT_NOTIFIER_ONLY_PARAM_TO_PARENT</span>)

Back to History