Netscape 'Spidermonkey' JavaScript bindings
Warrick Buchanan <[email protected]>
| Newsgroups | gmane.comp.lib.boost.langbinding |
|---|---|
| Message-ID | <415C917D807AD411B72C00805FF7330B094BFF6D@MAILSRV> |
Hi there,
First off thanks to David for letting me know about the existance of this
list. I currently have the beginnings (compiling with MSVC++ 7.1) of
bindings for Netscape's 'Spidermonkey' JavaScript Engine (1.5 RC6) with
which I can do stuff like the following:
...
struct Vector3
{
float x, y, z;
float LengthSquared()
{
return x*x + y*y + z*z;
}
};
Declare<Vector3>::Property<0>("x", &Vector3::x);
Declare<Vector3>::Property<1>("y", &Vector3::y);
Declare<Vector3>::Property<2>("z", &Vector3::z);
Declare<Vector3>::Function<0>("lengthSquared", &Vector3::LengthSquared);
Declare<Vector3>::Definition("Vector3", jsContext, jsObject, jsPrototype);
...
Then in JavaScript land I can do:
...
var v = new Vector3();
v.x = 3.0;
v.y = 4.0;
v.z = 5.0;
var l = v.lengthSquared();
...
Of course I wouldn't like to reinvent the wheel or any sub-components of
it(!), and am more than happy to help build this into something usable by
others via boost (Including changing coding style from mine to the
'boostified' one ;) ).
I'm aware that my current binding classes/functions don't quite match up
with boost::python at the moment (_class::def() etc ) for example - and I'm
not sure if this is a good or bad thing yet (as boost::python has python
like syntax of course!) and whether or not it will have to change due to the
features I have yet to add. Also I have this notion of a property/function
index that originally came from spidermonkeys 'tinyids' due to the way I
evolved the code - hence the need for <0>, <1> etc - but this has the added
side effect of allowing me to change the definition of the exposed classes
during runtime - replace a function property etc.
Internally I use a static table of type safe function pointers for the
get/set functions for the properties - although I'm looking to change this
so I can patch it directly into the function pointers spidermonkey keeps for
these (to get rid of the un-needed extra level of indirection) - I actually
do this for classes functions already.
For generating the overloaded templates needed to wrap all combinations of
class functions to expose I started to look at boost::python's way of doing
things with the boost::preprocessor library (accompanied by a stiff drink).
But I think my preference would be to have a small C++ app to generate the
code instead (Maybe the venerable pre-processor should be replaced by PHP or
some equivalent one day!).
Obviously I still have a fair amount of work to do - parameter/return value
ownership, constructors etc.
Anyhow I shall have a good read of this lists archives now...
(BTW in case it gets mentioned I am aware of the CliPP library and am
following its progress with much interest but unfortunately its interpreter
is not as complete as the Netscape one yet I believe)
Cheers,
Warrick Buchanan
Senior Tools Engineer
Argonaut Games Plc
www.argonaut.com
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id=1470&alloc_id=3638&op=click