funcArgsValidator.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package ast
  2. import "fmt"
  3. // ProduceErrInfo Index is starting from 0
  4. func ProduceErrInfo(name string, index int, expect string) (err error) {
  5. index++
  6. err = fmt.Errorf("Expect %s type for %d parameter of function %s.", expect, index, name)
  7. return
  8. }
  9. func ValidateLen(funcName string, exp, actual int) error {
  10. if actual != exp {
  11. return fmt.Errorf("The arguments for %s should be %d.", funcName, exp)
  12. }
  13. return nil
  14. }
  15. func IsNumericArg(arg Expr) bool {
  16. if _, ok := arg.(*NumberLiteral); ok {
  17. return true
  18. } else if _, ok := arg.(*IntegerLiteral); ok {
  19. return true
  20. }
  21. return false
  22. }
  23. func IsIntegerArg(arg Expr) bool {
  24. if _, ok := arg.(*IntegerLiteral); ok {
  25. return true
  26. }
  27. return false
  28. }
  29. func IsFloatArg(arg Expr) bool {
  30. if _, ok := arg.(*NumberLiteral); ok {
  31. return true
  32. }
  33. return false
  34. }
  35. func IsBooleanArg(arg Expr) bool {
  36. switch t := arg.(type) {
  37. case *BooleanLiteral:
  38. return true
  39. case *BinaryExpr:
  40. switch t.OP {
  41. case AND, OR, EQ, NEQ, LT, LTE, GT, GTE:
  42. return true
  43. default:
  44. return false
  45. }
  46. default:
  47. return false
  48. }
  49. }
  50. func IsStringArg(arg Expr) bool {
  51. if _, ok := arg.(*StringLiteral); ok {
  52. return true
  53. }
  54. return false
  55. }
  56. func IsTimeArg(arg Expr) bool {
  57. if _, ok := arg.(*TimeLiteral); ok {
  58. return true
  59. }
  60. return false
  61. }