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

Jonathan Morgan jonmmorgan at gmail.com
Wed Jun 6 10:16:14 AEST 2007


On 6/5/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
>
> Delete "Currently".

Done.

> > 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
>
> ... to allow them ...

Done.

> >       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.
> >
>
> ...
>
> > @@ -3236,6 +3252,26 @@
> > %
> > % Name mangling.
> >
> > +:- type il_mangle_type --->
> > +    mangle_il
> > +        % Names that are to be used only in IL are able to include spaces,
> > +        % punctuation and other special characters, because they are in
> > quotes.
> > +    ; mangle_managed.
> > +        % Names that are to be used in other managed languages (typically
> > +        % because they define foreign procedures in that language) must be
> > +        % mangled in much the same way as for C.
>
> What does "in much the same way" mean?  Be precise, if it is the same
> as in C then say so, if not what is the difference?

It is not absolutely identical, as C will typically use name_mangle
rather than convert_to_valid_c_identifier.  However, as the only
difference is that names prefixed with "f_" will not be changed to
being prefixed with "f__", I'll change it to "in the same way", since
it is the same in intent.

> I suggest renaming the constructors for the above types as follows:
>
>         :- type il_mangle_name
>                 --->    mangle_for_il
>                 ;       mangle_for_managed.

Done.

> > +    % Create a mangled predicate identifier, suitable for use in IL.
> > +    %
> > +:- pred predlabel_to_id(mlds_pred_label::in, proc_id::in,
> > +    maybe(mlds_func_sequence_num)::in, ilds.id::out) is det.
> > +
> > +predlabel_to_id(PredLabel, ProcId, MaybeSeqNum, Id) :-
> > +    predlabel_to_id(PredLabel, ProcId, MaybeSeqNum, mangle_il, Id).
>
> I suggest calling that `predlabel_to_il_id' rather than `predlabel_to_id'.
> The rest looks fine.

Done.

Jon
--------------------------------------------------------------------------
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