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

54 строки
2.0 KiB

  1. proc create_source_code_location(String* file, int line, int col) -> Source_Code_Location* {
  2. if (!file)
  3. return nullptr;
  4. Source_Code_Location* ret = (Source_Code_Location*)malloc(sizeof(Source_Code_Location));
  5. ret->file = file;
  6. ret->line = line;
  7. ret->column = col;
  8. return ret;
  9. }
  10. proc Lisp_Object_Type_to_string(Lisp_Object_Type type) -> const char* {
  11. switch (type) {
  12. case(Lisp_Object_Type::Nil): return "nil";
  13. case(Lisp_Object_Type::T): return "t";
  14. case(Lisp_Object_Type::Number): return "number";
  15. case(Lisp_Object_Type::String): return "string";
  16. case(Lisp_Object_Type::Symbol): return "symbol";
  17. case(Lisp_Object_Type::Keyword): return "keyword";
  18. case(Lisp_Object_Type::Function): return "function";
  19. case(Lisp_Object_Type::CFunction): return "C-function";
  20. case(Lisp_Object_Type::Continuation): return "continuation";
  21. case(Lisp_Object_Type::Pair): return "pair";
  22. case(Lisp_Object_Type::Vector): return "vector";
  23. case(Lisp_Object_Type::Pointer): return "pointer";
  24. case(Lisp_Object_Type::HashMap): return "hashmap";
  25. }
  26. return "unknown";
  27. }
  28. Lisp_Object::~Lisp_Object() {
  29. free(sourceCodeLocation);
  30. sourceCodeLocation = 0;
  31. switch (Memory::get_type(this)) {
  32. case Lisp_Object_Type::HashMap: {
  33. delete this->value.hashMap;
  34. } break;
  35. case Lisp_Object_Type::CFunction: {
  36. this->value.cFunction->args.positional.symbols.~Array_List();
  37. this->value.cFunction->args.keyword.keywords.~Array_List();
  38. this->value.cFunction->args.keyword.values.~Array_List();
  39. delete this->value.cFunction;
  40. } break;
  41. case Lisp_Object_Type::Function:{
  42. this->value.function->args.positional.symbols.~Array_List();
  43. this->value.function->args.keyword.keywords.~Array_List();
  44. this->value.function->args.keyword.values.~Array_List();
  45. delete this->value.function;
  46. } break;
  47. default: break;
  48. }
  49. }