On Saturday 27 July 2013 21:02, Gustavo Sverzut Barbieri wrote : > On Sat, Jul 27, 2013 at 5:54 PM, Jérémy Zurcher <[email protected]> wrote: > > On Saturday 27 July 2013 11:10, Carsten Haitzler wrote : > >> On Fri, 26 Jul 2013 14:57:28 -0300 Lucas De Marchi > >> <[email protected]> said: > >> > >> > On Thu, Jul 25, 2013 at 8:54 PM, Carsten Haitzler <[email protected]> > >> > wrote: > >> > > On Thu, 25 Jul 2013 14:58:30 -0300 Gustavo Sverzut Barbieri > >> > > <[email protected]> said: > >> > > > >> > >> On Thu, Jul 25, 2013 at 1:46 PM, Tom Hacohen <[email protected]> > >> > >> wrote: > >> > >> > On 24/07/13 03:09, Carsten Haitzler (The Rasterman) wrote: > >> > >> >> On Tue, 23 Jul 2013 18:22:02 +0200 Jérémy Zurcher <[email protected]> > >> > >> >> said: > >> > >> >> > >> > >> >>> just to clarify a few points: > >> > >> >>> > >> > >> >>> - I think the less macro we have in an eo class declaration the > >> > >> >>> best, > >> > >> >>> actually we have nothing but that extra first parameter called > >> > >> >>> eo2_o, wich is either an obj_ptr (devs/tasn/eo2) or a call_ctx > >> > >> >>> (devs/jeyzu/eo2) > >> > >> >>> > >> > >> >>> this should go away if we use a stack per thread in eo private > >> > >> >>> code, > >> > >> >>> so we end up with a clean > >> > >> >>> EAPI float times(float f, float t); > >> > >> >>> > >> > >> >>> - since day 1 break is supported in eo2_do: > >> > >> >>> #define eo2_do(obj_id, ...) > >> > >> >>> do > >> > >> >>> { > >> > >> >>> obj_ptr_or_ctx = eo2_do_start(obj_id); > >> > >> >>> if(!obj_ptr_or_ctx) break; > >> > >> >>> do { __VA_ARGS__ ; } while (0); > >> > >> >>> eo2_do_end(obj_ptr_or_ctx); > >> > >> >>> } while (0) > >> > >> >> > >> > >> >> i'm worried about people doing return there. seriously - objid > >> > >> >> came in > >> > >> >> becau se of experience that people using efl are in general > >> > >> >> inexperienced programmers who don't take the time to do things > >> > >> >> right. > >> > >> >> they do things quickly and take shortcuts, and they ignore > >> > >> >> warnings. > >> > >> >> they'd rather patch out abort()s in efl code forcing them to fix > >> > >> >> their > >> > >> >> bugs, than fix their bugs. i am fearful that they will stuff in > >> > >> >> returns > >> > >> >> quite happily and think it mostly works most of the time... and > >> > >> >> then > >> > >> >> find subtle issues and waste our time finding them. > >> > >> >> > >> > >> >> how do we protect/stop returns (or goto's for that matter) within > >> > >> >> the > >> > >> >> while block. i looked for some pragmas - can't find any to do this. > >> > >> >> this would be a really useful compiler feature though (to maybe > >> > >> >> disable > >> > >> >> some constructs for a sequence of code). > >> > > >> > What you seem to be looking for is the cleanup attribute. > >> > > >> > #define eo2_do(obj_id, ...) > >> > do > >> > { > >> > obj_ptr_or_ctx = eo2_do_start(obj_id); > >> > if(!obj_ptr_or_ctx) break; > >> > do > >> > { > >> > obj_ptr_or_ctx_type __attribute__((cleanup(eo2_do_end)) > >> > dummy = obj_ptr_or_ctx; > >> > __VA_ARGS__ ; > >> > } while (0); > >> > } while (0); > >> > > >> > > >> > But then we need to take a look if the cleanup function will run when > >> > the actual function returns, or when the second "do" runs out of > >> > scope. This attribute is more commonly used to call free on the > >> > variable, so it doesn't matter much.... but for us this would make a > >> > difference if it involves locking. > >> > > >> > Then you just allow break and return, and the right thing will happen, > >> > even in those cases. > >> > >> voila! that would do it (if it does work on return as well as break and any > >> goto that jumps out of the while scope). if course it'd be dependant on > >> compiler supporting it - if it doesnt, then we cleanup by hand as normal > >> on a > >> break and return/goto just create bugs. i'd be ok with that. need to add > >> -fexceptions maybe too from a quick read. needs a little experimenting and > >> some > >> method of detection. looks like its single parameter only and i guess it is > >> done variable by variable which is good enough for us. :) i wonder how new > >> it > >> is. hmm looks like gcc 3.3 - that means it's rather old by now. GOOD. i > >> hope > >> clang supports it too and.... it seems not. :( oh well. let's hope most > >> devs > >> still use gcc. :) > >> > > > > nice one, > > implemented and tested with gcc 4.8.1 and clang 3.3 > > > > http://git.enlightenment.org/core/efl.git/commit/?h=devs/tasn/eo2&id=275280c3e0fb74e01ffd682acfb69f6a2700dc40 > > did you manage to discover if the cleanup function is called when the > block ends or just when the function returns? when the block ends, that's what the tests show
> > > > but has Tom pointed to me that on Windows you can't use an EAPI func ptr > > to init a struct, what about this cleanup attribute ? > > in windows we can use the old method... it will fail if one > return/goto inside the eo_do() block... but that's not allowed anyway, > we're just trying to be safe against dummies. > > -- > Gustavo Sverzut Barbieri > http://profusion.mobi embedded systems > -------------------------------------- > MSN: [email protected] > Skype: gsbarbieri > Mobile: +55 (19) 9225-2202 > > ------------------------------------------------------------------------------ > See everything from the browser to the database with AppDynamics > Get end-to-end visibility with application monitoring from AppDynamics > Isolate bottlenecks and diagnose root cause in seconds. > Start your free trial of AppDynamics Pro today! > http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk > _______________________________________________ > enlightenment-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel --- Hell'O from Yverdoom Jérémy (jeyzu) ------------------------------------------------------------------------------ See everything from the browser to the database with AppDynamics Get end-to-end visibility with application monitoring from AppDynamics Isolate bottlenecks and diagnose root cause in seconds. Start your free trial of AppDynamics Pro today! http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk _______________________________________________ enlightenment-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
