| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143 | smalltalk.addPackage('REPL', {});smalltalk.addClass('Repl', smalltalk.Object, ['readline', 'interface', 'util'], 'REPL');smalltalk.addMethod("_close",smalltalk.method({selector: "close",category: 'actions',fn: function (){var self=this;return smalltalk.withContext(function($ctx1) { 
_st(_st(process)._stdin())._destroy();return self}, function($ctx1) {$ctx1.fill(self,"close",{}, smalltalk.Repl)})},args: [],source: "close\x0a\x09process stdin destroy",messageSends: ["destroy", "stdin"],referencedClasses: []}),smalltalk.Repl);smalltalk.addMethod("_createInterface",smalltalk.method({selector: "createInterface",category: 'actions',fn: function (){var self=this;return smalltalk.withContext(function($ctx1) { 
self["@interface"]=_st(self["@readline"])._createInterface_stdout_(_st(process)._stdin(),_st(process)._stdout());_st(self["@interface"])._on_do_("line",(function(buffer){return smalltalk.withContext(function($ctx2) {
return _st(self)._eval_(buffer);}, function($ctx2) {$ctx2.fillBlock({buffer:buffer},$ctx1)})}));_st(self["@interface"])._on_do_("close",(function(){return smalltalk.withContext(function($ctx2) {
return _st(self)._close();}, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}));_st(self)._setPrompt();_st(self["@interface"])._prompt();return self}, function($ctx1) {$ctx1.fill(self,"createInterface",{}, smalltalk.Repl)})},args: [],source: "createInterface\x0a\x09\x22No completion for now\x22\x0a\x09interface := readline createInterface: process stdin stdout: process stdout.\x0a\x09interface on: 'line' do: [:buffer  | self eval: buffer].\x0a\x09interface on: 'close' do: [self close].\x0a\x09self setPrompt.\x0a\x09interface prompt",messageSends: ["createInterface:stdout:", "stdin", "stdout", "on:do:", "eval:", "close", "setPrompt", "prompt"],referencedClasses: []}),smalltalk.Repl);smalltalk.addMethod("_eval_",smalltalk.method({selector: "eval:",category: 'actions',fn: function (buffer){var self=this;var result;return smalltalk.withContext(function($ctx1) { 
var $1,$2;$1=_st(buffer)._isEmpty();if(! smalltalk.assert($1)){_st(self)._try_catch_((function(){return smalltalk.withContext(function($ctx2) {
result=_st(_st((smalltalk.Compiler || Compiler))._new())._evaluateExpression_(buffer);result;return _st((smalltalk.Transcript || Transcript))._show_(result);}, function($ctx2) {$ctx2.fillBlock({},$ctx1)})}),(function(e){return smalltalk.withContext(function($ctx2) {
$2=_st(e)._isSmalltalkError();if(smalltalk.assert($2)){return _st(_st((smalltalk.ErrorHandler || ErrorHandler))._new())._handleError_(e);} else {return _st(_st(process)._stdout())._write_(_st(e)._jsStack());};}, function($ctx2) {$ctx2.fillBlock({e:e},$ctx1)})}));};_st(self["@interface"])._prompt();return self}, function($ctx1) {$ctx1.fill(self,"eval:",{buffer:buffer,result:result}, smalltalk.Repl)})},args: ["buffer"],source: "eval: buffer\x0a\x09| result |\x0a\x09buffer isEmpty ifFalse: [\x0a\x09\x09self try: [\x0a\x09\x09\x09result := Compiler new evaluateExpression: buffer.\x0a\x09\x09\x09Transcript show: result]\x0a\x09\x09catch: [:e |\x0a\x09\x09\x09e isSmalltalkError\x0a\x09\x09\x09    ifTrue: [ErrorHandler new handleError: e]\x0a\x09\x09\x09    ifFalse: [process stdout write: e jsStack]]].\x0a\x09interface prompt",messageSends: ["ifFalse:", "try:catch:", "evaluateExpression:", "new", "show:", "ifTrue:ifFalse:", "handleError:", "write:", "jsStack", "stdout", "isSmalltalkError", "isEmpty", "prompt"],referencedClasses: ["Compiler", "Transcript", "ErrorHandler"]}),smalltalk.Repl);smalltalk.addMethod("_initialize",smalltalk.method({selector: "initialize",category: 'initialization',fn: function (){var self=this;return smalltalk.withContext(function($ctx1) { 
smalltalk.Object.fn.prototype._initialize.apply(_st(self), []);self["@readline"]=_st(require)._value_("readline");self["@util"]=_st(require)._value_("util");return self}, function($ctx1) {$ctx1.fill(self,"initialize",{}, smalltalk.Repl)})},args: [],source: "initialize\x0a\x09super initialize.\x0a\x09readline := require value: 'readline'.\x0a\x09util := require value: 'util'",messageSends: ["initialize", "value:"],referencedClasses: []}),smalltalk.Repl);smalltalk.addMethod("_prompt",smalltalk.method({selector: "prompt",category: 'accessing',fn: function (){var self=this;return smalltalk.withContext(function($ctx1) { 
return "amber >> ";}, function($ctx1) {$ctx1.fill(self,"prompt",{}, smalltalk.Repl)})},args: [],source: "prompt\x0a\x09^'amber >> '",messageSends: [],referencedClasses: []}),smalltalk.Repl);smalltalk.addMethod("_setPrompt",smalltalk.method({selector: "setPrompt",category: 'actions',fn: function (){var self=this;return smalltalk.withContext(function($ctx1) { 
_st(self["@interface"])._setPrompt_(_st(self)._prompt());return self}, function($ctx1) {$ctx1.fill(self,"setPrompt",{}, smalltalk.Repl)})},args: [],source: "setPrompt\x0a\x09interface setPrompt: self prompt",messageSends: ["setPrompt:", "prompt"],referencedClasses: []}),smalltalk.Repl);smalltalk.addMethod("_main",smalltalk.method({selector: "main",category: 'not yet classified',fn: function (){var self=this;return smalltalk.withContext(function($ctx1) { 
_st(_st(self)._new())._createInterface();return self}, function($ctx1) {$ctx1.fill(self,"main",{}, smalltalk.Repl.klass)})},args: [],source: "main\x0a\x09self new createInterface",messageSends: ["createInterface", "new"],referencedClasses: []}),smalltalk.Repl.klass);
 |