Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 
 
 

82 строки
3.2 KiB

  1. proc delete_error() -> void {
  2. using Globals::error;
  3. if (error) {
  4. free(error);
  5. error = nullptr;
  6. }
  7. }
  8. proc create_error(const char* c_file_name, int c_file_line, Lisp_Object* type, String* message) -> void {
  9. if (Globals::log_level > Log_Level::None) {
  10. printf("Error created in:\n %s:%d\n", c_file_name, c_file_line);
  11. printf(" -> %s\n", Memory::get_c_str(message));
  12. }
  13. delete_error();
  14. if (Globals::breaking_on_errors) {
  15. debug_break();
  16. }
  17. // visualize_lisp_machine();
  18. using Globals::error;
  19. error = new(Error);
  20. error->type = type;
  21. error->message = message;
  22. }
  23. proc create_error(const char* c_file_name, int c_file_line, Lisp_Object* type, const char* format, ...) -> void {
  24. // HACK(Felix): the length of all error strings is 200!!!!!!!!!!
  25. int length = 200;
  26. String* formatted_string = Memory::create_string("", length);
  27. int written_length;
  28. va_list args;
  29. va_start(args, format);
  30. written_length = vsnprintf(&formatted_string->data, length, format, args);
  31. va_end(args);
  32. formatted_string->length = written_length;
  33. create_error(c_file_name, c_file_line, type, formatted_string);
  34. }
  35. // proc Error_Type_to_string(Error_Type type) -> const char* {
  36. // switch (type) {
  37. // case Error_Type::Assertion_Error: return "Assertion failed";
  38. // case Error_Type::File_Not_Found: return "File not found";
  39. // case Error_Type::Ill_Formed_Arguments: return "Evaluation-error: Ill formed arguments";
  40. // case Error_Type::Ill_Formed_Lambda_List: return "Evaluation-error: Ill formed lambda list";
  41. // case Error_Type::Ill_Formed_List: return "Evaluation-error: Ill formed list";
  42. // case Error_Type::Not_A_Function: return "Evaluation-error: Not a function";
  43. // case Error_Type::Not_Yet_Implemented: return "Evaluation-error: Not yet implemented";
  44. // case Error_Type::Symbol_Not_Defined: return "Evaluation-error: Symbol not defined";
  45. // case Error_Type::Syntax_Error: return "Syntax Error";
  46. // case Error_Type::Trailing_Garbage: return "Evaluation-error: Trailing garbage following expression";
  47. // case Error_Type::Type_Missmatch: return "Evaluation-error: Type Missmatch";
  48. // case Error_Type::Unbalanced_Parenthesis: return "Parsing-error: Unbalanced parenthesis";
  49. // case Error_Type::Unexpected_Eof: return "Parsing-error: Unexpected EOF";
  50. // case Error_Type::Unknown_Keyword_Argument: return "Evaluation-error: Unknown keyword argument";
  51. // case Error_Type::Wrong_Number_Of_Arguments: return "Evaluation-error: Wrong number of arguments";
  52. // case Error_Type::Out_Of_Memory: return "Runtime-error: Out of memory";
  53. // default: return "this error type doesn't have a desciption..";
  54. // }
  55. // }
  56. // proc assert_type(Lisp_Object* node, Lisp_Object_Type type) -> void {
  57. // if (!node) {
  58. // create_generic_error(
  59. // "The node where the type should have"
  60. // "been checked was nullptr.");
  61. // return;
  62. // }
  63. // if (node->type != type)
  64. // create_type_missmatch_error(
  65. // ""
  66. // );
  67. // }