Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus / 2011-02

Identifier not found, but code completion works....

57 messages · 12 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Bo Berglund

I am testing an old Delphi communications component with lazarus. I don't want to install it as a component but instead create it in code. So I have started a new project and added the path to the Serial unit to the project options (Other Unit files).
I also included it in the uses clause.

In my form I have put code to create it and set its properties like this:

procedure TForm1.FormCreate(Sender: TObject);
begin
  serComm := TSerial.Create(NIL);
end;
procedure TForm1.btnOpenClick(Sender: TObject);
begin
  serComm.Baudrate := 38400;
  serComm.DataBits := d8bit;
  serComm.StopBits := st1bit;
  serComm.FlowMode := fcNone;
  serComm.Port := 1;
  serComm.Active := true;
end;

When I did this lazarus showed me hints on what I could select when I added the period after the serComm name, so I know that it is known by lazarus.
But when I try to run the program lazarus shows an error:

unit1.pas(22,21) Error: Identifier not found "TSerial"

But TSerial is the class name for the component and it is found by lazarus when I write the code, so why in heavens name does it not find it when compiling???????

Bo Berglund

Reply by email

Thomas Gatliff
to Bo Berglund

First, one thing I can say about the fpc is that it is a pretty solid piece of code. Yes, it does have some different quirks with delphi (overloading for example), but in over 1,000,000 lines of code I have personally compiled I have not (recently) found even one instance where it was a bug related to the fpc. Meaning, I always start off by questioning what I did wrong first before blaming the compiler. That is just me, though... Now on to your question...

It sounds like it fpc parser does not like your class file name for some reason. This is just a guess, however without looking at an strace output. Try several things... First, remove the file and see if it complains. If that does not work, baby step it by creating a new file with a different class name... If you still cannot figure it out, then send the files to and I will see what happened.

Bo Berglund wrote 45 lines
I am testing an old Delphi communications component with lazarus. I don't want to install it as a component but instead create it in code. So I have started a new project and added the path to the Serial unit to the project options (Other Unit files). I also included it in the uses clause. In my form I have put code to create it and set its properties like this: procedure TForm1.FormCreate(Sender: TObject); begin serComm := TSerial.Create(NIL); end; procedure TForm1.btnOpenClick(Sender: TObject); begin serComm.Baudrate := 38400; serComm.DataBits := d8bit; serComm.StopBits := st1bit; serComm.FlowMode := fcNone; serComm.Port := 1; serComm.Active := true; end; When I did this lazarus showed me hints on what I could select when I added the period after the serComm name, so I know that it is known by lazarus. But when I try to run the program lazarus shows an error: unit1.pas(22,21) Error: Identifier not found "TSerial" But TSerial is the class name for the component and it is found by lazarus when I write the code, so why in heavens name does it not find it when compiling??????? Bo Berglund -- _______________________________________________ Lazarus mailing list http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus/attachments/20110210/3c42e23f/attachment-0001.html>

Reply by email

Graeme Geldenhuys
to Bo Berglund: I am testing an old Delphi communications component with lazarus. I don't want to install…

Op 2011-02-11 00:41, Bo Berglund het geskryf:

But TSerial is the class name for the component and it is found by lazarus when I write the code, so why in heavens name does it not find it when compiling???????

As far as I know Lazarus uses CodeTools for code navigation - that is different to the information used by the compiler (FPC) to compile your project.

Select "Project -> Project Options -> Show Options" and have a look an see if the path is indeed supplied and or correct, so FPC can find the unit TSerial component resides in.

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/

Reply by email

Mattias Gaertner
to Bo Berglund: I am testing an old Delphi communications component with lazarus. I don't want to install…
Show quoted text 16 lines
I am testing an old Delphi communications component with lazarus. I don't want to install it as a component but instead create it in code. So I have started a new project and added the path to the Serial unit to the project options (Other Unit files). I also included it in the uses clause. [...] When I did this lazarus showed me hints on what I could select when I added the period after the serComm name, so I know that it is known by lazarus. But when I try to run the program lazarus shows an error: unit1.pas(22,21) Error: Identifier not found "TSerial" But TSerial is the class name for the component and it is found by lazarus when I write the code, so why in heavens name does it not find it when compiling???????

Do you have units with upper case letters in the file name? Maybe you have two units with the same name.
Go to your uses section, where Serial is uses. Place source editor cursor at the end of the used unit name and use Ctrl+Space to fix the case.

Mattias

Reply by email

Mattias Gaertner
to Mattias Gaertner
Show quoted text 25 lines
On Thu, 10 Feb 2011 23:41:27 +0100 Bo Berglund wrote: > I am testing an old Delphi communications component with lazarus. I > don't want to install it as a component but instead create it in code. > So I have started a new project and added the path to the Serial unit > to the project options (Other Unit files). > I also included it in the uses clause. >[...] > When I did this lazarus showed me hints on what I could select when I > added the period after the serComm name, so I know that it is known by > lazarus. > But when I try to run the program lazarus shows an error: > > unit1.pas(22,21) Error: Identifier not found "TSerial" > > But TSerial is the class name for the component and it is found by > lazarus when I write the code, so why in heavens name does it not find > it when compiling??????? Do you have units with upper case letters in the file name? Maybe you have two units with the same name. Go to your uses section, where Serial is uses. Place source editor cursor at the end of the used unit name and use Ctrl+Space to fix the case.

I just got the same error.
The cause was a cross unit reference. Implementation uses sections are evil. It's near impossible to create simple bug reports for such compiler bugs.

Mattias

Reply by email

Bo Berglund
to Graeme Geldenhuys: Op 2011-02-11 00:41, Bo Berglund het geskryf: As far as I know Lazarus uses CodeTools for…
Graeme Geldenhuys wrote 14 lines
Op 2011-02-11 00:41, Bo Berglund het geskryf: > But TSerial is the class name for the component and it is found by > lazarus when I write the code, so why in heavens name does it not find > it when compiling??????? As far as I know Lazarus uses CodeTools for code navigation - that is different to the information used by the compiler (FPC) to compile your project. Select "Project -> Project Options -> Show Options" and have a look an see if the path is indeed supplied and or correct, so FPC can find the unit TSerial component resides in.

Thanks, but this is my options:

