Re: [fpc-pascal] client certificate mandatory and verification

2024-04-09 Thread Flávio Etrusco via fpc-pascal
Hello,

This doesn't seem to have an easy solution right now. Many of the functions
needed to set up openssl for this doesn't even seem to have imports in the
FPC package.
You'd then have to import the functions and implement a custom
TSSLSocketHandler, and then hook it using either
(fphttpapp.)Application.HTTPHandler.HTTPServer.OnGetSocketHandler or
TSSLSocketHandler.SetDefaultHandlerClass();

Some pointers:
https://stackoverflow.com/questions/4261369/openssl-verify-peer-client-certificate-in-c
https://stackoverflow.com/questions/21050366/testing-ssl-tls-client-authentication-with-openssl
https://stackoverflow.com/questions/16291809/programmatically-verify-certificate-chain-using-openssl-api
https://stackoverflow.com/questions/3412032/how-do-you-verify-a-public-key-was-issued-by-your-private-ca

Best regards,
Flávio


Em sáb., 23 de mar. de 2024 às 08:47, Jos Wegman via fpc-pascal <
fpc-pascal@lists.freepascal.org> escreveu:

> Hi,
>
> Out of the info on the wiki I created a simple Webserver with a
> server-certificate.
> To get this code working you need to create the necessary certificate.
> For this I used xca from https://hohnstaedt.de but you can use OpenSSL to
> do the same.
>
>
> [code=pascal]
> program webserver;
>
> {$mode objfpc}{$H+}
>
> uses
>   {$ifdef UNIX}
>   cthreads, cmem,
>   {$endif}
>   fphttpapp,
>   httpdefs,
>   httproute,
>   opensslsockets;
>
> var
>   fUseSSL: boolean;
> const
>   fCertificatePassword: string = 'hello';
>   fCertificateHostName: string = 'localhost';
>   fCertificateFileName: string = 'Server.crt';
>   fCertificatePrivateKey: string = 'Server.key';
>
>   procedure route1(aReq: TRequest; aResp: TResponse);
>   begin
> aResp.Content := 'Route 1 The
> Default';
>   end;
>
>   procedure route2(aReq: TRequest; aResp: TResponse);
>   begin
> aResp.Content := 'Route 2';
>   end;
>
> begin
>   HTTPRouter.RegisterRoute('/', @route1);
>   HTTPRouter.RegisterRoute('/2', @route2);
>   Application.Port := 1999;
>   fUseSSL :=true;
>   Application.UseSSL := fUseSSL;
>   if fUseSSL then
>   begin
> Application.CertificateData.KeyPassword := fCertificatePassword;
> Application.CertificateData.HostName := fCertificateHostName;
> Application.CertificateData.Certificate.FileName :=
> fCertificateFileName;
> Application.CertificateData.PrivateKey.FileName :=
> fCertificatePrivateKey;
>   end;
>   Application.Threaded := True;
>   Application.Initialize;
>   Application.Run;
> end.
> [/code]
>
> My questions are:
>
> *- How can I modify this example to enforce the use of a client
> certificate? - How can I verify a client certificate in the server?*
>
> In the TLS handshake a client certificate is optional but the server can
> ensure that it is mandatory.
>
> Any help, pointers, sample code is appreciated.
>
> Sincerely,
>
> Jos
> ___
> fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] How to inline CompareFunc to Sort method in generic abstract class

2022-11-21 Thread Flávio Etrusco via fpc-pascal
Em sáb., 19 de nov. de 2022 18:27, Sven Barth via fpc-pascal <
fpc-pascal@lists.freepascal.org> escreveu:

>  (...)
>
>// this kind of constraint that uses T does not work yet
>generic TList> = class
>  procedure Sort;
>end;
>
> (...)
>

No? Sad, I use this all the time in Java.

Best regards,
Flávio


>
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] How to inline CompareFunc to Sort method in generic abstract class

2022-11-21 Thread Flávio Etrusco via fpc-pascal
Hi,

Thanks for the clarifications (although in some aspects I'm more confused
now LOL).

If you really want the performance gains (and if you're convinced of these
gains, of course) maybe you could implement inlined functions for each key
native datatype taking an offset for the field.

And if you have computed or complex keys, creating an indirection list
would probably have speed gains.

--
Best regards,
Flavio

Em sáb., 19 de nov. de 2022 00:26, Vojtěch Čihák via fpc-pascal <
fpc-pascal@lists.freepascal.org> escreveu:

> Hi,
>
>
>
> I specialized my generic abstract class in a different unit with this type:
>
>
>
> TRec = record
>
> A: Integer;
>
> B: Integer;
>
>   end;
>
>
>
> (A is for sorting, B is for testing of stability, i.e. for MergeSort,
> TimSort)
>
>
>
> and compare function, declared with inline; directive:
>
>
>
> function MyComptFunc(const ARec, BRec: TRec): Integer;
>
> var i, aCnt: Integer;
>
> begin
>
>   aCnt:=CFComplex;
>
>   for i:=0 to aCnt do
>
> Result:=(BRec.A-ARec.A);
>
>   inc(CFCnt);
>
>   //InterlockedIncrement(CFCnt);
>
> end;
>
>
>
> The reason for this complex compare function is that it also measure
> number of comparisons and it can simulate more expensive comparisons (like
> sorting strings).
>
>
>
> For a while, I added this unit to the second "uses" section
> (implementation) of the other unit, which is impractical, but I had
>
> temporary access to the compare function. I tested again with ShellSort,
> sorting 2'000'000 values takes:
>
> 1380ms inlined
>
> 1515ms not inlined, ~9% slower
>
> 1430ms when compare func. is a parameter ~4% slower
>
>
>
> I pass variables by value. But you are right, when I shave the function
> like this:
>
>
>
> function MyComptFunc(const ARec, BRec: TRec): Integer;
>
> begin
>
>   Result:=(BRec.A-ARec.A);
>
> end;
>
>
>
> the results are:
>
> 750ms inlined
>
> 950ms not inlined, ~21% slower
>
> 835ms when compare func. is a parameter ~10% slower
>
>
>
> so the gain of inlining is higher for sorting primitive types.
> V.
>
> __
> > Od: "Flávio Etrusco via fpc-pascal" 
> > Komu: "FPC-Pascal users discussions" 
> > Datum: 18.11.2022 20:45
> > Předmět: Re: [fpc-pascal] How to inline CompareFunc to Sort method in
> generic abstract class
> >
>
>
> Em seg., 14 de nov. de 2022 15:26, Vojtěch Čihák via fpc-pascal <
> fpc-pascal@lists.freepascal.org> escreveu:,
> What do you mean by "be inlined"? The 'inline' directive instructs the
> compiler (or is it the linker? ) to try copying the whole function
> inline, also avoiding the call (stack) setup; you can't do this for this
> for a general purpose method.
> I'm curious how you got that 6% figure, it seems rather large. Is this
> comparing the parameter vs virtual method approach or comparing a fully
> inline (no indirect call of any kind) sort function to some other option?
> Are you passing the variables by reference?
> Best regards,
> Flávio
>
>
> --
>
> ___
> fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
> ___
> fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
>
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] How to inline CompareFunc to Sort method in generic abstract class

2022-11-18 Thread Flávio Etrusco via fpc-pascal
Em seg., 14 de nov. de 2022 15:26, Vojtěch Čihák via fpc-pascal <
fpc-pascal@lists.freepascal.org> escreveu:

> Hi,
>
> I wrote a generic abstract class - a list based on dynamic array (i.e.
> array of T;) and this class can be specialized elsewhere with any type
> (records or classes).
> Part of the class is sorting. There are more ways how to deliver *compare
> function* to sorting method. I can pass it as a parameter or I can define
> it as: function Compare(A, B: T): Integer; virtual; abstract;. But this way
> the function cannot be inlined.
>
> Question: Is there a way how to *inline* compare function to sorting
> method in this general purpose generic abstract class?
>
> Thanks.
>
> PS: The gain is 6-7%.
>

Hi,

What do you mean by "be inlined"? The 'inline' directive instructs the
compiler (or is it the linker? ) to try copying the whole function
inline, also avoiding the call (stack) setup; you can't do this for this
for a general purpose method.
I'm curious how you got that 6% figure, it seems rather large. Is this
comparing the parameter vs virtual method approach or comparing a fully
inline (no indirect call of any kind) sort function to some other option?
Are you passing the variables by reference?

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Feature announcement: implicit generic function specializations

2022-04-30 Thread Flávio Etrusco via fpc-pascal
Hi,

Em sáb., 30 de abr. de 2022 às 09:13, Mattias Gaertner via fpc-pascal
 escreveu:
>
> AFAIK it is planned for mode objfpc to support distinguishing types via
> template count as in mode delphi:
>
> type
>   TMyClass = class
>   end;
>   generic TMyClass = class
>   end;
>   generic TMyClass = class
>   end;

