first draft of node.js REPL

This commit is contained in:
Jeremy Ashkenas
2010-01-29 22:51:51 -05:00
parent 83285fe170
commit ba2d9df25f
5 changed files with 95 additions and 1 deletions

15
src/coffee-script.coffee Normal file
View File

@@ -0,0 +1,15 @@
# Executes the `coffee` Ruby program to convert from CoffeeScript to JavaScript.
sys: require('sys')
exports.compile: (code, callback) ->
js: ''
coffee: process.createChildProcess 'coffee', ['--eval', '--no-wrap', '--globals']
coffee.addListener 'output', (results) ->
js += results if results?
coffee.addListener 'exit', ->
callback(js)
coffee.write(code)
coffee.close()

26
src/repl.coffee Normal file
View File

@@ -0,0 +1,26 @@
# A CoffeeScript port/version of the Node.js REPL.
# Required modules.
coffee: require './coffee-script'
process.mixin require 'sys'
# Shortcut variables.
prompt: 'coffee> '
quit: -> process.stdio.close()
# The main REPL function. Called everytime a line of code is entered.
readline: (code) -> coffee.compile code, run
# Attempt to evaluate the command. If there's an exception, print it.
run: (js) ->
try
val: eval(js)
p val if val isnt undefined
catch err
puts err.stack or err.toString()
print prompt
# Start up the REPL.
process.stdio.open()
process.stdio.addListener 'data', readline
print prompt