MHX / Convert-Binary-C-0.76 / Changes

-------------------------
Version 0.76 (2011-04-11)
-------------------------

* it looks like I've found the source of the test failures reported
  in cpan #56369; this version is an attempt to fix the problem, but
  without fully understanding it -- if a windows guru can explain to
  me why setjmp() deadlocks if the jmp_buf structure was allocated
  through Perl's API (New, Newz, etc), I'd really appreciate it

-------------------------
Version 0.75 (2011-04-10)
-------------------------

* fix cpan #63381 / perl #79854: make sure warnings cause a cache
  file not to be used (thanks to Andreas König for reporting this)

* fix bug in unpack where the code would attempt to create an array
  with negative size when running out of input data

* make sure elf.PL reads/writes in binary mode (thanks to רחלי מרל
  for finding this problem)

-------------------------
Version 0.74 (2009-04-18)
-------------------------

* fix sourcification of flexible array members (triggered by cpan
  #45105; thanks to Alexander Ost for being persistent in his
  attempt to convince me that there's a bug in sourcify)

-------------------------
Version 0.73 (2009-03-16)
-------------------------

* fix META.yml generation with newer versions of ExtUtils::MakeMaker

* work around an include path handling bug present in some versions
  of Test::Harness

-------------------------
Version 0.72 (2009-03-15)
-------------------------

* fix cpan #43119: patch to allow Convert::Binary::C to build
  with GCC 4.4.x (thanks to Alex Lancaster for providing a patch)

-------------------------
Version 0.71 (2008-04-15)
-------------------------

* added new 'StdCVersion' and 'HostedC' options for configuring
  the predefined macros of the preprocessor

* fix debugging build with development version of Perl

-------------------------
Version 0.70 (2007-12-24)
-------------------------

-- released without changes --

----------------------------
Version 0.69_01 (2007-12-08)
----------------------------

* fix UV generation on platforms where NVs don't preserve
  UVs (e.g. amd64) and perl doesn't know about UVs (<5.6.0)

* make the test suite more noisy when something goes wrong

-------------------------
Version 0.69 (2007-12-06)
-------------------------

* fix: unpack would return garbage when an unpack hook
  causes the perl stack to be reallocated

* make ccconfig handle blanks in paths correctly

* slightly improve ELF parser example

* fix debug format strings

-------------------------
Version 0.68 (2007-06-25)
-------------------------

* allow #pragma pack(0) to reset to default alignment,
  just like #pragma pack

* add checks for invalid #pragma pack() arguments

-------------------------
Version 0.67 (2006-12-29)
-------------------------

* bleeding edge perl versions don't have SVt_PVBM anymore,
  which broke compilation of cbc/util.c

-------------------------
Version 0.66 (2006-11-02)
-------------------------

* fix a bug in the parser that accidentially allowed
  qualified enum specifiers as unnamed compound members

* update test suite for better coverage of recent
  compiler features and bitfields

-------------------------
Version 0.65 (2006-08-27)
-------------------------

* fix compilation issues with perls configured with
  threads and debugging; these issues were caused by
  a buggy implementation of the assert() macro in the
  5.8 series of perl

* fix compilation issues with HP compiler on itanium
  systems

* fix: hooks for the same type were not re-entrant
  (i.e. you could not pack/unpack the same type
  within a hook registered for that type)

* fix: passing sparse hashes or arrays to pack() in
  combination with pack hooks was causing an assertion

* fix an integer promotion bug in the preprocessor

* add better support for C99-style array declarator

* fix enumerator handling: it was impossible to reuse
  the name of an enumerator as an identifer

* ccconfig fix: macros defined to the empty string
  were not properly detected

----------------------------
Version 0.64_02 (2006-03-24)
----------------------------

* struct members are now treated more Cish than before

* added experimental Dimension tag

* cleaned up some internals

----------------------------
Version 0.64_01 (2006-02-27)
----------------------------

* added new methods to interface with the preprocessor:

  o the 'defined' method tests if a macro is defined

  o the 'macro_names' method returns a list of all
    defined macro names

  o the 'macro' method returns macro definitions

* added 'Defines' option for 'sourcify' method; with
  this option turned on, macro definition are also
  sourcified

* the speed of the 'sourcify' method has been greatly
  improved

* add a new pod coverage test

* fix a pod2usage call in elf.pl example

* improve warning when trying to pack references into
  format tagged types

* make the module and some basic tests compatible with
  perl 5.004

* the native() function/method now also supports the
  'UnsignedChars' and 'UnsignedBitfields' properties

* the 'threads' feature is deprecated and will be removed
  in a future relase
 
-------------------------
Version 0.64 (2006-01-16)
-------------------------

* fix version handling in *.pm files

* don't index bin/elf.PL

* upgrade ppport.h

----------------------------
Version 0.63_01 (2006-01-09)
----------------------------

* fix: using the Format tag on bitfield members now throws
  an exception
 
* added experimental ByteOrder tag

* added ELF parser example

* improve internals

  o better encapsulation of the pack/unpack code

  o avoid unneccessary computations

  o thanks to the cachegrind tool (http://valgrind.org), some
    expressions in the lexer code of the ucpp preprocessor
    could be optimized, making the preprocessor more than
    10% faster on x86 platforms; this means that parsing
    should be about 7% faster now

* improve test coverage

-------------------------
Version 0.63 (2005-12-29)
-------------------------

* fix a problem with the test suite when run in a directory
  that contains whitespace characters

* (hopefully) fix the no_index problem in the META.yml by
  replacing "dir" with "directory"

-------------------------
Version 0.62 (2005-12-01)
-------------------------

* fixed a bug in unpack() that would cause an error when
  repeatedly passing a substr() as the data argument; this
  is not a critical bug, because there's no silent failure

-------------------------
Version 0.61 (2005-10-27)
-------------------------

* fix Makefile.PL / META.yml

-------------------------
Version 0.60 (2005-10-26)
-------------------------

* fixed: the byte order setting was not correctly handed
  to the bitfield layouter when using configure() before
  using parse(); since that's what C::B::C::Cached does,
  C::B::C::Cached could be using the wrong byte order for
  bitfields

* the deprecated methods add_hooks(), delete_hooks() and
  delete_all_hooks() have been removed

* silence some warnings with newer gcc versions

* start moving test suite to use Test::More

* bundle Test, Test::More and Test::Harness for older
  perl versions

* extend compatibility down to perl 5.005

-------------------------
Version 0.59 (2005-06-13)
-------------------------

* fixed: dying hooks no longer leak memory

* added new 'UnsignedBitfields' option

* removed 'Bitfields are unsupported' warning

* documented bitfield support

* the usual cleanups and corrections

----------------------------
Version 0.58_01 (2005-05-23)
----------------------------

* bitfields are now supported; since bitfield implementations
  differ from compiler to compiler (sometimes significantly),
  the bitfield layouting engine can be exchanged at runtime;
  bitfield support is, however, still considered experimental

* the memory used by internal data structures as well
  as the number of malloc/free calls has been reduced
  by about 15 percent; besides saving memory, this also
  makes parsing and cloning a bit faster

* the whole pack()/unpack() engine was re-doing the work
  that has previously been done by the compound layouter;
  this redundancy has been removed, making the code more
  readable (and a little bit faster)

* the compound layouter implementation has been separated
  and can now be exchanged at runtime (which is currently
  unused as there's only one implementation)

* the bison parser is now making use of the %destructor
  feature introduced recently; this makes the parser code
  a lot easier to read and maintain, and makes the parser
  a bit faster; you need at least bison-2.0a to regenerate
  the files

* when packing 'string' numbers, the 0b... syntax is now
  supported for binary numbers

* ccconfig's interface and internals have been updated

* ccconfig now has a lot more options that hopefully allow
  you to test compilers with strange commandline interface

* ccconfig is now more robust against compiler failures

* lots of minor tweaks and fixes

-------------------------
Version 0.58 (2005-02-21)
-------------------------

* there's now a mailing list; see the documentation or
  README for details

* new tag() method provides a generic way of tagging
  properties such as hooks to types

* the hooks methods are deprecated and will be removed
  in a future release (new interface is provided through
  tag() / untag())

* completely restructured the XS/C internals, since C.xs
  was getting way too large; the code should be a lot
  more modular and organized now

* make the preprocessor handle (read: ignore) any #ident
  directives (problem spotted by Ronnie Kelly)

* use faster preprocessor tokenizer routine

* ccconfig: add --output-file and --output-format options

* fix invalid read bug when redefining a macro with trailing
  whitespace (spotted by valgrind)

* make sure pack() returns null-terminated strings; not doing
  so can confuse the regex engine

* strip redundant warnings from enum/compound/typedef methods

* fix deep recursion in llex() that causes bus error on hpux
  (this should fix the activestate test failures)

* make util / ucpp use Perl's memory allocation functions
  (this should fix problems with -Dusethreads and -Dusemymalloc)

* as usual, more tests and more docs

-------------------------
Version 0.57 (2004-11-23)
-------------------------

* allow empty initializers (spotted by Mike Lamb)

* add CharSize option to support architectures where
  chars are larger than 8 bits (spotted by Esa Östring)

-------------------------
Version 0.56 (2004-09-19)
-------------------------

* allow empty member declaration lists

* minor doc fixes

-------------------------
Version 0.55 (2004-08-22)
-------------------------

* new native() function to query native properties

* feature() and native() can now also be called as methods

* allow setting Alignment and CompoundAlignment to zero to
  request native alignment and compound alignment

* prefix compile-time defaults with CBC_ and document them

* upgrade ppport.h

* minor cleanups

-------------------------
Version 0.54 (2004-07-01)
-------------------------

* improved hooks features

* changed handling of autogenerated files that has been
  causing trouble with crappy archiving tools

* minor bugfixes

-------------------------
Version 0.53 (2004-05-25)
-------------------------

* fixed a bug that messed up the return values when using
  unpack in list context together with OrderMembers => 1

-------------------------
Version 0.52 (2004-05-24)
-------------------------

* added new CompoundAlignment option

* added new behaviour for unpack method in list context

* simplify inheriting from Convert::Binary::C

* fixed a bug in the initializer method that caused
  wrong initialization strings for unnamed unions

* fixed a systematic bug that caused sourcify to return
  invalid C code in a few special cases

-------------------------
Version 0.51 (2004-03-23)
-------------------------

* added method chaining for add_hooks, delete_hooks and
  delete_all_hooks

* fixed some bugs when using substr() with pack and unpack

* documentation fixes and updates

-------------------------
Version 0.50 (2004-03-22)
-------------------------

* added support for flexible array members and incomplete
  types

* added support for registering pack/unpack hooks to allow
  user-defined packing/unpacking

* ucpp is now reentrant, thus there's no more locking of
  parse/parse_file

* fixed a memory leak when using OrderMembers => 1

* improved ccconfig's detection of ability to compile
  object/executable files

* lots of minor bugfixes and code cleanups

-------------------------
Version 0.49 (2003-11-24)
-------------------------

* fixed build problem on multi-threaded 5.6.x perls by
  removing irrelevant code from ppport.h

* changed error reporting: preprocessor errors are no
  longer only warnings
  (this fixes an issue with Convert::Binary::C::Cached
  creating an empty cache file if none of the #include'd
  files could be found)

* fixed some error/warnings reporting problems with
  Convert::Binary::C::Cached

* minor cleanups

-------------------------
Version 0.48 (2003-11-03)
-------------------------

* added new 'OrderMembers' option: this option allows you
  to tie all hashes returned by the unpack method to either
  Tie::Hash::Indexed or Tie::IxHash, thus preserving the
  order of compound members when e.g. dumping the hashes or
  iterating through their keys/values

* slightly improved performance for pack method

* added META.yml

* lots of code cleanups 

* small bugfixes

-------------------------
Version 0.47 (2003-09-11)
-------------------------

* enhanced behaviour of def() method

* added new pod test

* fixed some buglets

-------------------------
Version 0.46 (2003-09-09)
-------------------------

* fixed bug #3753 "packing a struct/member/field causes a
  bus error"

* added new warnings when packing/unpacking zero-sized types

* updated the docs with links to http://rt.cpan.org and
  http://cpanratings.perl.org

-------------------------
Version 0.45 (2003-08-18)
-------------------------

* fixed/improved sourcify output for #pragma pack

* added Context option for sourcify method

-------------------------
Version 0.44 (2003-08-17)
-------------------------

* fixed behaviour of typeof method for bitfields

* dependencies method now returns plain list of files when
  called in list context

* doc fixes

-------------------------
Version 0.43 (2003-07-24)
-------------------------

* fixed: undef values returned by unpack were not writable
  and caused problems with almost all versions of perl

* fixed: sizeof() could return garbage when used on array
  types

* fixed bogus warning generated by pack when explicitly
  passing 'undef'

* improved warning messages generated by pack

* added error when using offsetof on bitfields

* added new initializer method

* the offset argument to the member method is now optional;
  without the offset argument, a list of all possible
  members is returned

* code cleanups

-------------------------
Version 0.42 (2003-06-23)
-------------------------

* added new 'ieeefp' feature

* new floating point conversion code to support both IEEE
  and non-IEEE sytems

  o on machines using the IEEE format to store floating
    point numbers, you can pack/unpack arbitrary byteorder
    floating point values for all supported native sizes

  o on machines not using the IEEE format, packing and
    unpacking of floating point values is restricted to
    the types natively available

* floating point conversion checks and warnings have been
  improved

* added floating point format detection to ccconfig

* some code cleanups

-------------------------
Version 0.41 (2003-06-10)
-------------------------

* added support for gcc's asm syntax

* some cleanups

-------------------------
Version 0.40 (2003-04-20)
-------------------------

* same as 0.13, just to make CPAN(?:PLUS|-indexer)? happy

-------------------------
Version 0.13 (2003-04-20)
-------------------------

* changed behaviour of member method in list context
  
  o doesn't return the member's type any longer

  o returns all matching members instead, if multiple
    members match the given offset

  o this change is NOT backward compatible

  o to get the old behaviour, turn

      ($member, $typeof) = $c->member( $type, $offset );

    into

      $member = $c->member( $type, $offset );
      $typeof = $c->typeof( $type.$member );

* fixed lots of memory leaks resulting from using sv_dec()
  where SvREFCNT_dec() should have been used instead

* fixed memory leak when object construction fails

* fixed sourcify for enums in special cases

* fixed segfault in debugging mode

* removed lots of limitations and fixed lots of bugs when
  dealing with member expressions

* changed module/ccconfig versioning; now

    $Convert::Binary::C::VERSION
    $Convert::Binary::C::Cached::VERSION

  as well as the version of ccconfig are all set to the
  version of the distribution to avoid confusion

* added new typeof method

* added dwimmy handling of offset suffixes

* added basic type support for many methods

* allowed basic types to be used without parsing any code

* allowed enum/struct/union prefixes for enum, compound,
  struct and union methods

* improved performance when using a threaded perl binary
  by about 20%; performance is now only 5% worse than
  with a non-threaded binary

* added new "understanding types" section to documentation

* fixed some inconsistencies in documentation

* added some new warnings

* added lots of new tests, some based on coverage analysis
  using gcov

* fixed some tests that could fail due to random binary
  input when (un)packing floating point values

* used ppport.h for compatibility

* added check for unsupported perl binary configuration
  with usemymalloc=y _and_ threads

* lots of code cleanups

-------------------------
Version 0.12 (2003-03-18)
-------------------------

* fixed some bugs in ccconfig

* fixed dealing with cache file corruption

* minor fixes in documentation

* use Devel::Tokenizer::C for tokenizer generation

-------------------------
Version 0.11 (2003-02-27)
-------------------------

* fixed problem with recursive data structures in sourcify

* minor cleanups

-------------------------
Version 0.10 (2003-01-23)
-------------------------

* added --version for ccconfig

* cleaned up and fixed format strings

* updated README

-------------------------
Version 0.09 (2003-01-20)
-------------------------

* fixed problems with va_list on Linux-PPC that caused some
  tests to segfault

* updated preprocessor output detection in ccconfig for
  "smart" preprocessors

* minor fixes and cleanups

* minor documentation updates

-------------------------
Version 0.08 (2003-01-15)
-------------------------

* added ccconfig --nodelete option

* added context info for structs/unions/enums

* removed 'c99' feature

* documentation updates and fixes

-------------------------
Version 0.07 (2003-01-09)
-------------------------

* fixed packing/unpacking for #pragma pack

* complete rewrite of member() algorithm

* added 'KeywordMap' option to add keywords directly to the parser

* added new behaviour for EnumSize => -1

* extended ranges of some integer options

* integrated new version of ucpp

* added 'ccconfig' script

* example scripts are now generated

* added and improved tests

* documentation updates

* lots of other tiny tweaks

* deprecated 'c99' feature, will be removed in 0.08

-------------------------
Version 0.06 (2002-12-13)
-------------------------

* removed options 'HasVOID' and 'HasC99Keywords'

* added 'DisabledKeywords' option, which replaces both 'HasVOID' and
  'HasC99Keywords', and allows to disable a lot of other keywords, too:

    HasVOID => 0         -->  DisabledKeywords => ['void']
    HasC99Keywords => 0  -->  DisabledKeywords => [qw(inline restrict)]

* updated parser to ignore type definitions within code blocks

* fixed an access violation when cleaning up the preprocessor

* removed warning when using sourcify method

* added some more tests

* added examples directory and some example scripts

* added more examples to documentation

* documentation fixes/updates

-------------------------
Version 0.05 (2002-11-28)
-------------------------

* fixed a bug that suppressed the error message
  when the cache file could not be created, and
  added a test for it

-------------------------
Version 0.04 (2002-11-27)
-------------------------

* support for 64-bit data types on all platforms

* additional data types

  o long long

  o long double

* new methods

  o clean -- cleaning an object

  o clone -- cloning an object

  o depencencies -- retrieve an object's dependencies

  o sourcify -- emit an object's parsed data as C source

* changed method behaviour

  o configure

    - The 'HashSize' option has been removed. I didn't like
      it anyway, and since the hash tables are now growing
      automatically, it's completely useless.

  o def

    - Instead of undef, 0 and 1, the def method will now return
      undef, '' (the empty string) or the kind of the type you
      passed as an argument, e.g. 'typedef' or 'union'.

* added method behaviour

  o configure

    - Calls to configure (and other configuration methods) can
      be chained together when they're 'set' method calls.

  o parse, parse_file

    - All method calls that have no return value will return a
      reference to their object, so method chaining is possible.

  o pack, unpack, sizeof, offsetof, member

    - These methods now can all operate on compound members, i.e.
      you could say $obj->sizeof( 'type.foo.x' ).

  o member

    - The member method now can optionally return the type of the
      requested member.

* new Convert::Binary::C::Cached module

  o cached Convert::Binary::C objects

  o identical interface

  o can speed up parsing by up to 10 - 20 times

* increased speed for packing and unpacking arrays

* increased portability

* added new and improved existing tests

* some bug fixes and a lot of code cleanups

* upgraded to bison 1.75

-------------------------
Version 0.03 (2002-09-25)
-------------------------

* fixed default sizes for floats and double in object constructor

* fixed some 64-bit architecture issues

* fixed bug in bison parser

* fixed problems with some tests

* added support for dec_osf platform

-------------------------
Version 0.02 (2002-08-31)
-------------------------

* decreased the complex test file, which speeds up the complex test
  and decreases the size of the distribution file

* decreased the number of threads in the threads test

* added copyright notice to the README file

* minor corrections/cleanups

-------------------------
Version 0.01 (2002-08-30)
-------------------------

* initial release




Hosting generously
sponsored by Bytemark