On Mon, 20 Jan 2014 14:25:01 +0200 "daniel.za...@samsung.com"
<daniel.za...@samsung.com> said:

currently i'm going through phab backlog. :( reviews and then task tickets.
i'll roll around to my email box after that.

> Hi Raster,
> 
> I know it is a long time we didn't speak about that but I would like to 
> reopen it to decide the interaction between files.
> As I explained before, we have at least two files by class:
> - the eolian-generated file that contains all the legacy/Eo functions
> - the "user" file that contains the logic part of the functions. There 
> can be more than one file of this type
> 
> The question is: who is supposed to include who?
> - you suggested that the auto-generated file will include the user 
> files. That can be done by replacing in the makefile these files by the 
> new one and by giving to Eolian command line the different files to include
> - we suggested (more began like that) that one "user" file will include 
> the auto-generated. We let the makefile as is but we must add into the 
> auto-generated file externs to the user functions that will no more be 
> static.
> 
> I think yours is cleaner but I would like to be sure it is ok (i.e we 
> thought about all the consequences) before beginning changing the generator.
> 
> Thank you, boss
> JackDanielZ, alias Daniel the 3rd.
> 
> On 01/01/2014 02:18 PM, daniel.za...@samsung.com wrote:
> > On 12/31/2013 10:03 AM, Carsten Haitzler (The Rasterman) wrote:
> >> On Thu, 12 Dec 2013 16:14:34 +0200 "daniel.za...@samsung.com"
> >> <daniel.za...@samsung.com> said:
> >>
> >>> Hi all,
> >>>
> >>> As you maybe know, we are developing a tool (Eolian) that will help
> >>> people to add functions to the Eo classes and to generate automatically
> >>> bindings. We spoke a lot about the .eo format to describe the classes
> >>> but we never spoke about the generator. So is the time.
> >>>
> >>> The solution chosen to generate C code is to have two files:
> >>> - the first one is fully auto-generated by Eolian and contains EAPI
> >>> legacy functions and Eo code
> >>> EAPI Eo_Op... = EO_NOOP;
> >>> ...
> >>> EAPI void
> >>> evas_object_image_mmap_set(Evas_Object *eo_obj, const Eina_File *f,
> >>> const char *key)
> >>> {
> >>>       eo_do(eo_obj, evas_obj_image_mmap_set(f, key));
> >>> }
> >>>
> >>> static void
> >>> _eo_evas_object_image_mmap_set(Eo *eo_obj, void *_pd, va_list *list)
> >>> {
> >>>       const Eina_File *f = va_arg(*list, const Eina_File *);
> >>>       const char *key = va_arg(*list, const char*);
> >>>       _mmap_set(obj, f, key); *// User function located in the second C
> >>> file* }
> >>> ...
> >>> static void
> >>> _class_constructor(Eo_Class *klass)
> >>> {
> >>>       const Eo_Op_Func_Description func_desc[] = {
> >>>            EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR),
> >>> _constructor), EO_OP_FUNC(EVAS_OBJ_IMAGE_ID
> >>> (EVAS_OBJ_IMAGE_SUB_ID_MMAP_SET), _eo_evas_object_image_mmap_set),
> >>> ...
> >>> }
> >>> ...
> >>>
> >>> - the second file contains the user code. It is not touched by Eolian.
> >> so the "user" edits the generated file above to fill in
> >> _eo_evas_object_image_mmap_set() for example (eolian generates that
> >> function stub with just enough boilerplate to get them going) right? so it
> >> doesnt fully generate but it also has to update/edit/merge in changes from
> >> the eo file. this generated file #includes the totally "custom user code
> >> never touched by eolian" right? or this eo generated file is NEVER edited
> >> by the user and the user has to write the _mmap_set() func by hand? or
> >> does eolian generate these empty stubs for the user (or update them if
> >> params change)? it'd be nice if it could generate them when they get added
> >> to the class with an empty function the "user" then has to fill. which one
> >> is it? i would definitely vote for eolian generating at least empty stub
> >> functions so things compile (and likely dont work or do anything useful).
> > The "user" edits its own file and implements the functions that are
> > expected by the generated file.
> > Creating stub functions implies that we need to parse C code and that's
> > what we want to prevent.
> > If you want to create stubs, you have to know a destination file. For
> > most of the cases, it is easy because all the functions of the class are
> > defined in a same file. But we have classes (Evas Object, Edje iirc...)
> > whose user functions are splitted into many files. It would mean you
> > have to indicate which function you want to create in a certain file.
> > Imo, it is preferable that things don't compile so that you will not
> > forget to implement it.
> >> for the func name - static so they dont leak out, ensure the "user" file is
> >> #included into the eolian generated file so we keep all symbols local and
> >> #i'd
> >> say start with _ and add _eoimpl_ (eo implementation) just to ensure it
> >> wont clash with anything else.
> >>
> >> static void
> >> _eoimpl_mmap_set(Eo *obj, Eina_File *f, const char *key)
> >> {
> >> }
> > For the moment, the "user" file includes the generated file. In this
> > way, we don't change the makefiles (I know, bad reason).
> > If we do as you suggested, we have to include many files in the case of
> > scattered functions and put the generated files into the makefiles. The
> > issue here is how we can know which files have to be included. Maybe as
> > parameter of Eolian.
> > With our solution, only one "user" file includes the generated file but
> > we will have to set the user functions as extern into the generated file
> > and to remove the static and that's bad. Except if the main "user" file
> > of the class (e.g evas_object_main.c) includes the other "user" files of
> > the class and the generated file. And so we will just have to remove
> > them from the makefiles.
> > The solution you suggest seems better. Well, I am your minion, so I must
> > agree with you ;-). Seriously I don't know which way to choose for the
> > moment.
> >
> > Concerning the naming conventions, we use for example
> > _eo_obj_load_dpi_get into the generated file and
> > _evas_image_load_dpi_get into the "user" file.
> >>
> >>
> >>> This separation facilitates the generation for the C files. In the
> >>> future, when Eo2 is operational, we will be able to switch fast by
> >>> invoking Eolian to generate legacy and Eo2.
> >>>
> >>> I think this is the best time to speak about the changes we can make in
> >>> the current code to set code conventions:
> >>> - Eolian-generated Eo functions have to call user functions. Which
> >>> convention for the function name? We decided for the moment to go on the
> >>> operation only (_mmap_set).
> >>> - Prototypes of user constructor and destructor. Since we are not
> >>> supposed to see neither va_list nor parameters (except custom
> >>> constructors), we chose to give only the object: static void
> >>> _constructor(Eo *obj)...
> >>> - Data names are for the moment not following the same style. We have
> >>> Evas_Object_Image and Elm_Button_Smart_Data. Since "Smart" comes from
> >>> Evas_Object_Smart inheritance, I think it can be removed. On the other
> >>> way, Evas_Object_Image is imo not enough specific. We could change these
> >>> names to Evas_Image_Data and Elm_Button_Data. Maybe we can change too
> >>> Evas_Object_Protected_Data to Evas_Object_Data, since I don't see for
> >>> the moment the utility of a possible public/protected/private data type.
> >>>
> >>> I hope that next week, we will show how it will look like on a simple
> >>> and little example like ... evas_object_image.c ;-)
> >>>
> >>> JackDanielZ, alias Daniel the 3rd
> >>>
> >>>
> >>>
> >>>
> >>>
> >>> ------------------------------------------------------------------------------
> >>> Rapidly troubleshoot problems before they affect your business. Most IT
> >>> organizations don't have a clear picture of how application performance
> >>> affects their revenue. With AppDynamics, you get 100% visibility into your
> >>> Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics
> >>> Pro!
> >>> http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
> >>> _______________________________________________ enlightenment-devel
> >>> mailing list enlightenment-devel@lists.sourceforge.net
> >>> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> >>>
> >
> > ------------------------------------------------------------------------------
> > Rapidly troubleshoot problems before they affect your business. Most IT
> > organizations don't have a clear picture of how application performance
> > affects their revenue. With AppDynamics, you get 100% visibility into your
> > Java,.NET, & PHP application. Start your 15-day FREE TRIAL of AppDynamics
> > Pro!
> > http://pubads.g.doubleclick.net/gampad/clk?id=84349831&iu=/4140/ostg.clktrk
> > _______________________________________________ enlightenment-devel mailing
> > list enlightenment-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> >
> 
> 
> ------------------------------------------------------------------------------
> CenturyLink Cloud: The Leader in Enterprise Cloud Services.
> Learn Why More Businesses Are Choosing CenturyLink Cloud For
> Critical Workloads, Development Environments & Everything In Between.
> Get a Quote or Start a Free Trial Today. 
> http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
> _______________________________________________
> enlightenment-devel mailing list
> enlightenment-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-devel
> 


-- 
------------- Codito, ergo sum - "I code, therefore I am" --------------
The Rasterman (Carsten Haitzler)    ras...@rasterman.com


------------------------------------------------------------------------------
CenturyLink Cloud: The Leader in Enterprise Cloud Services.
Learn Why More Businesses Are Choosing CenturyLink Cloud For
Critical Workloads, Development Environments & Everything In Between.
Get a Quote or Start a Free Trial Today. 
http://pubads.g.doubleclick.net/gampad/clk?id=119420431&iu=/4140/ostg.clktrk
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to