summaryrefslogtreecommitdiff
path: root/lib/vm.js
diff options
context:
space:
mode:
authorisaacs <i@izs.me>2012-02-27 17:19:12 -0800
committerisaacs <i@izs.me>2012-02-27 17:28:42 -0800
commit44daa9836b5bb4cfb8434b35bb1a12fc324223aa (patch)
tree20b531f1896a0dbf4abc9d01599c23375e957f14 /lib/vm.js
parent29463cb60c2079a046f9c255fb0eccecea2674fc (diff)
downloadandroid-node-v8-44daa9836b5bb4cfb8434b35bb1a12fc324223aa.tar.gz
android-node-v8-44daa9836b5bb4cfb8434b35bb1a12fc324223aa.tar.bz2
android-node-v8-44daa9836b5bb4cfb8434b35bb1a12fc324223aa.zip
Wrap NodeScript binding class in JavaScript layer
This makes it easy to prevent errors where Script methods are called on non-script objects, resulting in Assertion failures.
Diffstat (limited to 'lib/vm.js')
-rw-r--r--lib/vm.js36
1 files changed, 29 insertions, 7 deletions
diff --git a/lib/vm.js b/lib/vm.js
index d3348afac5..75049e5185 100644
--- a/lib/vm.js
+++ b/lib/vm.js
@@ -21,12 +21,34 @@
var binding = process.binding('evals');
-exports.Script = binding.NodeScript;
-exports.createScript = function(code, ctx, name) {
- return new exports.Script(code, ctx, name);
+module.exports = Script;
+Script.Script = Script;
+
+function Script(code, ctx, filename) {
+ if (!(this instanceof Script)) {
+ return new Script(code, ctx, filename);
+ }
+
+ var ns = new binding.NodeScript(code, ctx, filename);
+
+ // bind all methods to this Script object
+ Object.keys(binding.NodeScript.prototype).forEach(function(f) {
+ if (typeof binding.NodeScript.prototype[f] === 'function') {
+ this[f] = function() {
+ if (!(this instanceof Script)) {
+ throw new TypeError('invalid call to '+f);
+ }
+ return ns[f].apply(ns, arguments);
+ };
+ }
+ }, this);
+};
+
+Script.createScript = function(code, ctx, name) {
+ return new Script(code, ctx, name);
};
-exports.createContext = binding.NodeScript.createContext;
-exports.runInContext = binding.NodeScript.runInContext;
-exports.runInThisContext = binding.NodeScript.runInThisContext;
-exports.runInNewContext = binding.NodeScript.runInNewContext;
+Script.createContext = binding.NodeScript.createContext;
+Script.runInContext = binding.NodeScript.runInContext;
+Script.runInThisContext = binding.NodeScript.runInThisContext;
+Script.runInNewContext = binding.NodeScript.runInNewContext;