> 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