-MObjFPC -Scghi -O1 -gl -WG -vewnhi -l -Filib\i386-win32 -FuC:\Engineering\Projects\Lazarus\cmp\Serial
-FuC:\Programs\lazarus_0_9_30_fixes\lcl\units\i386-win32 -FuC:\Programs\lazarus_0_9_30_fixes\lcl\units\i386-win32\win32 -FuC:\Programs\lazarus_0_9_30_fixes\packager\units\i386-win32 -Fu. -FUlib\i386-win32\ -oproject1.exe -dLCL -dLCLwin32

Notice the second line....
That is where the Serial.pas file resides and where it is picked up by the IDE.

Now I tried to enter the path to this dir in the project options for "Other sources" instead, but the compile error is exactly the same. The file is named Serial.pas and it contains amongst others this:

unit Serial;
...
interface

uses
SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,

  Forms, Dialogs,Windows;

type
...
{ TSerial main class }

  TSerial = class(TComponent)
  private

etc

Do I need to add some kind of switch telling FPC that this file originated in Delphi? I seem to recall that there is such a marker, but I don't know what it looks like.

Bo Berglund

Reply by email

Bo Berglund
to Mattias Gaertner: On Thu, 10 Feb 2011 23:41:27 +0100 Do you have units with upper case letters in the file…
Mattias Gaertner wrote 13 lines
On Thu, 10 Feb 2011 23:41:27 +0100 Bo Berglund wrote: > But TSerial is the class name for the component and it is found by > lazarus when I write the code, so why in heavens name does it not find > it when compiling??????? Do you have units with upper case letters in the file name? Maybe you have two units with the same name. Go to your uses section, where Serial is uses. Place source editor cursor at the end of the used unit name and use Ctrl+Space to fix the case.

Ther unit file is Serial.pas
There is no other file named like this in any case style.

What I did was to go to the uses clause put the cursor on the word Serial and use the pop-up menu command "Open file at cursor", which brought the file into the editor...
Ctrl-Space does nothing other than pop up a window with three names, the top being Serial.

Bo Berglund

Reply by email

Mattias Gaertner
to Bo Berglund
Show quoted text 19 lines
On Fri, 11 Feb 2011 09:20:25 +0100, Mattias Gaertner wrote: >On Thu, 10 Feb 2011 23:41:27 +0100 >Bo Berglund wrote: > >> But TSerial is the class name for the component and it is found by >> lazarus when I write the code, so why in heavens name does it not find >> it when compiling??????? > >Do you have units with upper case letters in the file name? >Maybe you have two units with the same name. >Go to your uses section, where Serial is uses. Place source editor >cursor at the end of the used unit name and use Ctrl+Space to fix the >case. > Ther unit file is Serial.pas There is no other file named like this in any case style.

Maybe
fpc/rtl/unix/serial.pp

Show quoted text 5 lines
What I did was to go to the uses clause put the cursor on the word Serial and use the pop-up menu command "Open file at cursor", which brought the file into the editor... Ctrl-Space does nothing other than pop up a window with three names, the top being Serial.

I get only one. The one from fpc.

Compile with -vt and see if fpc loads the right unit. If yes, check for implementation uses sections. Maybe you have the fpc bug I wrote in the other mail.

Mattias

Reply by email

Bo Berglund
to Bo Berglund: I am testing an old Delphi communications component with lazarus. I don't want to install…
Bo Berglund wrote
unit1.pas(22,21) Error: Identifier not found "TSerial"

I finally managed to get my file recognized by *both* lazarus and fpc. This is how:

1) In project inspector I *added* the Serial.pas file to the project.

2) In the Serial.pas file I added the following conditionals:
At the top of the file:
{$ifdef fpc}
  {$mode delphi}
{$endif}

further down I had to remove two uses files:
uses
SysUtils,

  {$ifndef fpc}
  WinTypes,
  WinProcs,
  {$endif}

Now the test project compiles all right, but unfortunately it does not work and I don't know if this is caused by:
- My PC has only one real serial port (in the docking station) so all others are via USB adapters.
- Some confusion caused by VMWare in my virtual machine when mapping com ports.
- My own shortcomings in using lazarus/fpc

I even copied the test program exe file over to my host and tried to communicate via the serial ports to a Hyperterminal running on the host using a null-modem cable between the real com port and one of the USB ones. No go....
So this test with my old and proven Delphi serial component seems not to work out, and it would not have sufficed anyways because I need cross-platform compilation.

In any case right now I have only one working configuration for the real project I am working on:
- Development in the virtual machine (no lazarus/FPC on the physical laptop)
- Program uses COM1 in the virtual machine
- VMWare maps virtual machine COM1 to host COM1 (the real port)
- The other end of the connection is a simulator I am always using when developing stuff and it connects to one of the USB ports (the ATEN one is the only one working).

Seems to be a real bugger to get serial ports working properly and I cannot rule out my laptop itself either. I got it in December and it has Win7x64 whereas I always used WinXP-Pro for the last 8-9 years or so. Maybe the Windows drivers are not up to speed? The SUNIX device uses the Prolific serial converter chip and driver. I think that basically it is a 4-way USB hub followed by 4 individual Prolific RS232 converters in one box.

Has anyone here successfully used SdpoSerial in lazarus on Win7x64 towards a SUNIX ComHub 4-channel adapter???

Bo Berglund

Reply by email

Graeme Geldenhuys
to Bo Berglund: On Fri, 11 Feb 2011 08:39:18 +0200, Graeme Geldenhuys Thanks, but this is my options:…

Op 2011-02-11 19:29, Bo Berglund het geskryf:

Notice the second line.... That is where the Serial.pas file resides and where it is picked up by the IDE.

Umm, then I have no clue, sorry.

unit Serial;
  {$IFDEF FPC}
    {$mode delphi}{$H+}
  {$ENDIF}
Show quoted text 17 lines
interface uses SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls, Forms, Dialogs,Windows; type ... { TSerial main class } TSerial = class(TComponent) private etc Do I need to add some kind of switch telling FPC that this file originated in Delphi?

Normally you would add the code shown above (below the 'unit' line).

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/

Reply by email

