diff -u Global.orig/repl.js Global/repl.js --- Global.orig/repl.js 2008-01-17 13:22:07.000000000 +0100 +++ Global/repl.js 2008-02-03 21:36:41.000000000 +0100 @@ -33,12 +33,12 @@ switch (type) { case Server.BEGIN_SESSION: connection.writeln("Hello! This is HopRepl Alpha (c) 2008 Tobi Schäfer"); - connection.write("REPL> "); break; + connection.write("repl> "); break; case Server.HANDLE_DATA: self.connection = connection; - evaluate(connection, type, data); - connection.write("REPL> "); break; + receive(connection, type, data); + break; case Server.HANDLE_EXCEPTION: break; @@ -53,19 +53,78 @@ var context = rhino.Context.enter(); var scope, stack = []; + var env = { + inputMode: 'line' + }; + var savedEnv = {}; + + var inputBuffer = ''; + var receive = function(connection, type, data) { + switch(env['inputMode']) { + case 'line': + try { + var result = Packages.Repl.evaluate(scope, data, self, connection); + if (result !== undefined) { + connection.writeln(result); + } + } catch (ex) { + connection.writeln(ex); + } + connection.write("repl> "); + + break; + case 'multiline': + if(data.match(/--end-remote-input/m)) { + inputBuffer += data.replace(/--end-remote-input/m, ''); + try { + var result = Packages.Repl.evaluate(scope, inputBuffer, self, connection); + if (result !== undefined) { + connection.writeln(result); + } + } catch(ex) { + connection.writeln(ex); + } finally { + inputBuffer = ''; + connection.write("repl> "); + } + } else { + inputBuffer += data; + } + + break; + } - var evaluate = function(connection, type, data) { - try { - var result = Packages.Repl.evaluate(scope, data, self, connection); - if (result !== undefined) { - connection.writeln(result); - } - } catch (ex) { - connection.writeln(ex); - } return; } - + + this.setenv = function(name, value) { + env[name] = value; + return value; + } + + this.getenv = function(name) { + return env[name]; + } + + this.popenv = function() { + var name; + for(var i=0,l=arguments.length; i