> On Jul 27, 2018, at 11:24 AM, Mattias Gaertner <nc-gaert...@netcologne.de> 
> wrote:
> 
> You can't if you compile with -CR.
> The RTL is not compiled with objectchecks, so it works there.
> 
>> According to this test not only can you call methods on nil objects but
>> it calls the method statically (like a class method), i.e the test
>> prints “DoThis”. How is that possible?
> 
> Self on x86_64 target is just a hidden argument.
> It won't work with virtual methods.

This is all news to me. I had no idea I was possibly compiling programs where I 
could call nil objects.

How do I disable this? I just ran this test program with -CR and I still calls 
the method statically.

Ryans-MacBook-Pro-2:~ ryanjoseph$ fpc -CR 
/Users/ryanjoseph/Desktop/macro_test/obj_test.pas
Free Pascal Compiler version 3.0.4 [2017/11/26] for x86_64
Copyright (c) 1993-2017 by Florian Klaempfl and others
Target OS: Darwin for x86_64
Compiling /Users/ryanjoseph/Desktop/macro_test/obj_test.pas
Assembling (pipe) /Users/ryanjoseph/Desktop/macro_test/obj_test.s
Linking /Users/ryanjoseph/Desktop/macro_test/obj_test
19 lines compiled, 0.1 sec
Ryans-MacBook-Pro-2:~ ryanjoseph$ /Users/ryanjoseph/Desktop/macro_test/obj_test
DoThis


{$mode objfpc}

program obj_test;

type
        TMyClass = class
                procedure DoThis;
        end;

procedure TMyClass.DoThis;
begin
        writeln('DoThis');
end;

var
        obj: TMyClass;
begin
        obj := nil;
        obj.DoThis;
end.

Regards,
        Ryan Joseph

_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal

Reply via email to