Bo Berglund
to Mattias Gaertner: On Fri, 11 Feb 2011 09:20:25 +0100 I just got the same error. The cause was a cross unit…
Mattias Gaertner wrote 34 lines
On Fri, 11 Feb 2011 09:20:25 +0100 Mattias Gaertner wrote: > On Thu, 10 Feb 2011 23:41:27 +0100 > Bo Berglund wrote: > > > I am testing an old Delphi communications component with lazarus. I > > don't want to install it as a component but instead create it in code. > > So I have started a new project and added the path to the Serial unit > > to the project options (Other Unit files). > > I also included it in the uses clause. > >[...] > > When I did this lazarus showed me hints on what I could select when I > > added the period after the serComm name, so I know that it is known by > > lazarus. > > But when I try to run the program lazarus shows an error: > > > > unit1.pas(22,21) Error: Identifier not found "TSerial" > > > > But TSerial is the class name for the component and it is found by > > lazarus when I write the code, so why in heavens name does it not find > > it when compiling??????? > > Do you have units with upper case letters in the file name? > Maybe you have two units with the same name. > Go to your uses section, where Serial is uses. Place source editor > cursor at the end of the used unit name and use Ctrl+Space to fix the > case. I just got the same error. The cause was a cross unit reference. Implementation uses sections are evil. It's near impossible to create simple bug reports for such compiler bugs.

Could you expand on this?

I am used to my Delphi practice of putting uses references as far down the ladder as possible.
This means that if something is not needed in the interface section I routinely put it into the implementation uses.

Is this bad practice with FPC/Lazarus?

Bo Berglund Developer in Sweden

Reply by email

Mattias Gaertner
to Bo Berglund
Show quoted text 10 lines
[...] >> >[...] >> > When I did this lazarus showed me hints on what I could select when I >> > added the period after the serComm name, so I know that it is known by >> > lazarus. >> > But when I try to run the program lazarus shows an error: >> > >> > unit1.pas(22,21) Error: Identifier not found "TSerial" > >I just got the same error.

... with another unit and identifier.

Show quoted text 12 lines
>The cause was a cross unit reference. Implementation uses sections are >evil. It's near impossible to create simple bug reports for such >compiler bugs. > Could you expand on this? I am used to my Delphi practice of putting uses references as far down the ladder as possible. This means that if something is not needed in the interface section I routinely put it into the implementation uses. Is this bad practice with FPC/Lazarus?

The general idea is a good one, because this could help to avoid unneeded/accidental dependencies in the interface. OTOH I never got that case in reality, so I wonder if this really helps someone.
For the program size or unit dependencies it does not matter if the unit is used in the implementation or the interface. The implementation uses section has some disadvantages:
1. It can redefine types. For example using the Windows unit redefines TRect.
2. You can create "circular" dependencies without noticing. 2.1 Circular dependencies make it hard to tell the order of initialization sections.
2.2 Combined with some optimization features the compiler has to recompile some units multiple times. Since I know FPC this process had bugs, resulting in strange errors. The FPC team did a great job to fix all they could reproduce. The problem is that the remaining bugs happen only in big programs and it is near impossible to create a small example, so these bugs are not reported and therefore not fixed.
2.3 Circular dependencies make refactoring a lot harder.
3. The uses section is split, reducing readability.

Conclusion: I don't see any real advantage but I see some disadvantages, so I recommend to avoid the implementation uses section whenever possible.

Mattias

Reply by email

Hans-Peter Diettrich
to Bo Berglund: On Fri, 11 Feb 2011 15:30:48 +0100, Mattias Gaertner Could you expand on this? I am used…
Show quoted text 5 lines
> The cause was a cross unit reference. Implementation uses sections are > evil. It's near impossible to create simple bug reports for such > compiler bugs. > Could you expand on this?

IMO this applies to bugreports (only). The unit order in uses clauses is always important, regardless of one or two such clauses.

Show quoted text 6 lines
I am used to my Delphi practice of putting uses references as far down the ladder as possible. This means that if something is not needed in the interface section I routinely put it into the implementation uses. Is this bad practice with FPC/Lazarus?

FPC can have some problems with macros, inlines and other constructs, that may require a recompilation of units. But apart from that (acceptable) issue I don't see real obstacles right now.

DoDi

Reply by email

Alexander Klenin
to Mattias Gaertner: On Sat, 19 Feb 2011 15:11:13 +0100 ... with another unit and identifier. The general idea…
Mattias Gaertner wrote
1. It can redefine types. For example using the Windows unit redefines TRect.

On a half-related note, I think FPC would strongly benefit from Python-like "limited import" feature.
Quote from http://docs.python.org/tutorial/modules.html#more-on-modules : "Note that in general the practice of importing * from a module or package is frowned upon, since it often causes poorly readable code. "

2. You can create "circular" dependencies without noticing. 2.1 Circular dependencies make it hard to tell the order of initialization sections.

...

2.3 Circular dependencies make refactoring a lot harder.

I still believe that a simple warning from FPC would go a long way to fixing this problem.

3. The uses section is split, reducing readability.

I personally find the opposite -- if properly maintained, the separate "uses" lists are giving reader additional information about unit dependencies and at the same time reduce the amount of dependencies one must scan in order to understand only the unit interface (i. e. to use, not develop, a unit).

Alexander S. Klenin

Reply by email

Rich Saunders
to Alexander Klenin
Alexander Klenin wrote 6 lines
3. The uses section is split, reducing readability. I personally find the opposite -- if properly maintained, the separate "uses" lists are giving reader additional information about unit dependencies and at the same time reduce the amount of dependencies one must scan in order to understand only the unit interface (i. e. to use, not develop, a unit)

I also find the opposite.

Using a unit in a uses clause defines the scope of the usage. I think the overriding principle should be to limit the scope to only the code that requires it. Using a unit in the implementation section adds valuable info to the reader that the used unit is NOT needed to define the current unit's interface.

Reply by email

Mattias Gaertner
to Rich Saunders
Show quoted text 14 lines
On 2/19/11 10:27 AM, Alexander Klenin wrote: > 3. The uses section is split, reducing readability. > I personally find the opposite -- if properly maintained, > the separate "uses" lists are giving reader additional information > about unit dependencies and at the same time reduce the amount > of dependencies one must scan in order to understand only > the unit interface (i. e. to use, not develop, a unit) I also find the opposite. Using a unit in a uses clause defines the scope of the usage. I think the overriding principle should be to limit the scope to only the code that requires it. Using a unit in the implementation section adds valuable info to the reader that the used unit is NOT needed to define the current unit's interface.

