typeutils.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. package glisp
  2. func IsArray(expr Sexp) bool {
  3. switch expr.(type) {
  4. case SexpArray:
  5. return true
  6. }
  7. return false
  8. }
  9. func IsList(expr Sexp) bool {
  10. if expr == SexpNull {
  11. return true
  12. }
  13. switch list := expr.(type) {
  14. case SexpPair:
  15. return IsList(list.tail)
  16. }
  17. return false
  18. }
  19. func IsFloat(expr Sexp) bool {
  20. switch expr.(type) {
  21. case SexpFloat:
  22. return true
  23. }
  24. return false
  25. }
  26. func IsInt(expr Sexp) bool {
  27. switch expr.(type) {
  28. case SexpInt:
  29. return true
  30. }
  31. return false
  32. }
  33. func IsString(expr Sexp) bool {
  34. switch expr.(type) {
  35. case SexpStr:
  36. return true
  37. }
  38. return false
  39. }
  40. func IsChar(expr Sexp) bool {
  41. switch expr.(type) {
  42. case SexpChar:
  43. return true
  44. }
  45. return false
  46. }
  47. func IsNumber(expr Sexp) bool {
  48. switch expr.(type) {
  49. case SexpFloat:
  50. return true
  51. case SexpInt:
  52. return true
  53. case SexpChar:
  54. return true
  55. }
  56. return false
  57. }
  58. func IsSymbol(expr Sexp) bool {
  59. switch expr.(type) {
  60. case SexpSymbol:
  61. return true
  62. }
  63. return false
  64. }
  65. func IsHash(expr Sexp) bool {
  66. switch expr.(type) {
  67. case SexpHash:
  68. return true
  69. }
  70. return false
  71. }
  72. func IsZero(expr Sexp) bool {
  73. switch e := expr.(type) {
  74. case SexpInt:
  75. return int(e) == 0
  76. case SexpChar:
  77. return int(e) == 0
  78. case SexpFloat:
  79. return float64(e) == 0.0
  80. }
  81. return false
  82. }
  83. func IsEmpty(expr Sexp) bool {
  84. if expr == SexpNull {
  85. return true
  86. }
  87. switch e := expr.(type) {
  88. case SexpArray:
  89. return len(e) == 0
  90. case SexpHash:
  91. return HashIsEmpty(e)
  92. }
  93. return false
  94. }