[m-dev.] pragma stub proposal

Julien Fischer juliensf at csse.unimelb.edu.au
Thu Aug 13 14:34:23 AEST 2009


On Thu, 13 Aug 2009, Ian MacLarty wrote:

> On Thu, Aug 13, 2009 at 12:47 PM, Peter
> Schachte<schachte at csse.unimelb.edu.au> wrote:
>> Ian MacLarty wrote:
>>> On Wed, Aug 12, 2009 at 3:22 PM, Julien
>>> Fischer<juliensf at csse.unimelb.edu.au> wrote:
>>>> On Wed, 12 Aug 2009, Ian MacLarty wrote:
>>>>> What I would prefer is to be able to tell the compiler to create stubs
>>>>> for a specific set of predicates with a pragma.  For example:
>>>>>
>>>>> :- pragma stub(jdbc_get_dbms_name/6).
>>>
>>> You wouldn't provide the clause in the presence of this pragma.
>>
>> How about allowing an optional second argument to the pragma to specify the
>> error message?  So you could distinguish between "Not yet implemented" and
>> "Not available in this grade."  Or, if those are the only two reasons you can
>> think of for stubs, just provide two different pagmas, like unavailable/1 and
>> unimplemented/1.
>>
>
> What I eventually ended up doing was the following:
>
> % First define dummy Mercury types for the Java foreign_types.
> % These are necessary for when a stub has to output a foreign value.
> :- type jdbc_db ---> jdbc_db.
> :- type jdbc_cursor ---> jdbc_cursor.
>
> % Now define det_error, so we can throw an exception in the stub
> without getting a warning:
> :- pred det_error(string::in, io::di, io::uo) is det.
> det_error(Msg, !IO) :-
>    ( semidet_succeed ->
>        error(Msg)
>    ;
>        true
>    ).
>
> % Now define the stub for non-Java grades:
> jdbc_get_dbms_name(_, "", -1, "", !IO) :- det_error("non-Java grade", !IO).
>
> I guess this isn't too bad really.

We do something similar in parts of G12.

Julien.


More information about the developers mailing list