- test "as_hash( /a/[b] )"
- get a[b[c[d]]] working
- optimize the event queueing; we're keeping more events than we need to.
- There's a cheat in self_node::immed_code_template that returns the
\$ctx from the first expression in things like:
'@*' => [ 'string()' => sub { ... } ]
. That's now been copied in to a couple of other places and it's likely
that it needs to go everywhere.
- allow alternate grammars
- Don't pass or require $postponement unless one is needed.
- Move parsing code out of new in to compile() and have compile_to_Perl
return the source code of a subclass. Document this, and offer an
option to set the class name, both for user self-determination and for
the ability to prevent leaking when the application wants to do lots
and lots of different rule sets. Try to support this approach for
stylesheet language implementors.
- new() should return a subclass
- Detect expressions that will require precursors at fixup time so
that we can tell what optimizations are safe (there's an IgnoreDelayToEnd
hack, for instance) before compiling. This will also allow the
predicates in //a[b]/c, //a[b]/d, etc. to be combined.
- See if we can avoid conflicts in the precursorization code; a quick
glance shows that //text[self::text()] seems to be reusing the
Precursors positions. (check this: the precursorization code has
since been rewritten).
- Reverse action execution order: top down would be more clear.
- Don't loop through attributes if there's either a node_name op
or a (namespace_test + node_local_name) combo; we should just
look to see if the desired attribute is present.
- Extract more helper subs in to a runtime to reduce the amount of
generated code.
- Carve up AsHashHandler in to code templates and use them "bare" in
X::F::D's code generator to save the extra sub call.
- Event queuing.
- Needed when xcut() or any precursors found
- Offer an option to disable queuing and allow unordered matches
- speed enhancer for XML->PerlDataStructure conversions
- Offer an option to limit queue length
undef => unlimited (default)
0 => none allowed, compile time errors
N => limit to N events
-N => error
- add an AllPathsAbsolute option to force "foo" to behave like "/foo".