{ %NORUN }

{$mode objfpc}
{$modeswitch multihelpers}

program tmshlp4;

type
	TMyObject = class
		procedure DoThis_1;
	end;
	THelperBase = class helper for TMyObject
		procedure DoThis_4;
	end;
	THelper1 = class helper(THelperBase) for TMyObject
		procedure DoThis_2;
	end;
	THelper2 = class helper(THelperBase) for TMyObject
		procedure DoThis_3;
	end;

procedure THelperBase.DoThis_4;
begin
	writeln('DoThis_4');
end;

procedure TMyObject.DoThis_1;
begin
	writeln('DoThis_1');
end;

procedure THelper1.DoThis_2;
begin
	writeln('DoThis_2');
end;

procedure THelper2.DoThis_3;
begin
	writeln('DoThis_3');
end;

var
	obj: TMyObject;
begin
	obj := TMyObject.Create;
	obj.DoThis_1;
	obj.DoThis_2;
	obj.DoThis_3;
	obj.DoThis_4;
end.