Readability is mostly up to what you are used to. That's why I listed it as advantage and disadvantage.
The implementation uses section does not make the code more readable for everyone. IMHO comments are better suited for that.

It is not the first time that people added implementation uses sections to the Lazarus code, creating circular dependencies, which lead weeks/months later to strange errors. And since I'm often the one who has to fix it I call the implementation uses sections "evil" and I hope that people will use them only when needed and not only for "readability".

Mattias

Reply by email

Hans-Peter Diettrich
to Mattias Gaertner
The implementation uses section does not make the code more readable for everyone.

It makes the *interface* section more readable.

IMHO comments are better suited for that.

Did you ever see a uses clause, separated by comments into units required by the interface and the implementation?

That would be useless because nobody can verify that distinction, without actually moving the units into the implementation uses and compile again.

DoDi

Reply by email

Mattias Gaertner
to Hans-Peter Diettrich
Show quoted text 6 lines
Mattias Gaertner schrieb: > The implementation uses section does not make the code more readable > for everyone. It makes the *interface* section more readable.

Not for everyone.
Some people read the uses sections only to find out what is needed to compile the unit.

> IMHO comments are better suited for that. Did you ever see a uses clause, separated by comments into units required by the interface and the implementation?

No.
Apparently those who care separate them and those who don't care, see no reason to mention it.

That would be useless because nobody can verify that distinction, without actually moving the units into the implementation uses and compile again.

What about class private members? You don't need them to understand the interface, but you might need some extra units for them.

Apparently I'm too stupid to understand the gain of the readability of uses section separation, but I know the trouble with FPC.

Mattias

Reply by email

Graeme Geldenhuys
to Bo Berglund: On Fri, 11 Feb 2011 15:30:48 +0100, Mattias Gaertner Could you expand on this? I am used…

Op 2011-02-19 16:11, Bo Berglund het geskryf:

Is this bad practice with FPC/Lazarus?

I don't think so. At least in my FPC-base programs I have always preferred putting things first in the implementation uses clause before the interface uses clause. As the old design statement goes.... On make things public when really needed.

Contrary to Mattias statement - this reduces circular unit references in my case/applications. I could never understand how Mattias thinks otherwise.

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/

Reply by email

Graeme Geldenhuys
to Mattias Gaertner: On Sat, 19 Feb 2011 15:11:13 +0100 ... with another unit and identifier. The general idea…

Op 2011-02-19 17:03, Mattias Gaertner het geskryf:

3. The uses section is split, reducing readability.

I've never found that an issue, or ever heard any programmer complain about that - so it's probably your own preference. After all, the whole unit is split in two section. ;-)

disadvantages, so I recommend to avoid the implementation uses section whenever possible.

This makes no sense - yet again. I have only ever seen this statement being used in the Lazarus IDE project - nowhere else. In my experience (just like in Delphi) it reduces circular unit dependencies if you use the implementation section as much as possible, before the interface uses section.

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/

Reply by email

Graeme Geldenhuys
to Mattias Gaertner: On Sat, 19 Feb 2011 11:07:42 -0500 Readability is mostly up to what you are used to.…

Op 2011-02-19 18:47, Mattias Gaertner het geskryf:

It is not the first time that people added implementation uses sections to the Lazarus code, creating circular dependencies, which lead weeks/months later to strange errors.

I have yet to see such an example - and least this has never happened in my years of working with Object Pascal, Delphi, FPC. Lazarus IDE is the only project I have ever heard of such problems so....

1) There is something really strange about the Lazarus IDE code

2) If you think the implementation section causes circular unit reference issues, then it is contrary to how Delphi explains the object pascal language - thus there is a bug in FPC, because Delphi does not work like that. Please report such a issue with an example to the FPC team please. I would be very interested in such an example too.

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/

Reply by email

Martin Schreiber
to Graeme Geldenhuys
Graeme Geldenhuys wrote 17 lines
Op 2011-02-19 18:47, Mattias Gaertner het geskryf: > It is not the first time that people added implementation uses sections > to the Lazarus code, creating circular dependencies, which lead > weeks/months later to strange errors. I have yet to see such an example - and least this has never happened in my years of working with Object Pascal, Delphi, FPC. Lazarus IDE is the only project I have ever heard of such problems so.... 1) There is something really strange about the Lazarus IDE code 2) If you think the implementation section causes circular unit reference issues, then it is contrary to how Delphi explains the object pascal language - thus there is a bug in FPC, because Delphi does not work like that. Please report such a issue with an example to the FPC team please. I would be very interested in such an example too.

The problem is that FPC often crashes while compiling a project with complex implementation uses relations. Compiling with -B normally fixes the issues. A testcase must contain the whole project with the existing ppu's.

Martin

Reply by email

Graeme Geldenhuys
to Martin Schreiber

Op 2011-02-21 09:12, Martin Schreiber het geskryf:

The problem is that FPC often crashes while compiling a project with complex implementation uses relations. Compiling with -B normally fixes the issues. A testcase must contain the whole project with the existing ppu's.

That again tells be that it is NOT a language issue (interface vs implementation uses clause), but rather a FPC bug.. FPC failing to managing uses clauses relationships, or problems detected changed units with existing ppu's etc...

So telling people to change the programming language or programming style, just because of a FPC bug doesn't bode well. Rather fix the cause of the problem.

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/

Reply by email

Bo Berglund
to Graeme Geldenhuys: Op 2011-02-19 16:11, Bo Berglund het geskryf: I don't think so. At least in my FPC-base…
Graeme Geldenhuys wrote 13 lines
Op 2011-02-19 16:11, Bo Berglund het geskryf: > > Is this bad practice with FPC/Lazarus? I don't think so. At least in my FPC-base programs I have always preferred putting things first in the implementation uses clause before the interface uses clause. As the old design statement goes.... On make things public when really needed. Contrary to Mattias statement - this reduces circular unit references in my case/applications. I could never understand how Mattias thinks otherwise.

In my past Delphi experience I was hit by circular references when placing my own units in the interface uses so I moved them to the implementation uses.
Ever since then I have refrained from putting anything into Interface uses that is not explicitly needed by stuff in the interface. Has worked fine in all versions of Delphi that I have used (all from D1-D7 and then BDS2006 too).

