[fpc-pascal] Generated names in specialized classes are weird in Free Pascal

silvioprog silvioprog at gmail.com
Tue Dec 23 15:52:33 CET 2014


Hello,

Recently I've made a class to generate error log for codes in Delphi and
Free Pascal. It works capturing the class name where the problem occurred,
adding the date/time concatenated with the error message. It's working
perfectly in Delphi.

The problem is in Free Pascal and in your approach to save the name of
specialized classes. They are very weird names and a little intuitive. For
example:

TFoo$1$crcB96581A6

Assuming the small code below is my log generator, see the output generated
by Delphi code:

program Project1;

{$APPTYPE CONSOLE}

uses
  System.SysUtils;

type
  TTest = class(TObject)
  end;

  TFoo<T> = class(TObject)
  public
    class procedure Log(AClass: System.TClass);
  end;

  TBar1 = TFoo<TTest>; // short declaration

  TBar2 = class(TFoo<TTest>) // full declaration
  end;

  class procedure TFoo<T>.Log(AClass: System.TClass);
  begin
    System.WriteLn('[', System.SysUtils.FormatDateTime('hh:nn:ss.zzz',
      System.SysUtils.Now), ']: ', AClass.ClassName);
  end;

begin
  TFoo<TTest>.Log(TBar1);
  TFoo<TTest>.Log(TBar2.ClassParent);
  System.ReadLn;
end.

Output:

[06:27:08.545]: TFoo<Project1.TTest>
[06:27:08.546]: TFoo<Project1.TTest>

Now, see the same output for a Free Pascal code:

program Project1;

{$mode delphi}

uses
  SysUtils;

type
  TTest = class(TObject)
  end;

  TFoo<T> = class(TObject)
  public
    class procedure Log(AClass: System.TClass);
  end;

  TBar1 = TFoo<TTest>; // short declaration

  TBar2 = class(TFoo<TTest>) // full declaration
  end;

  class procedure TFoo<T>.Log(AClass: System.TClass);
  begin
    System.WriteLn('[', SysUtils.FormatDateTime('hh:nn:ss.zzz',
      SysUtils.Now), ']: ', AClass.ClassName);
  end;

begin
  TFoo<TTest>.Log(TBar1);
  TFoo<TTest>.Log(TBar2.ClassParent);
  System.ReadLn;
end.

Output:

[06:27:08.545]: TFoo$1$crcB96581A6
[06:27:08.545]: TFoo$1$crcB96581A6

It is very weird this generated class names. The Free Pascal will continue
to use these weird names or there are plans to improve this in future
versions? With names like that is almost impossible to create automated
error logs structures with Free Pascal.

Thank you!

-- 
Silvio Clécio
My public projects - github.com/silvioprog
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20141223/340b0856/attachment.html>


More information about the fpc-pascal mailing list