From c2319b9651bfcc348b94cb3f51cc03b00555fd57 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Sun, 6 Aug 2023 17:46:17 -0400 Subject: [PATCH] Fixes for test.singleheader_ast.cpp, also added a bench for it. On a Ryzen R9 5950 it takes 11 ms to generate AST and 21 ms to serialize to file. --- project/components/interface.parsing.cpp | 5 ---- project/components/interface.upfront.cpp | 10 ++++---- test/test.singleheader_ast.cpp | 29 ++++++++---------------- 3 files changed, 15 insertions(+), 29 deletions(-) diff --git a/project/components/interface.parsing.cpp b/project/components/interface.parsing.cpp index ba14d59..23c0bf8 100644 --- a/project/components/interface.parsing.cpp +++ b/project/components/interface.parsing.cpp @@ -4262,11 +4262,6 @@ CodeUnion parse_union( bool inplace_def ) if ( currtok.Type == TokType::Preprocess_Hash ) eat( TokType::Preprocess_Hash ); - if ( currtok.Line >= 3826 ) - { - log_fmt("here"); - } - Code member = { nullptr }; switch ( currtok_noskip.Type ) { diff --git a/project/components/interface.upfront.cpp b/project/components/interface.upfront.cpp index ab7be0b..2ef3677 100644 --- a/project/components/interface.upfront.cpp +++ b/project/components/interface.upfront.cpp @@ -1440,7 +1440,7 @@ CodeBody def_enum_body( s32 num, ... ) if ( entry->Type != Untyped && entry->Type != Comment ) { - log_failure("gen::def_enum_body: Entry type is not allowed - %s. Must be of untyped or comment type.", entry.debug_str() ); \ + log_failure("gen::def_enum_body: Entry type is not allowed - %s. Must be of untyped or comment type.", entry.debug_str() ); return CodeInvalid; } @@ -1472,7 +1472,7 @@ CodeBody def_enum_body( s32 num, Code* codes ) if ( entry->Type != Untyped && entry->Type != Comment ) { - log_failure("gen::def_enum_body: Entry type is not allowed: %s", entry.debug_str() ); \ + log_failure("gen::def_enum_body: Entry type is not allowed: %s", entry.debug_str() ); return CodeInvalid; } @@ -1853,7 +1853,7 @@ CodeBody def_namespace_body( s32 num, Code* codes ) switch (entry->Type) { GEN_AST_BODY_NAMESPACE_UNALLOWED_TYPES - log_failure("gen::" "def_namespace_body" ": Entry type is not allowed: %s", entry.debug_str() ); + log_failure("gen::" "def_namespace_body" ": Entry type is not allowed: %s", entry.debug_str() ); return CodeInvalid; default: break; @@ -2062,7 +2062,7 @@ CodeBody def_struct_body( s32 num, Code* codes ) switch (entry->Type) { GEN_AST_BODY_STRUCT_UNALLOWED_TYPES - log_failure("gen::" "def_struct_body" ": Entry type is not allowed: %s", entry.debug_str() ); + log_failure("gen::" "def_struct_body" ": Entry type is not allowed: %s", entry.debug_str() ); return CodeInvalid; default: @@ -2099,7 +2099,7 @@ CodeBody def_union_body( s32 num, ... ) if ( entry->Type != Untyped && entry->Type != Comment ) { - log_failure("gen::def_union_body: Entry type is not allowed - %s. Must be of untyped or comment type.", entry.debug_str() ); \ + log_failure("gen::def_union_body: Entry type is not allowed - %s. Must be of untyped or comment type.", entry.debug_str() ); return CodeInvalid; } diff --git a/test/test.singleheader_ast.cpp b/test/test.singleheader_ast.cpp index ae60a51..1c386e4 100644 --- a/test/test.singleheader_ast.cpp +++ b/test/test.singleheader_ast.cpp @@ -13,30 +13,21 @@ void check_singleheader_ast() gen::init(); log_fmt("\ncheck_singleheader_ast:\n"); - FileContents file = file_read_contents( GlobalAllocator, true, project_dir "singleheader/gen/gen.hpp" ); + FileContents file = file_read_contents( GlobalAllocator, true, project_dir "singleheader/gen/gen.hpp" ); + u64 time_start = time_rel_ms(); + CodeBody ast = parse_global_body( { file.size, (char const*)file.data } ); - CodeBody ast = parse_global_body( { file.size, (char const*)file.data } ); + log_fmt("\nAst generated. Time taken: %llu ms\n", time_rel_ms() - time_start); - log_fmt("generated AST!!!\n"); + log_fmt("\nSerializng ast:\n"); + time_start = time_rel_ms(); -#if 0 - s32 idx = 0; - for ( Code entry : ast ) - { - if (idx == 900) - { - log_fmt("break here\n"); - } - log_fmt("Entry %d: %s\n", idx, entry.to_string() ); - idx++; - } -#endif - - Builder builder = Builder::open( "singleheader_copy.gen.hpp" ); - log_fmt("\n\nserializng ast\n"); + Builder + builder = Builder::open( "singleheader_copy.gen.hpp" ); builder.print( ast ); builder.write(); - log_fmt("passed!!\n"); + log_fmt("passed!! Time taken: %llu ms\n", time_rel_ms() - time_start); + gen::deinit(); }