Paul Ishenin wrote:
The next feature which we should think of is for-in loop: http://wiki.lazarus.freepascal.org/for-in_loop
At the moment implementation is almost complete and it is possible to test and review it (although many checks still needs to be added). It unites 2 approaches: delphi - search enumerators by symbol names and fpc - search using operators and method/property modifiers.

Enumerator can be found for type using:

1. GetEnumerator method to the class/object (delphi way). For example:

type
 TSomeClass = class
 public
    function GetEnumerator: TSomeEnumerator;
 end;

2. operator enumrator for any type (fpc extension). For example:

operator enumerator (const s: string): TStringEnumerator;
begin
 Result := TStringEnumerator.Create(s);
end;

Enumerator is a class or object which need to have:

1. function MoveNext: Boolean; and property Current: sometype; (delphi way) For example:

 TStringEnumerator = class
 private
   function GetCurrent: Char; inline;
 public
   function MoveNext: Boolean;
   property Current: Char read GetCurrent;
 end;

2. function with any name and Boolean return type marked by 'enumerator MoveNext' directive and a property with any name marked by 'enumerator Current' directive (fpc extension). For example:

 TStringEnumerator = class
 private
   function GetValue: Char; inline;
 public
   function StepForward: Boolean; enumerator MoveNext;
   property Value: Char read GetValue; enumerator Current;
 end;

Enumerator search for the paticular type performs in the next order:
1) search available operator
2) if it is a object/class instance then search for GetEnumerator method
3) if it is a enumeration/range/array/string/set then use built-in enumerator support for this type

A branch to test is: http://svn.freepascal.org/svn/fpc/branches/paul/features
Enumerator tests are: tests\test\tforin1.pp ... tests\test\tforin7.pp
A brief explanation of how it works can be found here: http://wiki.lazarus.freepascal.org/for-in_loop#Proposed_implementation

Suggestions and comments are welcome except the new discussion about enumerators necessity.

Best regards,
Paul Ishenin.
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to