mirror of
https://github.com/samsonjs/elisp.js.git
synced 2026-03-25 09:15:49 +00:00
69 lines
1.6 KiB
JavaScript
69 lines
1.6 KiB
JavaScript
////
|
|
// Emacs Lisp implementation in JavaScript.
|
|
//
|
|
// Copyright (c) 2009 Sami Samhuri - sami.samhuri@gmail.com
|
|
//
|
|
// Released under the terms of the MIT license. See the included file
|
|
// LICENSE.
|
|
|
|
var parser = require('elisp/parser'),
|
|
evaluator = require('elisp/evaluator'),
|
|
utils = require('elisp/utils'),
|
|
Parser = parser.Parser,
|
|
Evaluator = evaluator.Evaluator;
|
|
|
|
// this should probably be renamed to avoid confusion
|
|
var eval = function(string) {
|
|
var p = new Parser(),
|
|
e = new Evaluator();
|
|
return e.evalExpressions(p.parse(string));
|
|
};
|
|
exports.eval = eval;
|
|
|
|
var parse = function(string) {
|
|
var p = new Parser();
|
|
return p.parse(string);
|
|
};
|
|
exports.parse = parse;
|
|
|
|
var parseOne = function(string) {
|
|
return parse(string).car();
|
|
};
|
|
exports.parseOne = parseOne;
|
|
exports.read = parseOne;
|
|
|
|
exports.pp = utils.pp;
|
|
|
|
var rep = function(string) {
|
|
var p = new Parser(),
|
|
e = new Evaluator();
|
|
utils.pp(e.eval(p.read(string)));
|
|
};
|
|
exports.rep = rep;
|
|
|
|
var repl = function() {
|
|
var p = new Parser(),
|
|
e = new Evaluator(),
|
|
sys = require('system'),
|
|
settings = require('elisp/settings');
|
|
while (true) {
|
|
if (!settings.hidePrompt) {
|
|
sys.stdout.print("elisp> "); // i don't want a newline, grrrr
|
|
}
|
|
try {
|
|
var line = sys.stdin.readLine();
|
|
while (!line) {
|
|
line = sys.stdin.readLine();
|
|
}
|
|
if (line.substring(0,1).toLowerCase() == 'q') return;
|
|
utils.pp(e.eval(p.parseOne(line)));
|
|
} catch (x) {
|
|
if (x.evalError) {
|
|
print('[error] ' + x.message + ': ' + x.expression);
|
|
}
|
|
else throw(x);
|
|
}
|
|
}
|
|
};
|
|
exports.repl = repl;
|
|
|