We store various bits of data as "expando" properties on the Parser
object, to pass information from one stage of the parser to another. If
the parser is cloned, however, we can run into trouble because two
different Parser objects are now manipulating the same extension data
structure; this often shows up when ParserClearState is called on one
clone and clears the state of the other as well.
Since a deep clone might be too expensive and still might be wrong in
some cases, it seems most useful to simply provide a ParserCloned hook
so extensions can just do The Right Thing.
Change-Id: Ieec65c908d71e89b9a66f83b9a626f842aadacbb
'ParserClearState': called at the end of Parser::clearState()
$parser: Parser object being cleared
+'ParserCloned': called when the parser is cloned
+$parser: Newly-cloned Parser object
+
'ParserFirstCallInit': called when the parser initialises for the first time
&$parser: Parser object being cleared
}
}
+ /**
+ * Allow extensions to clean up when the parser is cloned
+ */
+ function __clone() {
+ wfRunHooks( 'ParserCloned', array( $this ) );
+ }
+
/**
* Do various kinds of initialisation on the first call of the parser
*/