| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 | 
							- Object subclass: #Repl
 
- 	instanceVariableNames: 'readline interface util'
 
- 	category: 'REPL'!
 
- !Repl methodsFor: 'accessing'!
 
- prompt
 
- 	^'amber >> '
 
- ! !
 
- !Repl methodsFor: 'actions'!
 
- createInterface
 
- 	"No completion for now"
 
- 	interface := readline createInterface: process stdin stdout: process stdout.
 
- 	interface on: 'line' do: [:buffer  | self eval: buffer].
 
- 	interface on: 'close' do: [self close].
 
- 	self setPrompt.
 
- 	interface prompt
 
- !
 
- setPrompt
 
- 	interface setPrompt: self prompt
 
- !
 
- close
 
- 	process stdin destroy
 
- !
 
- eval: buffer
 
- 	| result |
 
- 	buffer isEmpty ifFalse: [
 
- 		self try: [
 
- 			result := Compiler new evaluateExpression: buffer.
 
- 			Transcript show: result]
 
- 		catch: [:e |
 
- 			e isSmalltalkError
 
- 			    ifTrue: [ErrorHandler new handleError: e]
 
- 			    ifFalse: [process stdout write: e jsStack]]].
 
- 	interface prompt
 
- ! !
 
- !Repl methodsFor: 'initialization'!
 
- initialize
 
- 	super initialize.
 
- 	readline := require value: 'readline'.
 
- 	util := require value: 'util'
 
- ! !
 
- !Repl class methodsFor: 'not yet classified'!
 
- main
 
- 	self new createInterface
 
- ! !
 
 
  |