Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAtsushi Eno <atsushieno@gmail.com>2005-03-22 15:32:31 +0300
committerAtsushi Eno <atsushieno@gmail.com>2005-03-22 15:32:31 +0300
commite6503839bbdc27a3ffe99d62a39e4d32f26fdac2 (patch)
treeb4bb4ef551c46a084fbabe284691ed8b7600f748 /mcs/class/System.XML/Mono.Xml.Xsl
parentfd33ebbc47e34fbc0a35ab8b0a584907a88c5a3d (diff)
2005-03-22 Atsushi Enomoto <atsushi@ximian.com>
* IdPattern.cs, LocationPathPattern.cs : Use XsltCompiledContext.GetNavCache() that returns reusable navigator cache for each pattern, to avoid Clone() and not to leave reference to already-done instance navigator. * XslTransformProcessor.cs : now it looks safe to remove SetContext() from each EvaluateXXX() methods. * MsxslScriptManager.cs : not to leave reference to stylesheet navigator, pass current node to Compile(). * XslCompiledContext.cs : Added GetNavCache() that returns reusable navigator cache for each pattern, to avoid Clone() and not to leave reference to already-done instance navigator. svn path=/trunk/mcs/; revision=42101
Diffstat (limited to 'mcs/class/System.XML/Mono.Xml.Xsl')
-rw-r--r--mcs/class/System.XML/Mono.Xml.Xsl/ChangeLog10
-rw-r--r--mcs/class/System.XML/Mono.Xml.Xsl/MSXslScriptManager.cs6
-rw-r--r--mcs/class/System.XML/Mono.Xml.Xsl/XslTransformProcessor.cs9
-rw-r--r--mcs/class/System.XML/Mono.Xml.Xsl/XsltCompiledContext.cs12
4 files changed, 24 insertions, 13 deletions
diff --git a/mcs/class/System.XML/Mono.Xml.Xsl/ChangeLog b/mcs/class/System.XML/Mono.Xml.Xsl/ChangeLog
index 1b43f5ad841..d96590bb1f9 100644
--- a/mcs/class/System.XML/Mono.Xml.Xsl/ChangeLog
+++ b/mcs/class/System.XML/Mono.Xml.Xsl/ChangeLog
@@ -1,5 +1,15 @@
2005-03-22 Atsushi Enomoto <atsushi@ximian.com>
+ * XslTransformProcessor.cs : now it looks safe to remove SetContext()
+ from each EvaluateXXX() methods.
+ * MsxslScriptManager.cs : not to leave reference to stylesheet
+ navigator, pass current node to Compile().
+ * XslCompiledContext.cs : Added GetNavCache() that returns reusable
+ navigator cache for each pattern, to avoid Clone() and not to leave
+ reference to already-done instance navigator.
+
+2005-03-22 Atsushi Enomoto <atsushi@ximian.com>
+
* Compiler.cs : Now it holds XPath parser and XSLT pattern parser.
* XslKey.cs : Use XSLT pattern parser for match.
UsePattern is now "Use" (it is not a pattern).
diff --git a/mcs/class/System.XML/Mono.Xml.Xsl/MSXslScriptManager.cs b/mcs/class/System.XML/Mono.Xml.Xsl/MSXslScriptManager.cs
index d5755b161b7..c37bc42fc3c 100644
--- a/mcs/class/System.XML/Mono.Xml.Xsl/MSXslScriptManager.cs
+++ b/mcs/class/System.XML/Mono.Xml.Xsl/MSXslScriptManager.cs
@@ -55,7 +55,7 @@ namespace Mono.Xml.Xsl {
string ns = c.Input.GetNamespace (s.ImplementsPrefix);
if (ns == null)
throw new XsltCompileException ("Specified prefix for msxsl:script was not found: " + s.ImplementsPrefix, null, c.Input);
- scripts.Add (ns, s.Compile ());
+ scripts.Add (ns, s.Compile (c.Input));
}
enum ScriptingLanguage {
@@ -75,12 +75,10 @@ namespace Mono.Xml.Xsl {
ScriptingLanguage language = ScriptingLanguage.JScript; // default = JScript.
string implementsPrefix = null;
string code = null;
- XPathNavigator node;
Evidence evidence;
public MSXslScript (XPathNavigator nav, Evidence evidence)
{
- node = nav.Clone ();
this.evidence = evidence;
code = nav.Value;
if (nav.MoveToFirstAttribute ()) {
@@ -127,7 +125,7 @@ namespace Mono.Xml.Xsl {
get { return code; }
}
- public object Compile ()
+ public object Compile (XPathNavigator node)
{
string suffix = Guid.NewGuid ().ToString ().Replace ("-", String.Empty);
switch (this.language) {
diff --git a/mcs/class/System.XML/Mono.Xml.Xsl/XslTransformProcessor.cs b/mcs/class/System.XML/Mono.Xml.Xsl/XslTransformProcessor.cs
index 872cad64a4f..73cdaedd838 100644
--- a/mcs/class/System.XML/Mono.Xml.Xsl/XslTransformProcessor.cs
+++ b/mcs/class/System.XML/Mono.Xml.Xsl/XslTransformProcessor.cs
@@ -466,8 +466,6 @@ namespace Mono.Xml.Xsl {
public object Evaluate (XPathExpression expr)
{
expr = CompiledStyle.ExpressionStore.PrepForExecution (expr, this);
- expr.SetContext (XPathContext);
-
XPathNodeIterator itr = CurrentNodeset;
return itr.Current.Evaluate (expr, itr, XPathContext);
}
@@ -475,8 +473,6 @@ namespace Mono.Xml.Xsl {
public string EvaluateString (XPathExpression expr)
{
expr = CompiledStyle.ExpressionStore.PrepForExecution (expr, this);
- expr.SetContext (XPathContext);
-
XPathNodeIterator itr = CurrentNodeset;
return itr.Current.EvaluateString (expr, itr, XPathContext);
}
@@ -484,8 +480,6 @@ namespace Mono.Xml.Xsl {
public bool EvaluateBoolean (XPathExpression expr)
{
expr = CompiledStyle.ExpressionStore.PrepForExecution (expr, this);
- expr.SetContext (XPathContext);
-
XPathNodeIterator itr = CurrentNodeset;
return itr.Current.EvaluateBoolean (expr, itr, XPathContext);
}
@@ -493,8 +487,6 @@ namespace Mono.Xml.Xsl {
public double EvaluateNumber (XPathExpression expr)
{
expr = CompiledStyle.ExpressionStore.PrepForExecution (expr, this);
- expr.SetContext (XPathContext);
-
XPathNodeIterator itr = CurrentNodeset;
return itr.Current.EvaluateNumber (expr, itr, XPathContext);
}
@@ -502,7 +494,6 @@ namespace Mono.Xml.Xsl {
public XPathNodeIterator Select (XPathExpression expr)
{
expr = CompiledStyle.ExpressionStore.PrepForExecution (expr, this);
- expr.SetContext (XPathContext);
return CurrentNodeset.Current.Select (expr, XPathContext);
}
diff --git a/mcs/class/System.XML/Mono.Xml.Xsl/XsltCompiledContext.cs b/mcs/class/System.XML/Mono.Xml.Xsl/XsltCompiledContext.cs
index 34ee18e2f48..0362b3b69bf 100644
--- a/mcs/class/System.XML/Mono.Xml.Xsl/XsltCompiledContext.cs
+++ b/mcs/class/System.XML/Mono.Xml.Xsl/XsltCompiledContext.cs
@@ -59,6 +59,7 @@ namespace Mono.Xml.Xsl
Hashtable keyNameCache = new Hashtable ();
Hashtable keyIndexTables = new Hashtable ();
+ Hashtable patternNavCaches = new Hashtable ();
XslTransformProcessor p;
XsltContextInfo [] scopes = new XsltContextInfo [40];
@@ -74,6 +75,17 @@ namespace Mono.Xml.Xsl
public override string DefaultNamespace { get { return String.Empty; }}
+ public XPathNavigator GetNavCache (Mono.Xml.XPath.Pattern p, XPathNavigator node)
+ {
+ XPathNavigator nav =
+ patternNavCaches [p] as XPathNavigator;
+ if (nav == null || !nav.MoveTo (node)) {
+ nav = node.Clone ();
+ patternNavCaches [p] = nav;
+ }
+ return nav;
+ }
+
public object EvaluateKey (IStaticXsltContext staticContext,
BaseIterator iter,
Expression nameExpr, Expression valueExpr)