This seems very likely to generate confusion, doesn`t it?


Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


[fpc-pascal] Object-oriented file (path) handling library

2017-11-09 Thread Flávio Etrusco
Hello,

is there something simliar to Java's java.io.File or java.nio.Path for
FPC? Google makes me think there isn't...

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] FPC Debug line numbers

2017-11-06 Thread Flávio Etrusco
2017-11-06 19:49 GMT-02:00 James Richters :
> I've noticed that line numbers are sometimes off, sometimes quite a bit when 
> I receive a run-time error.  I had one today, it specified the correct 
> function that was responsible for generating the error,  however the line 
> number was way off,  it reported line 1463 but the entire function in 
> question goes from line 708 to line 785.  There is nothing remotely related 
> at line 1463,  it's a completely unrelated procedure that could not have 
> possibly been called at the point the runtime error was received.The list 
> of procedure/function calls was accurate, just not the line number, which 
> makes it very difficult to figure out exactly what part of the function had 
> the problem.
>
> I am using FPC 3.0.4rc1, compiling with the text IDE and I have option 
> "Generate also backtrace line information" selected.
>
> Does anyone know what might cause the line numbers to be incorrect?

Didn't the unit have any include file?

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] FPC install on windows with limited rights

2017-11-05 Thread Flávio Etrusco
Hi,

2017-11-02 17:54 GMT-02:00 Graeme Geldenhuys :
> On 2017-11-02 07:17, Michael Van Canneyt wrote:
>>
>> The installer is made with inno setup. There are several inno extract
>> tools
>> available, e.g.:
>> http://constexpr.org/innoextract/
>
>
> Thank you Michael, that worked perfectly. Strange that the inno setup
> executable (the FPC installer) doesn't have a parameter to do that itself. I
> have seen installers in the past that allows for that, but I don't know what
> program they used to generate that installer.

Microsoft Installer (oops, now Windows Installer) implement this
"natively", and I assume most MSI-based generators/packagers support
it.

AFAICS it would require quite a few enhancements (and modifications to
the user scripts) to abstract away per-machine vs per-user
declarations in InnoSetup.
FWIW since InnoSetup is scriptable it seems one can implement this
manually using a few hacks:
https://stackoverflow.com/questions/21556853/make-inno-setup-installer-request-privileges-elevation-only-when-needed

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Underscores in numerical literals - grouping

2016-11-21 Thread Flávio Etrusco
On Mon, Nov 21, 2016 at 10:09 PM, James Richters
 wrote:
> I use notepad++ Vertical editing ALL THE TIME, you cannot do vertical editing 
> effectively with a proportional font.   For those who aren't familiar with 
> it, you can hold down ALT and highlight many lines vertically making a very 
> tall cursor, you can then start typing and what you type will be on all lines 
> with the tall cursor.. thus you can very quickly and easily shift entire 
> blocks over, or even fix something on many lines at once.  This is very 
> helpful when you have something that used to be inline and now you want to 
> make a procedure out of it for example.
>

The editor can just switch to a monospaced font when the
vertical/column selecion-mode is toggled, this is what Eclipse does.
BTW SynEdit also supports column selection, it's just not available in
the menu. In the Options Dialog you can assign key mappings to Column
and Normal Selection Mode.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Bug in FPC 3.0.0 (was: Bug in FPC 3.0.0?)

2016-02-24 Thread Flávio Etrusco
On Wed, Feb 24, 2016 at 9:00 AM, Michael Van Canneyt
<mich...@freepascal.org> wrote:
>
>
> On Wed, 24 Feb 2016, Flávio Etrusco wrote:
>
>> On Wed, Feb 24, 2016 at 8:39 AM, Marco van de Voort <mar...@stack.nl>
>> wrote:
>>>
>>> In our previous episode, Mark Morgan Lloyd said:
>>>>
>>>> > (remember recent discussion about IfThen pseudo-function).
>>>>
>>>> More relevant to your situation, I remember discussion about adding an
>>>> identifier to WITH to use as an explicit shortcut, i.e. something like
>>>>
>>>> with foo= bar do
>>>>foo.someField := ...
>>>
>>>
>>> Not relevant since the With code in this case must remain delphi
>>> compatible.
>>
>>
>> I, for one, would vote in favor making the documentation discourage
>> the use of 'with' and adding a warning in compiler...
>
>
> I don't see why.
>
> I use "with" extensively. I see nothing wrong with this useful construct.
>
> The problem of the 'new identifier inserted in scope' exists, but is rare
> enough for me to tip the balance in favour of using "with". It has maybe
> happened once or twice in 25 years that I got bitten by it.
>
> I find that perfectly acceptable.
>
> For people that worry about this, the solution of Jonas should be ample to
> detect/avoid mistakes.
>
> Michael.

I loved 'with' while I was learning Delphi/Pascal and hated after the
first few months since using it professionaly. I truly believe it
warrants/deserves some advice in the documentation, for the beginners.
With the code completion in Lazarus there's even less reason to use it
- besides any possibly missing compiler optimization...

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Bug in FPC 3.0.0 (was: Bug in FPC 3.0.0?)

2016-02-24 Thread Flávio Etrusco
On Wed, Feb 24, 2016 at 8:39 AM, Marco van de Voort  wrote:
> In our previous episode, Mark Morgan Lloyd said:
>> > (remember recent discussion about IfThen pseudo-function).
>>
>> More relevant to your situation, I remember discussion about adding an
>> identifier to WITH to use as an explicit shortcut, i.e. something like
>>
>> with foo= bar do
>>foo.someField := ...
>
> Not relevant since the With code in this case must remain delphi compatible.

I, for one, would vote in favor making the documentation discourage
the use of 'with' and adding a warning in compiler...

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] if-then-else expression

2016-02-02 Thread Flávio Etrusco
On Feb 2, 2016 7:41 PM, "geneb"  wrote:
>
> (...)
>
> So it's not solving a /problem/ it's lessening an inconvienence(sp!).
>
> I would've gone with IIf(). :)
>
>
> g.
>

The problem with Iff() is:
1) it either retains normal function behavior and thus has to evaluate both
expressions (i.e. suboptimal performance and allowing side effects);
2) or add inconsistency by using function syntax but different behavior.

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Methods for autoupdating fpc programs?

2015-10-05 Thread Flávio Etrusco
On Mon, Oct 5, 2015 at 1:58 PM, Jürgen Hestermann
 wrote:
>
>
> Am 2015-10-04 um 19:11 schrieb mic...@gmail.com:
>>>
>>> But that makes no sense to me. If the OS is designed to potentially
>>> remove
>>> running programs (or parts of it) from memory it cannot allow overwriting
>>> the file on disk in any case. When it does so, it cannot remove parts
>>> from
>>> memory because it may not be available on disk anymore. So it must
>>> disallow
>>> the disk change from the beginning, otherwise it may not be able to
>>> remove
>>> anything.
>>>
>>
>> http://askubuntu.com/questions/44339/how-does-updating-running-application-binaries-during-an-upgrade-work
>>
>>
>> http://unix.stackexchange.com/questions/49299/what-is-linux-doing-differently-that-allows-me-to-remove-replace-files-where-win
>>
>>
>> http://superuser.com/questions/251129/moving-a-file-while-its-in-use-how-does-it-work
>>
>
> In these links I didn't find any explanation that tell me if (and if yes,
> why) it *sometimes* does not work.

AFAIK (and the articles seem to confirm that) no "part is replaced"
and no parts are (necessarily) held in memory: a new file is created
on disk and the old file is kept on disk, tough not mapped the file
name, until all processes that hold "pointers" to the old file are
finished.

IIRC NTFS works like that too and Windows actively creates locks to
files in use to avoid deletion.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Brook Framework and Template Engines

2014-12-12 Thread Flávio Etrusco
On Fri, Dec 12, 2014 at 10:14 AM, silvioprog silviop...@gmail.com wrote:
 On Fri, Nov 14, 2014 at 11:18 AM, Fabrício Srdic fabricio.sr...@gmail.com
 wrote:

 Hello,

 What's the current status of the Brook Server Pages project?

 What's the recommended template engine to use with Brook Framework?

 Best regards

 Hello,

 Just waiting someone to fix this leak problem:

 https://github.com/remobjects/pascalscript/issues/61

 --
 Silvio Clécio

You know that for OSS projects you can't just wait and expect it to
be fixed, right ;-)
Is it really necessary (and optimal) do create a TPSScript for each
request or should you cache instances for each thread?
What version of PascalScript should I download/checkout to test?

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Question about functions returning a string

2014-11-28 Thread Flávio Etrusco
On Fri, Nov 28, 2014 at 5:54 PM, Ewald ew...@yellowcouch.org wrote:
 Hi,

 Take the following function prototype (in {$mode objfpc}{$H+} for the
 record):

 Function SomeFunction(const Data: PChar; const Len: LongWord):
 String; cdecl; public;

 Looking at the dissasembly of this function, I see that is actually has
 three arguments. It looks more like this from an assembler perspective:

 Function SomeFunction(HiddenArgument: Pointer; const Data: PChar;
 const Len: LongWord): String; cdecl; public;

 Which is, well, quite fascinating really. What is it doing there? I
 suspect it has something to do with the result type of the function,
 being a string?

 Can anybody shed some light on this?

 --
 Ewald

Are you sure it's not the result that is passed in the first parameter?

http://en.wikipedia.org/wiki/X86_calling_conventions#cdecl

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] [OT] Generics and Type Constraints sample

2014-10-31 Thread Flávio Etrusco
On Fri, Oct 31, 2014 at 12:08 PM, silvioprog silviop...@gmail.com wrote:
 On Fri, Oct 31, 2014 at 11:23 AM, Sven Barth pascaldra...@googlemail.com
 wrote:

 Am 30.10.2014 20:49 schrieb silvioprog silviop...@gmail.com:
TMathT; A: TAdderT, constructor = class

 It is not yet possible to reuse a type parameter directly in the parameter
 declaration. There already exists a bug report though.

 Regards,
 Sven

 Very nice!

 Some link? I will follow it.


Probably this: http://bugs.freepascal.org/view.php?id=25678
It was easy to find just searching generics in unresolved FPC tickets ;-)

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] fgl unit bug in generic class TFPGMap

2014-10-27 Thread Flávio Etrusco
On Mon, Oct 27, 2014 at 3:45 PM, Sven Barth pascaldra...@googlemail.com wrote:
 Am 26.10.2014 05:51, schrieb Flávio Etrusco:

 On Fri, Oct 3, 2014 at 12:42 PM, Dennis Poon den...@avidsoft.com.hk
 wrote:

 I think I found a bug in TFPGMap.
 Hope some of you can verify it.

 The bug seems to relate to the binary search used in the method FIND
 but
 it does not occur for all string key values or at all capacity of the
 map.
 Seems only occur at the second item added and when it is certain string
 values.

 I tried to debug it but cannot step into the codes of fgl unit so cannot
 find the cause.

 Please help.

 Dennis

 =
 unit Unit1;

 (...)

TMapOfObjects=class(specialize TFPGMap  String, TObject )

 (...)

 I don't see any calls to 'Sort' or 'Sorted' in your code. 'Find', as
 you note, does a binary search thus expects the items to be sorted.
 You can also use 'IndexOf' instead.

 But a map should not need any call to Sort, because it's the map's task to
 organize its data structure in such a way that Find does work as it should.

 Regards,
 Sven

That's my opinion too, I just replied based on the source code.
Actually I had written some comments WRT that in my reply but removed
it before sending because I don't know the history of the component. I
was going to say something like: it's very unfortunate that the most
discoverable map for FPC is a simple list of pairs and doesn't have
clear/standard map API, and instead exposes its guts.
Maybe Find should call IndexOf if Sorted = False for now?

Regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] fgl unit bug in generic class TFPGMap

2014-10-25 Thread Flávio Etrusco
On Fri, Oct 3, 2014 at 12:42 PM, Dennis Poon den...@avidsoft.com.hk wrote:
 I think I found a bug in TFPGMap.
 Hope some of you can verify it.

 The bug seems to relate to the binary search used in the method FIND but
 it does not occur for all string key values or at all capacity of the map.
 Seems only occur at the second item added and when it is certain string
 values.

 I tried to debug it but cannot step into the codes of fgl unit so cannot
 find the cause.

 Please help.

 Dennis

 =
 unit Unit1;
(...)
   TMapOfObjects=class(specialize TFPGMap  String, TObject )
(...)

I don't see any calls to 'Sort' or 'Sorted' in your code. 'Find', as
you note, does a binary search thus expects the items to be sorted.
You can also use 'IndexOf' instead.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] how do I get Run Time info from a published method?

2014-10-01 Thread Flávio Etrusco
On Mon, Sep 29, 2014 at 11:54 PM, Dennis Poon den...@avidsoft.com.hk wrote:
 say for example:

   type
  TmyClass = class
  published
 procedure Something (sender : Tobject);virtual;
 end;

 var
   myClass  : TmyClass;

 then somewhere

 AddMethodToQueue(@myclass.Something);


 Is it possible within AddMethodToQueue, I can query the Run Time Type Info
 of the method passed in ?



 procedure AddMethodToQueue(const TheEvent : TNotifyEvent);
 var aMethodObjectname : String;
 begin
 //I can already do this
  aMethodObjectName := TObject(TMethod(TheEvent).Data).ToString;

 //how do I check the RTTI of TheEvent and get the name of the method
 i.e. 'Something'?
//since it is published, it should be possible, right?

 end;

 Thanks in advance.

 Dennis
 ___
 fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
 http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Simply:

  vObj := TObject(TMethod(TheEvent).Data);
  vMethodName := vObj.MethodName(TMethod(TheEvent).Code);

?

Regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] with statement using mulltiple objects

2014-09-17 Thread Flávio Etrusco
On Wed, Sep 17, 2014 at 4:38 AM, Frederic Da Vitoria
davito...@gmail.com wrote:
 2014-09-17 3:11 GMT+02:00 Flávio Etrusco flavio.etru...@gmail.com:

 On Tue, Sep 16, 2014 at 8:09 PM, Philippe phili...@quarta.com.br wrote:
  on compiler implementation:
 
  I read in this list that the group lost months due a with problem.
 
  People use with, and I guess lot of people use it!
 
  I checked the reference
  http://www.freepascal.org/docs-html/ref/refsu58.html#x155-16500013.2.8
  and
  there is not any warning ... just:
 
  The statement
 
  With A,B,C,D do Statement;
 
  is equivalent to
 
  With A do
   With B do
With C do
 With D do Statement;
 
  without any warning ...
 
 (...)

 Why would it? As people replied in your thread, this has always been
 the behavior (at least in TP and Delphi), so if anything the only
 thing lacking is some minor documentation.
 Also please don't hijack threads.


 I guess different communities have different rules, but I don't understand
 (and I'd better understand if I don't want to do the same mistake): in what
 way was Philippe's post hijacking? This question goes to Philippe too, as he
 wrote we may be out of subject which shows he felt something wrong.

 --
 Frederic Da Vitoria
 (davitof)


The mistake was actually mine :-$ I had deleted part of the thread and
didn't realize this was the old thread.
Sorry Phillippe, and sorry for the noise everybody.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] with statement using mulltiple objects

2014-09-16 Thread Flávio Etrusco
On Mon, Sep 15, 2014 at 2:55 AM, Sven Barth pascaldra...@googlemail.com wrote:
 On 14.09.2014 18:05, Philippe wrote:


 Take this example:

 === code begin ===

(...)

 procedure TestWith;
 var
   p: PTest;
 begin
   New(p);

   with p^ do begin
 Prop1 := 42;
 Prop2 := 21;
   end;

   Dispose(p);
 end;

 procedure TestWithout;
 var
   p: PTest;
 begin
   New(p);

   p^.Prop1 := 42;
   p^.Prop2 := 21;

   Dispose(p);
 end;

 begin

 end.

 === code end ===

 This is the relevant code generated for TestWith:

 === asm begin ===
(...)
 === asm end ===

 As you can see the expression p^ is only evaluated once in the TestWith case
 while it's evaluated twice in the TestWithout one. So it's only minimally
 faster in this example (one less memory access), but if you use enough
 members of TTest it a more or less tight loop it might even be noticeable.

 Regards,
 Sven


I expected FPC would optimize this (with just -O1) :-(

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] with statement using mulltiple objects

2014-09-16 Thread Flávio Etrusco
On Tue, Sep 16, 2014 at 8:09 PM, Philippe phili...@quarta.com.br wrote:
 on compiler implementation:

 I read in this list that the group lost months due a with problem.

 People use with, and I guess lot of people use it!

 I checked the reference
 http://www.freepascal.org/docs-html/ref/refsu58.html#x155-16500013.2.8 and
 there is not any warning ... just:

 The statement

 With A,B,C,D do Statement;

 is equivalent to

 With A do
  With B do
   With C do
With D do Statement;

 without any warning ...

(...)

Why would it? As people replied in your thread, this has always been
the behavior (at least in TP and Delphi), so if anything the only
thing lacking is some minor documentation.
Also please don't hijack threads.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Find/open files in search paths

2014-07-20 Thread Flávio Etrusco
On Sun, Jul 20, 2014 at 7:24 AM, denisgolovan denisgolo...@yandex.ru wrote:
 Hi all

 Does anybody know if Lazarus IDE has something similar to View units 
 (Ctrl+F12) tool, but searching in all search paths defined in project 
 settings?
 It would allow to open modules much quicker than using standard Open file 
 dialog.

 --
 Regards,
 Denis Golovan

There's the Code Browser. It's not as convenient as the Open
Type/Resource dialogs in Eclipse yet - but I bet patches in that
regard are also welcome :-)

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Re: [fpc-pascal] Dynamic arrays, yet another pitfall

2014-02-09 Thread Flávio Etrusco
On Sun, Feb 9, 2014 at 12:34 PM, Jürgen Hestermann
juergen.hesterm...@gmx.de wrote:
 (...)
 With the following declaration and code:

 ---
 var A,B: array of integer;
 ...
 SetLength(A,10);
 B := A;
 SetLength(B,20);
 ---

 both variables A and B point to the same array with 20 Elements.
 Changing A changes B and vice versa.
 But a slight modification

 ---
 SetLength(A,0);
 B := A;
 SetLength(B,20);
 ---

 makes both variables A and B totaly decoupled! Although B is still assigned
 to be the same as A each variable is now a separate array with individual
 lengths and elements. Variable A has the length 0 and variable B is of
 length 20. Changing the length for one of them does no longer change the
 length of the other. If someone thinks about dynamic arrays as black boxes
 without the need to know the details because they are handled in the
 background then he will certainly be baffled by this.
 (...)

In other words: dynamic arrays are like AnsiStrings without the
copy-on-write semantics. I'd certainly wish Borland copied the COW
semantics :-/

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Adding files to a tar file

2014-01-21 Thread Flávio Etrusco
On Tue, Jan 21, 2014 at 10:45 PM, luciano de souza luchya...@gmail.com wrote:
 Hello all,

 This code should add all the files of a directory in a tar file.

 program e01;
 {$mode objfpc}{$H+}

 uses
 libtar, sysutils;

 var
 archive: TTarWriter;
 search: TSearchRec;

 BEGIN
 archive := TTarWriter.create('arquivo.tar');
 with archive do
 begin
 try
 FindFirst('/home/luciano/Documentos/*', faAnyFile, search);
 repeat
 if (search.name  '.') and (search.name  '..') then
 AddFile(search.name);
 until FindNext(Search) = 0;
 finally
 free;
 end;
 end;
 END.

 The program compiles, but I got an error. The message says that the
 first file of the directory can't be opened.

 What is wrong?

Probably because Search.Name contains only the filename, but AddFile
expects an absolute path (or relative to GetCurrentDir)?


 My second doubt is: I am running this program in Ubuntu 13.10. If I
 run it in Windows, will a external library be necessary or all the
 code is included in lib tar unit?

 Regards,

AFAICS all the code is included in the libtar unit.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal


OT: (y) WAS: [fpc-pascal] How to stop a HttpApp via request?

2013-10-06 Thread Flávio Etrusco

 Worked like a charm. Thank you very much Michael! (y)


 What does (y) mean ?

LOL I was puzzled too. And found a funny topic in Yahoo Answers :-o
But in the end found it's a shortcut for Thumbs Up in Microsoft Messenger.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Understanding virtual methods

2013-08-20 Thread Flávio Etrusco
On Tue, Aug 20, 2013 at 2:34 AM, Xiangrong Fang xrf...@gmail.com wrote:
 Hi Flavio,

 Your findings confirmed mine, but not telling me why?

I don't know why, maybe FPC used to be more strict about the use of
inherited, or the docs are simply wrong.


 It seems that the virtual keyword has no use at all!

It does, and the documentation is correct in this respect.


  To confirm this, I just removed the
 inherited call in TDerived, then re-run the program with or without
 virtual/override, the result is exactly same, i.e. with c2 (declared as
 TBase), the following statements ALWAYS calls constructor of TDerived, NOT
 TBase:

 c2 := TDerived.Create;
 c2 := TBase(TDerived.Create);

As I said - or tried to say ;) - in the other post, there won't be a
difference when invoking the constructor on a class literal
directly.
The second line will generate the exact same code as the first one;
you're instantiating a TDerived instance then upcasting it to TBase.


 This is not same as the description in:
 http://www.freepascal.org/docs-html/ref/refsu26.html

Note this page is about methods and you're using constructors in your example.
I would recommend you first do your tests on method declarations, and
later learn about class references (i.e. class of declarations) and
constructors.


 BTW, the above documents are talking about objects, but I am using classes,
 is there any difference here?

 Shannon

AFAIU per the first page you sent, you can't shadow/reintroduce a
virtual method in an object; when you redeclare a virtual method it
overrides the base one.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Understanding virtual methods

2013-08-19 Thread Flávio Etrusco
On Mon, Aug 19, 2013 at 10:44 PM, Xiangrong Fang xrf...@gmail.com wrote:
 Hi All,

 I am reading this document:
 http://www.freepascal.org/docs-html/ref/refsu29.html   and doing an
 experiment with the following code:

 program project1;
 {$mode objfpc}{$H+}
 type
   TBase = class
 constructor Create; virtual;
   end;
   TDerived = class(TBase)
 constructor Create; override;
   end;

 var
   c1, c2: TBase;
   c3: TDerived;

 constructor TDerived.Create;
 begin
   WriteLn('Entering TDerived.Create');
   inherited Create;
   WriteLn('Leaving TDerived.Create');
 end;

 constructor TBase.Create;
 begin
   WriteLn('Entering TBase.Create');
   Writeln('Leaving TBase.Create');
 end;

 begin
   WriteLn('Creating a TBase and assigning to TBase variable...');
   c1 := TBase.Create;
   WriteLn('Creating a TDerived and assigning to TBase variable...');
   c2 := TDerived.Create;
   WriteLn('Creating a TDerived and assigning to TDerived variable...');
   c3 := TDerived.Create;
 end.


 The problem is, it makes NO DIFFERENCE at all in the following cases:

 CASE 1:

 TBase.Create;
 TDerived.Create;

 CASE 2:

 TBase.Create; virtual;
 TDerived.Create; virtual;

 CASE 3:

 TBase.Create; virtual;
 TDerived.Create; override;

 According to the document, inherited cannot be used in non-virtual
 methods,

At least that's the result I would expect :)
I can confirm your findings; contrary to the documentation, a simple
test works correctly (the compiler prints no warnings or hints, both
method and constructor work correctly, calling either a non-virtual
from virtual, and virtual from non-virtual).


 and it is wrong to use virtual in sub-class.

It doesn't say that, it simply says that the redeclaration will not
override the base implementation (the different behavior for 'object'
is news to me!).

FWIW your test doesn't actually exercise inheritance, since virtual
constructors only make a difference when you call from a class
reference (similarly, you'll only see a difference in virtual methods
when calling from a base-typed variable).

Code
var MyClass: TComponentClass = TDataModule;
begin
  MyClass.Create(nil);


will instantiate a TDataModule.

Code
var MyControl: TControl;
begin
  MyControl := TButton.Create;
  MyControl.ExecuteDefaultAction;


will invoke TButton's implementation of ExecuteDefaultAction.

 But my test shows the  contrary.   BTW, I am running Linux on 64bit platform.

 Regards,
 Shannon

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Build Lazarus Ide - On make bigide: lazaruspackageintf.pas(102, 1) Fatal: Internal error 2013081601

2013-08-19 Thread Flávio Etrusco
On Tue, Aug 20, 2013 at 1:54 AM, Osvaldo Filho arquivos...@gmail.com wrote:
 Anyone coud help-me?

 user1@movotcf:~/Documentos/Desenvolvimento/pascal/svn/ex/lazarus1010$ make
 bigide
 make -C packager/registration
 make[1]: Entrando no diretório
 `/home/user1/Documentos/Desenvolvimento/pascal/svn/ex/lazarus1010/packager/registration'
 /bin/rm -f ../units/x86_64-linux/fcllaz.ppu
 /usr/local/bin/ppcx64 -MObjFPC -Scghi -O1 -g -gl -vewnhi -l -Fu.
 -Fu/usr/local/lib/fpc/2.7.1/units/x86_64-linux/rtl -FE.
 -FU../units/x86_64-linux -Cg -dx86_64 fcllaz.pas
 Hint: Start of reading config file /etc/fpc.cfg
 Hint: End of reading config file /etc/fpc.cfg
 Free Pascal Compiler version 2.7.1 [2013/08/19] for x86_64
 Copyright (c) 1993-2013 by Florian Klaempfl and others
 Target OS: Linux for x86-64
 Compiling fcllaz.pas
 Compiling registerfcl.pas
 Compiling lazaruspackageintf.pas
 lazaruspackageintf.pas(102,1) Fatal: Internal error 2013081601
 Fatal: Compilation aborted
 make[1]: ** [fcllaz.ppu] Erro 1
 make[1]: Saindo do diretório
 `/home/user1/Documentos/Desenvolvimento/pascal/svn/ex/lazarus1010/packager/registration'
 make: ** [registration] Erro 2
 (...)

From the git log, revision 25266 introduced a check that forces this error.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Embedded ARM7 and long strings

2013-07-25 Thread Flávio Etrusco
On Wed, Jul 24, 2013 at 4:07 AM, Carsten Bager cars...@beas.dk wrote:
 (...)

 The {$LONGSTRINGS OFF} directive is given at the beginning of the program, 
 and that
 eliminates any problems with long strings using the 2.05 compiler. That 
 does not seem to
 work with the new compiler.

 Is there a way around this problem?

 Carsten

Did you try {$H-}? Sure, AFAIR it was just a shorthand {$LONGSTRING},
but there's no mention of the latter in the manual:
http://www.freepascal.org/docs-html/ref/refsu11.html

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] string memory management

2013-04-18 Thread Flávio Etrusco
On Fri, Apr 19, 2013 at 1:36 AM, Xiangrong Fang xrf...@gmail.com wrote:
 Hi All,

 I'm studying how pascal manages strings.  I wrote a simple test program:

 program stringtest;
 {$mode objfpc}{$H+}
 uses Classes, sysutils;
 function test: PString;
 var
   s : string;
 begin
   New(Result);
   Result^ := FloatToStr(Random);
 //  s := FloatToStr(Random);
 //  Result := @s;
 end;
 var
   i : Integer;
 begin
   Randomize;
   with TList.Create do try
 for i := 0 to 9 do Add(test);
 for i := 0 to Count - 1 do begin
   WriteLn(PString(Items[i])^);
 end;
   finally
 Free;
   end;
 end.

 The program runs fine, but:

 1. I don't know whether I have to MANUALLY free memory for these strings to
 prevent leak?
 2. Does the IDE provide any facility to analyze memory usage of a program
 and report if there are any leaks?  (There are Tools/Leak View, but I don't
 know how to get .trc file, or is it what I thought.

 Thanks.

I think this can answer a few questions:
http://www.freepascal.org/docs-html/ref/refsu12.html#x35-380003.2.6

AFAICS your code will leak both the String contents and the PString pointer.
You have to store the result from test() and call Finalize or assign
'' to it (actually its dereference).

 var
   i : Integer;
 p: PString;
 begin
...
 for i := 0 to Count - 1 do begin
   WriteLn(PString(Items[i])^);
 p := PString(Items[i]);
 p^ := ''; // or Finalize(p^);
 Dispose(p);
 end;

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Function header doesn't match error

2013-03-31 Thread Flávio Etrusco
On Sun, Mar 31, 2013 at 7:36 AM, Mark Morgan Lloyd
markmll.fpc-pas...@telemetry.co.uk wrote:
 I wonder whether anybody could throw some light on a curious error. I've
 just tried to move a class definition into the interface part of a unit, so
 that I could easily add a class helper, but I'm getting an error

 borgumserverinterface.pas(927,24) Error: (3048) function header doesn't
 match any method of this class
 TzzConnection.ExecuteSQL2(TStringList,Boolean=FALSE):Boolean;

 If I move the class back into the implementation part there's no error.
 Simplified code as below:

 interface

 uses
   Classes, SysUtils, StrUtils, BorgUMFingerD, BorgUMCode, sqldb;

 type
 TzzConnection= class(TObject)
 ..
   public
 ..
 function ExecuteSQL2(sl: TStringList;
 relaxInuseCheck: boolean= false): boolean;
 ..

 implementation

 uses pqconnection, ibconnection, Custom, postgres3dyn, ibase60dyn, Regexpr;
 ..

 function TzzConnection.ExecuteSQL2(sl: TStringList; relaxInuseCheck:
 boolean= false): boolean;
 ..

 It's that final declaration that goes wrong, but I can fix it by moving the
 class back into the implementation part. FPC 2.6.2 on Linux x86.

 --
 Mark Morgan Lloyd
 markMLl .AT. telemetry.co .DOT. uk

The simplified code also fails? Removing the default parameter value
from the implementation makes any difference?

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] TStream descendant to compress/decompress gzip data from another stream

2013-03-28 Thread Flávio Etrusco
On Thu, Mar 28, 2013 at 8:51 AM, José Mejuto joshy...@gmail.com wrote:
 El 28/03/2013 1:06, Ewald escribió:


 Google found an old thread on lazarus mailing list about this (FPC,
 gzip and stream) but without any solution, everything mentioned there
 has either the limitations of TCompressionStream/TDecompressionStream
 (no gzip format) or TGZFileStream (not able to work wit ObjectPascal
 streams).


 Hello,

 .gz is a quite simple format, but it can not be implemented as a TStream
 (only) descendant because in a single .gz file many files could be added so
 something like the class to handle .zip files should be used.


 Sorry to just drop in on this quite late, but isn't gzip  a compression
 algorithm and not a file format as such? gzip (the command line utility)
 only compresses one file and *doesn't* put this in a multi-file container.
 To get `multi-file gzips`, you will first want to bundle the files and
 compress this bundle (files - tar - gzip) or compress the files separately
 and then bundle them together (files - multiple separate gzipped files -
 tar). Or are we talking about a different gzip here?


 Hello,

 Just quoting the RFC1952 about .gz format:

 --- http://tools.ietf.org/html/rfc1952 

 2.2. File format

   A gzip file consists of a series of members (compressed data
   sets).  The format of each member is specified in the following
   section.  The members simply appear one after another in the file,
   with no additional information before, between, or after them.

 ---

 So I think it is legal to concatenate several .gz files and get a final .gz
 with several files inside.

 In the other hand, yes, the usual behavior in .gz is to store only one file.

 --

Members refer to each available section according to the flags.
Re-read this whole paragraph you posted and a few following you'll
realize only one file is allowed in a gzip file/blob.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] a proposal about with syntax

2013-03-18 Thread Flávio Etrusco
On Mon, Mar 18, 2013 at 10:42 AM, Sven Barth
pascaldra...@googlemail.com wrote:
 Am 18.03.2013 10:36 schrieb Xiangrong Fang xrf...@gmail.com:
 (...)
 I cannot recall if there is already a notion of alias in free pascal, if
 not then we just introduce this idea within the scope of with expression.

 Which is why I suggested absolute as this already carries the note of a
 is the same as b.

 Though considering that we already have an alias token that would also be
 an alternative...

Reading your comment, maybe same is a worth candidate ;-)

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] a proposal about with syntax

2013-03-17 Thread Flávio Etrusco
 On 17/03/2013 12:54, Marco van de Voort wrote:

 Since it is a pseudo variable declaration, I would assume VAR syntax and
 just use : ?

This is indeed better.


On Sun, Mar 17, 2013 at 10:51 AM, Martin laza...@mfriebe.de wrote:
 Or maybe it should require a variable declaration (or otherwise declared
 identifier with fixed type).

 Otherwise it goes into an undesirable direction:

 Function Foo;
 begin
   with a: SomeInteger do Work(a);
   with a: SomeBoolean do Work(a);
 end;

 a is first integer, then boolean within the same scope. *Very* confusing.

This is what already happens between the members of aliased
variables, and that's IMO reason for the proposal.
So I don't see a problem, on the contrary, it's progress since it
needs a more direct/clearer user error to be bitten by it.


 And very close to the next step (which of course can be rejected by the
 compiler)

It would be better.


 Function Foo;
 begin
   with a: SomeInteger do begin
  Work(a);
  with a: SomeBoolean do Work(a); // masking a
   end;
 end;

 But if the inner a was Integer too, then maybe it should work? Unless it
 gets a similar special status like a loop variable?

I don't think so.

 ---
 IIRC in other threads on this topic, some people explicitly stated they
 wanted this feature so the would not need to declare a first (I may
 remember this wrong).
 IMHO starting with the first loop hole of allowing an undeclared identifier
 to be used, is just opening the door to more and more weakening of the
 language requirement.
 Besides, it does not hurt, if a needs to be declared.

My POV is with already implies an undeclared variable.

Regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] a proposal about with syntax

2013-03-17 Thread Flávio Etrusco
On Sun, Mar 17, 2013 at 6:59 AM, Sven Barth pascaldra...@googlemail.com wrote:
 On 17.03.2013 06:00, Flávio Etrusco wrote:

type generic TAlias1T: TObject = class(TObject)
  function Alias1: T;
end;

 This already works.

In 2.7 I assume, because it doesn't work in 2.6.2. Great anyway :)

   functionT: TObject Alias1(Source: T): TAlias1T;

 I don't really get what you want to express with that...

This is a Java a construction, I don't know whether it exists in other
languages.
In Java you specify it before the result type. It means the
parameterized result is be based on the parameter it receives. You can
also bind several parameters:

static T extends Comparable int IndexOf(ListT p_list, T p_item);

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] a proposal about with syntax

2013-03-17 Thread Flávio Etrusco
On Sun, Mar 17, 2013 at 2:10 PM, Sven Barth pascaldra...@googlemail.com wrote:
 On 17.03.2013 15:33, Flávio Etrusco wrote:

 (...)
 static T extends Comparable int IndexOf(ListT p_list, T p_item);


 So you're basically just talking about generic methods here?

Yes. Or actually not, it also involves allowing
non-specialized/not-completely-defined variables.


 The Delphi
 compatible syntax for your two examples are:

 === code begin ===

 function Alias1T: TObject(Source: T): TAlias1T;

 === code end ===

This time I tried with 2.7.1 :)
But it also gives Error: Generics without specialization cannot be
used as a type for a variable.
Is something planned regarding this case?

Thanks a lot.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] a proposal about with syntax

2013-03-16 Thread Flávio Etrusco
On Sat, Mar 16, 2013 at 10:14 PM, Xiangrong Fang xrf...@gmail.com wrote:
   I don't know what's make it complex if there are 2 or more subject in
  the with?

 Context. A conflict case the two object were of the same class.


 Are you saying this case:

 with MyClassInstance1 as m, MyClassInstance2 do begin
   m.Property1 := 123;
   Property2 := 456;
 end;

 Here you don't know Property2 belongs to which object instance??

No, he's saying that *his hack* using class helper wouldn't cover this
case (two objects in the same 'with' clause).

Daniel, I find this hack as ingenious as atrocious ;-)
But thinking about it a bit, when FPC gets generic methods you can
make this kind of workable!

 (...)
 To summarize, as does NOT try to eliminate context ambiguity (also it
 won't make a clear context ambiguous), but provided some convenience when
 needed.

As Sven said this feature has already been requested a few times.
I don't remember whether it was permanently vetoed by FPC developers
or just is in the to-do, but vaguely remember people arguing it's
un-pascal because of the local variable/scope - which is
unfortunate, because IMO the 'with' syntax is one of the most
abominable un-pascal things Borland introduced in the language, and
*forcing* the AS syntax (but probably with some other keyword like
ALIAS) would make it much more palatable.

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] a proposal about with syntax

2013-03-16 Thread Flávio Etrusco
 Actually the only thing that makes me uncomfortable about the keyword as, 
 is that
 it strangely reminds me of SQL.  I suppose that isn't a bad thing though.

No problem with SQL, but as is already safe typecast, remember? ;-)

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] a proposal about with syntax

2013-03-16 Thread Flávio Etrusco
On Sun, Mar 17, 2013 at 12:16 AM, Daniel Gaspary dgasp...@gmail.com wrote:
 On Sun, Mar 17, 2013 at 12:07 AM, 印場 乃亜 shir...@galapagossoftware.com wrote:
 On 2013/03/17, at 11:37, Flávio Etrusco flavio.etru...@gmail.com wrote:
 Daniel, I find this hack as ingenious as atrocious ;-)
 But thinking about it a bit, when FPC gets generic methods you can
 make this kind of workable!

 I was thinking about this, not specifically generic methods, but some
 new generic resource.

Indeed. What I was thinking would actually need generic functions,
bounded generics and generics with type-erasure ;-)
So you'd write, say:

  type generic TAlias1T: TObject = class(TObject)
function Alias1: T;
  end;

 functionT: TObject Alias1(Source: T): TAlias1T;


And yet you wouldn't be able to name the alias...

-Flávio

PS. I can't believe Embarcadero went for : instead of = for
declaring bounded/restricted generics :-/
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Porting C macro

2013-03-11 Thread Flávio Etrusco
On 3/11/13, Darius Blaszyk dhkblas...@zeelandnet.nl wrote:


 I'm stuck porting a macro from C. Below is the original define. The
 part I'm struggeling with is the right most part after the - sign.


 #define GETNEXT(x) ((LList *)(((char *) x) - ((char *)  (((LList
 *)0)^.next

 Does anyone know what is meant with the define?
 Obviously LList is a linked list struct that has a prev and next
 variable. But what does the  and 0 mean?

 Appreciate any
 help.

 Regards, Darius

AFAICS they mean address and nil, respectively, so that part will
return the offset of next inside and item of LList.

-Flávio


-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Sigsegv with refcounting interface

2013-03-08 Thread Flávio Etrusco

 var
   vintfl: TInterfaceList;


BTW You should use a IInterfaceList variable

 procedure addintf(const aintf: IUnknown);
 (...)
 addintf(TInterfacedObject.Create);
 (...)

It's a pity, but I don't know whether it's fixable (or if needs to be
fixed) in the compiler.
The TInterfacedObject has RefCount = 0 after construction, so you
should always to assign it to a variable.
In a sense a RefCounted object only exists while someone has a
reference to it, so in that case the object non-existant ;-)

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Result: string

2013-03-04 Thread Flávio Etrusco
On Mon, Mar 4, 2013 at 5:23 PM, Juha Manninen juha.mannine...@gmail.com wrote:
 On Mon, Mar 4, 2013 at 9:21 PM, José Mejuto joshy...@gmail.com wrote:
 What's the expected output of this code ?

 function TheA(): string;
 begin
   Result:=Result+'A';
 end;

 writeln(TheA());

 I thought that when the result type is an automated one its value gets
 initialized... Maybe I'm wrong...

 Yes you are wrong. It is very illogical because a local string
 variable is initialized to be empty but the return value is not.
 Delphi has the same problem.

 I once made even a report about it:
   http://bugs.freepascal.org/view.php?id=20907


 Regards,
 Juha

Delphi would present this problem only in some situations (which is
worse), and it didn't even show a warning when the result is a string
:-/

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Regression? Problem passing a packed record to a overriden, virtual, abstract method in fpc 2.7.1.

2013-02-25 Thread Flávio Etrusco
On Mon, Feb 25, 2013 at 11:45 PM, Reimar Grabowski reimg...@web.de wrote:
 On Tue, 26 Feb 2013 00:02:33 +0100
 Reimar Grabowski reimg...@web.de wrote:

 But from command line it works. So it is not a FPC problem.
 I am really sorry for communicating with myself but I have spoken too early. 
 Now I can reproduce the problem using just FPC, no Lazarus involved.
 It gets triggered when compiling with range checking (-Cr) or with veryfying 
 object method call validity (-CR).
 At least now I know where the problem is and can workaround it by disabling 
 both.
 2.6.2 works correctly.

 R.

FWIW even with these settings I can't reproduce the bug. Not even
enabling -O3 -Ou.
(FPC 2.6 on Win32, compiling from Lazarus)

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Bitpacked dynamic array support

2012-12-17 Thread Flávio Etrusco
You can use sets or TBits. Unless you mean packed arrays of byte or
word, etc. In this case you just declare myvar: packed array of
byte.

-Flávio

On Mon, Dec 17, 2012 at 5:46 PM, denisgolovan denisgolo...@yandex.ru wrote:
 Hi guys

 It looks like currently FPC does not support dynamic bitpacked arrays.
 I wonder how much work it will take to make support for it?

 For some things, it's a really useful functionality.

  --
 Regards,
 Denis Golovan
 ___
 fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Re: File Enumeration speed

2012-07-28 Thread Flávio Etrusco
On Sat, Jul 28, 2012 at 9:07 AM, leledumbo leledumbo_c...@yahoo.co.id wrote:
 does the operating system keep an index somewhere ?

 ls doesn't, find does AFAIK.


find doesn't have any index over ls. You may be thinking of
locate (actually located) that keeps a textfile with the list of
files.

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Creating video files

2012-06-20 Thread Flávio Etrusco
Apart from _the_ multi-platform commandline video converter, ffmpeg?
http://ffmpeg.org/
It's the back-end for WinFF (and most other utilities like these).
Also, I would expect VirtualDub to run fine with WINE.

-Flávio

On Wed, Jun 20, 2012 at 11:00 AM, Krzysztof dib...@wp.pl wrote:
 Hmm, external application is nice idea. But VirtualDub is windows
 only. Anyone know multi-platform comandline video converter? What I
 found is Mencoder. I must test it

 2012/6/20 Gerhard Scholz g...@g--s.de:
 In my opinion, the easiest way is to create a series of BMP's and then use
 VirtualDub or VirtualDubMod (I think it's at Sourceforge).

 Greetings

 - Original Message -
 From: Krzysztof dib...@wp.pl
 To: fpc-pascal fpc-pascal@lists.freepascal.org
 Sent: Tuesday, June 19, 2012 3:53 PM
 Subject: [fpc-pascal] Creating video files


 Hi,

 I would like to write video (created from series of bitmaps) to some
 popular video formats like avi, flv. Is this possible? Has FPC
 bindings for video librarys?
 I googled that WinFF (http://winff.org/html_new/) is written in FPC
 and Lazarus, so I supose that some bindings exists but can't find any
 in http://wiki.freepascal.org/Multimedia_Programming

 Regards.
 ___
 fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal

 ___
 fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal

 ___
 fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Currency and ABS(-674.59)

2012-03-06 Thread Flávio Etrusco
On Tue, Mar 6, 2012 at 12:11 PM, Jonas Maebe jonas.ma...@elis.ugent.be wrote:

 On 06 Mar 2012, at 13:28, michael.vancann...@wisa.be wrote:

 As far as I know, Currency is always a scaled int64, and didn't interpret
 the
 request as a request to change that.


 The problem is that on i386 (and in Delphi on i386), operations on the
 currency type are handled using the fpu.
(...)

This comes as a big surprise to me. I always thought the docs
definition 
(http://docwiki.embarcadero.com/RADStudio/en/Internal_Data_Formats#The_Currency_type)
implied the FPU wasn't used.
I wonder how that didn't turn out on the rare times I used the
Currency type. I'm glad I never worked with banking/financial systems
:-$

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Re: Trim(): incompatibility with Delphi

2012-03-05 Thread Flávio Etrusco
On Mon, Mar 5, 2012 at 11:36 PM, leledumbo leledumbo_c...@yahoo.co.id wrote:
 Fpc Trim(): Trim whitespace from the ends of a string.

 Where did you get that? The documentation
 (http://www.freepascal.org/docs-html/rtl/sysutils/trim.html) doesn't say
 so...


And a simple test confirms the docs (FPC 2.6):

  ShowMessage(Trim('test ') + Trim ('   !'));

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] fcl-web TFPHttpServer component problem

2011-11-28 Thread Flávio Etrusco

 Also the HTTP server is
 implemented as a component (TComponent descendant), so I gather the
 thoughts was that some day they would like it to sit on the Lazarus
 component palette, where it will be dropped onto some form or data
 module - thus rendering that application frozen too.

 It was never meant as such.

 It is meant as the main program loop, as Leonardo surmised. The component
 is meant to be simple.

 And using a TComponent does not automatically mean that it will sit on the
 component palette. I use TComponent because I like the automated memory
 management it offers; e.g. it also means the TDatamodules it creates for
 servicing requests can be owned by the server component itself.

 If you want still to have a main program, you should use a thread and
 create the component in the thread. Which is exactly what happens in a
 service application, the intended environment for the component.

 Michael.

I have to agree this is a very odd interface. IMHO setting a property
is expected to return quickly; a call that's meant to be used as
program loop should be a explicit method and named accordingly...
(Listen/Run/Execute/ActivateAndWait/etc)

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Free Pascal 2.6.0rc1 released

2011-11-07 Thread Flávio Etrusco
Yes, RolByte/Word/Dword/QWord are implemented in 2.6.0rc1.


On Mon, Nov 7, 2011 at 8:27 PM, Peter pe...@pblackman.plus.com wrote:
 HI,

 Does this release include intrinsic ROL  ROR?
 'Bug' 6300 is shown as fixed, but I can find no mention in the new features
 list.

 http://bugs.freepascal.org/view.php?id=6300





 On 05/11/11 23:27, Marco van de Voort wrote:

 Hello,

 We have placed the first release-candidate of the Free Pascal Compiler
 version 2.6.0 on our ftp-servers.

 You can help improve the upcoming 2.6.0 release by downloading and
 testing this release. If you want you can report what you have done here:
 http://wiki.freepascal.org/Testers_2.6.0
 http://bugs.freepascal.org/view.php?id=6300
 Changes that may break backwards compatibility are documented at:
 http://wiki.freepascal.org/User_Changes_2.6.0

 Downloads are available at the FTP server at:

 ftp://freepascal.stack.nl/pub/fpc/beta/2.6.0-rc1/

 Enjoy!

 The Free Pascal Compiler Team


                             Free Pascal Compiler

                                 Version 2.6.0rc1


 **
                               What's New in 2.6.0rc1

 **

 Free Pascal 2.6.0 is a new major version of the Free Pascal compiler.

 Please also see http://wiki.freepascal.org/User_Changes_2.6.0 for a list
 of changes that may affect the behaviour of previously working code, and
 how to cope with these changes.

 Some highlights are:

 Platforms:
   * iPhoneSimulator target

 Compiler:
   * Many new language features:
      * Objective-Pascal dialect, supported on all Mac OS X and iOS targets
      * constref parameter modifier for const by reference
      * Pascal boolean types with multiple sizes (boolean16/32/64)
      * ISO 7185 language mode (except for I/O). Features amongst others:
         * nested procedure variables
         * non-local goto's
      * Mac Pascal mode improvements
         * nested procedure variables
         * univ modifier
      * Intrinsics
         * sar (shift arithmetic right)
         * bsf/bsr (bitscan forward/reverse)
      * Delphi compatibility mode improvements
         * Nested types, class variables and class local constants
         * Advanced records syntax (no constructors yet)
         * (for..in) Enumerators in records
         * Class and record helpers
         * Generic records, arrays and procedural types
         * Delphi-compatibility of generics improved
         * Scoped enumerations
         * Custom messages for deprecated directive
         * Ability to use  for escaping keywords
   * New ARM code generator features
      * ARM VFPv2 and VFPv3 floating point unit support
      * Thumb-2 support

 Packages:
   * Many improvements to the rtl
   * Many improvements to the database units (fcl-db)
   * Objective-Pascal interfaces to Foundation, AppKit, CoreData and
 WebCore
   * OpenGL headers updated to OpenGL 4.0

 Details about these new features can be found at
 http://wiki.freepascal.org/FPC_New_Features_2.6.0

 See http://bugs.freepascal.org/changelog_page.php for the list of reported
 bugs that have been fixed in this release.
 ___
 fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal



 ___
 fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] A list of CORBA interfaces - how?

2011-09-20 Thread Flávio Etrusco
On Tue, Sep 20, 2011 at 3:28 AM, Graeme Geldenhuys
graemeg.li...@gmail.com wrote:
 Hi,

 I'm porting some of my old Delphi code which used interfaces
 extensively. Since I moved to FPC years ago, I liked the idea of
 CORBA-style interfaces, and mostly use them under FPC projects.

 Anyway, some of my code used IInterfaceList / TInterfaceList, but that
 uses IIInterface, which is an alias for IUnknown, which is COM-style
 interfaces only.

 What is the equivalent for CORBA style interfaces?  Just a TList storing
 pointers?

 Regards,
  - Graeme -

 --

I've just found this: http://62.166.198.202/view.php?id=6036
And this really works! :) Even 'as' operator works (so the error
message in FPC 2.4.4 is misleading).
You can iterate over TClass.GetInferfaceTable, and if you declare an
interface name it'll appear there (I checked). Not sure whether
there's some way (or hack) to compare an (unnamed) interface with the
VMT pointer there...

Best regards,
Flávio

PS. A few days ago when Marcos Douglas was asking about CORBA vs COM I
didn't find this information :-/
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] A list of CORBA interfaces - how?

2011-09-20 Thread Flávio Etrusco
Oops, seems I completely misread your post.
The problem is cite is the kind of (or exactly) the one you're trying to fix :-$

Thanks for Marcos for pointing that out.

-Flávio

2011/9/20 Flávio Etrusco flavio.etru...@gmail.com:
 On Tue, Sep 20, 2011 at 3:28 AM, Graeme Geldenhuys
 graemeg.li...@gmail.com wrote:
 Hi,

 I'm porting some of my old Delphi code which used interfaces
 extensively. Since I moved to FPC years ago, I liked the idea of
 CORBA-style interfaces, and mostly use them under FPC projects.

 Anyway, some of my code used IInterfaceList / TInterfaceList, but that
 uses IIInterface, which is an alias for IUnknown, which is COM-style
 interfaces only.

 What is the equivalent for CORBA style interfaces?  Just a TList storing
 pointers?

 Regards,
  - Graeme -

 --

 I've just found this: http://62.166.198.202/view.php?id=6036
 And this really works! :) Even 'as' operator works (so the error
 message in FPC 2.4.4 is misleading).
 You can iterate over TClass.GetInferfaceTable, and if you declare an
 interface name it'll appear there (I checked). Not sure whether
 there's some way (or hack) to compare an (unnamed) interface with the
 VMT pointer there...

 Best regards,
 Flávio

 PS. A few days ago when Marcos Douglas was asking about CORBA vs COM I
 didn't find this information :-/

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] How to do conditional compilation with macros

2011-09-18 Thread Flávio Etrusco
On Sun, Sep 18, 2011 at 8:35 AM, Marco van de Voort mar...@stack.nl wrote:
 In our previous episode, Reinier Olislagers said:

 Have got FPC version 2.7.1 [2011/09/17] for i386 on Windows.

 What am I doing wrong?

 Not reading manuals?  :-)

 http://www.freepascal.org/docs-html/prog/progse5.html#x121-1210002.2

 so it is FPC_FULLVERSION, not FPCFULLVERSION

 from

 http://delphi.wikia.com/wiki/FreePascal_detection_and_versioning

 a typical usage:

 {$if FPC_FULLVERSION 20204}
   // means greater than 2.2.4 here
  {$ifndef}


Not wanting to hijack the thread but, why isn't there a way to print
macro values? (There isn't, is it?)

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] How to do conditional compilation with macros

2011-09-18 Thread Flávio Etrusco
On Sun, Sep 18, 2011 at 9:19 AM, Marco van de Voort mar...@stack.nl wrote:
 In our previous episode, Fl?vio Etrusco said:
  http://delphi.wikia.com/wiki/FreePascal_detection_and_versioning
 
  a typical usage:
 
  {$if FPC_FULLVERSION 20204}
  ? // means greater than 2.2.4 here
  ?{$ifndef}
 

 Not wanting to hijack the thread but, why isn't there a way to print
 macro values? (There isn't, is it?)

 No. http://bugs.freepascal.org/view.php?id=12935

 I still think this is a good thing, mostly because this is a way to get
 versions etc embedded in the program into the binary without going through
 an includefile processor.

 so

  fpc  -dfreebsdversion:=`uname -r`

 and then
  {$i %freebsdversion%}

 According to Jonas it can also be done via the environment, and for me that
 was enough back then (which is why the report is closed). But in retrospect
 that is fine for commandline, but harder for IDE usage. (which often allows
 to set additional cmdline options, but not specify the environment,
 specially not on all targets)
 ___


Thanks for the information and tips. I hadn't thought about using
environment variables, maybe I'll add it to Lazarus :)

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Multiple enumerators per class

2011-09-15 Thread Flávio Etrusco
On Thu, Sep 15, 2011 at 6:37 PM, Mattias Gaertner
nc-gaert...@netcologne.de wrote:
 Hi all,

 I found the Wiki page about the new for-in loop and found a
 misinformation. It stated wrongly that it is not possible to
 have multiple enumerators per class. It even gave a proposal
 for a new feature that did not add anything new.

 I added an example how to add a second enumerator to a class:

 http://wiki.freepascal.org/for-in_loop#Multiple_enumerators_for_one_class

 IMO the proposal was misleading so I deleted it. I hope this is
 ok. If not, I will restore it.


 Mattias

How can you use multiple enumerators? I searched it recently and only
found that wiki page ;-)

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Overloading the increment operator (+=)

2011-09-12 Thread Flávio Etrusco
On Mon, Sep 12, 2011 at 2:25 AM, Jürgen Hestermann
juergen.hesterm...@gmx.de wrote:


 Flávio Etrusco schrieb:

 += can't be efficiently implemented with two operations (since
 concatenating the operand would be unexpected to the user...).

 Why not use inc(x,y)?
 ___

AFAICS it's not possible either. (Notice I'm talking about operating
on an 'object').

What I meant is:
MyStringBuffer += 'String';
Is replaced with:
MyStringBuffer := MyStringBuffer + 'String';
What if is was:
MyStringBuffer := OtherStringBuffer + 'String';

So concatenating the 'String' in the StringBuffer's internal buffer
would be unexpected IMO (but maybe just making it safe, even though
unexpected, would be ok).
Also, since the assignment operator for same type can't overload, I
can't make adjustments to avoid sharing the buffer so I'm left with
using an AnsiString as buffer, or use some self-pointing canary which
must be checked on every buffer operation.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Overloading the increment operator (+=)

2011-09-11 Thread Flávio Etrusco
On Sun, Sep 11, 2011 at 9:22 AM, Jonas Maebe jonas.ma...@elis.ugent.be wrote:

 On 10 Sep 2011, at 22:32, Flávio Etrusco wrote:

 Does FPC allow overloading the += operator? If not, why?

 It is translated into x:=x+y at the parser level, and overload resolving 
 happens later. So once you overload + (and := if required), += should 
 also work.


 Jonas


Yes, I realize this. I'm revisiting the StringBuilder issue, and
+= can't be efficiently implemented with two operations (since
concatenating the operand would be unexpected to the user...).

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


[fpc-pascal] Overloading the increment operator (+=)

2011-09-10 Thread Flávio Etrusco
Hello,
If write a declaration without result it complains about invalid
syntax; if I add a result it says impossible operator overload.
Does FPC allow overloading the += operator? If not, why?

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


[fpc-pascal] Suggestions on array allocation pattern/rules of thumb?

2011-08-19 Thread Flávio Etrusco
Hello,
In Lazarus I found (pseudo)some code like this:

procedure DoSomething(...)
var
  v_Results: PInteger;
  v_ResultCount: Integer;
begin
  v_Result := nil;
  PrepareData(..., v_Results, v_ResultCount);
  InternalDoSomething(v_Results, v_ResultCount);
end;

procedure PrepareData(..., var p_Results: PInteger; var p_ResultCount: Integer)
begin
  for (...)
if (...)
begin
 Inc(p_ResultCount);
 ReallocMem(p_Results, p_ResultCount);
end;
end;


As you might guess my main gripe is about the repeated calls to
ReallocMem. The real case in the LCL is far from critical, it's
infrequently and the array won't ever be bigger than 10 elements, I
just thought it could a good example to hear from someone
knowledgeable in FPC heap-allocator about any rules of thumb :-)
Apart from making the parameters 'out' - ;) - what would you do?
1) This is this ok.
2) Allocate a buffer with maximum size and then trim it after the loop.
3) Declare a type for the maximum size, allocate it on the heap (in
DoSomething).
4) Declare a type for the maximum size, allocate it on the stack (in
DoSomething).
5) Any other options?
Any remarks regarding different scenarios is also appreciated.

Thanks,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Re: operator overloading and counting references / creating / destoying anonymous instances

2011-07-30 Thread Flávio Etrusco

 And there is another advantage of using procedures/functions instead of
 overloading operators:
 You can search for the procedure to look what it actualy does.

 Not if you use function/procedure overloading. Then the situation is
 exactly the same as for operators.


Repeating myself, if there isn't something like CodeTools (i.e. only
with text search) is way more difficult to search for operator
declarations.

 How do you find the code that overloaded an operator?


-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Re: operator overloading and counting references / creating / destoying anonymous instances

2011-07-30 Thread Flávio Etrusco

 Repeating myself, if there isn't something like CodeTools (i.e. only
 with text search) is way more difficult to search for operator
 declarations.

 Why? Searching for operator+ is no more difficult than for function add ?


Blanks and linebreaks... Of course if one always use the same editor,
that supports searching for linebreaks, and often use Regex in it,
maybe they'll remember whether its Regex flavor uses \b or \s or \w
for blanks :-/ Of course this is not major, just annoying, since
you'll rarely need it.
But maybe if FPC forced the symbol to follow the keyword immediately... ;-)

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Re: operator overloading and counting references / creating / destoying anonymous instances

2011-07-29 Thread Flávio Etrusco
On Fri, Jul 29, 2011 at 7:31 AM, Henry Vermaak henry.verm...@gmail.com wrote:
 On 29/07/11 06:39, Jürgen Hestermann wrote:


 Bernd schrieb:
   Occasionally I hear other people mentioning operator overloading as a
   must-have feature of any decent language but I wonder what real-world
   problems they are actually solving with it.

 I think operator overloading is a pain. As you said: What is the
 advantage? For me operators should be defined by the language only

 It improves readability, making it more logical.  Say for instance you are
 working on Galois fields and you have to do arithmetic on the elements like
 this:

 g1 + g2 / g3

 If you don't have operator overloading, you have to do it with functions,
 like this:

 gf_add(g1, gf_div(g2, g3))

 This is not very readable, I'm sure you will agree.  They have to be used
 carefully, however.

That's the problem, you always have to be very careful.
They are easy to overlook in the code.
You can circumvent type-checking.
One more thing for the IDE to support (if it doesn't, you're royally screwed).
At least in *Pascal strings are native types, so one less problem (and
a big one in C++) to worry.

 clear. But now there is no way back. It's implemented. Pascal moves in C
 direction...

 Troll.  C has no operator overloading.

 Henry

Of course he meant C++.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Re: operator overloading and counting references / creating / destoying anonymous instances

2011-07-28 Thread Flávio Etrusco
On Thu, Jul 28, 2011 at 1:59 PM, Bernd prof7...@googlemail.com wrote:
 2011/7/28 Bernd prof7...@googlemail.com:
 I have tried making
 use of Interface and TInterfacedObject and this seems to do what I
 want: for example when witing A := A + B the + operator would return a
 new instance and the reference counting would then automatically call
 the destructor of A when it assigns the newly created number.

 I have profiled it
 http://imagebin.org/165317

 procedure Loop(a,b: IFoo);
 var
  I : Integer;
 begin
  for i := 0 to 1 do begin
    //BN_mul(b.Handle, a.Handle, a.Handle, b.Context);
    b := a * a;
  end;
 end;

 This creates and destroys an object of TFoo everytime and this in turn
 will also create and free resources inside OpenSSL, its only spending
 37% of the time doing actually useful work (BN_mul).

 I think I'm not going to continue this route. I can't see any possible
 way to make useful use of overloading these operators, other than
 making a few lines in other places of the code look a little bit nicer
 at the cost of degrading performance by a factor of 3 (for add instead
 of mul its even factor 6).

 Occasionally I hear other people mentioning operator overloading as a
 must-have feature of any decent language but I wonder what real-world
 problems they are actually solving with it. Are other compilers better
 at dealing with these problems, is there room for improvement?

 Bernd

Implement += and *= operator to avoid allocating new objects?
You could also/instead override  TObject.NewInstance and FreeInstance
to implement a pool of objects.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Partially initializing array of records

2011-07-19 Thread Flávio Etrusco
On Tue, Jul 19, 2011 at 2:44 PM, Clay Stuart clay.stu...@gmail.com wrote:
 Hello Everyone:
 I've got an array of records that looks something like this:
 type
       node = record
             foo : array[1..10] of integer;
             bar : array[1..10] of integer;
       end
 var
      graph : array[1..5] of node;
 begin...

 However, the arrays hold different amounts of numbers.  So node[1].foo might
 hold 5 numbers while node[2].foo might hold only 2.
 My Question...
 Is there a way to initialize these numbers somehow.  It seems the compiler
 won't allow me to partly fill the arrays.  If I use them, it appears I have
 to use them all the way.
 Thank you in advance,
 Clay

AFAIK no. You'll have to explicitly initialize them with '0'.

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Re: Object Files

2011-07-18 Thread Flávio Etrusco
On Mon, Jul 18, 2011 at 2:07 PM, leledumbo leledumbo_c...@yahoo.co.id wrote:
 Are object files platform dependent?

 No

From the rest of your post I guess you mean yes, they are dependent?



 Something tells me they ARE platform independent since they have to be
 linked in.

 Pardon me? That seems unrelated. Object files are basically executables with
 external symbols unresolved and no starting point, do you think executables
 platform independent?


He's asking exactly this. If there was no difference in calling
conventions and every access to the OS was through the RTL it could be
cross-platform in this sense (since he's changing the OS but not the
processor/architecture).

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Windows test program

2011-06-23 Thread Flávio Etrusco
On Thu, Jun 23, 2011 at 12:35 PM, Carsten Bager cars...@beas.dk wrote:
 Hi
 I have this test program. It compiles and runs (shows) under Delphi (5.0).
 I can compile (and run it) it under FPC (2.4.4) but it does not show 
 anything. I can see it in
 the Windows Job list - Processes but not under Programmes.
 Anybody have a hint.

 Regards
 Carsten


The program didn't show anything but an empty window, but worked
without a problem otherwise (after a commented out the .res so I could
compile). Windows 7 32-bit here. FPC 2.4.4 too.

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Platform independent alternatives

2011-06-23 Thread Flávio Etrusco
On Thu, Jun 23, 2011 at 3:18 PM,  dhkblas...@zeelandnet.nl wrote:
 Hi,

 I'm porting an app from Delphi to Lazarus when I came across a couple of
 functions from the windows unit. Can anyone help me finding the platform
 independent alternatives?

 TerminateThread

You shouldn't use it, generally speaking.


 WaitForSingleObject

AFAICT there's no - there can't be ;-) - equivalent. What is the
object you're waiting on?


 CloseHandle

 TIA, Darius


What object are you closing?

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] When the variable freed in Optimize compile

2011-06-08 Thread Flávio Etrusco
On Wed, Jun 8, 2011 at 6:17 AM, Jonas Maebe jonas.ma...@elis.ugent.be wrote:

 On 08 Jun 2011, at 10:57, Zaher Dirkey wrote:

 Hi, I know when compile the project with optimize in Delphi the variable
 freed/allocated after the last line used.
 How can i make same in FPC, O3 not worked for me.

 FPC only reuses stack slots allocated for temporary expressions. It does not
 reuse stack slots used by variables.


 Jonas


While we are at it, is this a limitation or by design?

What if C is string or Interface of TInterfacedObject?
 It is the same logic. It's freed only at the end.

I recently noticed that this is also true for ansistrings. I see this
can avoid lots of errors, but also makes it very ackward to
intentionally avoid copies when modifying strings in-place if they are
obtained from a function...

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Suffix Trie implementation, please review

2011-05-24 Thread Flávio Etrusco
I guess you forgot the attachment? ;-)
BTW, do you know the hashtrie component?
http://www.softcomplete.com/hashtrie.asp

Best regards,
Flávio

On Tue, May 24, 2011 at 1:48 PM, leledumbo leledumbo_c...@yahoo.co.id wrote:
 I've written a unit containing suffix trie implementation. It could be used
 for: fast string existence search (could be extended with other information
 if required), though takes quite a lot of spaces (O(n^2) for a string where
 n is the string length, but grow slower as more strings get added), the
 existence search have O(m) complexity where m is the string to search for.
 This string to search for could be exact or a substring of previously added
 strings.

 Please have a look and try it (a test program is included), open for
 suggestions or whatever you want to say.


 --
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] TimSort

2011-05-20 Thread Flávio Etrusco
On Fri, May 20, 2011 at 9:26 AM, Marco van de Voort mar...@stack.nl wrote:
 In our previous episode, michael.vancann...@wisa.be said:
  ?
  Is there already a TimSort implementation in fpc?
  ?
  http://en.wikipedia.org/wiki/Timsort

 Not to my knowledge.

 One reference implementation in the article (the goolge one) is
 GPL-with-classpath-exception licensed, the other Python one seems to be
 PSF.

 While the PSF doesn't seem to be particularly evil, I think the first step
 would be to find a version with a more compatible license.

Maybe this one?
http://gee.cs.oswego.edu/cgi-bin/viewcvs.cgi/jsr166/src/main/java/util/TimSort.java?view=co
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Inherit interface from 2 interfaces

2011-04-09 Thread Flávio Etrusco
On Fri, Apr 8, 2011 at 6:16 AM,  michael.vancann...@wisa.be wrote:


 On Fri, 8 Apr 2011, Zaher Dirkey wrote:

 2011/4/7 Flávio Etrusco flavio.etru...@gmail.com

 On Wed, Apr 6, 2011 at 1:37 PM, Zaher Dirkey parm...@gmail.com wrote:

 Can i do that?
 type
  IIntf3 = interface(IIntf11, IIntf2)
 
  end;

 Thanks in advance.
 --
 Zaher Dirkey


 For Corba interfaces, yes. Not for COM interfaces.
 http://www.freepascal.org/docs-html/ref/refse39.html


 I added {$INTERFACES CORBA} but same error ~Fatal: Syntax error, )
 expected but , found~ in the line ~IIntf3 = interface(IIntf11, IIntf2)~

 The whole idea of interfaces is to avoid multiple inheritance.

 So you can never inherit from more than one interface.

 Also not in CORBA interfaces. The mentioned page of the manual nowhere
 states that this is possible. It just says that for CORBA interfaces,
 the interface does not descend from IUnknown.

 Michael.

My bad, I just answered based on the Delphi implementation.
I sent the link just for the sake of reference.

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Inherit interface from 2 interfaces

2011-04-07 Thread Flávio Etrusco
On Wed, Apr 6, 2011 at 1:37 PM, Zaher Dirkey parm...@gmail.com wrote:
 Can i do that?
 type
   IIntf3 = interface(IIntf11, IIntf2)
 
   end;

 Thanks in advance.
 --
 Zaher Dirkey


For Corba interfaces, yes. Not for COM interfaces.
http://www.freepascal.org/docs-html/ref/refse39.html

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] TDOMElement and multiple attributes

2011-03-27 Thread Flávio Etrusco


 someone@somewhere:~/pascal/Projects/xmldemo$ cat test.xml
 ?xml version=1.0?
 ROOT someAttrib=someValue
   SomeNode aAttribute=2 bAttribute=3 ccAttribute=4 aaaAttribute=1/
 /ROOT

 Looks like the order is governed by the length of the attribute name first 
 and then alphabetically.

Actually it isn't sorted by length, but it's case-sensitive.


Mattias wrote:
 Yes, that is what CompareDOMStrings does.
 Probably for speed reasons.

Indeed, laz_xmlwrite and laz2_xmlwrite both do this, but the example
is using xmlwrite.pas from fcl-xml.

 This function is fixed in the code.

What do you mean?

Best regards.
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] TreeView and Nonrecursion

2010-09-02 Thread Flávio Etrusco
On Wed, Sep 1, 2010 at 6:20 PM, Bihar Anwar bihar_an...@rocketmail.com wrote:
 On 2 September 2010 3:53:34 AM, Vannus wrote:

 i probably shouldn't open my mouth, as i don't quite understand the
 question...
 however FRED from the game Freespace let you design missions using a
 treeview.

 Just to make my question clear, for example, I can fill a TreeView control
 with particular Registry keys by enumerating registry keys recursively and
 put them in the TreeView control; then for performance reason, I attempt to
 use a nonrecursive/iterative approach to enumerate registry keys, but how
 can I fill the TreeView since a tree is naturally recursive? Is recursion
 is the only way to achive it?


When reading from registry and populating a treeview, a recursive
function is the least of your worries regarding performance (or
memory, if you're careful).

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] regex vs synregexpr unit

2010-06-06 Thread Flávio Etrusco
http://delphi.about.com/od/toppicks/tp/delphi-regular-expressions.htm

The regex unit in SynEdit is an old version of the code from
regexpstudio.com (which seems to be offline) is said to be very slow
for processing large sets of data, like a whole file. In SynEdit it`s
used to process single lines, and in this situations it seems pretty
good.