Bo Berglund Developer in Sweden

Reply by email

Mattias Gaertner
to Graeme Geldenhuys: Op 2011-02-19 17:03, Mattias Gaertner het geskryf: I've never found that an issue, or…
Show quoted text 16 lines
Op 2011-02-19 17:03, Mattias Gaertner het geskryf: > 3. The uses section is split, reducing readability. I've never found that an issue, or ever heard any programmer complain about that - so it's probably your own preference. After all, the whole unit is split in two section. ;-) > disadvantages, so I recommend to avoid the implementation uses section > whenever possible. This makes no sense - yet again. I have only ever seen this statement being used in the Lazarus IDE project - nowhere else. In my experience (just like in Delphi) it reduces circular unit dependencies if you use the implementation section as much as possible, before the interface uses section.

You can't create circular dependencies with only interface dependencies. Only implementation uses section allow this.

Mattias

Reply by email

Florian Klaempfl
to Graeme Geldenhuys: Op 2011-02-19 17:03, Mattias Gaertner het geskryf: I've never found that an issue, or…
Graeme Geldenhuys wrote
it reduces circular unit dependencies if you use the implementation section as much as possible,

How? Dependency is dependency. The danger of putting units in the implementation uses clause is that somebody creates circular dependencies by accident. This cannot happen when the unit is used in the interface part. This is usually a no brainer for small teams and projects but for bigger projects it might matter.

Reply by email

Graeme Geldenhuys
to Mattias Gaertner: On Mon, 21 Feb 2011 08:43:52 +0200 You can't create circular dependencies with only…

Op 2011-02-21 09:41, Mattias Gaertner het geskryf:

You can't create circular dependencies with only interface dependencies. Only implementation uses section allow this.

Really? See attached project. Took me all of 30 seconds to create such an example for you. Only Interface uses sections are used.

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/ -------------- next part -------------- An embedded and charset-unspecified text was scrubbed... Name: project1.lpr URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus/attachments/20110221/bbd5c654/attachment.ksh> -------------- next part -------------- A non-text attachment was scrubbed... Name: Unit1.pas Type: text/x-pascal Size: 325 bytes Desc: not available URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus/attachments/20110221/bbd5c654/attachment.bin> -------------- next part -------------- A non-text attachment was scrubbed... Name: Unit2.pas Type: text/x-pascal Size: 204 bytes Desc: not available URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus/attachments/20110221/bbd5c654/attachment-0001.bin>

Reply by email

Graeme Geldenhuys
to Graeme Geldenhuys: Op 2011-02-21 09:41, Mattias Gaertner het geskryf: Really? See attached project. Took me…

Op 2011-02-21 09:50, Graeme Geldenhuys het geskryf:

Show quoted text 7 lines
Op 2011-02-21 09:41, Mattias Gaertner het geskryf: > > You can't create circular dependencies with only interface > dependencies. Only implementation uses section allow this. Really? See attached project. Took me all of 30 seconds to create such an example for you. Only Interface uses sections are used.

And just to be clear...by that I mean, to get the "circular unit reference error" in FPC. So simply using Interfaces uses section only doesn't resolve such an issue.

Yes it is a crap example, but I have seen much more complex code where dependencies are required, and the only way to get that code to compile, was to move some units to the implementation section, or use the Interfaces language feature.

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/

Reply by email

Florian Klaempfl
to Graeme Geldenhuys: Op 2011-02-21 09:41, Mattias Gaertner het geskryf: Really? See attached project. Took me…
Graeme Geldenhuys wrote 7 lines
Op 2011-02-21 09:41, Mattias Gaertner het geskryf: > > You can't create circular dependencies with only interface > dependencies. Only implementation uses section allow this. Really? See attached project. Took me all of 30 seconds to create such an example for you. Only Interface uses sections are used.

And? Does it compile?

Reply by email

Florian Klaempfl
to Graeme Geldenhuys: Op 2011-02-21 09:50, Graeme Geldenhuys het geskryf: And just to be clear...by that I…
Graeme Geldenhuys wrote 12 lines
Op 2011-02-21 09:50, Graeme Geldenhuys het geskryf: > Op 2011-02-21 09:41, Mattias Gaertner het geskryf: >> >> You can't create circular dependencies with only interface >> dependencies. Only implementation uses section allow this. > > Really? See attached project. Took me all of 30 seconds to create such > an example for you. Only Interface uses sections are used. And just to be clear...by that I mean, to get the "circular unit reference error" in FPC. So simply using Interfaces uses section only doesn't resolve such an issue.

Of course it does: a similiar project using the units only in the implementation part compiles.

Reply by email

Graeme Geldenhuys
to Bo Berglund: On Mon, 21 Feb 2011 08:39:05 +0200, Graeme Geldenhuys In my past Delphi experience I was…

Op 2011-02-21 09:36, Bo Berglund het geskryf:

Show quoted text 8 lines
In my past Delphi experience I was hit by circular references when placing my own units in the interface uses so I moved them to the implementation uses. Ever since then I have refrained from putting anything into Interface uses that is not explicitly needed by stuff in the interface. Has worked fine in all versions of Delphi that I have used (all from D1-D7 and then BDS2006 too).

That's my exact experience too, using Delphi, Kylix and FPC. And that is the point I was trying to make with my original post, but it seems Mattias thinks otherwise. :)

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/

Reply by email

Mattias Gaertner
to Bo Berglund: On Mon, 21 Feb 2011 08:39:05 +0200, Graeme Geldenhuys In my past Delphi experience I was…
Show quoted text 24 lines
On Mon, 21 Feb 2011 08:39:05 +0200, Graeme Geldenhuys wrote: >Op 2011-02-19 16:11, Bo Berglund het geskryf: >> >> Is this bad practice with FPC/Lazarus? > >I don't think so. At least in my FPC-base programs I have always >preferred putting things first in the implementation uses clause before >the interface uses clause. As the old design statement goes.... On make >things public when really needed. > >Contrary to Mattias statement - this reduces circular unit references in >my case/applications. I could never understand how Mattias thinks otherwise. > > In my past Delphi experience I was hit by circular references when placing my own units in the interface uses so I moved them to the implementation uses. Ever since then I have refrained from putting anything into Interface uses that is not explicitly needed by stuff in the interface. Has worked fine in all versions of Delphi that I have used (all from D1-D7 and then BDS2006 too).

