Known bugs
~~~~~~~~~~
* The most stable source code manglers have to parse compiler
  directives. This one does not, so some source code will be mangled
  incorrectly or not at all. Note that almost all source using compiler
  directives will compile. The following for example will not:

    procedure dv_TObject.Int15_p0_r0(axValue : word);
    {$IFNDEF DPMI} assembler; {$ENDIF}
    {$IFDEF DPMI}
    begin
      {* do some stuff *}
    end;
    {$ELSE}
    asm
      {* do some asm stuff *}
    end;
    {$ENDIF}

  Rewriting this to:

    {$IFDEF DPMI}
    procedure dv_TObject.Int15_p0_r0(axValue : word);
    begin
      {* do some stuff *}
    end;
    {$ELSE}
    procedure dv_TObject.Int15_p0_r0(axValue : word);  assembler;
    asm
      {* do some asm stuff *}
    end;
    {$ENDIF}

  will make it compile correctly.

  The following code cannot be mangled too:
    {$IFDEF VER60}
    procedure Demo(s : string);
    {$ENDIF}
    {$IFDEF VER70}
    procedure Demo(w : word);
    {$ENDIF}

  Again the same variant as the previous two cannot be mangled:

    {$IFOPT N+}
    Function FormatF(const Mask : TbxMaskStr;
                           Flt  : Double;
                           DP   : Integer): String;
    {$ELSE}
    Function FormatF(const Mask : TbxMaskStr;
                           Flt  : Real;
                           DP   : Integer): String;
    {$ENDIF}

  Fix as the first variant.


* $I directives are currently ignored. All directives are still included
  in the mangled file but include files are not mangled yet. I want to
  add this feature if the this version of mangler is correct.

* not all source code can be mangled correctly. Take the following code
  as an example:

    implementation
    uses A;

    type
      b = object(parent)     {* object parent is defined in unit A *}
        procedure Demo;
      end;
    var
      a : integer;


    procedure b.demo;
    begin
      a := 10;
    end;

  If object parent contains an attribute a, this file will be mangled
  incorrectly because Mangler does not know that a was defined in
  parent. Such pitfalls only applies to objects.
  A 100% stable mangler therefore has to be able to read .TPU files. I
  will not add this feature, but maybe I will add the ability to read
  interface sections of the source code of other units.

* I didn't test any window programs. The program is likely to fail for
  them.


Unknown bugs
~~~~~~~~~~~~
* with low probability a few bugs sit onnoticed in Mangler
* with high probability lots of bugs are still undetected in Mangler.
  Escuse me for that, but writing a Mangler is an awful lot like writing
  a compiler.


Would anybody be so kind to report any error to me? If you send a bug report
include the source that failed to be mangled correctly with a short description
from what you think went wrong.


Reported bugs
~~~~~~~~~~~~~
Date      Reported by/description

93-03-29  Berend de Boer
            ampersand identifier override within asm..end; does not work
93-04-19  Berend de Boer
            mangling a unit with lots of objects defined in the
            implementation section gives an error
            virtual methods should not be mangled
93-07-19  Richard Hansen
            with statement not parsed correctly. Fixed.
93-09-29  Berend de Boer
            procedure and function types are not supported. Fixed.