[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