--- /dev/null
+// Generated by CoffeeScript 1.10.0
+(function() {
+ var Lexer, SourceMap, base, compile, ext, formatSourcePosition, fs, getSourceMap, helpers, i, len, lexer, parser, path, ref, sourceMaps, vm, withPrettyErrors,
+ hasProp = {}.hasOwnProperty,
+ indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };
+
+ fs = require('fs');
+
+ vm = require('vm');
+
+ path = require('path');
+
+ Lexer = require('./lexer').Lexer;
+
+ parser = require('./parser').parser;
+
+ helpers = require('./helpers');
+
+ SourceMap = require('./sourcemap');
+
+ exports.VERSION = '1.10.0';
+
+ exports.FILE_EXTENSIONS = ['.coffee', '.litcoffee', '.coffee.md'];
+
+ exports.helpers = helpers;
+
+ withPrettyErrors = function(fn) {
+ return function(code, options) {
+ var err, error;
+ if (options == null) {
+ options = {};
+ }
+ try {
+ return fn.call(this, code, options);
+ } catch (error) {
+ err = error;
+ if (typeof code !== 'string') {
+ throw err;
+ }
+ throw helpers.updateSyntaxError(err, code, options.filename);
+ }
+ };
+ };
+
+ exports.compile = compile = withPrettyErrors(function(code, options) {
+ var answer, currentColumn, currentLine, extend, fragment, fragments, header, i, js, len, map, merge, newLines, token, tokens;
+ merge = helpers.merge, extend = helpers.extend;
+ options = extend({}, options);
+ if (options.sourceMap) {
+ map = new SourceMap;
+ }
+ tokens = lexer.tokenize(code, options);
+ options.referencedVars = (function() {
+ var i, len, results;
+ results = [];
+ for (i = 0, len = tokens.length; i < len; i++) {
+ token = tokens[i];
+ if (token.variable) {
+ results.push(token[1]);
+ }
+ }
+ return results;
+ })();
+ fragments = parser.parse(tokens).compileToFragments(options);
+ currentLine = 0;
+ if (options.header) {
+ currentLine += 1;
+ }
+ if (options.shiftLine) {
+ currentLine += 1;
+ }
+ currentColumn = 0;
+ js = "";
+ for (i = 0, len = fragments.length; i < len; i++) {
+ fragment = fragments[i];
+ if (options.sourceMap) {
+ if (fragment.locationData && !/^[;\s]*$/.test(fragment.code)) {
+ map.add([fragment.locationData.first_line, fragment.locationData.first_column], [currentLine, currentColumn], {
+ noReplace: true
+ });
+ }
+ newLines = helpers.count(fragment.code, "\n");
+ currentLine += newLines;
+ if (newLines) {
+ currentColumn = fragment.code.length - (fragment.code.lastIndexOf("\n") + 1);
+ } else {
+ currentColumn += fragment.code.length;
+ }
+ }
+ js += fragment.code;
+ }
+ if (options.header) {
+ header = "Generated by CoffeeScript " + this.VERSION;
+ js = "// " + header + "\n" + js;
+ }
+ if (options.sourceMap) {
+ answer = {
+ js: js
+ };
+ answer.sourceMap = map;
+ answer.v3SourceMap = map.generate(options, code);
+ return answer;
+ } else {
+ return js;
+ }
+ });
+
+ exports.tokens = withPrettyErrors(function(code, options) {
+ return lexer.tokenize(code, options);
+ });
+
+ exports.nodes = withPrettyErrors(function(source, options) {
+ if (typeof source === 'string') {
+ return parser.parse(lexer.tokenize(source, options));
+ } else {
+ return parser.parse(source);
+ }
+ });
+
+ exports.run = function(code, options) {
+ var answer, dir, mainModule, ref;
+ if (options == null) {
+ options = {};
+ }
+ mainModule = require.main;
+ mainModule.filename = process.argv[1] = options.filename ? fs.realpathSync(options.filename) : '.';
+ mainModule.moduleCache && (mainModule.moduleCache = {});
+ dir = options.filename ? path.dirname(fs.realpathSync(options.filename)) : fs.realpathSync('.');
+ mainModule.paths = require('module')._nodeModulePaths(dir);
+ if (!helpers.isCoffee(mainModule.filename) || require.extensions) {
+ answer = compile(code, options);
+ code = (ref = answer.js) != null ? ref : answer;
+ }
+ return mainModule._compile(code, mainModule.filename);
+ };
+
+ exports["eval"] = function(code, options) {
+ var Module, _module, _require, createContext, i, isContext, js, k, len, o, r, ref, ref1, ref2, ref3, sandbox, v;
+ if (options == null) {
+ options = {};
+ }
+ if (!(code = code.trim())) {
+ return;
+ }
+ createContext = (ref = vm.Script.createContext) != null ? ref : vm.createContext;
+ isContext = (ref1 = vm.isContext) != null ? ref1 : function(ctx) {
+ return options.sandbox instanceof createContext().constructor;
+ };
+ if (createContext) {
+ if (options.sandbox != null) {
+ if (isContext(options.sandbox)) {
+ sandbox = options.sandbox;
+ } else {
+ sandbox = createContext();
+ ref2 = options.sandbox;
+ for (k in ref2) {
+ if (!hasProp.call(ref2, k)) continue;
+ v = ref2[k];
+ sandbox[k] = v;
+ }
+ }
+ sandbox.global = sandbox.root = sandbox.GLOBAL = sandbox;
+ } else {
+ sandbox = global;
+ }
+ sandbox.__filename = options.filename || 'eval';
+ sandbox.__dirname = path.dirname(sandbox.__filename);
+ if (!(sandbox !== global || sandbox.module || sandbox.require)) {
+ Module = require('module');
+ sandbox.module = _module = new Module(options.modulename || 'eval');
+ sandbox.require = _require = function(path) {
+ return Module._load(path, _module, true);
+ };
+ _module.filename = sandbox.__filename;
+ ref3 = Object.getOwnPropertyNames(require);
+ for (i = 0, len = ref3.length; i < len; i++) {
+ r = ref3[i];
+ if (r !== 'paths' && r !== 'arguments' && r !== 'caller') {
+ _require[r] = require[r];
+ }
+ }
+ _require.paths = _module.paths = Module._nodeModulePaths(process.cwd());
+ _require.resolve = function(request) {
+ return Module._resolveFilename(request, _module);
+ };
+ }
+ }
+ o = {};
+ for (k in options) {
+ if (!hasProp.call(options, k)) continue;
+ v = options[k];
+ o[k] = v;
+ }
+ o.bare = true;
+ js = compile(code, o);
+ if (sandbox === global) {
+ return vm.runInThisContext(js);
+ } else {
+ return vm.runInContext(js, sandbox);
+ }
+ };
+
+ exports.register = function() {
+ return require('./register');
+ };
+
+ if (require.extensions) {
+ ref = this.FILE_EXTENSIONS;
+ for (i = 0, len = ref.length; i < len; i++) {
+ ext = ref[i];
+ if ((base = require.extensions)[ext] == null) {
+ base[ext] = function() {
+ throw new Error("Use CoffeeScript.register() or require the coffee-script/register module to require " + ext + " files.");
+ };
+ }
+ }
+ }
+
+ exports._compileFile = function(filename, sourceMap) {
+ var answer, err, error, raw, stripped;
+ if (sourceMap == null) {
+ sourceMap = false;
+ }
+ raw = fs.readFileSync(filename, 'utf8');
+ stripped = raw.charCodeAt(0) === 0xFEFF ? raw.substring(1) : raw;
+ try {
+ answer = compile(stripped, {
+ filename: filename,
+ sourceMap: sourceMap,
+ literate: helpers.isLiterate(filename)
+ });
+ } catch (error) {
+ err = error;
+ throw helpers.updateSyntaxError(err, stripped, filename);
+ }
+ return answer;
+ };
+
+ lexer = new Lexer;
+
+ parser.lexer = {
+ lex: function() {
+ var tag, token;
+ token = parser.tokens[this.pos++];
+ if (token) {
+ tag = token[0], this.yytext = token[1], this.yylloc = token[2];
+ parser.errorToken = token.origin || token;
+ this.yylineno = this.yylloc.first_line;
+ } else {
+ tag = '';
+ }
+ return tag;
+ },
+ setInput: function(tokens) {
+ parser.tokens = tokens;
+ return this.pos = 0;
+ },
+ upcomingInput: function() {
+ return "";
+ }
+ };
+
+ parser.yy = require('./nodes');
+
+ parser.yy.parseError = function(message, arg) {
+ var errorLoc, errorTag, errorText, errorToken, token, tokens;
+ token = arg.token;
+ errorToken = parser.errorToken, tokens = parser.tokens;
+ errorTag = errorToken[0], errorText = errorToken[1], errorLoc = errorToken[2];
+ errorText = (function() {
+ switch (false) {
+ case errorToken !== tokens[tokens.length - 1]:
+ return 'end of input';
+ case errorTag !== 'INDENT' && errorTag !== 'OUTDENT':
+ return 'indentation';
+ case errorTag !== 'IDENTIFIER' && errorTag !== 'NUMBER' && errorTag !== 'STRING' && errorTag !== 'STRING_START' && errorTag !== 'REGEX' && errorTag !== 'REGEX_START':
+ return errorTag.replace(/_START$/, '').toLowerCase();
+ default:
+ return helpers.nameWhitespaceCharacter(errorText);
+ }
+ })();
+ return helpers.throwSyntaxError("unexpected " + errorText, errorLoc);
+ };
+
+ formatSourcePosition = function(frame, getSourceMapping) {
+ var as, column, fileLocation, fileName, functionName, isConstructor, isMethodCall, line, methodName, source, tp, typeName;
+ fileName = void 0;
+ fileLocation = '';
+ if (frame.isNative()) {
+ fileLocation = "native";
+ } else {
+ if (frame.isEval()) {
+ fileName = frame.getScriptNameOrSourceURL();
+ if (!fileName) {
+ fileLocation = (frame.getEvalOrigin()) + ", ";
+ }
+ } else {
+ fileName = frame.getFileName();
+ }
+ fileName || (fileName = "<anonymous>");
+ line = frame.getLineNumber();
+ column = frame.getColumnNumber();
+ source = getSourceMapping(fileName, line, column);
+ fileLocation = source ? fileName + ":" + source[0] + ":" + source[1] : fileName + ":" + line + ":" + column;
+ }
+ functionName = frame.getFunctionName();
+ isConstructor = frame.isConstructor();
+ isMethodCall = !(frame.isToplevel() || isConstructor);
+ if (isMethodCall) {
+ methodName = frame.getMethodName();
+ typeName = frame.getTypeName();
+ if (functionName) {
+ tp = as = '';
+ if (typeName && functionName.indexOf(typeName)) {
+ tp = typeName + ".";
+ }
+ if (methodName && functionName.indexOf("." + methodName) !== functionName.length - methodName.length - 1) {
+ as = " [as " + methodName + "]";
+ }
+ return "" + tp + functionName + as + " (" + fileLocation + ")";
+ } else {
+ return typeName + "." + (methodName || '<anonymous>') + " (" + fileLocation + ")";
+ }
+ } else if (isConstructor) {
+ return "new " + (functionName || '<anonymous>') + " (" + fileLocation + ")";
+ } else if (functionName) {
+ return functionName + " (" + fileLocation + ")";
+ } else {
+ return fileLocation;
+ }
+ };
+
+ sourceMaps = {};
+
+ getSourceMap = function(filename) {
+ var answer, ref1;
+ if (sourceMaps[filename]) {
+ return sourceMaps[filename];
+ }
+ if (ref1 = path != null ? path.extname(filename) : void 0, indexOf.call(exports.FILE_EXTENSIONS, ref1) < 0) {
+ return;
+ }
+ answer = exports._compileFile(filename, true);
+ return sourceMaps[filename] = answer.sourceMap;
+ };
+
+ Error.prepareStackTrace = function(err, stack) {
+ var frame, frames, getSourceMapping;
+ getSourceMapping = function(filename, line, column) {
+ var answer, sourceMap;
+ sourceMap = getSourceMap(filename);
+ if (sourceMap) {
+ answer = sourceMap.sourceLocation([line - 1, column - 1]);
+ }
+ if (answer) {
+ return [answer[0] + 1, answer[1] + 1];
+ } else {
+ return null;
+ }
+ };
+ frames = (function() {
+ var j, len1, results;
+ results = [];
+ for (j = 0, len1 = stack.length; j < len1; j++) {
+ frame = stack[j];
+ if (frame.getFunction() === exports.run) {
+ break;
+ }
+ results.push(" at " + (formatSourcePosition(frame, getSourceMapping)));
+ }
+ return results;
+ })();
+ return (err.toString()) + "\n" + (frames.join('\n')) + "\n";
+ };
+
+}).call(this);