diff options
author | isaacs <i@izs.me> | 2012-02-27 17:19:12 -0800 |
---|---|---|
committer | isaacs <i@izs.me> | 2012-02-27 17:28:42 -0800 |
commit | 44daa9836b5bb4cfb8434b35bb1a12fc324223aa (patch) | |
tree | 20b531f1896a0dbf4abc9d01599c23375e957f14 /lib/vm.js | |
parent | 29463cb60c2079a046f9c255fb0eccecea2674fc (diff) | |
download | android-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.js | 36 |
1 files changed, 29 insertions, 7 deletions
@@ -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; |