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
- ! !
|