assign.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package rules
  2. import (
  3. "cp/node"
  4. "cp/statement"
  5. "rt2/frame"
  6. "rt2/nodeframe"
  7. )
  8. func assignSeq(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
  9. var fu nodeframe.FrameUtils
  10. a := fu.NodeOf(f)
  11. switch a.(node.AssignNode).Statement() {
  12. case statement.ASSIGN:
  13. switch a.Left().(type) {
  14. case node.VariableNode:
  15. switch a.Right().(type) {
  16. case node.ConstantNode:
  17. seq = func(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
  18. //тут присвоение
  19. return frame.End()
  20. }
  21. ret = frame.DO
  22. case node.VariableNode:
  23. seq = func(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
  24. //тут присвоение
  25. return frame.End()
  26. }
  27. ret = frame.DO
  28. case node.OperationNode:
  29. fu.Push(fu.New(a.Right()), f)
  30. seq = func(f frame.Frame) (seq frame.Sequence, ret frame.WAIT) {
  31. //тут чтение результата операции
  32. return frame.End()
  33. }
  34. ret = frame.SKIP
  35. default:
  36. panic("wrong right")
  37. }
  38. default:
  39. panic("wrong left")
  40. }
  41. default:
  42. panic("wrong statement")
  43. }
  44. return seq, ret
  45. }