Sophie

Sophie

distrib > Mandriva > 2010.1 > x86_64 > media > main-updates-src > by-pkgid > 7aa7fb3904a9dd8f7c4692de8043ddc4 > files > 1

saxon9-9.2.0.3-4.1mdv2010.2.src.rpm

unzip -d saxon9-9.2.0.3 saxonhe9-2-0-3source.zip 
unzip -d saxon9-9.2.0.2 saxon-resources9-2-0-2.zip/source.zip
diff -urp saxon9-9.2.0.2 saxon9-9.2.0.3 >saxon9-9.2.0.2-9.2.0.3.patch

diff -urp saxon9-9.2.0.2/api/Saxon.Api/Properties/AssemblyInfo.cs saxon9-9.2.0.3/api/Saxon.Api/Properties/AssemblyInfo.cs
--- saxon9-9.2.0.2/api/Saxon.Api/Properties/AssemblyInfo.cs	2009-08-05 17:23:10.000000000 +0200
+++ saxon9-9.2.0.3/api/Saxon.Api/Properties/AssemblyInfo.cs	2009-10-22 10:58:50.000000000 +0200
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // You can specify all the values or you can default the Build and Revision Numbers 
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("9.2.0.2")]
-[assembly: AssemblyFileVersion("9.2.0.2")]
+[assembly: AssemblyVersion("9.2.0.3")]
+[assembly: AssemblyFileVersion("9.2.0.3")]
diff -urp saxon9-9.2.0.2/net/sf/saxon/Configuration.java saxon9-9.2.0.3/net/sf/saxon/Configuration.java
--- saxon9-9.2.0.2/net/sf/saxon/Configuration.java	2009-07-29 09:03:02.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/Configuration.java	2009-09-16 18:26:00.000000000 +0200
@@ -2,12 +2,14 @@ package net.sf.saxon;
 
 import net.sf.saxon.charcode.CharacterSetFactory;
 import net.sf.saxon.event.*;
+import net.sf.saxon.evpull.PullEventSource;
 import net.sf.saxon.expr.*;
 import net.sf.saxon.functions.*;
 import net.sf.saxon.instruct.*;
 import net.sf.saxon.number.Numberer;
 import net.sf.saxon.number.Numberer_en;
 import net.sf.saxon.om.*;
+import net.sf.saxon.pull.PullSource;
 import net.sf.saxon.query.ModuleURIResolver;
 import net.sf.saxon.query.StandardModuleURIResolver;
 import net.sf.saxon.query.StaticQueryContext;
@@ -21,7 +23,6 @@ import net.sf.saxon.trans.*;
 import net.sf.saxon.type.*;
 import net.sf.saxon.value.SequenceType;
 import net.sf.saxon.value.Whitespace;
-import net.sf.saxon.evpull.PullEventSource;
 import org.xml.sax.*;
 import org.xml.sax.ext.DefaultHandler2;
 import org.xml.sax.ext.LexicalHandler;
