From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.5-pre1 (2020-06-20) on ip-172-31-74-118.ec2.internal X-Spam-Level: X-Spam-Status: No, score=-1.9 required=3.0 tests=BAYES_00,FREEMAIL_FROM autolearn=ham autolearn_force=no version=3.4.5-pre1 X-Received: by 2002:ac8:5bc2:: with SMTP id b2mr7006181qtb.284.1602929344967; Sat, 17 Oct 2020 03:09:04 -0700 (PDT) X-Received: by 2002:ac8:140f:: with SMTP id k15mr6676180qtj.32.1602929344799; Sat, 17 Oct 2020 03:09:04 -0700 (PDT) Path: eternal-september.org!reader02.eternal-september.org!feeder.eternal-september.org!news.gegeweb.eu!gegeweb.org!fdn.fr!proxad.net!feeder1-2.proxad.net!209.85.160.216.MISMATCH!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: comp.lang.ada Date: Sat, 17 Oct 2020 03:09:04 -0700 (PDT) In-Reply-To: Complaints-To: groups-abuse@google.com Injection-Info: google-groups.googlegroups.com; posting-host=94.31.102.52; posting-account=rmHyLAoAAADSQmMWJF0a_815Fdd96RDf NNTP-Posting-Host: 94.31.102.52 References: <9d822023-b604-46b1-9443-4471e095704bn@googlegroups.com> <6f14427c-15a6-4874-a3f5-7bc308b2d3bfn@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <9eff89cf-5345-4336-96a7-f75258697817n@googlegroups.com> Subject: Re: GDNative thick binding design From: AdaMagica Injection-Date: Sat, 17 Oct 2020 10:09:04 +0000 Content-Type: text/plain; charset="UTF-8" Xref: reader02.eternal-september.org comp.lang.ada:60451 List-Id: > package GDNative.Thick.Objects is > type Object is abstract tagged private; > > -- create abstract or null subprograms for each subprogram here: > -- https://docs.godotengine.org/en/stable/classes/class_object.html#class-object > function Name (Self : in Object'class) return Wide_String is abstract; > procedure Initialize (Self : in out Object'class) is null; > -- etc... > > private > type Object is abstract tagged null record; > end; I do not know what you are trying to do, but I see a basic misunderstanding here wrt keyword abstract on operations. It has two fundamentally different purposes: * When used on a primitive operation of a nontagged type, it makes an inherited operation disappear, i.e. this operation does no longer exist, e.g.: type T is range -42..42; function "/" (L, R: T'Base) return T'Base is abstract; * When used on a primitive operation of a tagged type, this operation is dispatching and must be overridden for derived types; e.g. type T is abstrat tagged private; procedure Op(X:T) is abstract; type T1 is new T with private; procedure Op(X:T1); Now your function Name (Self : in Object'class) return Wide_String is abstract; is a classwide operation, not a primitive operation, so it canot be overridden. It is not a primitive operation of any type, so it just declares that such an operation cannot exist - a rather useless declaration.