attempting to do a parse on stb_sprintf.h for segregated

This commit is contained in:
ed
2025-02-11 15:32:18 -05:00
parent a6e12a9580
commit 4976d79ab3
7 changed files with 197 additions and 8 deletions
+21
View File
@@ -19,6 +19,27 @@
"compilerArgs": [ "compilerArgs": [
"/Zc:preprocessor" "/Zc:preprocessor"
] ]
},
{
"name": "Win32 tests",
"includePath": [
// "${workspaceFolder}",
"${workspaceFolder}/gen_c11/gen"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE",
"INTELLISENSE_DIRECTIVES"
],
"windowsSdkVersion": "10.0.22621.0",
"compilerPath": "cl.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "msvc-x64",
"compilerArgs": [
"/Zc:preprocessor"
]
} }
], ],
"version": 4 "version": 4
+3 -1
View File
@@ -88,7 +88,9 @@
"gen_common.h": "c", "gen_common.h": "c",
"processthreadsapi.h": "c", "processthreadsapi.h": "c",
"timeapi.h": "c", "timeapi.h": "c",
"stdlib.h": "c" "stdlib.h": "c",
"metadesk_deps.h": "c",
"stdbool.h": "c"
}, },
"workbench.colorCustomizations": { "workbench.colorCustomizations": {
"activityBar.activeBackground": "#713fb8", "activityBar.activeBackground": "#713fb8",
+38
View File
@@ -43,6 +43,7 @@ $release = $null
[bool] $code_sanity = $false [bool] $code_sanity = $false
[bool] $compile_sanity = $false [bool] $compile_sanity = $false
[bool] $gen_c11 = $false [bool] $gen_c11 = $false
[bool] $tests = $false
[array] $vendors = @( "clang", "msvc" ) [array] $vendors = @( "clang", "msvc" )
@@ -57,6 +58,7 @@ if ( $args ) { $args | ForEach-Object {
"code_sanity" { $code_sanity = $true } "code_sanity" { $code_sanity = $true }
"compile_sanity" { $compile_sanity = $true } "compile_sanity" { $compile_sanity = $true }
"gen_c11" { $gen_c11 = $true } "gen_c11" { $gen_c11 = $true }
"tests" { $tests = $true }
} }
} }
} }
@@ -86,7 +88,9 @@ else {
$cannot_build = $code_sanity -eq $false $cannot_build = $code_sanity -eq $false
$cannot_build = $cannot_build -and $compile_sanity -eq $false $cannot_build = $cannot_build -and $compile_sanity -eq $false
$cannot_build = $cannot_build -and $gen_c11 -eq $false $cannot_build = $cannot_build -and $gen_c11 -eq $false
$cannot_build = $cannot_build -and $test -eq $false
if ( $cannot_build ) { if ( $cannot_build ) {
Pop-Location
throw "No build target specified. One must be specified, this script will not assume one" throw "No build target specified. One must be specified, this script will not assume one"
} }
@@ -190,4 +194,38 @@ if ($gen_c11)
Pop-Location Pop-Location
} }
if ($tests)
{
write-host " Bulding tests/c11_sanity.c"
$compiler_args = @()
$compiler_args += $flag_all_c
$compiler_args += $flag_updated_cpp_macro
$compiler_args += $flag_c11
$linker_args = @()
$linker_args += $flag_link_win_subsystem_console
$path_gen = join-path $path_gen_c11 'gen'
$includes = @( $path_gen, $path_root )
$unit = join-path $path_tests 'c11_sanity.c'
$executable = join-path $path_build 'c11_sanity.exe'
$result = build-simple $path_build $includes $compiler_args $linker_args $unit $executable
Push-Location $path_root
if ( Test-Path( $executable ) ) {
write-host "`nRunning tests/c11_sanity.exe"
$time_taken = Measure-Command { & $executable
| ForEach-Object {
write-host `t $_ -ForegroundColor Green
}
}
write-host "`ntest/code_sanity completed in $($time_taken.TotalMilliseconds) ms"
}
Pop-Location
}
Pop-Location # $path_root Pop-Location # $path_root
+12
View File
@@ -27,6 +27,10 @@ namespace OS_, MD_OS_
word HAS_ATTRIBUTE, MD_HAS_ATTRIBUTE word HAS_ATTRIBUTE, MD_HAS_ATTRIBUTE
// base/platform.h
include assert, assert
// base/linkage.h // base/linkage.h
word global, md_global word global, md_global
@@ -1094,6 +1098,8 @@ namespace FilePropertyFlag_, MD_FilePropertyFlag_
namespace OS_, MD_OS_ namespace OS_, MD_OS_
namespace os_, md_os_ namespace os_, md_os_
word os_ctx, os_ctx
namespace entry_point, md_entry_point namespace entry_point, md_entry_point
// metadesk module // metadesk module
@@ -1168,6 +1174,12 @@ word parse_from_text, md_parse_from_text
namespace debug_string_list_from_tree_, md_debug_string_list_from_tree_ namespace debug_string_list_from_tree_, md_debug_string_list_from_tree_
word debug_string_list_from_tree, md_debug_string_list_from_tree word debug_string_list_from_tree, md_debug_string_list_from_tree
word ParseWorkKind, MD_ParseWorkKind
word ParseWorkNode, MD_ParseWorkNode
word parse__work_push, md_parse__work_push
word parse__work_pop, md_parse__work_pop
// metagen module // metagen module
+22 -6
View File
@@ -22,6 +22,8 @@ gen_Code refactor_and_format( gen_Code code ) {
int main() int main()
{ {
gen_Context ctx = {0}; gen_Context ctx = {0};
ctx.InitSize_MacrosTable = gen_kilobytes(64);
ctx.InitSize_StrCacheTable = gen_kilobytes(64);
gen_init(& ctx); gen_init(& ctx);
register_library_macros(); register_library_macros();
@@ -84,7 +86,7 @@ int main()
gen_Code mdesk_h = gen_scan_file(path_mdesk "mdesk.h"); gen_Code mdesk_h = gen_scan_file(path_mdesk "mdesk.h");
gen_Code base_platfom_c = gen_scan_file(path_base "platform.c"); gen_Code base_platform_c = gen_scan_file(path_base "platform.c");
gen_Code base_debug_c = gen_scan_file(path_base "debug.c"); gen_Code base_debug_c = gen_scan_file(path_base "debug.c");
gen_Code base_memory_substrate_c = gen_scan_file(path_base "memory_substrate.c"); gen_Code base_memory_substrate_c = gen_scan_file(path_base "memory_substrate.c");
gen_Code base_arena_c = gen_scan_file(path_base "arena.c"); gen_Code base_arena_c = gen_scan_file(path_base "arena.c");
@@ -140,7 +142,7 @@ int main()
gen_Code r_mdesk_h = refactor_and_format(mdesk_h); gen_Code r_mdesk_h = refactor_and_format(mdesk_h);
gen_Code r_base_platform_c = refactor(base_platfom_c); gen_Code r_base_platform_c = refactor(base_platform_c);
gen_Code r_base_debug_c = refactor(base_debug_c); gen_Code r_base_debug_c = refactor(base_debug_c);
gen_Code r_base_memory_substrate_c = refactor(base_memory_substrate_c); gen_Code r_base_memory_substrate_c = refactor(base_memory_substrate_c);
gen_Code r_base_arena_c = refactor(base_arena_c); gen_Code r_base_arena_c = refactor(base_arena_c);
@@ -158,6 +160,7 @@ int main()
gen_Code r_os_c = refactor(os_os_c); gen_Code r_os_c = refactor(os_os_c);
gen_Code r_mdesk_c = refactor_and_format(mdesk_c); gen_Code r_mdesk_c = refactor_and_format(mdesk_c);
#pragma endregion Refactored / Formatted #pragma endregion Refactored / Formatted
if (GENERATE_SINGLEHEADER) if (GENERATE_SINGLEHEADER)
@@ -295,6 +298,7 @@ int main()
new_line(); new_line();
print_section(r_base_platform_c, lit("Platform")); print_section(r_base_platform_c, lit("Platform"));
print_section(r_base_debug_c, lit("Debug"));
print_section(r_base_memory_substrate_c, lit("Memory Substrate")); print_section(r_base_memory_substrate_c, lit("Memory Substrate"));
print_section(r_base_arena_c, lit("Arena")); print_section(r_base_arena_c, lit("Arena"));
print_section(r_base_strings_c, lit("Strings")); print_section(r_base_strings_c, lit("Strings"));
@@ -344,6 +348,20 @@ int main()
if (GENERATE_SEGEREGATED) if (GENERATE_SEGEREGATED)
{ {
gen_CodeBody tb_stb_printf_h_parsed = gen_parse_file(path_third_party "stb/stb_sprintf.h");
gen_CodeBody tb_stb_printf_header = gen_def_body(CT_Global_Body);
gen_CodeBody tb_stb_printf_source = gen_def_body(CT_Global_Body);
for (gen_Code stb_code = gen_iterator(CodeBody, tb_stb_printf_h_parsed, stb_code)) switch(stb_code->Type)
{
case CT_Preprocess_Define:
{
}
break;
}
// Dependencies // Dependencies
#define builder header_deps #define builder header_deps
@@ -447,10 +465,7 @@ int main()
include(lit("metadesk_deps.h")); include(lit("metadesk_deps.h"));
print(r_mdesk_h); print(r_mdesk_h);
new_line();
print(banner_mdesk);
new_line(); new_line();
gen_builder_write(header); gen_builder_write(header);
#undef builder #undef builder
@@ -479,6 +494,7 @@ int main()
new_line(); new_line();
print_section(r_base_platform_c, lit("Platform")); print_section(r_base_platform_c, lit("Platform"));
print_section(r_base_debug_c, lit("Debug"));
print_section(r_base_memory_substrate_c, lit("Memory Substrate")); print_section(r_base_memory_substrate_c, lit("Memory Substrate"));
print_section(r_base_arena_c, lit("Arena")); print_section(r_base_arena_c, lit("Arena"));
print_section(r_base_strings_c, lit("Strings")); print_section(r_base_strings_c, lit("Strings"));
+52 -1
View File
@@ -26,6 +26,11 @@
#define path_scratch_file path_gen "scratch.h" #define path_scratch_file path_gen "scratch.h"
#define path_format_style path_bin ".clang-format " #define path_format_style path_bin ".clang-format "
#define gen_iterator( Type, container, iter ) \
gen_begin_ ## Type(container); \
iter != gen_end_ ## Type(container); \
iter = gen_next_ ## Type(container, iter)
// Codegen DSL // Codegen DSL
#define lit gen_txt #define lit gen_txt
@@ -61,6 +66,53 @@ void print__section(gen_Builder* builder, gen_Code code, gen_Str label) {
void register_library_macros() void register_library_macros()
{ {
// third_party/stb/stb_sprintf.h
gen_register_macros( args(
((gen_Macro) { lit("STB_SPRINTF_H_INCLUDE"), MT_Statement, }),
((gen_Macro) { lit("STBSP__ASAN"), MT_Statement, }),
((gen_Macro) { lit("STBSP__PUBLICDEC"), MT_Statement, MF_Allow_As_Attribute }),
((gen_Macro) { lit("STBSP__ATTRIBUTE_FORMAT"), MT_Statement, MF_Functional | MF_Allow_As_Attribute }),
((gen_Macro) { lit("STBSP__NOTUSED"), MT_Expression, MF_Functional | MF_Allow_As_Attribute }),
((gen_Macro) { lit("STBSP__NOTUSED"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("STB_SPRINTF_MIN"), MT_Expression, MF_Allow_As_Identifier }),
((gen_Macro) { lit("STB_SPRINTF_DECORATE"), MT_Expression, MF_Functional | MF_Allow_As_Identifier }),
((gen_Macro) { lit("stbsp__uint32"), MT_Expression, }),
((gen_Macro) { lit("stbsp__int32"), MT_Expression, }),
((gen_Macro) { lit("stbsp__uint64"), MT_Expression, }),
((gen_Macro) { lit("stbsp__int64"), MT_Expression, }),
((gen_Macro) { lit("stbsp__uint16"), MT_Expression, }),
((gen_Macro) { lit("stbsp__uintptr"), MT_Expression, }),
((gen_Macro) { lit("STB_SPRINTF_MSVC_MODE"), MT_Expression, }),
((gen_Macro) { lit("STBSP__PUBLICDEF"), MT_Expression, }),
((gen_Macro) { lit("STBSP__UNALIGNED"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("STBSP__SPECIAL"), MT_Expression, }),
((gen_Macro) { lit("STBSP__LEFTJUST"), MT_Expression, }),
((gen_Macro) { lit("STBSP__LEADINGPLUS"), MT_Expression, }),
((gen_Macro) { lit("STBSP__LEADINGSPACE"), MT_Expression, }),
((gen_Macro) { lit("STBSP__LEADING_0X"), MT_Expression, }),
((gen_Macro) { lit("STBSP__LEADINGZERO"), MT_Expression, }),
((gen_Macro) { lit("STBSP__INTMAX"), MT_Expression, }),
((gen_Macro) { lit("STBSP__TRIPLET_COMMA"), MT_Expression, }),
((gen_Macro) { lit("STBSP__NEGATIVE"), MT_Expression, }),
((gen_Macro) { lit("STBSP__METRIC_SUFFIX"), MT_Expression, }),
((gen_Macro) { lit("STBSP__HALFWIDTH"), MT_Expression, }),
((gen_Macro) { lit("STBSP__METRIC_NOSPACE"), MT_Expression, }),
((gen_Macro) { lit("STBSP__METRIC_1024"), MT_Expression, }),
((gen_Macro) { lit("STBSP__METRIC_JEDEC"), MT_Expression, }),
((gen_Macro) { lit("stbsp__chk_cb_bufL"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("stbsp__chk_cb_buf"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("stbsp__flush_cb"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("stbsp__cb_buf_clamp"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("STBSP__NUMSZ"), MT_Expression, }),
((gen_Macro) { lit("STBSP__COPYFP"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("stbsp__tento19th"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("stbsp__ddmulthi"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("stbsp__ddrenorm"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("stbsp__ddmultlo"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("stbsp__ddmultlos"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("stbsp__ddtoS64"), MT_Expression, MF_Functional })
));
// These in the same order as metadesk.h // These in the same order as metadesk.h
// base/context_cracking.h // base/context_cracking.h
@@ -578,7 +630,6 @@ void register_library_macros()
gen_register_macro((gen_Macro) { lit("quick_sort"), MT_Expression, MF_Functional }); gen_register_macro((gen_Macro) { lit("quick_sort"), MT_Expression, MF_Functional });
// base/strings.h // base/strings.h
gen_register_macros(args( gen_register_macros(args(
((gen_Macro) { lit("STB_SPRINTF_DECORATE"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("cstring_length"), MT_Expression, MF_Functional }), ((gen_Macro) { lit("cstring_length"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("str8_lit"), MT_Expression, MF_Functional }), ((gen_Macro) { lit("str8_lit"), MT_Expression, MF_Functional }),
((gen_Macro) { lit("str8_lit_comp"), MT_Expression, MF_Functional }), ((gen_Macro) { lit("str8_lit_comp"), MT_Expression, MF_Functional }),
+49
View File
@@ -0,0 +1,49 @@
// This is tests both the segregated and single-header libraris
#if TEST_SINGLEHEADER
#define MD_IMPLEMENTATION
#include "metadesk_singleheader.h"
#else
#include "metadesk_deps.c"
#include "metadesk.c"
#endif
// This program expects to be run from the build directory (where it would be after being built)
#define path_root
#define path_examples path_root ".examples/"
#define path_intro path_examples "intro/"
#define path_hello_world_mdesk path_intro "hello_world.mdesk"
#define lit md_str8_lit
int main()
{
MD_Context ctx = {0};
ctx.os_ctx.enable_large_pages = true;
md_init(& ctx);
printf("metadesk: got past init!\n");
MD_Arena* arena = md_arena_alloc();
MD_String8 hello_world_mdesk = md_os_data_from_file_path(arena, lit(path_hello_world_mdesk));
MD_TokenizeResult lexed = md_tokenize_from_text (arena, hello_world_mdesk);
MD_ParseResult parsed = md_parse_from_text_tokens(arena, lit(path_hello_world_mdesk), hello_world_mdesk, lexed.tokens);
#define md_str8_list_iter(list, elem) list.first; elem; elem = elem->next
MD_String8List debug_list = md_debug_string_list_from_tree(arena, parsed.root);
printf("Parsed listing:\n");
for (MD_String8Node* elem = md_str8_list_iter(debug_list, elem))
{
MD_String8 entry = elem->string;
if (md_str8_find_needle(entry, 0, lit("\n"), 0) < entry.size) {
printf("%*s", (int)entry.size, entry.str);
}
else {
printf("%*s\n", (int)entry.size, entry.str);
}
}
md_deinit(& ctx);
}