x.go 617 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. package eval
  2. import (
  3. "fw/rt2/frame"
  4. )
  5. type WAIT int
  6. const (
  7. WRONG WAIT = iota
  8. STOP
  9. LATER
  10. NOW
  11. )
  12. func (n WAIT) Wait() frame.WAIT {
  13. switch n {
  14. case WRONG:
  15. return frame.WRONG
  16. case STOP:
  17. return frame.STOP
  18. case LATER:
  19. return frame.LATER
  20. case NOW:
  21. return frame.NOW
  22. default:
  23. panic(n)
  24. }
  25. }
  26. type Do func(IN) OUT
  27. type IN struct {
  28. }
  29. type OUT struct {
  30. Do Do
  31. Next WAIT
  32. }
  33. func End() OUT {
  34. return OUT{Next: STOP}
  35. }
  36. func Tail(x WAIT) Do {
  37. return func(IN) OUT { return OUT{Next: x} }
  38. }
  39. func Later(x Do) OUT {
  40. return OUT{Do: x, Next: LATER}
  41. }
  42. func Now(x Do) OUT {
  43. return OUT{Do: x, Next: NOW}
  44. }