[m-rev.] For review: Improve the name mangling of foreign methods in the IL backend

Julien Fischer juliensf at csse.unimelb.edu.au
Thu Jun 7 17:32:58 AEST 2007


On Thu, 7 Jun 2007, Julien Fischer wrote:

>
> On Thu, 7 Jun 2007, Jonathan Morgan wrote:
>
>> On 6/6/07, Julien Fischer <juliensf at csse.unimelb.edu.au> wrote:
>>> 
>>> On Tue, 5 Jun 2007, Jonathan Morgan wrote:
>>> 
>>> > Estimated hours taken: 4
>>> > Branches: main
>>> >
>>> > Improve the name mangling for foreign language methods under the IL 
>>> backend.
>>> > Currently, method names containing spaces, punctuation, and other 
>>> unusual
>>> > characters are acceptable in IL (because all method names are quoted), 
>>> but
>>> > are
>>> > not acceptable in C# or Managed C++.  This change converts all such 
>>> foreign
>>> > names that are not alphanumeric or underscore to a valid C identifier in 
>>> the
>>> > same way as in the C-based backends.
>>> >
>>> > compiler/mlds_to_il.m:
>>> >       Alter the name mangling routines to allow it to mangle foreign 
>>> names
>>> >       differently from ordinary IL names.  Alter the forwarding methods 
>>> for
>>> >       foreign routines to call the mangled version of the method in the
>>> >       foreign module, rather than calling one with the IL method name.
>>> >
>>> > compiler/mlds_to_managed.m:
>>> >       Alter the generation of foreign methods to use the new mangled 
>>> name.
>>> 
>>> This change causes tests/valid/foreign_type_spec to fail.
>> 
>> The error message given is:
>> 
>> mercury_compile: cannot find `foreign_type_spec.foreign_type.int' in
>> directories ., 
>> C:/cygwin/usr/local/mercury-rotd-2007-05-26/lib/mercury/ints.
>> foreign_type_spec.m:007: In definition of type `foreign_type_spec.ft2'/0:
>> foreign_type_spec.m:007:   error: undefined type `foreign'/0.
>> mercury_compile: cannot find `foreign_type_spec.int0' in directories
>> ., C:/cygwin/usr/local/mercury-rotd-2007-05-26/lib/mercury/ints.
>> 
>> While I'm no expert in the Mercury build system, I wouldn't expect my
>> change to cause this problem.
>
> With rotd-2006-06-06, the error I'm getting is:
>
> 	Uncaught Mercury exception:
> 	Software Error: mlds_to_il.m: Unexpected: IL procedure is not a 
> function
>
> which was is an assertion that your change introduced.
>
> Are you sure your copy of tests is up-to-date?  foreign_type_spec was
> failing but Simon Taylor fixed it at the beginning of May and AFAIK it
> has been working ever since.

If it's any help, the assertion failure is caused by that fact that
at mlds_to_il.m:1054 Name is equal to entity_export/1.  (PeterR just
had a look at this for me, he says "it looks weird".)

It may be that you have just tripped over an existing bug that was
going unnoticed.

Julien.

--------------------------------------------------------------------------
mercury-reviews mailing list
Post messages to:       mercury-reviews at csse.unimelb.edu.au
Administrative Queries: owner-mercury-reviews at csse.unimelb.edu.au
Subscriptions:          mercury-reviews-request at csse.unimelb.edu.au
--------------------------------------------------------------------------



More information about the reviews mailing list