選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

92 行
2.5 KiB

  1. typedef enum {
  2. Log_Level_Critical,
  3. Log_Level_Warning,
  4. Log_Level_Info,
  5. Log_Level_Debug,
  6. } Log_Level;
  7. void log_message(Log_Level type, char* message) {
  8. char* prefix;
  9. switch (type) {
  10. case Log_Level_Critical: prefix = "CRIT"; break;
  11. case Log_Level_Warning: prefix = "WARN"; break;
  12. case Log_Level_Info: prefix = "INFO"; break;
  13. case Log_Level_Debug: prefix = "DBUG"; break;
  14. }
  15. printf("%s: %s",prefix, message);
  16. }
  17. char* read_entire_file (char* filename) {
  18. char *fileContent = NULL;
  19. FILE *fp = fopen(filename, "r");
  20. if (fp != NULL) {
  21. /* Go to the end of the file. */
  22. if (fseek(fp, 0L, SEEK_END) == 0) {
  23. /* Get the size of the file. */
  24. long bufsize = ftell(fp);
  25. if (bufsize == -1) {
  26. fputs("Empty file", stderr);
  27. goto closeFile;
  28. }
  29. /* Go back to the start of the file. */
  30. if (fseek(fp, 0L, SEEK_SET) != 0) {
  31. fputs("Error reading file", stderr);
  32. goto closeFile;
  33. }
  34. /* Allocate our buffer to that size. */
  35. fileContent = malloc(sizeof(char) * (bufsize));
  36. /* Read the entire file into memory. */
  37. size_t newLen = fread(fileContent, sizeof(char), bufsize, fp);
  38. if ( ferror( fp ) != 0 ) {
  39. fputs("Error reading file", stderr);
  40. }
  41. }
  42. closeFile:
  43. fclose(fp);
  44. }
  45. return fileContent;
  46. /* Don't forget to call free() later! */
  47. }
  48. void print(Ast_Node* node) {
  49. switch (node->type) {
  50. case (Ast_Node_Type_Nil): {
  51. printf("nil");
  52. } break;
  53. case (Ast_Node_Type_Number): {
  54. printf("%f", node->value.number->value);
  55. } break;
  56. case (Ast_Node_Type_String): {
  57. printf("\"%s\"", node->value.string->value);
  58. } break;
  59. case (Ast_Node_Type_Symbol): {
  60. printf("%s", node->value.symbol->identifier);
  61. } break;
  62. case (Ast_Node_Type_Function): {
  63. printf("[lambda]");
  64. } break;
  65. case (Ast_Node_Type_Built_In_Function): {
  66. printf("[built-in-function %s]", node->value.built_in_function->identifier);
  67. } break;
  68. case (Ast_Node_Type_Cons_Cell): {
  69. printf("(");
  70. if (node->value.cons_cell->first)
  71. print(node->value.cons_cell->first);
  72. else
  73. printf("nil");
  74. printf(" . ");
  75. if (node->value.cons_cell->rest)
  76. print(node->value.cons_cell->rest);
  77. else
  78. printf("nil");
  79. printf(")");
  80. } break;
  81. }
  82. }