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)); } |