diff --git a/docs/Parsing.md b/docs/Parsing.md index 91dea34..20b4e19 100644 --- a/docs/Parsing.md +++ b/docs/Parsing.md @@ -30,7 +30,7 @@ CodeVar parse_variable ( StrC var_def ); ***Parsing will aggregate any tokens within a function body or expression statement to an untyped Code AST.*** Everything is done in one pass for both the preprocessor directives and the rest of the language. -The parser performs no macro expansion as the scope of gencpp feature-set is to only support the preprocessor for the goal of having rudimentary awareness of preprocessor ***conditionals***, ***defines***, and ***includes***, and ***pragmas**. +The parser performs no macro expansion as the scope of gencpp feature-set is to only support the preprocessor for the goal of having rudimentary awareness of preprocessor ***conditionals***, ***defines***, and ***includes***, and ***pragmas***. The keywords supported for the preprocessor are: @@ -69,4 +69,4 @@ The lexing and parsing takes shortcuts from whats expected in the standard. * *Upfront constructors are not necessarily used in the parsing constructors, this is just a good metric to know what can be parsed.* * Parsing attributes can be extended to support user defined macros by defining `GEN_DEFINE_ATTRIBUTE_TOKENS` (see `gen.hpp` for the formatting) -Empty lines used throughout the file are preserved for formatting purposes for ast serialization. +Empty lines used throughout the file are preserved for formatting purposes during ast serialization. diff --git a/docs/Readme.md b/docs/Readme.md index 6f88f8c..b4359d7 100644 --- a/docs/Readme.md +++ b/docs/Readme.md @@ -40,15 +40,6 @@ Otherwise the library is free of any templates. ### *WHAT IS NOT PROVIDED* -Keywords kept from "Modern C++": - -* constexpr : Great to store compile-time constants. -* consteval : Technically fine, need to make sure to execute in moderation. -* constinit : Better than constexpr at doing its job, however, its only c++ 20. -* export : Useful if c++ modules ever come around to actually being usable. -* import : ^^ -* module : ^^ - **There is no support for validating expressions.** Its difficult to parse without enough benefits (At the metaprogramming level). @@ -70,7 +61,7 @@ Use at your own mental peril. As mentioned in root readme, the user is provided Code objects by calling the constructor's functions to generate them or find existing matches. -The AST is managed by the library and provided the user via its interface. +The AST is managed by the library and provided to the user via its interface. However, the user may specifiy memory configuration. Data layout of AST struct: diff --git a/project/components/interface.cpp b/project/components/interface.cpp index 4e4988f..f0bcb58 100644 --- a/project/components/interface.cpp +++ b/project/components/interface.cpp @@ -117,7 +117,7 @@ void define_constants() fmt_newline.set_global(); pragma_once = (CodePragma) make_code(); - pragma_once->Type = ECode::Untyped; + pragma_once->Type = ECode::Preprocess_Pragma; pragma_once->Name = get_cached_string( txt_StrC("once") ); pragma_once->Content = pragma_once->Name; pragma_once.set_global(); diff --git a/project/dependencies/debug.hpp b/project/dependencies/debug.hpp index 1103f2b..ba20468 100644 --- a/project/dependencies/debug.hpp +++ b/project/dependencies/debug.hpp @@ -46,12 +46,12 @@ void process_exit( u32 code ); while (0) #else -# define fatal( fmt, ... ) \ - do \ - { \ - str_fmt_out_err_va( fmt, __VA_ARGS__ ); \ - process_exit(1); \ - } \ +# define fatal( fmt, ... ) \ + do \ + { \ + str_fmt_out_err( fmt, __VA_ARGS__ ); \ + process_exit(1); \ + } \ while (0) #endif diff --git a/project/gen.bootstrap.cpp b/project/gen.bootstrap.cpp index a0bcc90..d7140dc 100644 --- a/project/gen.bootstrap.cpp +++ b/project/gen.bootstrap.cpp @@ -42,26 +42,26 @@ int gen_main() Code timing = scan_file( "dependencies/timing.hpp" ); Builder - deps_header = Builder::open("gen/gen.dep.hpp"); - deps_header.print_fmt( generation_notice ); - deps_header.print_fmt( "// This file is intended to be included within gen.hpp (There is no pragma diagnostic ignores)\n\n" ); - deps_header.print( header_start ); - deps_header.print_fmt( "GEN_NS_BEGIN\n\n" ); + header = Builder::open("gen/gen.dep.hpp"); + header.print_fmt( generation_notice ); + header.print_fmt( "// This file is intended to be included within gen.hpp (There is no pragma diagnostic ignores)\n\n" ); + header.print( header_start ); + header.print_fmt( "GEN_NS_BEGIN\n\n" ); - deps_header.print( macros ); - deps_header.print( basic_types ); - deps_header.print( debug ); - deps_header.print( memory ); - deps_header.print( string_ops ); - deps_header.print( printing ); - deps_header.print( containers ); - deps_header.print( hashing ); - deps_header.print( string ); - deps_header.print( file_handling ); - deps_header.print( timing ); + header.print( macros ); + header.print( basic_types ); + header.print( debug ); + header.print( memory ); + header.print( string_ops ); + header.print( printing ); + header.print( containers ); + header.print( hashing ); + header.print( string ); + header.print( file_handling ); + header.print( timing ); - deps_header.print_fmt( "GEN_NS_END\n\n" ); - deps_header.write(); + header.print_fmt( "GEN_NS_END\n\n" ); + header.write(); } // gen_dep.cpp @@ -77,23 +77,23 @@ int gen_main() Code timing = scan_file( "dependencies/timing.cpp" ); Builder - deps_impl = Builder::open( "gen/gen.dep.cpp" ); - deps_impl.print_fmt( generation_notice ); - deps_impl.print_fmt( "// This file is intended to be included within gen.cpp (There is no pragma diagnostic ignores)\n\n" ); - deps_impl.print( src_start ); - deps_impl.print_fmt( "GEN_NS_BEGIN\n\n" ); + src = Builder::open( "gen/gen.dep.cpp" ); + src.print_fmt( generation_notice ); + src.print_fmt( "// This file is intended to be included within gen.cpp (There is no pragma diagnostic ignores)\n\n" ); + src.print( src_start ); + src.print_fmt( "GEN_NS_BEGIN\n\n" ); - deps_impl.print( debug ); - deps_impl.print( string_ops ); - deps_impl.print( printing ); - deps_impl.print( hashing ); - deps_impl.print( memory ); - deps_impl.print( string ); - deps_impl.print( file_handling ); - deps_impl.print( timing ); + src.print( debug ); + src.print( string_ops ); + src.print( printing ); + src.print( hashing ); + src.print( memory ); + src.print( string ); + src.print( file_handling ); + src.print( timing ); - deps_impl.print_fmt( "GEN_NS_END\n\n" ); - deps_impl.write(); + src.print_fmt( "GEN_NS_END\n\n" ); + src.write(); } // gen.hpp diff --git a/project/gen.dep.cpp b/project/gen.dep.cpp index 3945bbb..3a7d275 100644 --- a/project/gen.dep.cpp +++ b/project/gen.dep.cpp @@ -6,16 +6,12 @@ GEN_NS_BEGIN #include "dependencies/debug.cpp" - #include "dependencies/string_ops.cpp" #include "dependencies/printing.cpp" #include "dependencies/memory.cpp" - #include "dependencies/hashing.cpp" #include "dependencies/string.cpp" - +#include "dependencies/file_handling.cpp" #include "dependencies/timing.cpp" -#include "dependencies/file_handling.cpp" - GEN_NS_END diff --git a/project/gen.dep.hpp b/project/gen.dep.hpp index e7b9bbd..b67b245 100644 --- a/project/gen.dep.hpp +++ b/project/gen.dep.hpp @@ -8,17 +8,13 @@ GEN_NS_BEGIN #include "dependencies/macros.hpp" #include "dependencies/basic_types.hpp" #include "dependencies/debug.hpp" - #include "dependencies/memory.hpp" #include "dependencies/string_ops.hpp" #include "dependencies/printing.hpp" - #include "dependencies/containers.hpp" #include "dependencies/hashing.hpp" #include "dependencies/string.hpp" - +#include "dependencies/file_handling.hpp" #include "dependencies/timing.hpp" -#include "dependencies/file_handling.hpp" - GEN_NS_END diff --git a/test/sanity.cpp b/test/sanity.cpp index c80cbe7..534bc6a 100644 --- a/test/sanity.cpp +++ b/test/sanity.cpp @@ -20,7 +20,7 @@ void check_sanity() fatal("check_sanity: String caching failed!"); - // Purposefully use an excessive amount of memory to make so the the memory backend doesn't break. + // Purposefully uses an excessive amount of memory to make sure the the memory backend doesn't break. // This has been tested with num_iterations set to 15000000 (generates 15 million lines of code), the Global_BlockSize, along with CodePool_NumBlocks, and SizePer_StringArena // must be adjusted to gigabytes(2), kilobytes(512), and gigabyte(1) for good performance without crashing. /*