Best regards,
Flavio


On Sun, Jun 6, 2010 at 12:32 PM, Juha Manninen juha.manni...@phnet.fi wrote:
 Hi

 Speed is important to me, but reg-expr features is important as well.
 Actually, I want to include reg-expr as an alternative search mode in
 my general-purpose file search unit.

 Then the SynEdit's version of regexp should be fast enough.
 SynEdit editor in Lazarus for example uses it and it's quite fast.
 File I/O is the slowest part when searching from files.

 Juha
 ___
 fpc-pascal maillist  -  fpc-pas...@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] FPC bug or brain bug ?

2010-05-27 Thread Flávio Etrusco
All TObject descendants have a VMT. The destructor is virtual, BTW.

-Flávio

On Thu, May 27, 2010 at 11:01 AM, Yann Bat batyann...@gmail.com wrote:
 Hi,

 I don't understand why compilation of the program below failed in fpc
 and objfpc mode. In tp and delphi mode it works as expected but in fpc
 and objfpc mode the compiler complains :

  blob.pas(17,3) Error: Constants of objects containing a VMT aren't allowed
  blob.pas(17,3) Fatal: Syntax error, ; expected but ( found

 Since my object has no virtual methods why a VMT ?

 Thanks.


 {$mode fpc}
 program Blob;

 type
  TBlob = object
    private
      fId : LongInt;

    public
      constructor Init;
      function Id: LongInt;
  end;

  PBlob=^TBlob;

 const
  NullBlob : TBlob = (fId: 0);

 {=== TBlob ===}
 constructor TBlob.Init;
 begin
  fId:=Random(1024) + 1;
 end;

 function TBlob.Id;
 begin
  Id:=fId;
 end;

 var
  B : TBlob;
 begin
  B:=NullBlob;
  WriteLn('B : ', B.Id);

  B.Init;
  WriteLn('B : ', B.Id);
 end.
 ___
 fpc-pascal maillist  -  fpc-pas...@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] about dynamic array

