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

64 строки
2.3 KiB

  1. proc create_source_code_location(char* file, int line, int col) -> Source_Code_Location* {
  2. if (!file)
  3. return nullptr;
  4. Source_Code_Location* ret = new(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) -> 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::Pair): return "pair";
  21. }
  22. return "unknown";
  23. }
  24. proc create_positional_argument_list(int initial_capacity) -> Positional_Arguments* {
  25. Positional_Arguments* ret = new(Positional_Arguments);
  26. ret->identifiers = (char**)malloc(initial_capacity * sizeof(char*));
  27. ret->next_index = 0;
  28. ret->length = initial_capacity;
  29. return ret;
  30. }
  31. proc append_to_positional_argument_list(Positional_Arguments* args, char* identifier) -> void {
  32. if (args->next_index == args->length) {
  33. args->length *= 2;
  34. args->identifiers = (char**)realloc(args->identifiers, args->length * sizeof(char*));
  35. }
  36. args->identifiers[args->next_index++] = identifier;
  37. }
  38. proc create_keyword_argument_list(int initial_capacity) -> Keyword_Arguments* {
  39. Keyword_Arguments* ret = new(Keyword_Arguments);
  40. ret->identifiers = (char**)malloc(initial_capacity * sizeof(char*));
  41. ret->values = create_Lisp_Object_array_list(initial_capacity);
  42. ret->next_index = 0;
  43. ret->length = initial_capacity;
  44. return ret;
  45. }
  46. proc append_to_keyword_argument_list(Keyword_Arguments* args,
  47. char* identifier,
  48. struct Lisp_Object* default_value) -> void
  49. {
  50. if (args->next_index == args->length) {
  51. args->length *= 2;
  52. args->identifiers = (char**)realloc(args->identifiers, args->length * sizeof(char*));
  53. }
  54. args->identifiers[args->next_index++] = identifier;
  55. append_to_Lisp_Object_array_list(args->values, default_value);
  56. }