Welcome to SnowMonkey project website!
Go to SourceForge.net project page: http://sourceforge.net/projects/snowmonkey
The goal of this project is to create binding library for SpiderMonkey (Netscape's implementation of JavaScript engine, see http://www.mozilla.org/js/spidermonkey/ for more details). This library will make heavy usage of templates, STL and Boost libraries in order to simplify binding syntax as much as possible. Final binding syntax should look as following:
#include <snowmonkey.hpp>
using snow_monkey;
// classes which will be registered
class MyClass
{
int abc;
public:
// constructors
Myclass() {}
MyClass(int, int) {}
// methods
void foo() {}
int bar(int, double, long) { return 0; }
// member variables and property getters/setters
int prop;
double ro_value;
int get_abc() const { return abc; }
void set_abc(int v) { abc = v; }
// static methods
static void s_foo() {}
// static member variables and property getters/setters
static int s_bar;
// enum
enum { AA, BB = 10, CC };
};
int MyClass::s_bar = 0;
class OtherClass
{
void foo(int) {}
};
int main()
{
// create JS Engine object
js_engine js(SM_DEFAULT_RUNTIME_SIZE, SM_DEFAULT_STACK_SIZE);
// import various external items to JS Engine
module(js)
[
// register class Myclass
class_<MyClass>("MyClass")
// register constructors
.ctor<>()
.ctor<int, int>()
// register methods
.fun("foo", &MyClass::foo)
.fun("bar", &MyClass::bar)
// register properties
.prop("prop", get(&MyClass::prop), set(&MyClass::prop))
.prop("abc", get(&MyClass::get_abc), set(&MyClass::set_abc))
.prop("value", get(&MyClass::ro_value))
// register static methods
.s_fun(""_foo", &MyClass::s_foo),
// register static properties
.s_prop("s_bar", get(&MyClass::s_bar), set(&MyClass::s_bar))
// register enums (their values will be registered as static read-only properties)
.enum_()
[
enum_val("AA", MyClass::AA),
enum_val("BB", MyClass::BB),
enum_val("CC", MyClass::CC)
],
// register class OtherClass
class_<OtherClass>("OtherClass")
.ctor<>()
.fun("foo", &OtherClass::foo)
];
// execute some JS Script
char* js_script =
"var mc = new MyClas();\n"
"var oc = new OtherClass();\n"
"oc.foo(mc.bar(1, 2, 3));
}
|