2004-03-01 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mcs / class / System.XML / Mono.Xml.Xsl.Operations / XslAvt.cs
index 1a367bf2b05ff2eeb550cf09c6fb1de7f7caee3f..fae05b100cf59d291671afd873f495df4d614b7a 100644 (file)
@@ -97,6 +97,7 @@ namespace Mono.Xml.Xsl.Operations {
                
                public static string AttemptPreCalc (ref XslAvt avt)
                {
+                       if (avt == null) return null;
                        if (avt.simpleString != null) {
                                string s = avt.simpleString;
                                avt = null;
@@ -108,13 +109,16 @@ namespace Mono.Xml.Xsl.Operations {
                public string Evaluate (XslTransformProcessor p)
                {
                        if (simpleString != null) return simpleString;
+                       if (avtParts.Count == 1)
+                               return ((AvtPart) avtParts [0]).Evaluate (p);
                                
-                       StringBuilder sb = new StringBuilder ();
+                       StringBuilder sb = p.GetAvtStringBuilder ();
                        
-                       foreach (AvtPart part in avtParts)
-                               sb.Append (part.Evaluate (p));
-                               
-                       return sb.ToString ();
+                       int len = avtParts.Count;
+                       for (int i = 0; i < len; i++)
+                               sb.Append (((AvtPart) avtParts [i]).Evaluate (p));
+                       
+                       return p.ReleaseAvtStringBuilder ();
                }
                
                // Represents part of an AVT