From c9c83efaa08be90602146806be7cb3685c002ec0 Mon Sep 17 00:00:00 2001 From: Anita Anderson Date: Tue, 18 Apr 2023 16:18:08 -0400 Subject: [PATCH] Update cmake to allow C++ and fix maxos compile error Signed-off-by: Anita Anderson --- .editorconfig | 7 +++++++ CMakeLists.txt | 35 ++++++++++++++++++++--------------- src/Importer.c | 25 +++++++++++++++---------- 3 files changed, 42 insertions(+), 25 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..b6330b2 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/CMakeLists.txt b/CMakeLists.txt index 21726e3..8759ee9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,21 +1,26 @@ cmake_minimum_required(VERSION 3.21) -project(Erythro C) +project(Erythro C CXX) set(CMAKE_C_STANDARD 11) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) include_directories(include) -add_executable(Erythro - include/Data.h - include/Defs.h - src/Assembler.c - src/Delegate.c - src/Dump.c - src/Lexer.c - src/Main.c - src/Parser.c - src/Pointers.c - src/Statements.c - src/Symbols.c - src/Types.c - src/Importer.c) +set(ERYTHRO_SRC + src/Assembler.c + src/Delegate.c + src/Dump.c + src/Lexer.c + src/Main.c + src/Parser.c + src/Pointers.c + src/Statements.c + src/Symbols.c + src/Types.c + src/Importer.c +) + +add_executable(eryc ${ERYTHRO_SRC}) diff --git a/src/Importer.c b/src/Importer.c index 40b7c4f..29f2983 100644 --- a/src/Importer.c +++ b/src/Importer.c @@ -12,13 +12,18 @@ #include #include +#ifdef __APPLE__ +#include +#endif + + /** * The function of the importer is to read in definitions from a file, and store * them into the symbol tables. - * + * * The file to be imported is called a "module", which is Erythro terminology for C-like "headers". * They contain extra metadata that allows for Erythro's enhanced debugging and error logging. - * + * * Modules may also contain metadata about the contents within - allowing for multiple compile-time * sourcesets with different arguments, all parsed at the same time as the source code. * @@ -30,12 +35,12 @@ /** * Read in the information of a module, check that it is valid, and then read the module itself. * Import syntax looks like: - * + * * > import "file" * * The string is appended to the current working directory and is checked. * If the resulting path exists and resolves to a file, then the file's declarations are added to the symbol tables. - * + * * Modules may not contain definitions. Only declarations * TODO: Module metadata as described above. */ @@ -44,7 +49,7 @@ Tokenise(); // Make sure there's a string after the import. - if (CurrentFile->CurrentSymbol.type != LI_STR) + if (CurrentFile->CurrentSymbol.type != LI_STR) Die("Import statement must be followed by a compile-time constant string."); // Read in the string that we know must be there. @@ -53,9 +58,9 @@ // Figure out the working directory char CWD[PATH_MAX]; - if (getcwd(CWD, sizeof(CWD)) == NULL) + if (getcwd(CWD, sizeof(CWD)) == NULL) DieMessage("Unable to find cwd when importing module", Module); - + // Append the module name to the current working directory char* ModulePath = malloc(sizeof(CWD) + sizeof(Module) + 1); strcpy(ModulePath, CWD); @@ -65,7 +70,7 @@ // Stat the file to see if it exists struct stat FileInfo; - if (stat(ModulePath, &FileInfo) != 0) + if (stat(ModulePath, &FileInfo) != 0) DieMessage("Unable to access the imported module", ModulePath); // At this point, the file exists and we have the path. @@ -77,7 +82,7 @@ memset(ModuleData, 0, sizeof(struct FileData)); ModuleData->AllowDefinitions = false; ModuleData->SourceName = ModulePath; - + printf("Swapping to module %s..\n\n", ModulePath); // Parse all relevant data from the module file... @@ -99,4 +104,4 @@ // Tokenise past the string we just parsed Tokenise(); - } \ No newline at end of file + }