mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-11-04 07:59:34 +01:00 
			
		
		
		
	to the parser, so that it only looks at what the programmer wrote rather
    than at all statements that the compiler may generate internally
    (mantis #11619)
  + several tests for {$x-} mode
  * modified tenumerators1 so it compiles without extended syntax enabled
    (to check for..in with {$x-})
git-svn-id: trunk@15075 -
		
	
			
		
			
				
	
	
		
			172 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			ObjectPascal
		
	
	
	
	
	
program tenumerators1;
 | 
						|
 | 
						|
{$ifdef fpc}
 | 
						|
{$mode objfpc}{$H+}
 | 
						|
{$endif}
 | 
						|
{$apptype console}
 | 
						|
{$x-}
 | 
						|
uses
 | 
						|
  Classes;
 | 
						|
 | 
						|
{$ifndef fpc}
 | 
						|
type
 | 
						|
  PtrInt = integer;
 | 
						|
{$endif}
 | 
						|
 | 
						|
{$ifdef fpc}
 | 
						|
procedure CheckFPListEnumerator;
 | 
						|
var
 | 
						|
  Item: Pointer;
 | 
						|
  List: TFPList;
 | 
						|
  Enumerator: TFPListEnumerator;
 | 
						|
  i: integer;
 | 
						|
begin
 | 
						|
  // check TFPList enumerator
 | 
						|
  List := TFPList.Create;
 | 
						|
  i:=List.Add(Pointer(1));
 | 
						|
  i:=List.Add(Pointer(2));
 | 
						|
  i:=List.Add(Pointer(3));
 | 
						|
 | 
						|
  Enumerator := List.GetEnumerator;
 | 
						|
  while Enumerator.MoveNext do
 | 
						|
  begin
 | 
						|
    Item := Enumerator.Current;
 | 
						|
    WriteLn(PtrInt(Item));
 | 
						|
  end;
 | 
						|
  Enumerator.Free;
 | 
						|
  List.Free;
 | 
						|
end;
 | 
						|
{$endif}
 | 
						|
 | 
						|
procedure CheckListEnumerator;
 | 
						|
var
 | 
						|
  Item: Pointer;
 | 
						|
  List: TList;
 | 
						|
  Enumerator: TListEnumerator;
 | 
						|
  i: integer;
 | 
						|
begin
 | 
						|
  // check TList enumerator
 | 
						|
  List := TList.Create;
 | 
						|
  i:=List.Add(Pointer(1));
 | 
						|
  i:=List.Add(Pointer(2));
 | 
						|
  i:=List.Add(Pointer(3));
 | 
						|
 | 
						|
  Enumerator := List.GetEnumerator;
 | 
						|
  while Enumerator.MoveNext do
 | 
						|
  begin
 | 
						|
    Item := Enumerator.Current;
 | 
						|
    WriteLn(PtrInt(Item));
 | 
						|
  end;
 | 
						|
  Enumerator.Free;
 | 
						|
  List.Free;
 | 
						|
end;
 | 
						|
 | 
						|
procedure CheckCollectionEnumerator;
 | 
						|
var
 | 
						|
  Item: TCollectionItem;
 | 
						|
  Collection: TCollection;
 | 
						|
  Enumerator: TCollectionEnumerator;
 | 
						|
begin
 | 
						|
  // check TCollection enumerator
 | 
						|
  Collection := TCollection.Create(TCollectionItem);
 | 
						|
  item:=Collection.Add;
 | 
						|
  item:=Collection.Add;
 | 
						|
  item:=Collection.Add;
 | 
						|
 | 
						|
  Enumerator := Collection.GetEnumerator;
 | 
						|
  while Enumerator.MoveNext do
 | 
						|
  begin
 | 
						|
    Item := Enumerator.Current;
 | 
						|
    WriteLn(PtrInt(Item));
 | 
						|
  end;
 | 
						|
  Enumerator.Free;
 | 
						|
  Collection.Free;
 | 
						|
end;
 | 
						|
 | 
						|
procedure CheckStringsEnumerator;
 | 
						|
var
 | 
						|
  Item: String;
 | 
						|
  Strings: TStrings;
 | 
						|
  Enumerator: TStringsEnumerator;
 | 
						|
  i: integer;
 | 
						|
begin
 | 
						|
  // check TStrings enumerator
 | 
						|
  Strings := TStringList.Create;
 | 
						|
  i:=Strings.Add('1');
 | 
						|
  i:=Strings.Add('2');
 | 
						|
  i:=Strings.Add('3');
 | 
						|
 | 
						|
  Enumerator := Strings.GetEnumerator;
 | 
						|
  while Enumerator.MoveNext do
 | 
						|
  begin
 | 
						|
    Item := Enumerator.Current;
 | 
						|
    WriteLn(Item);
 | 
						|
  end;
 | 
						|
  Enumerator.Free;
 | 
						|
  Strings.Free;
 | 
						|
end;
 | 
						|
 | 
						|
procedure CheckComponentEnumerator;
 | 
						|
var
 | 
						|
  Item: TComponent;
 | 
						|
  Component: TComponent;
 | 
						|
  Enumerator: TComponentEnumerator;
 | 
						|
begin
 | 
						|
  // check TComponent enumerator
 | 
						|
  Component := TComponent.Create(nil);
 | 
						|
  item:=TComponent.Create(Component);
 | 
						|
  item:=TComponent.Create(Component);
 | 
						|
  item:=TComponent.Create(Component);
 | 
						|
 | 
						|
  Enumerator := Component.GetEnumerator;
 | 
						|
  while Enumerator.MoveNext do
 | 
						|
  begin
 | 
						|
    Item := Enumerator.Current;
 | 
						|
    WriteLn(PtrInt(Item));
 | 
						|
  end;
 | 
						|
  Enumerator.Free;
 | 
						|
  Component.Free;
 | 
						|
end;
 | 
						|
 | 
						|
procedure CheckInterfaceListEnumerator;
 | 
						|
var
 | 
						|
  Item: IUnknown;
 | 
						|
  List: TInterfaceList;
 | 
						|
  Enumerator: TInterfaceListEnumerator;
 | 
						|
  i: integer;
 | 
						|
begin
 | 
						|
  // check TInterfaceList enumerator
 | 
						|
  List := TInterfaceList.Create;
 | 
						|
  Item := TInterfacedObject.Create;
 | 
						|
  i:=List.Add(Item);
 | 
						|
  Item := TInterfacedObject.Create;
 | 
						|
  i:=List.Add(Item);
 | 
						|
  Item := TInterfacedObject.Create;
 | 
						|
  i:=List.Add(Item);
 | 
						|
 | 
						|
  Enumerator := List.GetEnumerator;
 | 
						|
  while Enumerator.MoveNext do
 | 
						|
  begin
 | 
						|
    Item := Enumerator.Current;
 | 
						|
    WriteLn(PtrInt(Item));
 | 
						|
  end;
 | 
						|
  Enumerator.Free;
 | 
						|
  Item := nil;
 | 
						|
  List.Free;
 | 
						|
end;
 | 
						|
 | 
						|
begin
 | 
						|
{$ifdef fpc}
 | 
						|
  WriteLn('Testing FPC');
 | 
						|
  CheckFPListEnumerator;
 | 
						|
{$else}
 | 
						|
  WriteLn('Testing Delphi');
 | 
						|
{$endif}
 | 
						|
  CheckListEnumerator;
 | 
						|
  CheckCollectionEnumerator;
 | 
						|
  CheckStringsEnumerator;
 | 
						|
  CheckComponentEnumerator;
 | 
						|
  CheckInterfaceListEnumerator;
 | 
						|
end.
 | 
						|
 |