Various issues/ideas
--------------------

Regressions due to erratas:

        K2-ComputeConAttr-42
        K2-ComputeConAttr-43
        K2-CopyNamespacesProlog-9
        combiningnodeseqexcepthc5

Public API:
    - Have overloads for attribute() etc which take StringRefs?
    - Test reusing the context and change bindings each time. Rebind the predefined namespace bindings fn, xs, xml, and use them again in a subsequent query.
    - Check properties in the static & dynamic context, that they actually propagate through(and with changes). For instance, static base URI.
    - Change StandardPrefixes/etc to be namespaces instead of classes.
    - Test that prefixes doesn't affect name lookups.
    - You need to decide on how `patternist' should treat non-wellformedness.
    - Changefrom QList to QVector. Maybe add a toFooVector() to QAbstractForwardIterator, so we can use a custom vector class in the future.

- Tons of tests are missing for serialization. Go through all the error codes, ERE0003 for instance.
- Trigger toList in DeduplicateIterator.

- Rewrite/test descendant-or-sel::node-type() (etc) from a node which isn't the node type. This can be rewritten to descendant::node-type()
- Preceding/following axis selects always nothing from a root node.
- No tests for ordering empty sequence when the decl. is not global. Also several sort keys.
- Check PlainSharedPtr for thread safety. Switch to Qt's one.
- Add weird scheme for doc-available/doc(). ftp, ssh, unknown scheme.
- Forward/Reverse iterators on top level nodes with "siblings".
- Let UserFunctionCallsite return DisableTypingDeduction instead of doing hackery in ExpressionSequence.
- Add exceptions support explicitly to the pro files.
- Maybe we can merge ArgumenentReference and ExpressionVariableReference?
- ArgumenentReference does not implement evaluateToSequenceReceiver()
- Let VariableReference store the whole VariableDeclaration instead
- EvaluationCache.cpp:189:    return m_operand->properties() & (DisableElimination | IsEvaluated | DisableTypingDeduction); should probably use
  deepProperties(), no? Try to trigger it and fix it.
- It turns out VariableDeclaration::ExternalVariable was actually needed. Currently we use an ExpressionReference to an External reference which is a double layer.
- It seems that for each Literal, a new Literal is created in Expression::constantPropagate.
- Trigger bug: newMe should be returned, not Expression::Ptr(this) in AndExpression.
- Trigger all the paths in Expression::constantPropagate() for error reporting.
- Type inference in K2-Axes-2 doesn't work very well. ItemVerifiers are inserted.
- Write test of the public API that the static/dynamic context in one query compilation doesn't affect in another one.
- Maybe "$foo, $foo" can be handled with a content receiver that doubles events, somehow?
- If you use weird EOLs in namespace bindings in direct attrs, one get bugs, because attributeAsRaw() doesn't do EOL normalization.
- Aren't we doing too aggressive caching in UserFunctionCallsite::setSource()?
- 4763
- We wrap the context item with an evaluation cache, because it's considered creative, probably. But is the cache really necessary? Huge slowdown..
- If a type is declared as exactly one for an external variable, evaluateSequence() gets called anyway. A problem?
- Search for use of QString::isSpace(), write tests, and check if it really is intentioonal to check for the separartor group, as opposed the dead old ASCII whitespace characters. fn:normalize-space() and fn:normalize-unicode() are characters.
- Write test, xmlns.xml, for checking basic namespace handling. xmlns.xml contained:
    <?xml version="1.0" encoding="UTF-8"?>
    <anElement xmlns:xml="http://www.w3.org/XML/1998/namespace" xml:space="preserve"/>
- Pass SourceLocationReflection to Boolean::evaluateEBV()
- Factor out the C++ code in createReportContext.xsl into a template
- I'm afraid that setting/using the type of the context item is not thoroughly tested; LetClause.
- Preallocate like a maniac in AccelTree
- Write tests for 4621
- In return tokenAndChangeState(t->token... is it really safe to deref t? Write tests..
- Use all weird numeric literals chars in char refs and num literals to get rid of locale dependent parsing.
- 1. Grep sources for trimmed(), simplified(), isSpace(), as well as home written versions(typeswitches over chars)
  2. Find out what the spec says regarding weird Unicode whitespace. For instance, hair space, U+200A (8202 decimal), THIN SPACE. Non breaking space is another case.
  3. Write tests triggering all current cases
  4. Make the tests pass
- Write function decl that use all types(for parsing)
- trigger  if(m_pos == m_length)
                    return END_OF_FILE; in ignoreComment()

- Use actual qnames("p:a") in all branches of for/let
- Make Token's ctors explcit
- Trigger the bugs the tokenizer have by using QChar::cell().
- Add http://forums.oracle.com/forums/thread.jspa?messageID=1570246& to test cases.
- Look at the TreeModelCompleter, and steal code to Patternist View.
- Consider/test extracting EBV from a sorted, possibly mixed sequence.
- Move FunctionCall to expr/
- Can RequiresFocus and RequiresContextItem be merged?
- Move janitors/* to expr/
- Check that ItemSequenceCache is tested with StackContextBase
- It is imperative to optimize x[last()]
- Apply fn:count() to CachingIterator.
- Test cache for booleans.
- Write test that use all XML 1.0 characters.
- Fixed: 4462 4460
- Add test where AxisStep::evaluateSingleton() gets called with no initialized focus.
- Attribute normalization.. <e attr="   "/>
- Node::namespaceBindings() doesn't discuss uniqueness.
- Move common.pri to src/..
- Write tests for node test source in attribute foo.
- Isn't end-of-line handling applied to text nodes in direct ctors? Yupp, it does. The whole freakin' query: A.2.3 End-of-Line Handling.
- Write tests for cardinalities in let & for.
- Write test for invalud anyURI in xmlns attr that is extr. with namespace-uri().
- is nameToElements in AccelTree used/needed?
- Overflow is not captured when going from abs(unsignedLong(largeNNN)) and between all the other aggregate functions. avg() as well..
- Turn NamespaceResolver::Bindings into NamespaceBinding::Vector ffs.
- Property IsNodeConstructor isn't used, right?
- Write tests for things like function-available that depend on tricky namespace contexts. Especially the default element in the typeCheck stage().
- Gather all functions that stores the namespace context, and ensure they get it right with element constructors, of all its kinds.
- Add tests for where the local name is xmlns, in attrs.
- Implement AxisStep::evaluateEBV()
- One can reduce the three type/*NameTest classes to one probably, by passing in two template parameters: a mask(prefix, ns, zero), and the type
  of the comparator(prefix, ns, ln) to store.
- How are axis steps without tests handled?
- Convert the NamespaceResolver to use the NamePool
- Write tests for deep-equal() involving different trees. Spectacular things can happen there with the AccelTree...
- Ask Andreas on file:/, file://, file:///
- Secure up on brain damage in DelegateQDomNode.cpp#430.
- Apply reverse() to all axes.
- Dump all qHash(QUrl) functions when we have switched to Qt 4.3.
- Rename retrieveFunctionSignature to retieveSignature() or just signature(). Same with functionSignatures().
- Don't use toLexical() in Serializer. It triggers unnecessary heap allocations,
- Replace SequenceReceiver::processingInstruction(QName) with QName::LocalNameCode.
- Delete DoubledNodeTest
- Replace allocateQName(QString() with StandardNamespaces::empty
- TODO http://www.pms.ifi.lmu.de/forschung/xpath-eval.html
- Write tests that test whitespace normalization in URI/namespace declarations.
- Tests: use namespace-uri-for-prefix with prefix "xml" and supply a node( can const fold)
- Add tests to resolve-uri() for invalid xs:anyURI values
- Make sure that xml:base affects the static context. Or?
- We need a systematic way to convert QUrl to xs:string instances. Same goes for static inline String::Ptr fromValue(const QUrl &value)
- QUrl can't handle empty strings:
        K-CondExpr-9
        K-LogicExpr-10
        K-LogicExpr-11
        K-LogicExpr-35
        K-LogicExpr-36
        K-NodeNamespaceURIFunc-3
        K-NotFunc-8
        K-SeqBooleanFunc-8
        K-SeqExprCast-1373
        K-WhereExpr-11

- It's very important that the auto tests for the public API tests different features:
    - fn:trace()
    - external variables
    - node constructors
    - that node building happens, as opposed to just node events
    - warnings/errors
    - file loading: fn:doc()
    - fn:collection()
    - serialization error

- Should SeqReceiver::attribute() really be passed a QString? Shouldn't it be an Item::Ptr since
  it may be typed? Or should we use overloads somehow?
- base-URI-8 has an interesting problem with evaluation mode..? No idea what it is.
- base-URI-24: we should be normalizing, not trimming whitespace.
- xs:anyURI("http://www.example.org/%20%20examples") should output the percentage signs. base-uri-25
- base-URI-21, base-URI-15 because QUrl transform htpp://A to a.
- fn-nilled-2 regressed for unknown reason, probably related to paths.
- TODO How are we to handle empty string URIs?
- Write one test for each time URILiteral is used in the grammar, and pass in an invalid URI. XQST0046.
- Someone creates a StackContextBase at compile time, gr..
- Follow up on the "Computed attributes: 'xmlns' with non-empty namespace" topic.
- Write tests for root() while using the context item.
- UserFunctionCallsite::staticType() is quite broken, and needs thinking, followed by writing test cases to triggers
  its faults.
- Write tests for:
"certain characters MUST be output as character references, to ensure that
they survive the round trip through serialization and parsing. Specifically,
CR, NEL and LINE SEPARATOR characters in text nodes MUST be output
respectively as "&#xD;", "&#x85;", and "&#x2028;", or their equivalents;".
- Write test for XQST0093
- Write tests for where NameChar is used.
- Optimize (a = b) where a and b are of type xs:string of any length, by putting the values into QMaps?
- Perhaps add tests that ensure locale-specific integer parsing isn't used? Read QChar::isDigit() to find out.
- Add assert in DerivedInteger
- It looks like the type is incorrectly inferred for min/max(), see Aggregator.*.
    * Add tests that trigger this
    * http://sourceforge.net/tracker/index.php?func=detail&aid=1552670&group_id=29872&atid=397617
- Regression in the function refactoring: The Function Signatures View only show
  the constructor functions, the F&O stuff doesn't show up. The reason for this is that with the
  recent refactoring the ability to retrieve all signatures was lost. A signature is first inserted
  into m_signatures when a matching function call has been asked for. The regression in Patternist View is not
  very important but if we want to do things like displaying signatures that "almost" match etc, we will need to
  get back the "give me all signatures in a list"-feature. We need to regression test this:
  Q_VERIFY(FunctionFactoryCollection::xpath20Factory().signatures().count(), N);
- Would it be an optimization to apply the cardinality verifier before the untyped atomic converter?
- Document in Mainpage.h to not use capturing paranteses, and review existing code.
- Find invalid use of ElementName in .ypp and write tests
- Rewrite SubsequenceFN::staticType/compress(). It's really weird. Take advantage
    of the new Cardinality class.
- Get rid of AtomicValue::hasError() in favor of returning null..
- ResourceLoader::announceDocument() should return an ItemType?
- ResourceLoader::announceUnparsedText() should return false/true? E.g, always be a string? Nope, bad idea..
- rename xdtTypeMatches to isOfType() -- much cleaner. Finally found a good name for that
    function. Stolen from XQJ. Or perhaps also isInstanceOf()..
- Optimize Decimal/AbstractFloat::stringValue() by using QByteArray and QByteArray::fromRawData().
- TODO ComparisonPlatform:
    * prepareComparison is pretty pointless. My idea is that it should do all the operator lookup.  For
      example, CastingPlatform::prepareCasting() actually do something and provide convenience.

- Actually make ParentNodeAxis::create() do what it says(return singleton)
- Think about base URI for Node
- Fix doxygen @file warnings, pending: http://bugzilla.gnome.org/show_bug.cgi?id=345481
- 'case 0:' in XQueryTokenizer.cpp will break
- TruthPredicate::map() is never called because of regression in the Iterator refactoring.
  GenericPredicate's members are called instead. This is a performance regression.
- Perhaps provide suitable default implementation of expectedOperandTypes in *Container classes?
- Make And/OrExpression a template class.
- Reduce UserFunctionCallsite object size by storing arity&name as a FunctionSignature that
    is replaced by the real one.
- Perhaps one of the error codes in QNameConstructor::expandQName can be used(the same in each case.)
- Move FunctionCall to expr/
- The scanner has problem with Unicode characters. Have a look at the tests
    in functions-assemblestring.xml.
- When converting to KDOM's WebCore names, also camel case the CommonSequenceTypes::* names.
- For namespace nodes implementation, see: http://lists.w3.org/Archives/Public/www-ql/2003OctDec/0001.html
- XPathExpression::evaluate() is supposed to return a
    DOMObject, but currently returns an XPathResult.
- String/Float conversion:
    - For return "Decimal::fromValue(this->toDecimal())->stringValue();" for AF.cpp: perhaps a static toString should be added to Decimal that both AbstractFloat and Decimal calls. It would avoid allocating Decimal when calling stringValue().
- data/AnyURI, the implementation of xs:anyURI, is halfy complete, and needs attention. Error
    handling with casting needs a look as well.
- Investigate nilled PSVI


KXQTS
--------------------
* Rename TestSuite::testResult(); it's not exactly a getter
* Grr, rename identifiers and files from *BaseLine* into *Baseline*.
* Speed up --run-outofprocess by keeping patternistrunsuite running as long as possible.
* Make text fields in test case view, selectable. Same with AST view.

- Code cleaning commands:
    * Find cases where stuff looks like "const Foo& var" instead of "const Foo &var":
        `grep -nHR "\& .*,"` *
    * Convert modeline:
        sed -i -e 's+// vim:ts=4:noet+// vim: et:ts=4:sw=4:sts=4+g' `find -name "*.cpp" -or -name "*.h"`
    * Bump copyright year:
        sed -i -e 's/2005/2006/g' `find -name "*.h" -or -name "*.cpp"`

    grep "if ([[:space:]]*[[:alnum:]]*[[:space:]]*=[[:space:]]*[[:alnum:]]"
    * Find and remove whitespace after lines:
        sed -i -e 's/[ \t]\+$//' `find -name "*.cpp" -or -name "*.h" -or -name "*.ypp" -or -name "*.pri" -or -name "*.pro"`

- The new suite runner should:
    - Be completely in process
    - QTestLib based
    - Baseline the final AST
    - Baseline messages
    - Be stream based
    - Consider to what degree it should replace all the old code in sdk/lib. There's so much old, obsolete code.

// vim: et:ts=4:sw=4:sts=4
