The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for Perl extension PPI

0.845 Sat Jan 15 2005
	General:
	- Adding integration with PPI::XS, autoloading if installed

	Details:
	- Added $PPI::XS_COMPATIBLE and $PPI::XS_EXCLUDE variables to guide integration
	- Don't autoload PPI::Document, always load
	- Load in PPI::XS whenever it is installed
	- Loading and depending on Class::Inspector
	- PPI::Element::significant implemented in XS (as a trial)

0.844 Fri Jan 14 2005
	General:
	- Found a massive performance bug when parsing large perl constructs
	- Fixed some install problems

	Details:
	- PPI::Node::schild was copying the entire of it's child array each call.
	  This was causing massive slowdowns when ->{children} got large. Fixed.
	- The core tests still expect Transform to be in the core. Fixed.

0.843 Tue Jan 12 2005
	General:
	- Starting the process of removing PPI::Base.
	  It only does does error handling now, which will be split up.
	- Fixing some packaging and "play well with others" issues

	Details:
	- Randal Schwartz pointed out t/06... wouldn't working for him.
	  It appears when Test::More bug CPAN #8385 was fixed, we broke.
	- We now include build-time-only dependencies in the installer
	- Although unusable, PPI::Document::Normalized's version fell out
	  of sync with the rest of the distribution. Fixed.
	- PPI::Tokenizer no longer inherits from PPI::Base
	- Added class variable $PPI::Tokenizer::errstr
	- Added class method PPI::Tokenizer->errstr
	- Fixed Tokenizer Bug: C< y => 1 > was being seen as a regex
	- Fixed Tokenizer Bug: C< <<''; > was dying because I expected at
	  least one character
	- Fixed Tokenizer Bug: C< $foo->{s} > was being seen as a regex

0.842 Tue Jan 11 2005
	General:
	- Lots of debugging based on Tinderbox results

	Details:
	- Fixed MANIFEST.SKIP to removed PPI::Transform and PPI::Tinderbox
	  from the core PPI distribution (like they should be)
	- Optimised the previous #9582 to not have to run for EVERY word,
	  only those where it might be needed.
	- Corrected a use of QuoteLike::Execute to QuoteLike::Backtick
	- Fixed CPAN #9598 Tokenizer Bug: C< qx( $command ) >
	- Fixed CPAN #9614 Tokenizer Bug: C< $foo << 16 >
	- Set the properly includive regex for << '...' here-doc
	- Added an very early filter to prevent non-basic chars going in

0.841 Mon Jan 10 2005
	General:
	- Completed much more documentation on the core classes
	- PPI::Tester back in sync again (seperate distribution)
	- PPI::Processor and PPI::Tinderbox completed (seperate distribution)

	Details:
	- Documented PPI::Tokenizer
	- PPI::Document->new( $source ) added as a convenience
	- PPI::Lexer::lex_file can now be called statically
	- PPI::Lexer::lex_source can now be called statically
	- PPI::Lexer::lex_tokenizer can now be called statically
	- Fixed a small bug in PPI::Dumper::print
	- Fixed CPAN #9582 Tokenizer Bug: C< sub y { } # Comment >
	- Fixed similar case with C< foo->y() >

0.840 Thu Dec 21 2004
	General:
	- Changed the PPI summary to no longer use the devisive word "parse"
	  Now: "PPI - Analyze and manipulate Perl code without using perl itself"
	- Total rewrite of all the ->location code
	- Upgrading MakeFile.PL to Module::Install
	- Fixed #CPAN 8752 (a round-trip edge case bug)
	- Added 08_regression.t to do code/dump regression testing for lexer bugs
	- Completed (hopefully) HereDocs conversion to a single complex token
	- PPI is now compatible with prefork.pm (although not dependant)

	Details:
	- Added PPI::Node::find_first object method
	- Changed PPI::Node::find_any to just call PPI::Node::find_first
	- Added PPI::Element::first_token object method
	- Added PPI::Element::last_token object method
	- Made a partial-removal-capable PPI::Element::_flush_locations
	- PPI::Document::flush_locations uses PPI::Element::_flush_locations
	- PPI::Document::index_locations is here-doc sane
	- Added PPI::Token::HereDoc::heredoc object method
	- Added PPI::Token::HereDoc::terminator object method
	- Documented PPI::Token::HereDoc
	- Added a HereDoc code/dump test to 05_lexer_practical.t
	- Added PPI::Document::serialize, which replaces the use of
	  ->content for generating the actual string to write out to
	  files when saving Documents.
	- File::Spec reduced from dependency to build dependency
	- Updated Test::ClassAPI dependency to newest version
	- Enabled API collision detection in 02_api.t
	- Updated Class::Autouse dependency to newest version

