diff --git a/lib/coffee-script.js b/lib/coffee-script.js index 23a91ebc..8dcdc66f 100755 --- a/lib/coffee-script.js +++ b/lib/coffee-script.js @@ -55,6 +55,12 @@ } return root._compile(exports.compile(code, options), root.filename); }; + exports.eval = function(code, options) { + var __dirname, __filename; + __filename = options.fileName; + __dirname = path.dirname(__filename); + return eval(exports.compile(code, options)); + }; lexer = new Lexer(); parser.lexer = { lex: function() { diff --git a/lib/repl.js b/lib/repl.js index bb62ff45..2e7eeab4 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -12,7 +12,7 @@ run = function(buffer) { var val; try { - val = CoffeeScript.run(buffer.toString(), { + val = CoffeeScript.eval(buffer.toString(), { noWrap: true, globals: true, fileName: 'repl' diff --git a/src/coffee-script.coffee b/src/coffee-script.coffee index a843d4eb..b2220ecb 100755 --- a/src/coffee-script.coffee +++ b/src/coffee-script.coffee @@ -65,6 +65,13 @@ exports.run = (code, options) -> # Compile root._compile exports.compile(code, options), root.filename +# Compile and evaluate a string of CoffeeScript (in a Node.js-like environment). +# The CoffeeScript REPL uses this to run the input. +exports.eval = (code, options) -> + __filename = options.fileName + __dirname = path.dirname __filename + eval exports.compile(code, options) + # Instantiate a Lexer for our use here. lexer = new Lexer diff --git a/src/repl.coffee b/src/repl.coffee index 772e9a79..f869da24 100644 --- a/src/repl.coffee +++ b/src/repl.coffee @@ -20,7 +20,7 @@ helpers.extend global, quit: -> process.exit(0) # of exiting. run = (buffer) -> try - val = CoffeeScript.run buffer.toString(), noWrap: true, globals: true, fileName: 'repl' + val = CoffeeScript.eval buffer.toString(), noWrap: true, globals: true, fileName: 'repl' puts inspect val if val isnt undefined catch err puts err.stack or err.toString() diff --git a/test/test_compilation.coffee b/test/test_compilation.coffee index 9f664640..e5b4ec49 100644 --- a/test/test_compilation.coffee +++ b/test/test_compilation.coffee @@ -12,3 +12,4 @@ CoffeeScript.run("resultArray.push i for i of global", {noWrap: on, globals: on, ok 'setInterval' in global.resultArray +ok 'passed' is CoffeeScript.eval '"passed"', noWrap: on, globals: on, fileName: 'tests'