@@ -1164,6 +1165,12 @@ public class Configuration implements Se
 
     public void setCompileWithTracing(boolean trace) {
         tracing = trace;
+        if (defaultXsltCompilerInfo != null) {
+            defaultXsltCompilerInfo.setCompileWithTracing(trace);
+        }
+        if (defaultStaticQueryContext != null) {
+            defaultStaticQueryContext.setCompileWithTracing(trace);
+        }  
     }
 
     /**
@@ -3154,6 +3161,9 @@ public class Configuration implements Se
         if (source instanceof NodeInfo) {
             return source;
         }
+        if (source instanceof PullSource) {
+            return source;
+        }
         if (source instanceof PullEventSource) {
             return source;
         }
diff -urp saxon9-9.2.0.2/net/sf/saxon/dotnet/NodeWrapper.java saxon9-9.2.0.3/net/sf/saxon/dotnet/NodeWrapper.java
--- saxon9-9.2.0.2/net/sf/saxon/dotnet/NodeWrapper.java	2009-07-10 19:43:54.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/dotnet/NodeWrapper.java	2009-10-12 12:06:34.000000000 +0200
@@ -2,7 +2,11 @@ package net.sf.saxon.dotnet;
 
 import cli.System.Xml.*;
 import net.sf.saxon.Configuration;
+import net.sf.saxon.sort.IntSet;
+import net.sf.saxon.sort.IntHashSet;
+import net.sf.saxon.sort.IntIterator;
 import net.sf.saxon.event.Receiver;
+import net.sf.saxon.event.NamespaceReducer;
 import net.sf.saxon.om.*;
 import net.sf.saxon.pattern.NameTest;
 import net.sf.saxon.pattern.NodeTest;
@@ -772,7 +776,8 @@ public class NodeWrapper implements Node
      */
 
     public void copy(Receiver out, int whichNamespaces, boolean copyAnnotations, int locationId) throws XPathException {
-        Navigator.copy(this, out, docWrapper.getNamePool(), whichNamespaces, copyAnnotations, locationId);
+        Receiver r = new NamespaceReducer(out);
+        Navigator.copy(this, r, docWrapper.getNamePool(), whichNamespaces, copyAnnotations, locationId);
     }
 
     /**
@@ -791,47 +796,40 @@ public class NodeWrapper implements Node
      */
 
     public int[] getDeclaredNamespaces(int[] buffer) {
+        // Note: in a DOM created by the XML parser, all namespaces are present as attribute nodes. But
+        // in a DOM created programmatically, this is not necessarily the case. So we need to add
+        // namespace bindings for the namespace of the element and any attributes
         if (node.get_NodeType().Value == XmlNodeType.Element) {
             XmlElement elem = (XmlElement)node;
             XmlNamedNodeMap atts = elem.get_Attributes();
-
-            if (atts == null) {
-                return EMPTY_NAMESPACE_LIST;
-            }
-            int count = 0;
+            IntSet codes = new IntHashSet();
+            NamePool pool = getNamePool();
             for (int i = 0; i < atts.get_Count(); i++) {
                 XmlAttribute att = (XmlAttribute)atts.Item(i);
                 String attName = att.get_Name();
                 if (attName.equals("xmlns")) {
-                    count++;
+                    String prefix = "";
+                    String uri = att.get_Value();
+                    codes.add(pool.allocateNamespaceCode(prefix, uri));
                 } else if (attName.startsWith("xmlns:")) {
-                    count++;
+                    String prefix = attName.substring(6);
+                    String uri = att.get_Value();
+                    codes.add(pool.allocateNamespaceCode(prefix, uri));
+                } else if (att.get_NamespaceURI().length() != 0) {
+                    codes.add(pool.allocateNamespaceCode(att.get_Prefix(), att.get_NamespaceURI()));
                 }
             }
-            if (count == 0) {
-                return EMPTY_NAMESPACE_LIST;
-            } else {
-                int[] result = (buffer == null || count > buffer.length ? new int[count] : buffer);
-                NamePool pool = getNamePool();
-                int n = 0;
-                for (int i = 0; i < atts.get_Count(); i++) {
-                    XmlAttribute att = (XmlAttribute)atts.Item(i);
-                    String attName = att.get_Name();
-                    if (attName.equals("xmlns")) {
-                        String prefix = "";
-                        String uri = att.get_Value();
-                        result[n++] = pool.allocateNamespaceCode(prefix, uri);
-                    } else if (attName.startsWith("xmlns:")) {
-                        String prefix = attName.substring(6);
-                        String uri = att.get_Value();
-                        result[n++] = pool.allocateNamespaceCode(prefix, uri);
-                    }
-                }
-                if (count < result.length) {
-                    result[count] = -1;
-                }
-                return result;
+
+            if (elem.get_NamespaceURI().length() != 0) {
+                codes.add(pool.allocateNamespaceCode(elem.get_Prefix(), elem.get_NamespaceURI()));
+            }
+            int count = codes.size();
+            int[] result = new int[count];
+            int p = 0;
+            for (IntIterator ii = codes.iterator(); ii.hasNext();) {
+                 result[p++] = ii.next();
             }
+            return result;
         } else {
             return null;
         }
diff -urp saxon9-9.2.0.2/net/sf/saxon/event/MetaTagAdjuster.java saxon9-9.2.0.3/net/sf/saxon/event/MetaTagAdjuster.java
--- saxon9-9.2.0.2/net/sf/saxon/event/MetaTagAdjuster.java	2009-02-12 13:57:36.000000000 +0100
+++ saxon9-9.2.0.3/net/sf/saxon/event/MetaTagAdjuster.java	2009-09-15 11:49:12.000000000 +0200
@@ -22,6 +22,7 @@ public class MetaTagAdjuster extends Pro
     int droppingMetaTags = -1;
     boolean inMetaTag = false;
     boolean foundHead = false;
+    String headPrefix = null;
     int metaCode;
     short requiredURICode = 0;
     AttributeCollectionImpl attributes;
@@ -105,6 +106,7 @@ public class MetaTagAdjuster extends Pro
             String localName = namePool.getLocalName(nameCode);
             if (uriCode == requiredURICode && comparesEqual(localName, "head")) {
                 foundHead = true;
+                headPrefix = namePool.getPrefix(nameCode);
             }
         }
 
@@ -145,7 +147,7 @@ public class MetaTagAdjuster extends Pro
             NamePool namePool = getNamePool();
             nextReceiver.startContent();
             String uri = (requiredURICode == 0 ? "" : NamespaceConstant.XHTML);
-            int metaCode = namePool.allocate("", uri, "meta");
+            int metaCode = namePool.allocate(headPrefix, uri, "meta");
             nextReceiver.startElement(metaCode, StandardNames.XS_UNTYPED, 0, 0);
             int httpEquivCode = namePool.allocate("", "", "http-equiv");
             nextReceiver.attribute(httpEquivCode, StandardNames.XS_UNTYPED_ATOMIC, "Content-Type", 0, 0);
diff -urp saxon9-9.2.0.2/net/sf/saxon/event/Sender.java saxon9-9.2.0.3/net/sf/saxon/event/Sender.java
--- saxon9-9.2.0.2/net/sf/saxon/event/Sender.java	2009-07-31 15:54:40.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/event/Sender.java	2009-09-15 09:46:16.000000000 +0200
@@ -370,7 +370,7 @@ public class Sender {
 
         ReceivingContentHandler ce;
         final ContentHandler ch = parser.getContentHandler();
-        if (ch instanceof ReceivingContentHandler) {
+        if (ch instanceof ReceivingContentHandler && config.isCompatible(((ReceivingContentHandler)ch).getConfiguration())) {
             ce = (ReceivingContentHandler)ch;
             ce.reset();
         } else {
diff -urp saxon9-9.2.0.2/net/sf/saxon/expr/NegateExpression.java saxon9-9.2.0.3/net/sf/saxon/expr/NegateExpression.java
--- saxon9-9.2.0.2/net/sf/saxon/expr/NegateExpression.java	2008-01-24 14:59:24.000000000 +0100
+++ saxon9-9.2.0.3/net/sf/saxon/expr/NegateExpression.java	2009-09-15 13:40:20.000000000 +0200
@@ -39,13 +39,11 @@ public class NegateExpression extends Un
     }
 
     public Expression typeCheck(ExpressionVisitor visitor, ItemType contextItemType) throws XPathException {
-        // always called from ArithmeticExpression.typeCheck, so the operand has already been checked.
-        // Now need to ensure that it's numeric
         Expression oldop = operand;
         RoleLocator role = new RoleLocator(RoleLocator.UNARY_EXPR, "-", 0);
-        //role.setSourceLocator(this);
         operand = TypeChecker.staticTypeCheck(operand, SequenceType.OPTIONAL_NUMERIC, backwardsCompatible,
                 role, visitor);
+        operand = visitor.typeCheck(operand, contextItemType);
         if (operand != oldop) {
             adoptChildExpression(operand);
         }
diff -urp saxon9-9.2.0.2/net/sf/saxon/expr/RangeExpression.java saxon9-9.2.0.3/net/sf/saxon/expr/RangeExpression.java
--- saxon9-9.2.0.2/net/sf/saxon/expr/RangeExpression.java	2008-01-24 15:03:02.000000000 +0100
+++ saxon9-9.2.0.3/net/sf/saxon/expr/RangeExpression.java	2009-09-15 10:10:06.000000000 +0200
@@ -38,15 +38,16 @@ public class RangeExpression extends Bin
         operand0 = visitor.typeCheck(operand0, contextItemType);
         operand1 = visitor.typeCheck(operand1, contextItemType);
 
+        boolean backCompat = visitor.getStaticContext().isInBackwardsCompatibleMode();
         RoleLocator role0 = new RoleLocator(RoleLocator.BINARY_EXPR, "to", 0);
         //role0.setSourceLocator(this);
         operand0 = TypeChecker.staticTypeCheck(
-                operand0, SequenceType.OPTIONAL_INTEGER, false, role0, visitor);
+                operand0, SequenceType.OPTIONAL_INTEGER, backCompat, role0, visitor);
 
         RoleLocator role1 = new RoleLocator(RoleLocator.BINARY_EXPR, "to", 1);
         //role1.setSourceLocator(this);
         operand1 = TypeChecker.staticTypeCheck(
-                operand1, SequenceType.OPTIONAL_INTEGER, false, role1, visitor);
+                operand1, SequenceType.OPTIONAL_INTEGER, backCompat, role1, visitor);
 
         return makeConstantRange();
     }
diff -urp saxon9-9.2.0.2/net/sf/saxon/expr/Tokenizer.java saxon9-9.2.0.3/net/sf/saxon/expr/Tokenizer.java
--- saxon9-9.2.0.2/net/sf/saxon/expr/Tokenizer.java	2009-02-27 22:40:40.000000000 +0100
+++ saxon9-9.2.0.3/net/sf/saxon/expr/Tokenizer.java	2009-08-24 10:02:26.000000000 +0200
@@ -669,11 +669,7 @@ public final class Tokenizer {
                 if (nextTokenValue.indexOf('\n') >= 0) {
                     for (int i = 0; i<nextTokenValue.length(); i++) {
                         if (nextTokenValue.charAt(i) == '\n') {
-                            lineNumber++;
-                            if (newlineOffsets==null) {
-                                newlineOffsets = new ArrayList(20);
-                            }
-                            newlineOffsets.add(new Integer(nextTokenStartOffset+i));
+                            incrementLineNumber(nextTokenStartOffset+i+1);
                         }
                     }
                 }
@@ -883,6 +879,19 @@ public final class Tokenizer {
     }
 
     /**
+     * Increment the line number, making a record of where in the input string the newline character occurred.
+     * @param offset the place in the input string where the newline occurred
+     */
+
+    public void incrementLineNumber(int offset) {
+        nextLineNumber++;
+        if (newlineOffsets==null) {
+            newlineOffsets = new ArrayList(20);
+        }
+        newlineOffsets.add(new Integer(offset));
+    }
+
+    /**
      * Step back one character. If this steps back to a previous line, adjust the line number.
      */
 
diff -urp saxon9-9.2.0.2/net/sf/saxon/expr/UntypedAtomicConverter.java saxon9-9.2.0.3/net/sf/saxon/expr/UntypedAtomicConverter.java
--- saxon9-9.2.0.2/net/sf/saxon/expr/UntypedAtomicConverter.java	2009-05-08 10:16:38.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/expr/UntypedAtomicConverter.java	2009-09-29 19:34:14.000000000 +0200
@@ -114,7 +114,7 @@ public final class UntypedAtomicConverte
                 requiredItemType == BuiltInAtomicType.STRING &&
                 ((Atomizer)operand).getBaseExpression().getItemType(th) instanceof NodeTest) {
             Expression nodeExp = ((Atomizer)operand).getBaseExpression();
-            if (Cardinality.allowsMany(nodeExp.getCardinality())) {
+            if (nodeExp.getCardinality() != StaticProperty.EXACTLY_ONE) {
                 SystemFunction fn = (SystemFunction)SystemFunction.makeSystemFunction(
                         "string", new Expression[]{new ContextItemExpression()});
                 fn.setContainer(getContainer());
diff -urp saxon9-9.2.0.2/net/sf/saxon/functions/Document.java saxon9-9.2.0.3/net/sf/saxon/functions/Document.java
--- saxon9-9.2.0.2/net/sf/saxon/functions/Document.java	2009-07-08 13:52:08.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/functions/Document.java	2009-09-16 11:02:42.000000000 +0200
@@ -276,14 +276,6 @@ public class Document extends SystemFunc
             return getFragment(doc, fragmentId, c);
         }
 
-        if (pool.isMarkedUnavailable(documentKey)) {
-            XPathException err = new XPathException(
-                    "Document has been marked not available: " + documentKey);
-            err.setXPathContext(c);
-            err.setErrorCode("FODC0005");
-            throw err;
-        }
-
         // check that the document was not written by this transformation
 
         if (!controller.checkUniqueOutputDestination(documentKey)) {
@@ -296,6 +288,15 @@ public class Document extends SystemFunc
         }
 
         try {
+
+            if (pool.isMarkedUnavailable(documentKey)) {
+                XPathException err = new XPathException(
+                        "Document has been marked not available: " + documentKey);
+                err.setXPathContext(c);
+                err.setErrorCode("FODC0005");
+                throw err;
+            }
+            
             // Get a Source from the URIResolver
 
             Source source = resolveURI(href, baseURI, documentKey, controller);
diff -urp saxon9-9.2.0.2/net/sf/saxon/functions/FormatDate.java saxon9-9.2.0.3/net/sf/saxon/functions/FormatDate.java
--- saxon9-9.2.0.2/net/sf/saxon/functions/FormatDate.java	2009-06-03 12:24:16.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/functions/FormatDate.java	2009-08-14 02:08:26.000000000 +0200
@@ -81,7 +81,7 @@ public class FormatDate extends SystemFu
 
         Numberer numberer = context.getConfiguration().makeNumberer(language, country);
         FastStringBuffer sb = new FastStringBuffer(FastStringBuffer.SMALL);
-        if (numberer instanceof Numberer_en && !"en".equals(language)) {
+        if (numberer.getClass() == Numberer_en.class && !"en".equals(language)) {
             sb.append("[Language: en]");
         }
         int i = 0;
diff -urp saxon9-9.2.0.2/net/sf/saxon/functions/IntegratedFunctionCall.java saxon9-9.2.0.3/net/sf/saxon/functions/IntegratedFunctionCall.java
--- saxon9-9.2.0.2/net/sf/saxon/functions/IntegratedFunctionCall.java	2009-07-27 21:48:20.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/functions/IntegratedFunctionCall.java	2009-08-13 00:29:38.000000000 +0200
@@ -42,7 +42,7 @@ public class IntegratedFunctionCall exte
         checkArgumentCount(definition.getMinimumNumberOfArguments(), definition.getMaximumNumberOfArguments(), visitor);
         final int args = getNumberOfArguments();
         SequenceType[] declaredArgumentTypes = definition.getArgumentTypes();
-        if (declaredArgumentTypes == null || declaredArgumentTypes.length == 0) {
+        if (declaredArgumentTypes == null || (args != 0 && declaredArgumentTypes.length == 0)) {
             throw new XPathException("Integrated function " + getDisplayName() +
                     " failed to declare its argument types");
         }
diff -urp saxon9-9.2.0.2/net/sf/saxon/instruct/ApplyTemplates.java saxon9-9.2.0.3/net/sf/saxon/instruct/ApplyTemplates.java
--- saxon9-9.2.0.2/net/sf/saxon/instruct/ApplyTemplates.java	2009-04-20 16:11:44.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/instruct/ApplyTemplates.java	2009-08-24 11:51:48.000000000 +0200
@@ -299,7 +299,7 @@ public class ApplyTemplates extends Inst
 
             context.setCurrentIterator(iterator);
             context.setCurrentMode(mode);
-            context.setOriginatingConstructType(Location.TEMPLATE);
+            //context.setOriginatingConstructType(Location.TEMPLATE);
             boolean lookahead = (iterator.getProperties() & SequenceIterator.LOOKAHEAD) != 0;
             Template previousTemplate = null;
             while(true) {
diff -urp saxon9-9.2.0.2/net/sf/saxon/instruct/Copy.java saxon9-9.2.0.3/net/sf/saxon/instruct/Copy.java
--- saxon9-9.2.0.2/net/sf/saxon/instruct/Copy.java	2009-07-06 11:46:58.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/instruct/Copy.java	2009-09-15 09:14:42.000000000 +0200
@@ -64,6 +64,12 @@ public class Copy extends ElementCreator
 
 
     public Expression typeCheck(ExpressionVisitor visitor, ItemType contextItemType) throws XPathException {
+        if (contextItemType == null) {
+            // See spec bug 7624, test case copy903err
+            XPathException err = new XPathException("Context item for xsl:copy is undefined", "XTTE0945");
+            err.setLocator(this);
+            throw err;
+        }
         if (contextItemType instanceof NodeTest) {
             switch (contextItemType.getPrimitiveType()) {
                 // For elements and attributes, assume the type annotation will change
@@ -206,6 +212,13 @@ public class Copy extends ElementCreator
         Controller controller = context.getController();
         SequenceReceiver out = context.getReceiver();
         Item item = context.getContextItem();
+        if (item == null) {
+            // See spec bug 7624, test case copy904err
+            XPathException err = new XPathException("Context item for xsl:copy is undefined", "XTTE0945");
+            err.setLocator(this);
+            throw err;
+        }
+
         if (!(item instanceof NodeInfo)) {
             out.append(item, locationId, NodeInfo.ALL_NAMESPACES);
             return null;
diff -urp saxon9-9.2.0.2/net/sf/saxon/instruct/Executable.java saxon9-9.2.0.3/net/sf/saxon/instruct/Executable.java
--- saxon9-9.2.0.2/net/sf/saxon/instruct/Executable.java	2009-06-12 12:27:28.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/instruct/Executable.java	2009-08-18 13:59:12.000000000 +0200
@@ -834,7 +834,7 @@ public class Executable implements Seria
     public void setSchemaAware(boolean aware) {
         if (aware && !config.isLicensedFeature(Configuration.LicenseFeature.SCHEMA_VALIDATION)) {
             throw new IllegalArgumentException(
-                    "Schema-aware processing is not possible: the Configuration is not schema-aware");
+                    "Schema-aware processing is not possible: no License");
         }
         schemaAware = aware;
     }
diff -urp saxon9-9.2.0.2/net/sf/saxon/instruct/NumberInstruction.java saxon9-9.2.0.3/net/sf/saxon/instruct/NumberInstruction.java
--- saxon9-9.2.0.2/net/sf/saxon/instruct/NumberInstruction.java	2009-06-03 12:24:16.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/instruct/NumberInstruction.java	2009-08-13 23:29:26.000000000 +0200
@@ -202,10 +202,10 @@ public class NumberInstruction extends E
             lang = visitor.typeCheck(lang, contextItemType);
         }
         if (count != null) {
-            count = count.analyze(visitor, contextItemType);
+            visitor.typeCheck(new PatternSponsor(count), contextItemType);
         }
         if (from != null) {
-            from = from.analyze(visitor, contextItemType);
+            visitor.typeCheck(new PatternSponsor(from), contextItemType);
         }
         return this;
     }
diff -urp saxon9-9.2.0.2/net/sf/saxon/instruct/SimpleContentConstructor.java saxon9-9.2.0.3/net/sf/saxon/instruct/SimpleContentConstructor.java
--- saxon9-9.2.0.2/net/sf/saxon/instruct/SimpleContentConstructor.java	2009-04-21 12:21:36.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/instruct/SimpleContentConstructor.java	2009-09-15 19:40:34.000000000 +0200
@@ -138,22 +138,25 @@ public class SimpleContentConstructor ex
             XPathContext c = visitor.getStaticContext().makeEarlyEvaluationContext();
             return new Literal(Value.asValue(evaluateItem(c)));
         }
-        boolean isUntyped = isAtomic || !visitor.getExecutable().isSchemaAware();
-        if (!isUntyped) {
-            boolean maybeElement = th.relationship(itemType, NodeKindTest.ELEMENT) != TypeHierarchy.DISJOINT;
-            boolean maybeAttribute = th.relationship(itemType, NodeKindTest.ATTRIBUTE) != TypeHierarchy.DISJOINT;
-            isUntyped = !maybeElement && !maybeAttribute;
-        }
         if (isSingleton) {
             if (isAtomic) {
-                return select;
-            } else if (isUntyped) {
-                return SystemFunction.makeSystemFunction("string", new Expression[]{select});
+                if (th.isSubType(itemType, BuiltInAtomicType.STRING)) {
+                    return select;
+                } else {
+                    return SystemFunction.makeSystemFunction("string", new Expression[]{select});
+                }
+            } else {
+                boolean isUntyped = !visitor.getExecutable().isSchemaAware();
+                if (!isUntyped) {
+                    boolean maybeElement = th.relationship(itemType, NodeKindTest.ELEMENT) != TypeHierarchy.DISJOINT;
+                    boolean maybeAttribute = th.relationship(itemType, NodeKindTest.ATTRIBUTE) != TypeHierarchy.DISJOINT;
+                    isUntyped = !maybeElement && !maybeAttribute;
+                }
+                if (isUntyped) {
+                    return SystemFunction.makeSystemFunction("string", new Expression[]{select});
+                }
             }
         }
-//        if (isSingleton && isUntyped) {
-//            return select;
-//        }
         return this;
     }
 
diff -urp saxon9-9.2.0.2/net/sf/saxon/instruct/TraceWrapper.java saxon9-9.2.0.3/net/sf/saxon/instruct/TraceWrapper.java
--- saxon9-9.2.0.2/net/sf/saxon/instruct/TraceWrapper.java	2008-09-18 20:19:54.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/instruct/TraceWrapper.java	2009-10-13 20:53:56.000000000 +0200
@@ -21,6 +21,11 @@ import java.util.Iterator;
 public class TraceWrapper extends Instruction {
     Expression child;   // the instruction or other expression to be traced
 
+    public int getImplementationMethod() {
+        return child.getImplementationMethod();
+    }
+
+
     /**
      * Simplify an expression. This performs any static optimization (by rewriting the expression
      * as a different expression). The default implementation does nothing.
@@ -273,6 +278,19 @@ public class TraceWrapper extends Instru
     public void explain(ExpressionPresenter out) {
         child.explain(out);
     }
+
+    /**
+     * Evaluate an updating expression, adding the results to a Pending Update List.
+     * The default implementation of this method, which is used for non-updating expressions,
+     * throws an UnsupportedOperationException
+     *
+     * @param context the XPath dynamic evaluation context
+     * @param pul     the pending update list to which the results should be written
+     */
+
+    public void evaluatePendingUpdates(XPathContext context, PendingUpdateList pul) throws XPathException {
+        child.evaluatePendingUpdates(context, pul);
+    }        
 }
 
 //
diff -urp saxon9-9.2.0.2/net/sf/saxon/pattern/LocationPathPattern.java saxon9-9.2.0.3/net/sf/saxon/pattern/LocationPathPattern.java
--- saxon9-9.2.0.2/net/sf/saxon/pattern/LocationPathPattern.java	2009-01-20 11:02:38.000000000 +0100
+++ saxon9-9.2.0.3/net/sf/saxon/pattern/LocationPathPattern.java	2009-08-21 19:28:54.000000000 +0200
@@ -60,6 +60,26 @@ public final class LocationPathPattern e
         filter.setContainer(this);
     }
 
+    public void setLineNumber(int lineNumber) {
+        super.setLineNumber(lineNumber);
+        if (parentPattern != null) {
+            parentPattern.setLineNumber(lineNumber);
+        }
+        if (ancestorPattern != null) {
+            ancestorPattern.setLineNumber(lineNumber);
+        }
+    }
+
+    public void setSystemId(String systemId) {
+        super.setSystemId(systemId);
+        if (parentPattern != null) {
+            parentPattern.setSystemId(systemId);
+        }
+        if (ancestorPattern != null) {
+            ancestorPattern.setSystemId(systemId);
+        }
+    }
+    
 
     /**
      * Set the executable containing this pattern
diff -urp saxon9-9.2.0.2/net/sf/saxon/pattern/PatternSponsor.java saxon9-9.2.0.3/net/sf/saxon/pattern/PatternSponsor.java
--- saxon9-9.2.0.2/net/sf/saxon/pattern/PatternSponsor.java	2008-12-08 17:02:42.000000000 +0100
+++ saxon9-9.2.0.3/net/sf/saxon/pattern/PatternSponsor.java	2009-08-13 23:29:26.000000000 +0200
@@ -165,6 +165,16 @@ public class PatternSponsor extends Expr
     }
 
     /**
+     * Treat all subexpressions as being evaluated repeatedly
+     * @param child
+     * @return
+     */
+
+    public boolean hasLoopingSubexpression(Expression child) {
+        return true;
+    }
+
+    /**
      * <p>Determine the static cardinality of the expression. This establishes how many items
      * there will be in the result of the expression, at compile time (i.e., without
      * actually evaluating the result.</p>
diff -urp saxon9-9.2.0.2/net/sf/saxon/query/QueryParser.java saxon9-9.2.0.3/net/sf/saxon/query/QueryParser.java
--- saxon9-9.2.0.2/net/sf/saxon/query/QueryParser.java	2009-08-04 19:25:54.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/query/QueryParser.java	2009-08-24 10:17:52.000000000 +0200
@@ -3111,8 +3111,10 @@ public class QueryParser extends Express
                 try {
                     avt = makeAttributeContent(t.input, t.inputOffset, delim, true);
                 } catch (XPathException err) {
-                    grumble(err.getMessage());
-                    return null;
+                    if (!err.hasBeenReported()) {
+                        grumble(err.getMessage());
+                    }
+                    throw err;
                 }
 
                 // by convention, this returns the end position when called with scanOnly set
@@ -3123,6 +3125,16 @@ public class QueryParser extends Express
             String val = t.input.substring(t.inputOffset - 1, end + 1);
             // and without
             String rval = t.input.substring(t.inputOffset, end);
+
+            // account for any newlines found in the value
+            // (note, subexpressions between curlies will have been parsed using a different tokenizer)
+            String tail = val;
+            int pos;
+            while ((pos = tail.indexOf('\n')) >= 0) {
+                t.incrementLineNumber(t.inputOffset - 1 + pos);
+                tail = tail.substring(pos+1);
+            }
+
             t.inputOffset = end + 1;
             // on return, the current character is the closing quote
             c = t.nextChar();
diff -urp saxon9-9.2.0.2/net/sf/saxon/query/StaticQueryContext.java saxon9-9.2.0.3/net/sf/saxon/query/StaticQueryContext.java
--- saxon9-9.2.0.2/net/sf/saxon/query/StaticQueryContext.java	2009-06-03 16:27:20.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/query/StaticQueryContext.java	2009-08-21 21:01:00.000000000 +0200
@@ -97,6 +97,7 @@ public class StaticQueryContext {
         namePool = config.getNamePool();
         errorListener = config.getErrorListener();
         moduleURIResolver = config.getModuleURIResolver();
+        tracing = config.isCompileWithTracing();
         if (errorListener instanceof StandardErrorListener) {
             errorListener = ((StandardErrorListener)errorListener).makeAnother(Configuration.XQUERY);
             ((StandardErrorListener)errorListener).setRecoveryPolicy(Configuration.DO_NOT_RECOVER);
@@ -126,6 +127,7 @@ public class StaticQueryContext {
              namePool = config.getNamePool();
              errorListener = config.getErrorListener();
              moduleURIResolver = config.getModuleURIResolver();
+             tracing = config.isCompileWithTracing();
              if (errorListener instanceof StandardErrorListener) {
                  errorListener = ((StandardErrorListener)errorListener).makeAnother(Configuration.XQUERY);
                  ((StandardErrorListener)errorListener).setRecoveryPolicy(Configuration.DO_NOT_RECOVER);
diff -urp saxon9-9.2.0.2/net/sf/saxon/Query.java saxon9-9.2.0.3/net/sf/saxon/Query.java
--- saxon9-9.2.0.2/net/sf/saxon/Query.java	2009-08-05 14:48:36.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/Query.java	2009-09-22 12:39:06.000000000 +0200
@@ -150,6 +150,13 @@ public class Query {
             }
 
             config.displayLicenseMessage();
+            if (schemaAware && !config.isLicensedFeature(Configuration.LicenseFeature.SCHEMA_AWARE_XQUERY)) {
+                if ("EE".equals(config.getEditionCode())) {
+                    quit("Installed license does not allow schema-aware query", 2);
+                } else {
+                    quit("Schema-aware query requires Saxon Enterprise Edition", 2);
+                }
+            }
             if (pullMode) {
                 //config.setLazyConstructionMode(true);
             }
@@ -277,9 +284,14 @@ public class Query {
         } catch (SchemaException err) {
             quit("Schema processing failed: " + err.getMessage(), 2);
         } catch (Exception err2) {
-            err2.printStackTrace();
-            quit("Fatal error during query: " + err2.getClass().getName() + ": " +
-                    (err2.getMessage() == null ? " (no message)" : err2.getMessage()), 2);
+            // TODO: move LicenseException to net.sf.saxon
+            if ("com.saxonica.config.LicenseException".equals(err2.getClass().getName())) {
+                quit(err2.getMessage(), 2);
+            } else {
+                err2.printStackTrace();
+                quit("Fatal error during query: " + err2.getClass().getName() + ": " +
+                        (err2.getMessage() == null ? " (no message)" : err2.getMessage()), 2);
+            }
         }
     }
 
@@ -740,7 +752,7 @@ public class Query {
                 XPathExpression expr = xpe.createExpression(argvalue);
                 XPathDynamicContext context = expr.createDynamicContext(null);
                 ValueRepresentation val = SequenceExtent.makeSequenceExtent(expr.iterate(context));
-                dynamicEnv.setParameter(argname.substring(1), val);                
+                dynamicEnv.setParameter(argname.substring(1), val);
             } else {
                 dynamicEnv.setParameter(argname, new UntypedAtomicValue(argvalue));
             }
@@ -833,27 +845,42 @@ public class Query {
             exp = staticEnv.compileQuery(q);
         } else if (useURLs || queryFileName.startsWith("http:") || queryFileName.startsWith("file:")) {
             ModuleURIResolver resolver = staticEnv.getModuleURIResolver();
+            boolean isStandardResolver = false;
             if (resolver == null) {
                 resolver = staticEnv.getConfiguration().getStandardModuleURIResolver();
+                isStandardResolver = true;
             }
-            String[] locations = {queryFileName};
-            Source[] sources;
-            try {
-                sources = resolver.resolve(null, null, locations);
-            } catch (Exception e) {
-                if (e instanceof XPathException) {
-                    throw (XPathException)e;
+            while (true) {
+                String[] locations = {queryFileName};
+                Source[] sources;
+                try {
+                    sources = resolver.resolve(null, null, locations);
+                } catch (Exception e) {
+                    if (e instanceof XPathException) {
+                        throw (XPathException)e;
+                    } else {
+                        XPathException err = new XPathException("Exception in ModuleURIResolver: ", e);
+                        err.setErrorCode("XQST0059");
+                        throw err;
+                    }
+                }
+                if (sources == null) {
+                    if (isStandardResolver) {
+                        // this should not happen
+                        quit("System problem: standard ModuleURIResolver returned null", 4);
+                    } else {
+                        resolver = staticEnv.getConfiguration().getStandardModuleURIResolver();
+                        isStandardResolver = true;
+                    }
                 } else {
-                    XPathException err = new XPathException("Exception in ModuleURIResolver: ", e);
-                    err.setErrorCode("XQST0059");
-                    throw err;
+                    if (sources.length != 1 || !(sources[0] instanceof StreamSource)) {
+                        quit("Module URI Resolver must return a single StreamSource", 2);
+                    }
+                    String queryText = QueryReader.readSourceQuery((StreamSource)sources[0], config.getNameChecker());
+                    exp = staticEnv.compileQuery(queryText);
+                    break;
                 }
             }
-            if (sources.length != 1 || !(sources[0] instanceof StreamSource)) {
-                quit("Module URI Resolver must return a single StreamSource", 2);
-            }
-            String queryText = QueryReader.readSourceQuery((StreamSource)sources[0], config.getNameChecker());
-            exp = staticEnv.compileQuery(queryText);
         } else {
             InputStream queryStream = new FileInputStream(queryFileName);
             staticEnv.setBaseURI(new File(queryFileName).toURI().toString());
@@ -897,7 +924,7 @@ public class Query {
 
     protected void processSource(Source sourceInput, XQueryExpression exp, DynamicQueryContext dynamicEnv) throws XPathException {
         if (sourceInput != null) {
-            ParseOptions options = new ParseOptions(); 
+            ParseOptions options = new ParseOptions();
             if (showTime) {
                 System.err.println("Processing " + sourceInput.getSystemId());
             }
@@ -996,7 +1023,7 @@ public class Query {
         }
         if (closeTraceDestination) {
             dynamicEnv.getTraceFunctionDestination().close();
-        }                     
+        }
     }
 
     /**
@@ -1047,6 +1074,7 @@ public class Query {
         System.err.println("  -projection:[on|off]  Use source document projection");
         System.err.println("  -q:filename           Query file name");
         System.err.println("  -qs:string            Query string (usually in quotes)");
+        System.err.println("  -qversion:1.0|1.1     XQuery language version");
         System.err.println("  -r:classname          Use URIResolver class");
         System.err.println("  -repeat:N             Repeat N times for performance measurement");
         System.err.println("  -s:file|URI           Provide initial context document");
diff -urp saxon9-9.2.0.2/net/sf/saxon/s9api/XdmAtomicValue.java saxon9-9.2.0.3/net/sf/saxon/s9api/XdmAtomicValue.java
--- saxon9-9.2.0.2/net/sf/saxon/s9api/XdmAtomicValue.java	2009-03-23 17:45:02.000000000 +0100
+++ saxon9-9.2.0.3/net/sf/saxon/s9api/XdmAtomicValue.java	2009-10-14 21:47:08.000000000 +0200
@@ -1,6 +1,7 @@
 package net.sf.saxon.s9api;
 
 import net.sf.saxon.Configuration;
+import net.sf.saxon.om.Name11Checker;
 import net.sf.saxon.trans.XPathException;
 import net.sf.saxon.type.AtomicType;
 import net.sf.saxon.type.BuiltInAtomicType;
@@ -119,8 +120,17 @@ public class XdmAtomicValue extends XdmI
         if (((AtomicType)it).isAbstract()) {
             throw new SaxonApiException("Requested type is an abstract type");
         }
+        if (((AtomicType)it).isNamespaceSensitive()) {
+            throw new SaxonApiException("Requested type is namespace-sensitive");
+        }
         if (((AtomicType)it).isBuiltInType()) {
-            // TODO
+                 ConversionResult cv = StringValue.convertStringToBuiltInType(
+                    lexicalForm, (BuiltInAtomicType)it, new Name11Checker());
+            try {
+                setValue(cv.asAtomic());
+            } catch (ValidationException e) {
+                throw new SaxonApiException(e);
+            }
         } else {
             Configuration config = ((ConstructedItemType)type).getProcessor().getUnderlyingConfiguration();
             ConversionResult result = new StringValue(lexicalForm).convert(
diff -urp saxon9-9.2.0.2/net/sf/saxon/sort/StandardCollationURIResolver.java saxon9-9.2.0.3/net/sf/saxon/sort/StandardCollationURIResolver.java
--- saxon9-9.2.0.2/net/sf/saxon/sort/StandardCollationURIResolver.java	2009-05-10 23:16:06.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/sort/StandardCollationURIResolver.java	2009-08-13 12:40:36.000000000 +0200
@@ -1,5 +1,6 @@
 package net.sf.saxon.sort;
 import net.sf.saxon.Configuration;
+import net.sf.saxon.om.FastStringBuffer;
 import net.sf.saxon.trans.XPathException;
 
 import javax.xml.transform.TransformerException;
@@ -7,6 +8,8 @@ import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.Properties;
 import java.util.StringTokenizer;
+import java.nio.ByteBuffer;
+import java.nio.charset.Charset;
 
 /**
  * StandardCollationURIResolver allows a Collation to be created given
@@ -51,14 +54,14 @@ public class StandardCollationURIResolve
                     throw new XPathException(err);
                 }
                 Properties props = new Properties();
-                String query = uuri.getQuery();
+                String query = uuri.getRawQuery();
                 StringTokenizer queryTokenizer = new StringTokenizer(query, ";&");
                 while (queryTokenizer.hasMoreElements()) {
                     String param = queryTokenizer.nextToken();
                     int eq = param.indexOf('=');
                     if (eq > 0 && eq < param.length()-1) {
                         String kw = param.substring(0, eq);
-                        String val = param.substring(eq + 1);
+                        String val = decode(param.substring(eq + 1));
                         props.setProperty(kw, val);
                     }
                 }
@@ -75,6 +78,83 @@ public class StandardCollationURIResolve
             return null;
         }
     }
+    public static String decode(String s) {
+        // Evaluates all escapes in s, applying UTF-8 decoding if needed.  Assumes
+        // that escapes are well-formed syntactically, i.e., of the form %XX.  If a
+        // sequence of escaped octets is not valid UTF-8 then the erroneous octets
+        // are replaced with '\uFFFD'.
+        // Exception: any "%" found between "[]" is left alone. It is an IPv6 literal
+        //            with a scope_id
+        //
+
+        if (s == null) {
+            return s;
+        }
+        int n = s.length();
+        if (n == 0) {
+            return s;
+        }
+        if (s.indexOf('%') < 0) {
+            return s;
+        }
+
+        FastStringBuffer sb = new FastStringBuffer(n);
+        ByteBuffer bb = ByteBuffer.allocate(n);
+        Charset utf8 = Charset.forName("UTF-8");
+
+        // This is not horribly efficient, but it will do for now
+        char c = s.charAt(0);
+        boolean betweenBrackets = false;
+
+        for (int i = 0; i < n;) {
+            assert c == s.charAt(i);    // Loop invariant
+            if (c == '[') {
+                betweenBrackets = true;
+            } else if (betweenBrackets && c == ']') {
+                betweenBrackets = false;
+            }
+            if (c != '%' || betweenBrackets) {
+                sb.append(c);
+                if (++i >= n) {
+                    break;
+                }
+                c = s.charAt(i);
+                continue;
+            }
+            bb.clear();
+            for (; ;) {
+                assert (n - i >= 2);
+                bb.put(hex(s.charAt(++i), s.charAt(++i)));
+                if (++i >= n) {
+                    break;
+                }
+                c = s.charAt(i);
+                if (c != '%') {
+                    break;
+                }
+            }
+            bb.flip();
+            sb.append(utf8.decode(bb));
+        }
+
+        return sb.toString();
+    }
+
+    private static byte hex(char high, char low) {
+        return (byte)((hexToDec(high)<<4) | hexToDec(low));
+    }
+
+    private static int hexToDec(char c) {
+        if (c >= '0' && c <= '9') {
+            return c - '0';
+        } else if (c >= 'a' && c <= 'f') {
+            return c - 'a' + 10;
+        } else if (c >= 'A' && c <= 'F') {
+            return c - 'A' + 10;
+        } else {
+            return 0;
+        }
+    }
 
 
 }
diff -urp saxon9-9.2.0.2/net/sf/saxon/style/ExpressionContext.java saxon9-9.2.0.3/net/sf/saxon/style/ExpressionContext.java
--- saxon9-9.2.0.2/net/sf/saxon/style/ExpressionContext.java	2009-07-07 15:18:26.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/style/ExpressionContext.java	2009-09-29 21:41:26.000000000 +0200
@@ -387,7 +387,8 @@ public class ExpressionContext implement
         if (type.getFingerprint() == StandardNames.XS_DATE_TIME_STAMP) {
             return config.getXsdVersion() == Configuration.XSD11;
         }
-        return getExecutable().isSchemaAware() || type.isAllowedInBasicXSLT();
+        return type.isAllowedInBasicXSLT() ||
+                config.isLicensedFeature(Configuration.LicenseFeature.SAXON_EXTENSION_FUNCTIONS);
     }
 
     /**
diff -urp saxon9-9.2.0.2/net/sf/saxon/style/StyleElement.java saxon9-9.2.0.3/net/sf/saxon/style/StyleElement.java
--- saxon9-9.2.0.2/net/sf/saxon/style/StyleElement.java	2009-06-09 10:52:18.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/style/StyleElement.java	2009-10-12 16:42:26.000000000 +0200
@@ -944,7 +944,6 @@ public abstract class StyleElement exten
             if ("".equals(parts[0])) {
                 // Name is unprefixed: use the default-xpath-namespace
                 uri = getDefaultXPathNamespace();
-                nameCode = getNamePool().allocate(parts[0], uri, lname);
             } else {
                 uri = getURIForPrefix(parts[0], false);
                 if (uri == null) {
diff -urp saxon9-9.2.0.2/net/sf/saxon/style/StyleNodeFactory.java saxon9-9.2.0.3/net/sf/saxon/style/StyleNodeFactory.java
--- saxon9-9.2.0.2/net/sf/saxon/style/StyleNodeFactory.java	2009-06-10 21:26:30.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/style/StyleNodeFactory.java	2009-09-16 09:21:18.000000000 +0200
@@ -107,7 +107,11 @@ public class StyleNodeFactory implements
 	        e.processDefaultXPathNamespaceAttribute("");
             return e;
 
-        } else if (parent instanceof XSLStylesheet && namePool.getURICode(nameCode) != 0) {
+        }
+
+        short uriCode = namePool.getURICode(nameCode);
+
+        if (parent instanceof XSLStylesheet && uriCode != 0 && uriCode != NamespaceConstant.XSLT_CODE) {
             DataElement d = new DataElement();
             d.setNamespaceDeclarations(namespaces, namespacesUsed);
             d.initialise(nameCode, typeCode, attlist, parent, sequence);
@@ -116,8 +120,7 @@ public class StyleNodeFactory implements
 
         } else {   // not recognized as an XSLT element, not top-level
 
-	        short uriCode = namePool.getURICode(nameCode);
-	        String localname = namePool.getLocalName(nameCode);
+            String localname = namePool.getLocalName(nameCode);
             StyleElement temp = null;
 
             // Detect a misspelt XSLT declaration
diff -urp saxon9-9.2.0.2/net/sf/saxon/TransformerFactoryImpl.java saxon9-9.2.0.3/net/sf/saxon/TransformerFactoryImpl.java
--- saxon9-9.2.0.2/net/sf/saxon/TransformerFactoryImpl.java	2009-06-13 20:22:32.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/TransformerFactoryImpl.java	2009-10-22 09:59:50.000000000 +0200
@@ -33,7 +33,7 @@ public class TransformerFactoryImpl exte
      * Default constructor.
      */
     public TransformerFactoryImpl() {
-        config = new Configuration();
+        config = Configuration.newConfiguration();
         config.setProcessor(this);
     }
 
diff -urp saxon9-9.2.0.2/net/sf/saxon/Transform.java saxon9-9.2.0.3/net/sf/saxon/Transform.java
--- saxon9-9.2.0.2/net/sf/saxon/Transform.java	2009-08-05 15:09:44.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/Transform.java	2009-08-18 13:49:38.000000000 +0200
@@ -603,6 +603,13 @@ public class Transform {
             }
 
             config.displayLicenseMessage();
+            if (schemaAware && !config.isLicensedFeature(Configuration.LicenseFeature.SCHEMA_AWARE_XSLT)) {
+                if ("EE".equals(config.getEditionCode())) {
+                    quit("Installed license does not allow schema-aware transformation", 2);
+                } else {
+                    quit("Schema-aware transformation requires Saxon Enterprise Edition", 2);
+                }
+            }
 
             if (additionalSchemas != null) {
                 Query.loadAdditionalSchemas(config, additionalSchemas);
@@ -759,9 +766,14 @@ public class Transform {
             //err.printStackTrace();
             quit("Transformation failed: " + err.getMessage(), 2);
         } catch (Exception err2) {
-            err2.printStackTrace();
-            quit("Fatal error during transformation: " + err2.getClass().getName() + ": " + 
-                    (err2.getMessage() == null ? " (no message)" : err2.getMessage()), 2);
+            // TODO: move LicenseException to net.sf.saxon
+            if ("com.saxonica.config.LicenseException".equals(err2.getClass().getName())) {
+                quit(err2.getMessage(), 2);
+            } else {
+                err2.printStackTrace();
+                quit("Fatal error during transformation: " + err2.getClass().getName() + ": " +
+                        (err2.getMessage() == null ? " (no message)" : err2.getMessage()), 2);
+            }
         }
 
 
diff -urp saxon9-9.2.0.2/net/sf/saxon/tree/TreeBuilder.java saxon9-9.2.0.3/net/sf/saxon/tree/TreeBuilder.java
--- saxon9-9.2.0.2/net/sf/saxon/tree/TreeBuilder.java	2009-04-21 15:55:02.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/tree/TreeBuilder.java	2009-08-25 15:42:40.000000000 +0200
@@ -8,7 +8,6 @@ import net.sf.saxon.om.AttributeCollecti
 import net.sf.saxon.om.DocumentInfo;
 import net.sf.saxon.om.NodeInfo;
 import net.sf.saxon.trans.XPathException;
-import net.sf.saxon.Configuration;
 
 import java.util.ArrayList;
 
diff -urp saxon9-9.2.0.2/net/sf/saxon/value/DecimalValue.java saxon9-9.2.0.3/net/sf/saxon/value/DecimalValue.java
--- saxon9-9.2.0.2/net/sf/saxon/value/DecimalValue.java	2009-06-02 09:00:20.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/value/DecimalValue.java	2009-10-12 14:33:18.000000000 +0200
@@ -131,6 +131,9 @@ public final class DecimalValue extends 
                     break;
                 }
             }
+            if (digits.length() == 0) {
+                return DecimalValue.ZERO;
+            }
             BigInteger bigInt = new BigInteger(digits.toString());
             BigDecimal bigDec = new BigDecimal(bigInt, scale);
             return new DecimalValue(bigDec);
diff -urp saxon9-9.2.0.2/net/sf/saxon/Version.java saxon9-9.2.0.3/net/sf/saxon/Version.java
--- saxon9-9.2.0.2/net/sf/saxon/Version.java	2009-08-05 14:11:16.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/Version.java	2009-10-22 10:06:38.000000000 +0200
@@ -6,10 +6,10 @@ package net.sf.saxon;
 
 public final class Version {
 
-    private static final int[] STRUCTURED_VERSION = {9,2,0,2};
-    private static final String VERSION = "9.2.0.2";
-    private static final String BUILD = "080500"; //mmddhh
-    private static final String RELEASE_DATE = "2009-08-05";
+    private static final int[] STRUCTURED_VERSION = {9,2,0,3};
+    private static final String VERSION = "9.2.0.3";
+    private static final String BUILD = "102200"; //mmddhh
+    private static final String RELEASE_DATE = "2009-10-22";
 
     private Version() {
         // class is never instantiated
diff -urp saxon9-9.2.0.2/net/sf/saxon/xpath/XPathFactoryImpl.java saxon9-9.2.0.3/net/sf/saxon/xpath/XPathFactoryImpl.java
--- saxon9-9.2.0.2/net/sf/saxon/xpath/XPathFactoryImpl.java	2009-07-30 19:08:00.000000000 +0200
+++ saxon9-9.2.0.3/net/sf/saxon/xpath/XPathFactoryImpl.java	2009-10-22 09:59:50.000000000 +0200
@@ -23,7 +23,7 @@ public class XPathFactoryImpl extends XP
      */
 
     public XPathFactoryImpl() {
-        config = new Configuration();
+        config = Configuration.newConfiguration();
         setConfiguration(config);
     }
 
diff -urp saxon9-9.2.0.2/net/sf/saxon/xqj/SaxonXQForwardSequence.java saxon9-9.2.0.3/net/sf/saxon/xqj/SaxonXQForwardSequence.java
--- saxon9-9.2.0.2/net/sf/saxon/xqj/SaxonXQForwardSequence.java	2009-03-25 12:26:38.000000000 +0100
+++ saxon9-9.2.0.3/net/sf/saxon/xqj/SaxonXQForwardSequence.java	2009-08-09 14:08:02.000000000 +0200
@@ -246,6 +246,10 @@ public class SaxonXQForwardSequence exte
     public void writeSequence(OutputStream os, Properties props) throws XQException {
         checkNotClosed();
         checkOnlyReadOnce();
+        if (props == null) {
+            props = new Properties();
+        }
+        props = SaxonXQSequence.setDefaultProperties(props);
         SequenceIterator iter = iterator;
         if (isOnItem()) {
             iter = new Insert.InsertIterator(