25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

83 lines
3.9 KiB

  1. /**
  2. Usage of the create_error_macros:
  3. */
  4. #define __create_error(keyword, ...) \
  5. create_error( \
  6. __FUNCTION__, __FILE__, __LINE__, \
  7. Memory::get_or_create_lisp_object_keyword(keyword), \
  8. __VA_ARGS__)
  9. #define create_out_of_memory_error(...) \
  10. __create_error("out-of-memory", __VA_ARGS__)
  11. #define create_generic_error(...) \
  12. __create_error("generic", __VA_ARGS__)
  13. #define create_not_yet_implemented_error() \
  14. __create_error("not-yet-implemented", "This feature has not yet been implemented.")
  15. #define create_parsing_error(...) \
  16. __create_error("parsing-error", __VA_ARGS__)
  17. #define create_symbol_undefined_error(...) \
  18. __create_error("symbol-undefined", __VA_ARGS__)
  19. #define create_type_missmatch_error(expected, actual) \
  20. __create_error("type-missmatch", \
  21. "Type missmatch: expected %s, got %s", \
  22. expected, actual)
  23. #define create_wrong_number_of_arguments_error(expected, actual) \
  24. __create_error("wrong-number-of-arguments", \
  25. "Wrong number of arguments: expected %d, got %d", \
  26. expected, actual)
  27. #define create_too_many_arguments_error(expected, actual) \
  28. __create_error("wrong-number-of-arguments", \
  29. "Wrong number of arguments: expected less or equal to %d, got %d", \
  30. expected, actual)
  31. #define create_too_few_arguments_error(expected, actual) \
  32. __create_error("wrong-number-of-arguments", \
  33. "Wrong number of arguments: expected greater or equal to %d, got %d", \
  34. expected, actual)
  35. #define assert_arguments_length(expected, actual) \
  36. do { \
  37. if (expected != actual) { \
  38. create_wrong_number_of_arguments_error(expected, actual); \
  39. } \
  40. } while(0)
  41. #define assert_arguments_length_less_equal(expected, actual) \
  42. do { \
  43. if (expected < actual) { \
  44. create_too_many_arguments_error(expected, actual); \
  45. } \
  46. } while(0)
  47. #define assert_arguments_length_greater_equal(expected, actual) \
  48. do { \
  49. if (expected > actual) { \
  50. create_too_few_arguments_error(expected, actual); \
  51. } \
  52. } while(0)
  53. #define assert_type(_node, _type) \
  54. do { \
  55. if (Memory::get_type(_node) != _type) { \
  56. create_type_missmatch_error( \
  57. Lisp_Object_Type_to_string(_type), \
  58. Lisp_Object_Type_to_string(Memory::get_type(_node))); \
  59. } \
  60. } while(0)
  61. #define assert(condition) \
  62. do { \
  63. if (!(condition)) { \
  64. create_generic_error("Assertion-error."); \
  65. } \
  66. } while(0)