value.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package muesli
  2. import "fmt"
  3. /* Run time values */
  4. type Value interface {
  5. String() string
  6. }
  7. type IntValue int64
  8. type FloatValue float64
  9. type StringValue string
  10. type BoolValue bool
  11. const (
  12. TrueValue = BoolValue(true)
  13. FalseValue = BoolValue(false)
  14. )
  15. var NilValue = Value(nil)
  16. type WordValue string
  17. type TypeValue string
  18. type ErrorValue struct {
  19. error
  20. }
  21. type EmptyValue struct {
  22. }
  23. type ListValue struct {
  24. List []Value
  25. }
  26. func (val IntValue) String() string {
  27. return fmt.Sprintf("%d", int64(val))
  28. }
  29. func (val FloatValue) String() string {
  30. return fmt.Sprintf("%f", float64(val))
  31. }
  32. func (val BoolValue) String() string {
  33. if bool(val) {
  34. return "true"
  35. } else {
  36. return "false"
  37. }
  38. }
  39. func (val StringValue) String() string {
  40. return string(val)
  41. }
  42. func (val WordValue) String() string {
  43. return string(val)
  44. }
  45. func (val TypeValue) String() string {
  46. return string(val)
  47. }
  48. func (val ErrorValue) String() string {
  49. return fmt.Sprintf("%s", val.Error())
  50. }
  51. func (val EmptyValue) String() string {
  52. return "<empty>"
  53. }
  54. func (val ListValue) String() string {
  55. res := "["
  56. sep := ""
  57. for _, elt := range val.List {
  58. res = res + sep + elt.String()
  59. sep = ", "
  60. }
  61. res += "]"
  62. return res
  63. }