2010-05-06 Thread Flávio Etrusco
On Thu, May 6, 2010 at 11:58 AM, Florian Klaempfl
flor...@freepascal.org wrote:
 José Mejuto schrieb:
 Hello FPC-Pascal,

 Thursday, May 6, 2010, 3:53:59 PM, you wrote:

 c TList wraps TFPList, which is based internally on an array. So access
 c is fast; insertion, deletion not.

 But it is faster than inserting elements in a dynamic array (unless
 reference counted ones) because it usually moves less amount of data
 (4/8 bytes per element).


 Why do you think so? You can also create dyn. arrays of pointers.

I guess José is well aware of it, but isn't it a good thing to suggest
the use of TFPList to newbies?

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Where is the best place to declare an array?

2010-05-06 Thread Flávio Etrusco
On Thu, May 6, 2010 at 7:34 PM, Jonas Maebe jonas.ma...@elis.ugent.be wrote:

 On 06 May 2010, at 23:28, Werner Van Belle wrote:

 In 'human' (haha) terms:

 - global variable access: write data into 'ds+constant'
 - local variables: write data into 'ss+bp+constant'.

 Since the latter involves a term more I assume it is bound to take more
 time.

 That was true in the days of the 8086 (the former took 6 cycles while the 
 latter took 9 cycles). On the i386 and i486, both expressions were already 
 calculated in a single cycle; they only suffered an extra single cycle 
 penalty in case the address expression used an index (your example only 
 contains a base). On the Pentium, address expressions containing an index 
 were also evaluated in a single cycle. On today's deeply pipelined processors 
 it is extremely unlikely that there is any difference whatsoever in the 
 number of steps used to evaluate both address expressions (even if the time 
 required by the i386/i386/Pentium wasn't documented).

 If you wish to read the outdated details of the old Intel processors:
 * http://www.inf.puc-rio.br/~inf1018/material/intel.txt (search for 
 8088/8086  Effective Address (EA) Calculation)
 * http://www.gamedev.net/reference/articles/article205.asp (search for 
 Choice of Index Versus Base Register)

 Moreover, the first instruction takes up 10 bytes while the second one takes 
 up only 7 bytes, which means that the global array instruction takes up 
 more space in the icache (and that's something which actually /is/ very bad 
 from a performance point-of-view). Combined with how global variables require 
 indirection (as in an extra memory load instruction) on RISC processors and 
 if position-independent code is used (except under some specific 
 circumstances on the x86-64), often slow down program startup (when the 
 dynamic linker has to relocate them), and often behave very badly in terms of 
 data locality (they are often surrounded by unrelated data, as opposed to 
 local variables where the surrounding data will probably also be used by the 
 same function), in general my bias would be much more against than in favour 
 of global variables from a speed perspective (and when not talking about 
 arrays, an additional advantage of local variables is that they often can be 
 kept in registers rather than in memory, which is seldom the case for global 
 variables).


 Jonas___


