On 06/08/2014 06:48, Alex Peshkoff wrote:
> On 08/05/14 16:11, Adriano dos Santos Fernandes wrote:
>> On 05/08/2014 08:20, Alex Peshkoff wrote:
>>> As the result we get language-neutral compiler-independent ABI, with an
>>> ability to generate a kind of headers for any language, with a machine
>>> generated code to catch exceptions into status vector and raise them
>>> from it (if language supports certainly), with our own structure of
>>> virtual table and therefore absolutely stable and clear interface
>>> version upgrade and (as additional small bonus) we nned not count
>>> interface versions manually.
>> I'll do a more detailed check later. This is very close with something I
>> started implement before (using only macros) and stopped most due to:
>> - How do you wanna going to catch-throw automatically and maintain the
>> warnings in the status vector?
> I want to have warnings in IStatus separate from errors (keeping them in
> same status vector IMO artifact of isc api). I think that after it this
> is not big problem. Am I missing something obvious? Certainly user must
> check for warnings himself.
Just that if one uses the C++ API and does not care about warnings,
he'll still need to pass IStatus everywhere.
>> - Who is going to initialize status vectors?
> This is not directly related here, but it seems possible to reset errors
> in IStatus right after copying them to StatusException but before
> throwing it. But still remains a problem - who will remove warnings from
> IStatus?
>
>> - Will status vector always be checked or only depending on the
>> functions return value?
> Currently we have a lot of void functions, but certainly they can be
> made to return boolean, therefore avoiding a need in a check if non-zero
> is returned (non-zero can be also valid pointer to interface, number of
> bytes read from blob, etc.). I.e. if we may tune API to make error
> possible only in case of false/zero/NULL returned, we may in many cases
> avid a need in checking IStatus explicitly.
>
>
About reset and return values, I'm not talking directly about speedy,
but about rules and conventions.
Say the C++ API. It can use something like:
void method(IStatus* userStatus)
{
LocalStatus localStatus;
vtable->method(this, localStatus);
if (localStatus.isDirty())
{
localStatus.copyTo(userStatus);
throw something;
}
}
So you have status check without virtual calls.
But anyway, something must be said, like, API does not initialize (to
not always call a virtual function) status vectors.
With the current code, depending on manual IStatus, this is a nightmare,
but possible with automated C->C++ conversion.
Adriano
------------------------------------------------------------------------------
Infragistics Professional
Build stunning WinForms apps today!
Reboot your WinForms applications with our WinForms controls.
Build a bridge from your legacy apps to the future.
http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk
Firebird-Devel mailing list, web interface at
https://lists.sourceforge.net/lists/listinfo/firebird-devel