That's what I mean.
Using the interface uses section, the compiler does not allow circular dependencies. Moving it into the implementation section keeps the circle between the units. I don't know if Delphi has no problems with it, but FPC has some problems. They became smaller from year to year, which is why the Lazarus code already uses them at a few places. The problem does not appear immediately. This time it appeared several months after adding a circle.
Breaking the circle also created a cleaner design. IMO cleaner design is pov, just as "readability", which is a signal word for some developers and for some trolls as well.

Mattias

Reply by email

Florian Klaempfl
to Graeme Geldenhuys: Op 2011-02-21 09:55, Florian Klaempfl het geskryf: Read Bo Berglund's message from a few…
Graeme Geldenhuys wrote 6 lines
Op 2011-02-21 09:55, Florian Klaempfl het geskryf: > > And? Does it compile? Read Bo Berglund's message from a few minutes ago... maybe he explains better what I was trying to get at.

Well, he got it wrong :) It is exactly the point of putting units in the interface uses clause: the compiler helps you to avoid circular unit dependencies. When you put them in the implementation clause, you just hide them, they are still here but the compiler does not complain as long as you don't hit its flawed unit loading algorithm.

Reply by email

Martin Schreiber
to Graeme Geldenhuys: Op 2011-02-21 09:36, Bo Berglund het geskryf: That's my exact experience too, using…
Graeme Geldenhuys wrote 13 lines
Op 2011-02-21 09:36, Bo Berglund het geskryf: > In my past Delphi experience I was hit by circular references when > placing my own units in the interface uses so I moved them to the > implementation uses. > Ever since then I have refrained from putting anything into Interface > uses that is not explicitly needed by stuff in the interface. > Has worked fine in all versions of Delphi that I have used (all from > D1-D7 and then BDS2006 too). That's my exact experience too, using Delphi, Kylix and FPC. And that is the point I was trying to make with my original post, but it seems Mattias thinks otherwise. :)

D7 sometimes has problems with uses resolution too. With Delphi -B does not help always, sometimes it is necessary to compile a second time...

Martin

Reply by email

Alexander Klenin
to Florian Klaempfl: Well, he got it wrong :) It is exactly the point of putting units in the interface uses…
Florian Klaempfl wrote 7 lines
Well, he got it wrong :) It is exactly the point of putting units in the interface uses clause: the compiler helps you to avoid circular unit dependencies. When you put them in the implementation clause, you just hide them, they are still here but the compiler does not complain as long as you don't hit its flawed unit loading algorithm.

So, Florian, how about adding a compiler hint or warning for circular dependencies?
Maybe off by default, to avoid compatibility issues? I would definitely use such a hint in all my projects.

Alexander S. Klenin

Reply by email

Florian Klaempfl
to Alexander Klenin
Alexander Klenin wrote 11 lines
On Mon, Feb 21, 2011 at 18:05, Florian Klaempfl wrote: > > Well, he got it wrong :) It is exactly the point of putting units in the > interface uses clause: the compiler helps you to avoid circular unit > dependencies. When you put them in the implementation clause, you just > hide them, they are still here but the compiler does not complain as > long as you don't hit its flawed unit loading algorithm. > So, Florian, how about adding a compiler hint or warning for circular dependencies?

I'am not sure if the compiler somewhere gets this information explicitly. As said, the design of the unit loading is fundamentally flawed.

Reply by email

Sven Barth
to Graeme Geldenhuys: Op 2011-02-19 18:47, Mattias Gaertner het geskryf: I have yet to see such an example -…
Graeme Geldenhuys wrote 8 lines
Op 2011-02-19 18:47, Mattias Gaertner het geskryf: > It is not the first time that people added implementation uses sections > to the Lazarus code, creating circular dependencies, which lead > weeks/months later to strange errors. I have yet to see such an example - and least this has never happened in my years of working with Object Pascal, Delphi, FPC. Lazarus IDE is the only project I have ever heard of such problems so....

In our code at work I'm currently often archieving this with Delphi: Sometimes I change a bit in the implementation section of one of our core components (you don't want to know what a "big thing that does everything" that is... :( ) and when compiling the package Delphi claims that the unit references itself. I have not yet checked whether this is really the case (huge uses clauses... maybe I should use a tool that plots a nice graph of used units ^^), but compiling a second time usually solves this issue.

Regards,
Sven

Reply by email

Hans-Peter Diettrich
to Graeme Geldenhuys: Op 2011-02-19 16:11, Bo Berglund het geskryf: I don't think so. At least in my FPC-base…
Contrary to Mattias statement - this reduces circular unit references in my case/applications. I could never understand how Mattias thinks otherwise.

Mattias obviously separates allowed (effective) circular unit references from disallowed (interface) references. Problems only can arise from allowed references, the disallowed ones just don't compile and need no further considerations.

Sadly it's true that FPC has problems with re-using units, a few weeks ago I still had to patch the compiler for properly retrieving already compiled units, so that loops can be detected and broken up when an already compiled (and cached) unit is used again. But I don't think that it matters whether a unit is re-used in the interface or implementation section, since both cases are handled in the same code.

DoDi

Reply by email