0.840_01 Tue Dec 21 2004
	General:
	- Perl Foundation Funding Commences
	- Changes separated into General and Details from here one
	- Complete re-organisation of the quote-like token classes.
	  Any and all code that works with quotes will be broken.
	- Gave up on the old PPI::Query code and wrote a complete new and
	  much thinner implementation based roughly on the API of
	  File::Find::Rule.
	  PPI::Find uses the &wanted function (which also has a slightly
	  different API to the old one) but has the ->in style search methods.
	  It should be relatively easy for someone to write PPI::Find::Rule
	  on top of it.
	- PPI::Transform is thus temporarily stale

	Details:
	- Introduced a bug for C< foreach $foo () > and caught/fixed it
	  during the changeover.
	- Changed PPI::Lexer::Dump to PPI::Dumper
	- API Freeze PPI::Find
	- API Freeze PPI::Dumper
	- Documented PPI::Find
	- Documented PPI::Dumper

0.831 Fri Nov  5 2004
	- Overloaded PPI::Document bool => true
	- Overloaded PPI::Document ""   => content
	  (That is, ::Documents stringify to their content)
	- Fixed PPI::Document::save
	- Merged Leon Brocard's docs patch
	- Cleaned up PPI::Node::_condition and documented conditions better (fixed #7799)
	- Allow dropping of the initial PPI:: in class search conditions
	- Fixed two instances of File::Slurp::read_file being called as a method

0.830 Mon Sep 27 2004
	- Added PPI::Statement::Package::file_scoped object method
	- Handle potentially dangerous C< sub foo ($$ > safer
	- Resolve C< sub BEGIN { } > to PPI::Statement::Scheduled correctly
	- Resolve C< sub () { 1 }; > to PPI::Statement correctly
	- API Freeze PPI::Statement::Package
	- API Freeze PPI::Statement::Scheduled
	- API Freeze PPI::Statement::Sub
	- Documented PPI::Statement
	- Documented PPI::Statement::Package
	- Documented PPI::Statement::Scheduled
	- Documented PPI::Statement::Sub
	- Documented PPI::Document::Fragment

0.829 Sat Sep 25 2004
	- BREAKS API COMPATIBILITY
	- Changed PPI::Token::SubPrototype to PPI::Token::Prototype
	- Added PPI::Token::Prototype::prototype object method
	- Added PPI::Statement::Sub::prototype object method
	- Added PPI::Statement::Sub::block object method
	- Fixed PPI::Statement::Include::version

0.828 Sun Aug  8 2004
	- BREAKS API COMPATIBILITY
	- Changed PPI::Token::DashedBareword to PPI::Token::Quote::Dashed
	- Changed PPI::Token::Bareword to PPI::Token::Word
	- Vastly improved PPI::Manual

0.827 Thu Aug  5 2004
	- Added PPI::Token::Seperator class ( for __DATA__ and __END__ )
	- Added better Tokenizer handling of __DATA__ and __END__
	- Added better Lexer handling of __DATA__ and __END__
	- Fixed some version inconsistencies

0.826 Sat Jul 31 2004
	- Added PPI::Element::statement object method
	- Added PPI::Transform abstract class
	- Sped up the 'bool' overload for PPI::Element
	- Added PPI::Element::snext_sibling object method
	- Added PPI::Element::sprevious_sibling object method
	- Added PPI::Element::insert_before object method placeholder
	- Added PPI::Element::insert_after object method placeholder
	- Changed {elements} to {children} to match PPI::Node definitions
	- Added PPI::Node::first_element object method
	- Added PPI::Node::last_element object method
	- Added PPI::Element::next_token object method
	- Added PPI::Element::previous_token object method
	- Added PPI::Token::Symbol::symbol object method

0.825 Mon Jul 26 2004
	- Added PPI::Statement::Include::type object method
	- Added PPI::Statement::Include::module object method
	- Added PPI::Statement::Include::pragma object method
	- Added PPI::Statement::Include::version object method
	- Overloaded == as "the same object" for PPI::Element
	- Overloaded eq as "->content is the same" for PPI::Element
	- Overloaded bool as always true, to prevent an error
	- Added PPI::Statement::Package::namespace object method
	- 100% round-trip safe. What goes in, will come out.
	- Reduced leaks by 95%. Process size 30meg after 5000 files.
	  Still some leaks remaining when Lexing errors out.
	- Seperated largest Tokens into their own files.
	  This aligns token class structure with that of ::Statement and ::Structure
	- Rewrote PPI::Node::DESTROY several times while hunting down more leaks
	- Fixed Tokenizer crash on empty subroutine prototypes such as C< sub foo() {} >
	- Treat unexpected braces as an implicit close, to make the lexer more resilient
	- Added PPI::Statement::UnmatchedBrace (name suggested by Abhijit Menon-Sen)
	  to handle closing braces found at the base of a Document.
	- Enabled foo'bar package notation again.
	- Getting close to the first 0.900 series beta release

0.824 Wed Jul 21 2004
	- Removed a 6 meg tmon.out file I accidentally bundled

0.823 Wed Jul 21 2004
	- Added PPI::Document::Fragment class
	- Added PPI::Node::schildren object method
	- Completed compound statement parsing
	- Lexer is now officially feature complete

0.822 Wed Jul 21 2004
	- Filling out the API test as much as possible
	- Added PPI::Statement::label object method
	- Moved PPI::Structure::elements object method to PPI::Node::elements
	- Re-organised statement parsing to better implement ::Compound statements
	- Added PPI::Statement::Data class
	- Added PPI::Statement::End class
	- Re-organised the _lex_statement, _statement_continues stuff, ready for while
	- Added PPI::Lexer::_lex_statement_end to handle PPI::Statement::End properly
	- Organising 02_api.t was getting hard, so added implicit Module=class to Test::ClassAPI

0.821 Mon Jul 19 2004
	- Cleaned up test data files directories
	- Added PPI::Statement::Variable::type object method
	- Added PPI::Statement::Variable::variables object method
	- Added some more classes to the API testing
	- Started 07_tokens.t for testing particular token classes
	- Added PPI::Token::Symbol::canonical object method (and tests)
	- PPI::Token::Magic now ISA PPI::Token::Symbol
	- PPI::Element::clone now fixes _PARENT links for Nodes

0.820 Mon Jul 19 2004
	- Added Round-Trip-Safe testing for all PPI files
	- Added PPI::Node::find_any object method
	- Added PPI::Node::contains object method
	- Continuing the never ending addition of tests
	- Structure open and close brace tokens now see the Structure as their parent
	- Removed the sample application, to streamline the core install
	- Removed dependencies for the sample application
	- Removed custom META.yml, as now no longer needed

0.819 Mon Jul 14 2004
	- Many parts of PPI are VASTLY changed in this revision
	- Breaks API compatibility heavily
	- Adds dependency on List::MoreUtils
	- Added PPI::Lexer support for CHECK blocks
	- Added PPI::Document::load method
	- Added PPI::Document::save method
	- Added PPI::Document::index_locations method
	- Added PPI::Document::flush_locations method
	- Added PPI::Element::top method
	- Added PPI::Element::document method
	- Renamed PPI::Element::extract -> PPI::Element::remove
	- Added test script for element-y stuff
	- Optimisation across the board using List::Any
	- Added PPI::Node::first_child method
	- Added PPI::Node::last_child method
	- Added PPI::Element::clone method
	- Removed Filehandle support from PPI::Tokenizer, to allow the
	  ability to rollback source lines into the buffer if needed.
	- Added POD documentation for PPI::Element
	- Added POD documentation for PPI::Node
	- Added POD documentation for PPI::Document

0.818 Mon Jul  5 2004
	- Changed lib/PPI/Manual.pm to lib/PPI/Manual.pod
	- Added documentation for PPI::Lexer
	- Fixed the misparsing of s{//}{\}
	- More clues added for deciding "slash or regex"
	- Removed PPI::Batch from the default distribution
	- Replaced File::Flat with File::Slurp to reduce dependencies

0.817 Thu Jul  1 2004
 	- Fixed the misparsing of $#{ }
 	- Changed PPI::ParentElement to PPI::Node and moved it to it's own file
	- Changed PPI::Common to PPI::Base
	- Fixed PPI::Node::find
	- Added PPI::Node::prune
	- Started to add a little more class structure documentation
	- Tried to make the DESTROY sequence of events work better

0.816 Tue Jun 29 2004
	- Solved the "last token in file parses wrong" bug

0.815 Sun Jun 27 2004
	- Fixed a bug with the detection of @- and @+
	- Added support for @*
	- Added missing classmap entry for ^ to ::Token::WhiteSpace
	- Added support for arcane "foo"x10 idiosyncracy

0.814 Sat Jun 26 2004
	- Added the PPI tester, a desktop-based interactive debugger, which
	  should greatly accelerate finding and fixing both ::Tokenizer
	  and ::Lexer bugs. This will probably end up as a seperate
	  distribution though, as it has a dependency on wxPerl.

	- Fixed the misparsing of Foo::Bar::Baz
	- Fixed the misparsing of *100
	- Fixed the misparsing of Class::->method properly, or rather Foo::
	- Tokenizer correctly identifies labels
	- Changed PPI::Statement::Flow to PPI::Statement::Compound
	- Removed the extra null whitespace token appearing after a bareword
	  at the end of a file.
	- -X operator are recognised correctly, although not at end of file
	- Lexer detects subroutine and if () statement ends correctly

0.813 Sat Jun 26 2004
	- PPI::Lexer is now structurally complete

0.812 Tue Jun 22 2004
	- No changes to PPI itself.
	- With the addition of Test::ClassAPI 'complete' support,
	  upgraded 02_api.t to use it. Fixed a few small house-keeping bugs.

0.811 Mon Jun 21 2004
	- Added support for subroutine attributes
	- Fixed some problems with anonymous subroutines and prototypes
	- $#$foo parses as (Cast,Symbol) now, not (Magic,Symbol)

0.810 Mon Jun 14 2004
	- Recognise the _ magic filehandle

0.809 Sat Apr 17 2004
	- No changes to PPI itself.
	  Set the correct number of tests to match changes to Test::ClassAPI

0.808 Sat Apr 17 2004
	- No changes to PPI itself.
	  Upgraded 02_api.t to match changes to Test::ClassAPI

0.807 Sat Apr  3 2004
	- Added a manual META.yml file to stop the bundled private AppLib
	  library from being indexed by CPAN

0.806 Mon Mar 22 2004
	- The $} magic variable is now supported
	- Fixed a "tight sub property" bug ( sub foo:lvalue )

0.805 Sun Sep 28 2003
	- The maximum line length regressed, reseting it to 5000.
	- In PPI::Format::HTML, not any parsing error causing a
	  premature end of tokenizer by adding it in a comment at
	  the end of the file.

0.804 Sat Sep 06 2003
	- Statement and Structure resolution preliminarily work.
	  Some basic types of statements and structures are identified.
	- PPI::Format::Apache has been seperated into a different module

0.803 Sat Sep 06 2003
	- Added very long line protection support.
	  Maximum line length is now 5000.
	- Added bug fixes to the Lexer so that block tree building works
	  mostly OK again, without adding broken duplicate tokens.
	- Added the PPI::Lexer::Dump module, to do Lexer object dumps.

0.802 Sat Aug 23 2003
	- PPI::Format::HTML sends the correct content headers

0.801 Fri Aug 22 2003
	- Moved to a new numbering scheme to get more room before 1.0
	- Always fully load when called under mod_perl
	- Add mod_perl hook to PPI::Format::HTML

0.8 Fixes to the quote parsing engine

0.7 Fixed some minor bugs

0.6 Fixed POD, fixed version number, included $'a as a symbol

0.5  Missing

0.4  Mon Dec 23 10:24:21
        - Some more minor parsing fixes in Tokenizer
        - Completely changed the API from doThis to do_this style
        - Changed API to indicate private methods properly

0.3  Tue Dec 17 10:29:27
	- Restructured a little bit
	- Fixed some mis-parsing cases

0.2  Unknown
	- Added test script

0.1  Thu Dec 06 16:50:23 2002
	- original version