From: Xavier D. <xav...@gm...> - 2008-03-02 15:40:02
|
So the last commit deals with all the runtime/multi-module issues, as far as I am aware of them. Please let me know if I've missed something. All the .multicpptest tests pass. There are three bits of static data kept by the module, and these are initialized at module load time. 1. There is a static t_id for each of swig_ref and swig_packed, the two octave_base_value derivatives used to represent SWIG types. On module load, these get assigned by {swig_ref,swig_packed}::register_type that will find the tid of a previous load or generate a new one (via octave_value_typeinfo::do_register_type). 2. All type lookups are done through the SWIG runtime calls, using the swig_module_info list that's connected by the __SWIG_MODULE__ interpreter global. 3. The director rtdir map is kept as clientdata of the first-loaded module. Apart from the above, the essential thing an external runtime requires is static linkage (though maybe this should be optional?), via anonymous namespace here. That the following works is sufficient. rm -f multi_import_{a,b}* ~/swig/preinst-swig -octave -c++ -o out_a.cpp ../multi_import_a.i ~/swig/preinst-swig -octave -c++ -o out_b.cpp ../multi_import_b.i g++ -shared -o out.oct out_a.cpp out_b.cpp -I.. octave -q octave:1> autoload("multi_import_b",file_in_loadpath("out.oct")) octave:2> autoload("multi_import_a",file_in_loadpath("out.oct")) octave:3> source("multi_import_runme.m") Xavier On Wed, Feb 20, 2008 at 12:54 AM, John Lenz <jl...@ma...> wrote: > > On 02/18/2008 10:22 PM, Xavier Delacour wrote: > > On Feb 18, 2008 10:02 PM, John Lenz <jl...@ma...> wrote: > >> All the functions in octrun should never rely on any static classes at > >> all... everything needs to be passed as arguments or looked up. For > >> example, your use of octave_module in the find_member function should not > >> be hard coded. Instead, it should use MangledTypeQuery to search all > >> modules, or it take a param as a constructor or it should look up with > >> GetModule (maybe caching the swig_module_info in a private member of that > >> class for performance reasons... but it should be looked up at least once). > > > > I removed the statics and added a lookup for the module (new patch > > attached). There are a number of other minor module-related issues > > that need to be addressed, but I was going to let getting the test > > suite to pass drive that. > > > > I hadn't thought of using the runtime externally. I'll have a closer > > look at how the other modules deal with that. > > > > Looks better. I have some ideas on how to modify it to work with the > external runtime... I was scanning through > http://wiki.octave.org/wiki.pl?CodaTypes > to get an idea of what is involved. > > I kinda have a solution, but don't have enough time to write it up > today... maybe tomorrow. > > John > |