Hans-Peter Diettrich
to Florian Klaempfl: It is a known issue for years that FPC gets rarely into trouble with complex circular…
It is a known issue for years that FPC gets rarely into trouble with complex circular unit dependencies. The problem is the recursive design of the unit loader. However, nobody volounteered yet to fix it :(

Volunteered yes, but not accepted :-(

The main problem I spotted is not the recursive loading, but the retrieval of cached units. A related problem are all the global variables, that are not always updated in sync. This can lead to different "opinions", about compiled ppu modules and their source files, or about recompile reasons and state.

The pragma "FPC is an production compiler" effectively disallows to introduce safe (OO...) methods into the compiler code, so that we'll have to live forever with obscure compiler bugs :-(

DoDi

Reply by email

Hans-Peter Diettrich
to Alexander Klenin: So, Florian, how about adding a compiler hint or warning for circular dependencies? Maybe…
So, Florian, how about adding a compiler hint or warning for circular dependencies?

Circular unit references occur in most real-life code, so that according hints are quite useless. If ever, such a feature should at least allow to suppress warnings about well known and unbreakable loops. But even then the compiler cannot give useful hints, about *where* unwanted loops can be broken up.

The only really useful feature is the detection of unneeded unit references, and this feature already exists: Editor context menu -> Refactoring -> Show unused units.

DoDi

Reply by email

Alexander Klenin
to Hans-Peter Diettrich
Hans-Peter Diettrich wrote 7 lines
Alexander Klenin schrieb: > So, Florian, how about adding a compiler hint or warning for circular > dependencies? Circular unit references occur in most real-life code, so that according hints are quite useless.

So do, e. g. unused paramaters. This is why I proposed a hint, not an error. That said, I really believe that any circular unit dependency is a (design) bug.

If ever, such a feature should at least allow to suppress warnings about well known and unbreakable loops.

Sure. I have even suggested the warning to be disabled by default.

Anyway, it seems that there is no chance of this happening in FPC. Maybe if you at last create your own fork ;-)

Alexander S. Klenin

Reply by email

Graeme Geldenhuys
to Sven Barth: In our code at work I'm currently often archieving this with Delphi: Sometimes I change a…

Op 2011-02-21 22:14, Sven Barth het geskryf:

In our code at work I'm currently often archieving this with Delphi:

So the problem is not only limited to FPC.

plots a nice graph of used units ^^), but compiling a second time usually solves this issue.

Exactly.... and that means the code is valid syntax (otherwise it would never have compiled at all), but the compiler gets confused. The problem sits with the compiler, not the code. This is what I was trying to get across to Mattias and his example of the Lazarus IDE project. No point in recommending all developers changes their style of coding, when the issue is in the compiler - not the language. Rather try and fix the cause of the problem, not the symptom.

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/

Reply by email

Mattias Gaertner
to Graeme Geldenhuys
Show quoted text 17 lines
Op 2011-02-21 22:14, Sven Barth het geskryf: > > In our code at work I'm currently often archieving this with Delphi: So the problem is not only limited to FPC. > plots a nice graph of used units ^^), but compiling a second time > usually solves this issue. Exactly.... and that means the code is valid syntax (otherwise it would never have compiled at all), but the compiler gets confused. The problem sits with the compiler, not the code. This is what I was trying to get across to Mattias and his example of the Lazarus IDE project. No point in recommending all developers changes their style of coding, when the issue is in the compiler - not the language. Rather try and fix the cause of the problem, not the symptom.

In general you are right.
But I'm afraid, it is not that simple in this case. I know it is hopeless to tell you, but the bug is known, is hard to reproduce and as Florian wrote it is a design flaw, so fixing is very hard and there are other priorities. And even if it is fixed the fix won't be in the released compiler.
And in the last appearance of the bug the circular unit dependency was IMHO bad design and is now better solved by a hook. Showing some help should not require direct access to the help editor. In my experience circular dependencies are often bad design. In fact the only good reason for them I know is compatibility.

Mattias

Reply by email

Marco van de Voort
to Mattias Gaertner: On Mon, 21 Feb 2011 08:36:15 +0100 That's what I mean. Using the interface uses section,…
Mattias Gaertner wrote 5 lines
That's what I mean. Using the interface uses section, the compiler does not allow circular dependencies. Moving it into the implementation section keeps the circle between the units. I don't know if Delphi has no problems with it, but FPC has some problems.

I do know that Delphi doesn't inline functions between (any) mutually dependant units.

Reply by email

Florian Klaempfl
to Graeme Geldenhuys: Op 2011-02-21 22:14, Sven Barth het geskryf: So the problem is not only limited to FPC.…
Graeme Geldenhuys wrote
No point in recommending all developers changes their style of coding, when the issue is in the compiler - not the language. Rather try and fix

Feel free to do so, we are all waiting for at least five years for somebody to fix it :) I estimate that it takes me on month of fulltime work to fix it by rewriting the whole unit loading mechanism. I simply don't have the time to do and it seems nobody else either.

the cause of the problem, not the symptom.

If you can't heal a disease, you can at least try to reduce the symptoms.

Reply by email

Graeme Geldenhuys
to Florian Klaempfl

Op 2011-02-22 11:27, Florian Klaempfl het geskryf:

Feel free to do so, we are all waiting for at least five years for

Wasn't that what Hans-Peter (or somebody) recently tried?? But from the discussions I read, the changes were "to radical" from a non-core member, so as usual, the changes get declined.... or core-members keep arguing every little step until they discourage the developers from even trying to contribute.

So I'll limit my contributions to documentation tools and the FCL, or in the case of RTL or compiler features - to a fork of FPC... there are much less resistance that way. Sad, but true. I'm not wasting your time, and you are not wasting my time.

Regards,
- Graeme -

fpGUI Toolkit - a cross-platform GUI toolkit using Free Pascal http://fpgui.sourceforge.net/

Reply by email

Florian Klaempfl
to Graeme Geldenhuys
Graeme Geldenhuys wrote 7 lines
Op 2011-02-22 11:27, Florian Klaempfl het geskryf: > > Feel free to do so, we are all waiting for at least five years for Wasn't that what Hans-Peter (or somebody) recently tried?? But from the discussions I read, the changes were "to radical" from a non-core member, so as usual, the changes get declined....

Please stay with the truth: first of all, the proposed changes so far had nothing to do with improving unit loading. Further, none of the changes were working. You'd kill me, if I merged those changes breaking FPC completely :)

Last but not least: the radical changes (also far from working changes in the sense of no regressions) which get declined aimed on a multi language front end for FPC. While this in theory is imaginable, I expect a lot of dedication before I merge such changes into FPC: it means not only a hacked parser, but also a complete new runtime environment, complete reorganisation of the directory structures and build processes, a lot of new regression tests etc. Considering
http://fpcext.git.sourceforge.net/git/gitweb.cgi?p=fpcext/compiler;a=summary the dedication and interest is little.

Reply by email

Hans-Peter Diettrich
to Alexander Klenin: On Tue, Feb 22, 2011 at 09:58, Hans-Peter Diettrich So do, e. g. unused paramaters. This…
That said, I really believe that any circular unit dependency is a (design) bug.

Ah, that's why the FPC compiler is so buggy ;-)

Show quoted text 6 lines
> If ever, such a feature should at least allow to > suppress warnings about well known and unbreakable loops. Sure. I have even suggested the warning to be disabled by default. Anyway, it seems that there is no chance of this happening in FPC.