Now that's a fantastic explanation, and I guess the OP will be satisfied :-)

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] optional parameter

2010-05-03 Thread Flávio Etrusco
2010/5/3 spir ☣ denis.s...@gmail.com:
 Hello,

 A few questions on the topic:

 * Is it possible to define an optional parameter without default value?

 * Is it at all possible for an optional *argument* not to be the last in 
 actual call? Eg
     procedure p(a:Integer=0 ; b:Integer=0)
  How can the caller pass b and not a?

No and no.

 * The ref states: For dynamic arrays or other types that can be considered 
 as equivalent to a pointer, the only possible default value is Nil.
 Does this apply to any non-atomic type? Which are the other types that can 
 be considered as equivalent to a pointer?

Class, AnsiString.

 Tried with a record, but cannot make it be accepted by the compiler. Needed 
 to change the
 parameter to be a pointer to the record instead (so the default can be nil), 
 but this creates a
 trap for the calling code.
 Else, is there a common trick or workaround?


What trap?

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] deprecated syntax is inconsistent.

2010-04-29 Thread Flávio Etrusco
On Thu, Apr 29, 2010 at 6:44 AM, Michael Van Canneyt
mich...@freepascal.org wrote:
 On Thu, 29 Apr 2010, Graeme Geldenhuys wrote:
 Jonas Maebe het geskryf:
