[m-dev.] Generating methods for foreign classes

Tyson Dowd trd at cs.mu.OZ.AU
Thu May 24 16:42:18 AEST 2001


On 24-May-2001, Fergus Henderson <fjh at cs.mu.OZ.AU> wrote:
> On 24-May-2001, Tyson Dowd <trd at cs.mu.OZ.AU> wrote:
> > In MLDS the body of Salary would look something like:
> > 
> > call(Signature, FunctionRval, yes(ThisRval),
> > 	[
> > 		lval(var("s")), 
> > 		lval(field(no, ThisRval, named_field("state")...)),
> > 		mem_ref(lval(field(no, ThisRval, named_field("state")...))
> > 	],
> > 	[], yes)
> > 
> > But the big problem is that I don't know what ThisRval should be.
> > There doesn't appear to be an rval for "this".  I think it might be
> > missing from the MLDS actually.
> 
> Right.  I think we should add a new lval constructor, called "this" or
> "self", for "this" in Java/C#, argument 0 in MSIL, and either "this" or
> "*this" in C++.  I'm not quite sure which is the best thing to use in
> the C++ case; the MLDS is a bit inconsistent about it and the relevant
> parts of the code are currently not used, so it's hard to know what
> will keep things simplest.  Probably we should name the MLDS lval
> constructor "self" to avoid tying it too strongly to the C++ "this"
> keyword.
> 
> > > > I now want to generate a .NET method body along the lines of 
> > > > 
> > > > .method void Salary(int s)
> > > > {
> > > >     ldarg s
> > > >     ldarg this_pointer
> > > >     ldfld store
> > > >     ldarg this_pointer
> > > >     ldflda store
> > > >     call mercury_salary_3(int, object[], object[]&)
> 
> I think the `ldarg this_pointer' instructions need to be `ldarg 0'.

Yes, this is correct.

And the .method needs to be an "instance" method for this to work.

-- 
       Tyson Dowd           # 
                            #  Surreal humour isn't everyone's cup of fur.
     trd at cs.mu.oz.au        # 
http://www.cs.mu.oz.au/~trd #
--------------------------------------------------------------------------
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au
--------------------------------------------------------------------------



More information about the developers mailing list