On Mon, Jul 29, 2013 at 10:31 AM, Lucas De Marchi <lucas.demar...@profusion.mobi> wrote: > On Sat, Jul 27, 2013 at 5:54 PM, Jérémy Zurcher <jer...@asynk.ch> wrote: >> On Saturday 27 July 2013 11:10, Carsten Haitzler wrote : >>> On Fri, 26 Jul 2013 14:57:28 -0300 Lucas De Marchi >>> <lucas.demar...@profusion.mobi> said: >>> >>> > On Thu, Jul 25, 2013 at 8:54 PM, Carsten Haitzler <ras...@rasterman.com> >>> > wrote: >>> > > On Thu, 25 Jul 2013 14:58:30 -0300 Gustavo Sverzut Barbieri >>> > > <barbi...@profusion.mobi> said: >>> > > >>> > >> On Thu, Jul 25, 2013 at 1:46 PM, Tom Hacohen <tom.haco...@samsung.com> >>> > >> 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 <jer...@asynk.ch> >>> > >> >> 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 > > Humn... taking what you committed: > > // eo object method calls batch, > // DO NOT use return statement in it, use break if necessary
And you might want to update this comment. Lucas De Marchi ------------------------------------------------------------------------------ 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 enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel