[fpc-pascal] Verify Method Calls
tobiasgiesen at gmail.com
tobiasgiesen at gmail.com
Tue Jul 5 09:22:45 CEST 2016
Hello,
many thanks for your reply! -vh didn't show more info, but I was able to
reduce the source to a small program, maybe you can try it? Compiling it
with -CR fails, but without it compiles fine without warnings.
Unfortunately there are many typecasts like these and I don't know how
to solve it.
Best wishes,
Tobias Giesen
-----------------
program AnInterfaceTest;
uses Classes;
type
{** Replacement for generic interface type. }
IZInterface = IUnknown;
{** Represents an interface for all abstract object. }
IZObject = interface(IZInterface)
['{EF46E5F7-00CF-4DDA-BED0-057D6686AEE0}']
function Clone: IZInterface;
end;
{** Represents an interface to clone objects. }
IZClonnable = interface(IZObject)
['{ECB7F3A4-7B2E-4130-BA66-54A2D43C0149}']
end;
{** Represents a collection of object interfaces. }
IZCollection = interface(IZClonnable)
['{51417C87-F992-4CAD-BC53-CF3925DD6E4C}']
end;
{** Represents a hash map interface. }
IZHashMap = interface(IZClonnable)
['{782C64F4-AD09-4F56-AF2B-E4193A05BBCE}']
end;
{** Implements an abstract interfaced object. }
{ TZAbstractObject }
TZAbstractObject = class(TInterfacedObject, IZObject)
public
function Clone: IZInterface; virtual;
end;
{ TZHashMap }
TZHashMap = class(TZAbstractObject, IZHashMap, IZClonnable)
private
FKeys: IZCollection;
public
constructor Create;
destructor Destroy; override;
function Clone: IZInterface; override;
end;
{ TZAbstractObject }
function TZAbstractObject.Clone: IZInterface;
begin
result := nil; // needs to be overriden
end;
{ TZHashMap }
constructor TZHashMap.Create;
begin
end;
destructor TZHashMap.Destroy;
begin
inherited Destroy;
end;
function TZHashMap.Clone: IZInterface;
var
HashMap: TZHashMap;
begin
HashMap := TZHashMap.Create;
HashMap.FKeys := IZCollection(FKeys.Clone);
Result := HashMap;
end;
begin
end.
-----------------
Kind Regards,
Tobias Giesen
----
On Mon, 4 Jul 2016 22:55:19 +0200
Jonas Maebe <jonas.maebe at elis.ugent.be> wrote:
> On 04/07/16 19:38, tobiasgiesen at gmail.com wrote:
> > I would like to use "Verify Method Calls" (-CR), but when I choose it in the Lazarus
> > project options under debugging, I get compiler errors such as:
> >
> > Incompatible type for arg no.2: Got "Class Of IZCollection", expected "TClass".
> >
> > With Verify Method Calls off, the same code compiles fine.
> >
> > The offending line is from ZEOS lib, ZCollections.pas:
> >
> > HashMap.FKeys := IZCollection(FKeys.Clone);
> >
> > I wonder why it says "arg no.2".
>
> Try compiling with -vh, it may show more info. -CR basically turns all object/class typecasts into "as"-like expressions, but in a way that you can still pass them to var/out-parameters.
>
> > Is it possible to turn "Verify Method Calls" off via a {$xxx } switch in the
> > source code?
>
> No.
>
>
> Jonas
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Kind Regards,
Tobias Giesen
Super Flexible Software Ltd. & Co. KG
Buddenstr. 29-31
48143 Münster, Germany
www.superflexible.com
www.tgtools.com
-----------------------------------------------------------
Registered at register court Münster as HRA 9716
Liability / general partner: TGTools Ltd.
Company No. 05513299
Registered in England and Wales
Directors: Tobias Giesen and Claudia Giesen
More information about the fpc-pascal
mailing list