[fpc-pascal] fcl-passrc errors

Ryan Joseph genericptr at gmail.com
Sun Oct 13 23:19:54 CEST 2019



> On Oct 13, 2019, at 11:11 AM, Sven Barth via fpc-pascal <fpc-pascal at lists.freepascal.org> wrote:
> 
> Then specialize the list with the correct type. 
> 
> This issue *will* be fixed and is not up to discussion. 
> 

Here’s some code from the parser today. TFPList is being used because it’s a generic storage for various different kinds of classes.

  public
    Declarations: TFPList; // list of TPasElement
    // Declarations contains all the following:
    Attributes, // TPasAttributes
    Classes,    // TPasClassType, TPasRecordType
    Consts,     // TPasConst
    ExportSymbols,// TPasExportSymbol
    Functions,  // TPasProcedure
    Properties, // TPasProperty
    ResStrings, // TPasResString
    Types,      // TPasType, except TPasClassType, TPasRecordType
    Variables   // TPasVariable, not descendants
      : TFPList;

What do I do when I want to iterate over this now? I know that these types all descend from TPasElement so I want to use that, but no, the compiler complains I *must* use a pointer for the iterator. Why can’t I as the programmer tell the for loop I know what the enumerator is going to return?

var
  element: TPasElement;
begin
  // ERROR!
  for element in module.InterfaceSection.Functions do
    begin
    end;


I guess we’re supposed to just do our typecasts inside the loop now but how is this any better? Sorry I’m really not getting this.

var
  element: pointer;
begin
  for element in module.InterfaceSection.Functions do
    begin
      writeln(TPasElement(element).Name, ‘’, TPasElement(element).DoSomething);
    end;

Regards,
	Ryan Joseph



More information about the fpc-pascal mailing list