Browse files

merging all narwhal integration into a single file, so we can merge t…

…he node branch without breaking narwhal compatibility
  • Loading branch information...
1 parent 47bc1d5 commit 5ec096e40dca1897bd4d3c4638fb80c32aebf24e @jashkenas committed Feb 7, 2010
View
3 Rakefile
@@ -19,8 +19,7 @@ namespace :build do
desc "Compile the Narwhal interface for --interactive and --run"
task :narwhal do
- sh "bin/coffee lib/coffee_script/narwhal/*.coffee -o lib/coffee_script/narwhal/lib/coffee-script"
- sh "mv lib/coffee_script/narwhal/lib/coffee-script/coffee-script.js lib/coffee_script/narwhal/lib/coffee-script.js"
+ sh "bin/coffee lib/coffee_script/narwhal/*.coffee -o lib/coffee_script/narwhal"
end
desc "Compile and install the Ultraviolet syntax highlighter"
View
54 lib/coffee_script/narwhal/coffee-script.coffee
@@ -1,62 +1,74 @@
-# This (javascript) file is generated from lib/coffee_script/narwhal/coffee-script.coffee
-
-# Executes the `coffee` Ruby program to convert from CoffeeScript
-# to Javascript. Eventually this will hopefully happen entirely within JS.
+# The Narwhal-compatibility wrapper for CoffeeScript.
# Require external dependencies.
-OS: require('os')
-File: require('file')
-Readline: require('readline')
+OS: require 'os'
+File: require 'file'
+Readline: require 'readline'
# The path to the CoffeeScript Compiler.
-coffeePath: File.path(module.path).dirname().dirname().dirname().dirname().dirname().join('bin', 'coffee')
+coffeePath: File.path(module.path).dirname().dirname().dirname().dirname().join('bin', 'coffee')
# Our general-purpose error handler.
checkForErrors: (coffeeProcess) ->
return true if coffeeProcess.wait() is 0
- system.stderr.print(coffeeProcess.stderr.read())
- throw new Error("CoffeeScript compile error")
+ system.stderr.print coffeeProcess.stderr.read()
+ throw new Error "CoffeeScript compile error"
# Run a simple REPL, round-tripping to the CoffeeScript compiler for every
# command.
exports.run: (args) ->
if args.length
for path, i in args
- exports.evalCS(File.read(path))
+ exports.evalCS File.read path
delete args[i]
return true
while true
try
system.stdout.write('coffee> ').flush()
- result: exports.evalCS(Readline.readline(), ['--globals'])
- print(result) if result isnt undefined
+ result: exports.evalCS Readline.readline(), ['--globals']
+ print result if result isnt undefined
catch e
- print(e)
+ print e
# Compile a given CoffeeScript file into JavaScript.
exports.compileFile: (path) ->
- coffee: OS.popen([coffeePath, "--print", "--no-wrap", path])
- checkForErrors(coffee)
+ coffee: OS.popen [coffeePath, "--print", "--no-wrap", path]
+ checkForErrors coffee
coffee.stdout.read()
# Compile a string of CoffeeScript into JavaScript.
exports.compile: (source, flags) ->
- coffee: OS.popen([coffeePath, "--eval", "--no-wrap"].concat(flags or []))
+ coffee: OS.popen [coffeePath, "--eval", "--no-wrap"].concat flags or []
coffee.stdin.write(source).flush().close()
- checkForErrors(coffee)
+ checkForErrors coffee
coffee.stdout.read()
# Evaluating a string of CoffeeScript first compiles it externally.
exports.evalCS: (source, flags) ->
- eval(exports.compile(source, flags))
+ eval exports.compile source, flags
# Make a factory for the CoffeeScript environment.
exports.makeNarwhalFactory: (path) ->
- code: exports.compileFile(path)
+ code: exports.compileFile path
factoryText: "function(require,exports,module,system,print){" + code + "/**/\n}"
if system.engine is "rhino"
Packages.org.mozilla.javascript.Context.getCurrentContext().compileFunction(global, factoryText, path, 0, null)
else
# eval requires parentheses, but parentheses break compileFunction.
- eval("(" + factoryText + ")")
+ eval "(" + factoryText + ")"
+
+# The Narwhal loader for '.coffee' files.
+factories: {}
+loader: {}
+
+# Reload the coffee-script environment from source.
+loader.reload: (topId, path) ->
+ factories[topId]: ->
+ exports.makeNarwhalFactory path
+
+# Ensure that the coffee-script environment is loaded.
+loader.load: (topId, path) ->
+ factories[topId] ||= this.reload topId, path
+
+require.loader.loaders.unshift [".coffee", loader]
View
24 ...offee_script/narwhal/lib/coffee-script.js → lib/coffee_script/narwhal/coffee-script.js
@@ -1,14 +1,12 @@
(function(){
- var File, OS, Readline, checkForErrors, coffeePath;
- // This (javascript) file is generated from lib/coffee_script/narwhal/coffee-script.coffee
- // Executes the `coffee` Ruby program to convert from CoffeeScript
- // to Javascript. Eventually this will hopefully happen entirely within JS.
+ var File, OS, Readline, checkForErrors, coffeePath, factories, loader;
+ // The Narwhal-compatibility wrapper for CoffeeScript.
// Require external dependencies.
OS = require('os');
File = require('file');
Readline = require('readline');
// The path to the CoffeeScript Compiler.
- coffeePath = File.path(module.path).dirname().dirname().dirname().dirname().dirname().join('bin', 'coffee');
+ coffeePath = File.path(module.path).dirname().dirname().dirname().dirname().join('bin', 'coffee');
// Our general-purpose error handler.
checkForErrors = function checkForErrors(coffeeProcess) {
if (coffeeProcess.wait() === 0) {
@@ -77,4 +75,20 @@
return eval("(" + factoryText + ")");
}
};
+ // The Narwhal loader for '.coffee' files.
+ factories = {
+ };
+ loader = {
+ };
+ // Reload the coffee-script environment from source.
+ loader.reload = function reload(topId, path) {
+ return factories[topId] = function() {
+ return exports.makeNarwhalFactory(path);
+ };
+ };
+ // Ensure that the coffee-script environment is loaded.
+ loader.load = function load(topId, path) {
+ return factories[topId] = factories[topId] || this.reload(topId, path);
+ };
+ require.loader.loaders.unshift([".coffee", loader]);
})();
View
21 lib/coffee_script/narwhal/lib/coffee-script/loader.js
@@ -1,21 +0,0 @@
-(function(){
- var coffeescript, factories, loader;
- // This (javascript) file is generated from lib/coffee_script/narwhal/loader.coffee
- coffeescript = null;
- factories = {
- };
- loader = {
- // Reload the coffee-script environment from source.
- reload: function reload(topId, path) {
- coffeescript = coffeescript || require('coffee-script');
- return factories[topId] = function() {
- return coffeescript.makeNarwhalFactory(path);
- };
- },
- // Ensure that the coffee-script environment is loaded.
- load: function load(topId, path) {
- return factories[topId] = factories[topId] || this.reload(topId, path);
- }
- };
- require.loader.loaders.unshift([".coffee", loader]);
-})();
View
19 lib/coffee_script/narwhal/loader.coffee
@@ -1,19 +0,0 @@
-# This (javascript) file is generated from lib/coffee_script/narwhal/loader.coffee
-
-coffeescript: null
-factories: {}
-
-loader: {
-
- # Reload the coffee-script environment from source.
- reload: (topId, path) ->
- coffeescript ||= require('coffee-script')
- factories[topId]: -> coffeescript.makeNarwhalFactory(path)
-
- # Ensure that the coffee-script environment is loaded.
- load: (topId, path) ->
- factories[topId] ||= this.reload(topId, path)
-
-}
-
-require.loader.loaders.unshift([".coffee", loader])
View
4 package.json
@@ -1,7 +1,7 @@
{
"name": "coffee-script",
- "lib": "lib/coffee_script/narwhal/lib",
- "preload": ["coffee-script/loader"],
+ "lib": "lib/coffee_script/narwhal",
+ "preload": ["narwhal"],
"description": "Unfancy JavaScript",
"keywords": ["javascript", "language"],
"author": "Jeremy Ashkenas",

0 comments on commit 5ec096e

Please sign in to comment.