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