From e566173a5faec79761031e1769433639f2897b2a Mon Sep 17 00:00:00 2001 From: Nikhil Marathe Date: Fri, 20 Jan 2012 13:04:24 +0530 Subject: [PATCH] Added calljs example --- calljs/main.cc | 28 ++++++++++++++++++++++++++++ calljs/test.js | 8 ++++++++ calljs/wscript | 13 +++++++++++++ 3 files changed, 49 insertions(+) create mode 100644 calljs/main.cc create mode 100644 calljs/test.js create mode 100644 calljs/wscript diff --git a/calljs/main.cc b/calljs/main.cc new file mode 100644 index 0000000..bcb50a9 --- /dev/null +++ b/calljs/main.cc @@ -0,0 +1,28 @@ +#include +#include +using namespace v8; + +Handle Apply(const Arguments &args) { + HandleScope scope; + + Handle func = Handle::Cast(args[0]); + Handle receiver = args[1]->ToObject(); + + Handle *argv = new Handle[args.Length() - 2]; + for (int i = 2; i < args.Length(); i++) + argv[i-2] = args[i]; + + func->Call(receiver, args.Length()-2, argv); + + delete argv; + return Undefined(); +} + +extern "C" { + static void Init(Handle target) { + HandleScope scope; + + NODE_SET_METHOD(target, "apply", Apply); + } + NODE_MODULE(calljs, Init) +} diff --git a/calljs/test.js b/calljs/test.js new file mode 100644 index 0000000..1159619 --- /dev/null +++ b/calljs/test.js @@ -0,0 +1,8 @@ +var calljs = require("./build/Release/calljs") + +var f = function() { + console.log("This", this); + console.log(arguments); +} + +calljs.apply(f, { cool: "dude" }, "one", 2, 3.14); diff --git a/calljs/wscript b/calljs/wscript new file mode 100644 index 0000000..92b1c41 --- /dev/null +++ b/calljs/wscript @@ -0,0 +1,13 @@ +import Options + +def set_options(opt): + opt.tool_options("compiler_cxx") + +def configure(conf): + conf.check_tool("compiler_cxx") + conf.check_tool("node_addon") + +def build(bld): + obj = bld.new_task_gen("cxx", "shlib", "node_addon") + obj.target = "calljs" + obj.source = "main.cc"