(...)

 Jonas tried to explain that this is not possible.

 Consider the following - what  you propose - statements:

 Var
  A : Integer;
  deprecated : Boolean;

 The compiler cannot decide whether the 'deprecated' is a modifier or the
 name of a variable. Both are possible (deprecated is NOT a keyword) and
 valid.

 With the current syntax:

 Var
  A : Integer deprecated;
  Deprecated : Boolean;

 The compiler knows in both cases what is meant.

 The matter could be resolved by making 'deprecated' and all other modifiers
 into keywords, but that would be a major backwards incompatibility.


 Michael.

But I firmly believe that the breakage would be really really minimal.
FPC had made backwards incompatible changes before... Please? ;)

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: Re[4]: [fpc-pascal] Published - Public

2010-04-16 Thread Flávio Etrusco
On Fri, Apr 16, 2010 at 8:32 AM, José Mejuto joshy...@gmail.com wrote:
 Hello FPC-Pascal,

 Friday, April 16, 2010, 8:42:32 AM, you wrote:

 ZD What useful for put procedure in Publish?

 I do not know :-? I'll ask in the Lazarus list.

 --
 Best regards,
  José


Published methods can be found with TObject.MethodAddress, that's how
the lfm hook event handlers (and why Form event handlers are
published).

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: Re[6]: [fpc-pascal] Published - Public