Tools to analyze unit references exist already :-)

Maybe if you at last create your own fork ;-)

I've already created such a fork: SourceForge.FpcExt :-)

Unfortunately the new SF interface seems to be broken a bit, so that I cannot delete the old (usesless) repository, and cannot show the two repositories for the compiler and documentation :-(

It also is hard to keep that compiler in sync with the trunk, when so many parts are moved into other units.

Currently I try to fix the most annoying bugs and flaws in the Lazarus IDE, so that I can use it as I like it. And in the documentation and help tools, that is in desastrous state :-(
Having done that, I may resume my work on FPC...

DoDi

Reply by email

Hans-Peter Diettrich
to Florian Klaempfl: Feel free to do so, we are all waiting for at least five years for somebody to fix it :)…
Show quoted text 6 lines
> No point > in recommending all developers changes their style of coding, when the > issue is in the compiler - not the language. Rather try and fix Feel free to do so, we are all waiting for at least five years for somebody to fix it :)

You'll hardly find anybody, to fix these bugs at *your* (FPC team) conditions :-(

I estimate that it takes me on month of fulltime work to fix it by rewriting the whole unit loading mechanism. I simply don't have the time to do and it seems nobody else either.

I have the time, and already spent many months with the compiler flaws. But it turned out to be Sysiphus work, when a completed fix is rejected for almost formal reasons :-(

> the > cause of the problem, not the symptom. If you can't heal a disease, you can at least try to reduce the symptoms.

It's not a matter of ability, instead it turned out to be a matter of policy, only :-(

DoDi

Reply by email

Hans-Peter Diettrich
to Florian Klaempfl: Please stay with the truth: first of all, the proposed changes so far had nothing to do…
Show quoted text 7 lines
>> Feel free to do so, we are all waiting for at least five years for > Wasn't that what Hans-Peter (or somebody) recently tried?? But from the > discussions I read, the changes were "to radical" from a non-core > member, so as usual, the changes get declined.... Please stay with the truth: first of all, the proposed changes so far had nothing to do with improving unit loading.

The bugs do not necessarily reside whery *you* expect them. This is one reason that blocks efficient bug fixes.

Further, none of the changes were working. You'd kill me, if I merged those changes breaking FPC completely :)

Please stay with the truth: all but the very first (OO) branch have been tested thoroughly, and I couldn't find any breaks.

Last but not least: the radical changes (also far from working changes in the sense of no regressions) which get declined aimed on a multi language front end for FPC.

This is only one *possible* feature, a side effect of an attempt to allow for parallel compilation.

Show quoted text 5 lines
While this in theory is imaginable, I expect a lot of dedication before I merge such changes into FPC: it means not only a hacked parser, but also a complete new runtime environment, complete reorganisation of the directory structures and build processes, a lot of new regression tests etc.

Bullshit :-(
[Sorry for the harsh wording, but it is so]

Considering http://fpcext.git.sourceforge.net/git/gitweb.cgi?p=fpcext/compiler;a=summary the dedication and interest is little.

I already outlined why I suspended working on that project, until the SF interface becomes usable.

DoDi

Reply by email

Florian Klämpfl
to Hans-Peter Diettrich: The bugs do not necessarily reside whery *you* expect them. This is one reason that…
Hans-Peter Diettrich wrote
Please stay with the truth: all but the very first (OO) branch have been tested thoroughly, and I couldn't find any breaks.

Before anybody wonders what "I couldn't find any breaks" means:

make all

for the NoGlobals branch results in

make[7]: Entering directory `c:/fpc/branches/NoGlobals/rtl/win32' c:/fpc/branches/NoGlobals/compiler/ppc1.exe -Ur -Xs -O2 -n -Fi../inc -Fi../i386 -Fi../win -FE. -FUc:/fpc/branches/NoGlobals/rtl/un its/i386-win32 -di386 -dRELEASE -Us -Sg system.pp -Fi../win c:/fpc/branches/NoGlobals/compiler/ppc1.exe -Ur -Xs -O2 -n -Fi../inc -Fi../i386 -Fi../win -FE. -FUc:/fpc/branches/NoGlobals/rtl/un its/i386-win32 -di386 -dRELEASE -I../objpas ../objpas/objpas.pp Fatal: Can't find unit fpintres used by objpas
Fatal: Compilation aborted
make[7]: *** [objpas.ppu] Error 1
make[7]: Leaving directory `c:/fpc/branches/NoGlobals/rtl/win32' make[6]: *** [win32_all] Error 2
make[6]: Leaving directory `c:/fpc/branches/NoGlobals/rtl' make[5]: *** [rtl] Error 2
make[5]: Leaving directory `c:/fpc/branches/NoGlobals/compiler' make[4]: *** [next] Error 2
make[4]: Leaving directory `c:/fpc/branches/NoGlobals/compiler' make[3]: *** [ppc2.exe] Error 2
make[3]: Leaving directory `c:/fpc/branches/NoGlobals/compiler' make[2]: *** [cycle] Error 2
make[2]: Leaving directory `c:/fpc/branches/NoGlobals/compiler' make[1]: *** [compiler_cycle] Error 2
make[1]: Leaving directory `c:/fpc/branches/NoGlobals' make: *** [build-stamp.i386-win32] Error 2

c:\fpc\branches\NoGlobals>svn info
Path: .
URL: http://svn.freepascal.org/svn/fpc/branches/dodi/NoGlobals Repository Root: http://svn.freepascal.org/svn/fpc Repository UUID: 3ad0048d-3df7-0310-abae-a5850022a9f2 Revision: 16976
Node Kind: directory
Schedule: normal
Last Changed Author: dodi
Last Changed Rev: 15959
Last Changed Date: 2010-09-09 14:38:14 +0200 (Do, 09 Sep 2010)

Reply by email

Hans-Peter Diettrich
to Florian Klämpfl
Show quoted text 9 lines
Am 22.02.2011 15:43, schrieb Hans-Peter Diettrich: > Please stay with the truth: all but the very first (OO) branch have been > tested thoroughly, and I couldn't find any breaks. Before anybody wonders what "I couldn't find any breaks" means: make all for the NoGlobals branch results in

Granted, that branch also was not tested as it should have been. Instructions on how to test the compiler had been given very late :-(

DoDi

Reply by email