REPL.st 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. Object subclass: #Repl
  2. instanceVariableNames: 'readline interface util'
  3. category: 'REPL'!
  4. !Repl methodsFor: 'accessing'!
  5. prompt
  6. ^'amber >> '
  7. ! !
  8. !Repl methodsFor: 'actions'!
  9. createInterface
  10. "No completion for now"
  11. "(readline createInterface numArgs < 3)
  12. ifTrue: [
  13. console log: '0.4...'.
  14. interface := readline createInterface: process stdin autocomplete: null.
  15. stdin on: 'data' do: [:buffer | interface write: buffer]]
  16. ifFalse: ["
  17. interface := readline createInterface: process stdin stdout: process stdout" autocomplete: null]".
  18. interface on: 'line' do: [:buffer | self eval: buffer].
  19. interface on: 'close' do: [self close].
  20. self setPrompt.
  21. interface prompt
  22. !
  23. setPrompt
  24. interface setPrompt: self prompt
  25. !
  26. close
  27. process stdin destroy
  28. !
  29. eval: buffer
  30. | result |
  31. buffer isEmpty ifFalse: [
  32. result := Compiler new loadExpression: buffer.
  33. Transcript show: result].
  34. self setPrompt.
  35. interface prompt
  36. ! !
  37. !Repl methodsFor: 'initialization'!
  38. initialize
  39. super initialize.
  40. readline := require value: 'readline'.
  41. util := require value: 'util'
  42. ! !
  43. !Repl class methodsFor: 'not yet classified'!
  44. main
  45. self new createInterface
  46. ! !