2010-04-16 Thread Flávio Etrusco
On Fri, Apr 16, 2010 at 4:54 PM, José Mejuto joshy...@gmail.com wrote:
 Hello FPC-Pascal,

 Friday, April 16, 2010, 9:06:45 PM, you wrote:

 FE Published methods can be found with TObject.MethodAddress, that's how
 FE the lfm hook event handlers (and why Form event handlers are
 FE published).

 Yes, but thats for streamable objects like TForm, or any component,
 but I think that that's not the case of TWS objects which are the
 widgetset interface, and also all of them are class procedure.

 Marc says in Lazarus that a virtual class tree is formed with such
 published methods, I do not know the need of it or the mission, but if
 it is OK it is OK ;) for me.

 --
 Best regards,
  José

Sure, I was just saying that in a different context. I found Marc's
observation very weird, and I'm (still) going to check it.

Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] nested procedure as parameter question

2010-04-15 Thread Flávio Etrusco
On Thu, Apr 15, 2010 at 2:51 PM, Bruce Bauman
bruce.bau...@andesaservices.com wrote:
 I am porting a large amount of existing Pascal code (MetaWare) to Free
 Pascal. Unfortunately, this code makes extensive use of nested
 procedures, and the nested procedures often reference variables in the
 enclosing scope.

 I know that I can't pass the nested routine by address to another
 procedure; I get errors like the following:

 intjob4_intday.pas(400,47) Error: Incompatible type for arg no. 3: Got
 address of local procedure(StdStr04);Register, expected procedure
 variable type of procedure(StdStr04);Register

 Can I get around this restriction by inlining the procedure which is
 being passed the nested procedure as an argument?

 For example, let's say the A is the enclosing procedure, B is the nested
 procedure, and B is being passed as a parameter to C.

 Procedure A;
    Procedure B;

 Begin
    C(@B);
 End;

 Can I inline procedure C? Will this work? (My initial test with fpc
 2.4.0 suggests it doesn't work).

 -- Bruce

I don't think this will work, but why didn't you try it? It would be
very nice if the nested procedures which don't access outside vars
were allowed to be used as non-local procedure...

Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Poss FPC Bug.

2010-04-05 Thread Flávio Etrusco
On Mon, Apr 5, 2010 at 8:29 PM, Justin Smyth
delph...@smythconsulting.net wrote:
 guys i've been working on a port of an application that uses the Com
 IPersist Interface , one of its procedures seems to be wrong ,


 Function GetClassId(clsid:TClsId):HResult; StdCall;

 yet i believe it should be

 Function GetClassId(out clsid:TClsId):HResult; StdCall

 i've checked the MSDN and it says it should be returning a value -

 its defined in C++ as

 HRESULT GetClassID([out]  CLSID *pClassID);

 pClassID [out]

 A pointer to the location that receives the CLSID on return. The CLSID is a
 globally unique identifier (GUID) that uniquely represents an object class
 that defines the code that can manipulate the object's data.

 Delphian

 Ps if i change this in the code , its the FPC that needs to be re complied ?


I've fallen victim of the same 'trap' on a similar function. Arrays
are passed by reference automatically in 'stdcall' calling
convention.

Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] More memory leaks and other problems: request for review of probably stupid mistake

2010-03-31 Thread Flávio Etrusco

 If you still want to use records, before the Dispose(APResultRecord)
 set the ansistring fields to '', this will garantee that the reference
 is freed.


Or call Finalize() on them.

Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] var parameters under 64-bit GDB?

2010-03-25 Thread Flávio Etrusco
On Thu, Mar 25, 2010 at 9:41 AM, Graeme Geldenhuys
graemeg.li...@gmail.com wrote:
 Hi,

 I'm using FPC 2.4.1 with GDB 6.8 under Ubuntu 8.04.2 LTS on a all 64-bit
 system.


 All var parameters [even of simple types like Integer, Boolean etc.] show
 up as memory addresses instead of their values when debugged. I believe
 this is only an issue if 64-bit systems are used.

 What is the actual issue?  Limitation of FPC's debug information,
 non-Pascal support in GDB, both, other?

 Regards,
  - Graeme -

The same problem exists in 32-bit. Or does it show as untyped address/pointer?

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] modulo of negative dividend

2010-03-13 Thread Flávio Etrusco
2010/3/13 Martín Marqués martin.marq...@gmail.com:
 I'm checking the mod binary operator, and I found out that if the
 dividend is negative, it gives a negative result. AFAIK, mod gives an
 integer between 0 and d-1, where d is the divisor.

 Isn't this the right behavior?

 --
 Martín Marqués

This is the mathematical definition of modulus, but all programming
languages implement the same behavior as the one of FPC.

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] New wiki, ftp and mailing list server planned

2010-03-12 Thread Flávio Etrusco
From the wiki, it's more interesting to pay in Euros, right?
Is the German PayPal only a localized version, or are they separate
corporations and I'd have to create a different account? And is there
a way to use the German site in English? ;)

Best regards,
Flávio

On Fri, Mar 12, 2010 at 7:07 PM, Florian Klaempfl
flor...@freepascal.org wrote:
 As you might have noticed, the server running the wiki (lazarus and
 fpc), the mailing lists (lazarus and fpc) and being ftp master (fpc and
 lazarus snapshots) had some hick ups during the last months due to
 hardware problems so we want to replace it by something more reliable
 because this is one of the two main servers of fpc and lazarus.

 If someone is interested in supporting this effort by a donation, please
 have a look at http://wiki.freepascal.org/How_to_donate_to_Lazarus

 We plan to get a HP ProLiant Server ML110 G5 (like
 http://www.alternate.de/html/solrSearch/toArticle.html?articleId=379777
 sorry about the german link) which is available for 400-500 Eur in
 Germany and add some more memory and another hard disk so it can run RAID-1.
 ___
 fpc-pascal maillist  -  fpc-pas...@lists.freepascal.org
 http://lists.freepascal.org/mailman/listinfo/fpc-pascal

___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] New wiki, ftp and mailing list server planned

2010-03-12 Thread Flávio Etrusco
On Fri, Mar 12, 2010 at 11:06 PM, Felipe Monteiro de Carvalho
felipemonteiro.carva...@gmail.com wrote:
 2010/3/12 Flávio Etrusco flavio.etru...@gmail.com:
 From the wiki, it's more interesting to pay in Euros, right?
 Is the German PayPal only a localized version, or are they separate
 corporations and I'd have to create a different account? And is there
 a way to use the German site in English? ;)

 It is just a localized version. You can use brazilian portuguese
 paypal and send the donation to:

 lazarus_donati...@freepascal.org

Thanks. So simply changing the currency to Euros instead of USD will
incur in the lower fees? (not to mention that the server will be
bought in Germany, right?)

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] floating point an FPC

2010-03-02 Thread Flávio Etrusco
On Mon, Mar 1, 2010 at 6:32 PM, ik ido...@gmail.com wrote:

 http://ik.homelinux.org/


 On Mon, Mar 1, 2010 at 23:20, Jerry lancebo...@qwest.net wrote:

 Don't compare floating points. Ever. Now you see why.

 So if I need for example to compare currency or something that is floating
 point, how do I do that ?


Let me my 2cent obvious comments too:

1) Just in case you don't know, Curreny is ok in the sense that it's
exact - ok, FP is exact in it's own way ;) -, but keep in mind that
its precision is just 4 decimal places, so you must be aware of
precision loss too.

2) You can determine what is close enough for your comparison and
use Abs(A - B)  MarginOfError (and of course variants of that code).
I vaguely remember some performance problem with Abs (in Delphi or in
general? does FP have a signal bit?), so let someone expert chime in
to say whether you should Abs or two comparisons intead ;-)

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] String buffer

2010-02-09 Thread Flávio Etrusco
On Tue, Feb 9, 2010 at 8:50 AM, Honza befelemepesev...@gmail.com wrote:
 Probably just reinventing the wheel - I was not able to quickly find a
 String builder/buffer elsewhere.

 Source code for anyone possible interested is published on a blog (no
 ads there, so I hope it's OK to post the link):

 http://freepascal-bits.blogspot.com/2010/02/simple-string-buffer.html

 -bflm

Hello,
I guess ads wouldn't be a problem anyway ;-)
I find a class like this very useful (for some tasks), thanks! This
has been suggested on the list a couple of times and I even intended
to implement something but didn't have the need since.
Some (hopefully constructive) commentaries (and then I would suggest
to add to LCL or FCL):
1) It could be called really TStringBuffer;
2) The 'W' methods could be called 'Append';
3) The GetS method could truncate the string to avoid the copy, as I
think the common use will not be Append+Read+Append+Read, but
Append+Append+...+Read...

Best regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] String types in a wider perspective

2009-12-02 Thread Flávio Etrusco
On Tue, Dec 1, 2009 at 2:28 PM, Jonas Maebe jonas.ma...@elis.ugent.be wrote:

 On 01 Dec 2009, at 18:03, Luca Olivetti wrote:

 I always protect multithreaded sting access with a critical section.
 Do you mean it is not needed?

 The reference counting of ansistrings/... is thread safe. Accessing the 
 characters etc
 still requires explicit synchronization if at least one writer is involved.


(I guess Jonas intended to avoid a complicate answer, but let me
complicate it for you ;-)

... and the AnsiString has refcount = 1. If you access the string
through a by-value parameter or assign it to a temporary variable,
you're safe too. (unless, of course, some screwed code change the
contents of the string in-place  - e.g. with a typecast to pchar or
some other pointer)

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] private integer is an illegal counter variable

2009-11-30 Thread Flávio Etrusco
On Sat, Nov 28, 2009 at 7:12 AM, Jürgen Hestermann
juergen.hesterm...@gmx.de wrote:
 And there are many reasons why there are so many string types nowadays.

 True.

 Simply use {mode objfpc}{$h+} like lazarus suggests.

 I think the root cause of all these problems are generic types. They cause
 more trouble than they avoid. I would suggest that noone never uses such
 generic types but uses shortstring or ansistring (or...) as they need.
 Telling people to simply use this or that compiler switch is not the
 solution (you have to explain this over and over again). Generic types
 should be the exception and not the norm. It begs for trouble in many
 situations. Using strict types also lets the user read more about the nature
 of these types and therefore knows more about possible side effects. Someone
 who has shortstings in mind when using strings would surely use it in a
 different way as someone who has ansistrings in mind (provided he knows how
 they are handled by the compiler). And telling people clearly about the
 implementation of these different types is much better than obscuring them
 by generic types.


Maybe FPC could have a directive to disable/undeclare the 'string'
type/keyword ;-)

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] readonly variables

2009-11-30 Thread Flávio Etrusco
On Sun, Nov 29, 2009 at 1:11 PM, Jonas Maebe jonas.ma...@elis.ugent.be wrote:

 On 29 Nov 2009, at 16:51, Anthony Walter wrote:

 Having said all that, Jonas, what is the actual implemented behaviour
 of FPC? Does it 0 initialize heap memory at startup or not?

 I guess you mean global data rather than heap (heap is what is handled by 
 getmem/freemem/..., and there are no guarantees regarding that memory).

 FPC currently initialises the global data to 0 on platforms that do not do 
 this by themselves. When it turns global variables into register variables, 
 it will also initialise such registers with 0.

 If not,
 what is the justification for not doing so when this has been a long
 established behaviour of Delphi?

 A justification could be that it causes code bloat in case of register 
 variables, and that platforms which do not zero global data memory by 
 themselves are usually embedded devices where every operation counts (both in 
 terms of code size and in terms of energy usage).


 Jonas___


FWIW, IIRC the last time this issue (global variables initialization)
came up some FPC developer explained this was a platform specific
behavior and shouldn't be counted on, so I thought MvC was right in
this thread up to now...

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] How to solve variable does not seem to be initialized compiler hint.

2009-11-19 Thread Flávio Etrusco
On Thu, Nov 19, 2009 at 4:18 AM, Jonas Maebe jonas.ma...@elis.ugent.be wrote:

 On 19 Nov 2009, at 07:35, Graeme Geldenhuys wrote:

 Somebody did once attempt to correct the var parameter to out parameter
 in FillChar, but got to many errors. Probably not a high priority issue,
 so the problem was simply swept under the rug.

 It's not about it not being a high priority problem, it's about it being
 fundamentally unfixable (except by using a completely different kind of
 declaration, such as a pointer). Again, see the thread on this topic on
 fpc-devel:
 http://lists.freepascal.org/lists/fpc-devel/2009-November/018532.html


 Jonas

Out of curiosity, does anybody know how Delphi solves this? I don't
remember seeing a warning (having to initialize variables) on FillChar
in Delphi...

Best regards,
Flávio

PS. And of course, please disregard my previous comment on this thread ;-)
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: Re[2]: [fpc-pascal] How to solve variable does not seem to be initialized compiler hint.

2009-11-18 Thread Flávio Etrusco
On Tue, Nov 17, 2009 at 7:19 PM, JoshyFun joshy...@gmail.com wrote:
 Hello FPC-Pascal,

 Tuesday, November 17, 2009, 8:47:03 PM, you wrote:

 c Can the Fill... functions be changed to have the first parameter out
 c instead of var ? Surely they don't use it as an input parameter.

 Write your own fillchar like function and inline it, something like:

 procedure MyFillChar(out x; count: SizeInt; Value: char); inline;
 begin
 {$PUSH}
 {$HINTS OFF}
  FillChar(x,count,Value);
 {$POP}
 end;

 --
 Best regards,
  JoshyFun

Shouldn't this code too raise a warning?

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


[fpc-pascal] Ubuntu PPA for fpc 2.4rc1?

2009-11-12 Thread Flávio Etrusco
Hello,

will somebody please create an Ubuntu PPA for newer releases of fpc? ;-)
I guess this would be trivial to the maintainer of fpc packages in
Ubuntu, but if it's not the case/they don't want to, is it ok if do
(try)?

Regards,
Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Compiler Warning: Constructor should be public

2009-11-10 Thread Flávio Etrusco
On Tue, Nov 10, 2009 at 10:56 AM, Graeme Geldenhuys
gra...@mastermaths.co.za wrote:
 Anthony Walter wrote:

 In my opinion the warning should be removed, or at least able to be
 suppress through a switch. I beginning to make the transition to cross

 The compiler is 100% and I think it should actually raise an Error
 instead of a Warning.

 Your code is flawed. Object Pascal is quite clear regarding visibility
 rules. TObject has a Public constructor. You can only raise the
 visibility from there, not reduce visibility.

(...)

  raise EAssertError.Create;

 is perfectly legal, and will by-pass whatever you intended in your
 CreateFromLine() constructor.


Graeme, I guess the OP didn't want to reintroduce the 'Create'
constructor with lower visibility, just implement a second constructor
with private visiblity.
It can be useful when implementing singletons and factories to avoid
some types of misuse by an unattentive coworker...
IIRC the last time this issue was raised you were on the side for
removing the warning - my opinion too ;-)

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


Re: [fpc-pascal] Gecko / Firefox / XPCOM

2009-05-24 Thread Flávio Etrusco
On Sun, May 24, 2009 at 9:30 AM, Jonas Maebe jonas.ma...@elis.ugent.be wrote:

 On 21 May 2009, at 22:34, Henrik Genssen wrote:

 nsMemory.pas(157,17) Error: Incompatible types: got Realloc(Pointer,
 LongInt):^untyped expected procedure variable type of function(var
 Pointer, LongInt):^untyped;Register

 As the error message says: the compiler expects the first parameter of
 realloc to be a var parameter, while the declaration of realloc apparently
 uses a value parameter.


 Jonas


Oops. I guess I assumed the code was the other way around: that the
gecko runtime accepted an application-provided mem-allocation
routines, and barely read the message :-$
BTW, regarding the remaining Warnings from the OP: is there any
optional member in TMemoryManager or do all of them need to be setup?

-Flávio
___
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal


  1   2   >