mirror of
https://github.com/Ed94/metadesk.git
synced 2026-08-07 08:08:48 +00:00
was able to parse stb_sprintf.h, had to make mods to gencpp_c11.h (will eventually protogate to its repo)
This commit is contained in:
+14
-14
@@ -28,6 +28,20 @@ int main()
|
|||||||
|
|
||||||
register_library_macros();
|
register_library_macros();
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
gen_Str generation_notice = lit(
|
gen_Str generation_notice = lit(
|
||||||
"// This file was generated automatially by metadesk's gen_c11.c "
|
"// This file was generated automatially by metadesk's gen_c11.c "
|
||||||
"(See: https://github.com/Ed94/metadesk/tree/master)\n\n"
|
"(See: https://github.com/Ed94/metadesk/tree/master)\n\n"
|
||||||
@@ -348,20 +362,6 @@ 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
|
||||||
|
|||||||
+4
-10
@@ -69,21 +69,15 @@ void register_library_macros()
|
|||||||
// third_party/stb/stb_sprintf.h
|
// third_party/stb/stb_sprintf.h
|
||||||
gen_register_macros( args(
|
gen_register_macros( args(
|
||||||
((gen_Macro) { lit("STB_SPRINTF_H_INCLUDE"), MT_Statement, }),
|
((gen_Macro) { lit("STB_SPRINTF_H_INCLUDE"), MT_Statement, }),
|
||||||
((gen_Macro) { lit("STBSP__ASAN"), MT_Statement, }),
|
((gen_Macro) { lit("STBSP__ASAN"), MT_Statement, MF_Allow_As_Attribute }),
|
||||||
((gen_Macro) { lit("STBSP__PUBLICDEC"), MT_Statement, MF_Allow_As_Attribute }),
|
((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__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 | MF_Allow_As_Attribute }),
|
||||||
((gen_Macro) { lit("STBSP__NOTUSED"), MT_Expression, MF_Functional }),
|
((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_MIN"), MT_Expression, MF_Allow_As_Identifier }),
|
||||||
((gen_Macro) { lit("STB_SPRINTF_DECORATE"), MT_Expression, MF_Functional | 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("STB_SPRINTF_MSVC_MODE"), MT_Expression, }),
|
||||||
((gen_Macro) { lit("STBSP__PUBLICDEF"), MT_Expression, }),
|
((gen_Macro) { lit("STBSP__PUBLICDEF"), MT_Statement, MF_Allow_As_Attribute }),
|
||||||
((gen_Macro) { lit("STBSP__UNALIGNED"), MT_Expression, MF_Functional }),
|
((gen_Macro) { lit("STBSP__UNALIGNED"), MT_Expression, MF_Functional }),
|
||||||
((gen_Macro) { lit("STBSP__SPECIAL"), MT_Expression, }),
|
((gen_Macro) { lit("STBSP__SPECIAL"), MT_Expression, }),
|
||||||
((gen_Macro) { lit("STBSP__LEFTJUST"), MT_Expression, }),
|
((gen_Macro) { lit("STBSP__LEFTJUST"), MT_Expression, }),
|
||||||
@@ -105,7 +99,7 @@ void register_library_macros()
|
|||||||
((gen_Macro) { lit("stbsp__cb_buf_clamp"), 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__NUMSZ"), MT_Expression, }),
|
||||||
((gen_Macro) { lit("STBSP__COPYFP"), MT_Expression, MF_Functional }),
|
((gen_Macro) { lit("STBSP__COPYFP"), MT_Expression, MF_Functional }),
|
||||||
((gen_Macro) { lit("stbsp__tento19th"), MT_Expression, MF_Functional }),
|
((gen_Macro) { lit("stbsp__tento19th"), MT_Expression, }),
|
||||||
((gen_Macro) { lit("stbsp__ddmulthi"), 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__ddrenorm"), MT_Expression, MF_Functional }),
|
||||||
((gen_Macro) { lit("stbsp__ddmultlo"), MT_Expression, MF_Functional }),
|
((gen_Macro) { lit("stbsp__ddmultlo"), MT_Expression, MF_Functional }),
|
||||||
|
|||||||
Vendored
+83
-35
@@ -9508,6 +9508,9 @@ struct gen_Context
|
|||||||
gen_u32 InitSize_LexerTokens;
|
gen_u32 InitSize_LexerTokens;
|
||||||
gen_u32 SizePer_StringArena;
|
gen_u32 SizePer_StringArena;
|
||||||
|
|
||||||
|
gen_u32 InitSize_StrCacheTable;
|
||||||
|
gen_u32 InitSize_MacrosTable;
|
||||||
|
|
||||||
// TODO(Ed): Symbol Table
|
// TODO(Ed): Symbol Table
|
||||||
// Keep track of all resolved symbols (naemspaced identifiers)
|
// Keep track of all resolved symbols (naemspaced identifiers)
|
||||||
|
|
||||||
@@ -17745,6 +17748,15 @@ void gen_init(gen_Context* ctx)
|
|||||||
ctx->InitSize_Fallback_Allocator_Bucket_Size = gen_megabytes(8);
|
ctx->InitSize_Fallback_Allocator_Bucket_Size = gen_megabytes(8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctx->InitSize_StrCacheTable == 0)
|
||||||
|
{
|
||||||
|
ctx->InitSize_StrCacheTable = gen_kilobytes(8);
|
||||||
|
}
|
||||||
|
if (ctx->InitSize_MacrosTable == 0)
|
||||||
|
{
|
||||||
|
ctx->InitSize_MacrosTable = gen_kilobytes(8);
|
||||||
|
}
|
||||||
|
|
||||||
// Override the current context (user has to put it back if unwanted).
|
// Override the current context (user has to put it back if unwanted).
|
||||||
gen__ctx = ctx;
|
gen__ctx = ctx;
|
||||||
|
|
||||||
@@ -17773,11 +17785,11 @@ void gen_init(gen_Context* ctx)
|
|||||||
}
|
}
|
||||||
// Setup the gen_hash tables
|
// Setup the gen_hash tables
|
||||||
{
|
{
|
||||||
ctx->StrCache = gen_hashtable_init(gen_StrCached, ctx->Allocator_DyanmicContainers);
|
ctx->StrCache = gen_hashtable_init_reserve(gen_StrCached, ctx->Allocator_DyanmicContainers, ctx->InitSize_StrCacheTable);
|
||||||
if (ctx->StrCache.Entries == gen_nullptr)
|
if (ctx->StrCache.Entries == gen_nullptr)
|
||||||
GEN_FATAL("gen::gen_init: Failed to initialize the StringCache");
|
GEN_FATAL("gen::gen_init: Failed to initialize the StringCache");
|
||||||
|
|
||||||
ctx->Macros = gen_hashtable_init(gen_Macro, ctx->Allocator_DyanmicContainers);
|
ctx->Macros = gen_hashtable_init_reserve(gen_Macro, ctx->Allocator_DyanmicContainers, ctx->InitSize_MacrosTable);
|
||||||
if (ctx->Macros.Hashes == gen_nullptr || ctx->Macros.Entries == gen_nullptr)
|
if (ctx->Macros.Hashes == gen_nullptr || ctx->Macros.Entries == gen_nullptr)
|
||||||
{
|
{
|
||||||
GEN_FATAL("gen::gen_init: Failed to initialize the PreprocessMacros table");
|
GEN_FATAL("gen::gen_init: Failed to initialize the PreprocessMacros table");
|
||||||
@@ -23636,22 +23648,33 @@ gen_internal inline gen_CodeFn gen_parse_function_after_name(
|
|||||||
eat(Tok_Number);
|
eat(Tok_Number);
|
||||||
// <Attributes> <Specifiers> <ReturnType> <Name> ( <Paraemters> ) <Specifiers> = 0
|
// <Attributes> <Specifiers> <ReturnType> <Name> ( <Paraemters> ) <Specifiers> = 0
|
||||||
}
|
}
|
||||||
gen_Token stmt_end = currtok;
|
|
||||||
eat(Tok_Statement_End);
|
|
||||||
|
|
||||||
if (currtok_noskip.Type == Tok_Comment && currtok_noskip.Line == stmt_end.Line)
|
|
||||||
inline_cmt = gen_parse_comment();
|
|
||||||
// <Attributes> <Specifiers> <ReturnType> <Name> ( <Paraemters> ) <Specifiers>; <InlineCmt>
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
if (body == gen_nullptr)
|
||||||
{
|
{
|
||||||
|
// Check for trailing specifiers...
|
||||||
|
gen_CodeAttributes post_rt_attributes = gen_parse_attributes();
|
||||||
|
if (post_rt_attributes)
|
||||||
|
{
|
||||||
|
if (attributes)
|
||||||
|
{
|
||||||
|
gen_StrBuilder merged = gen_strbuilder_fmt_buf(gen__ctx->Allocator_Temp, "%S %S", attributes->Content, post_rt_attributes->Content);
|
||||||
|
attributes->Content = gen_cache_str(gen_strbuilder_to_str(merged));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
attributes = post_rt_attributes;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// <Attributes> <Specifiers> <ReturnType> <Name> ( <Paraemters> ) <Specifiers> <Attributes>
|
||||||
|
|
||||||
gen_Token stmt_end = currtok;
|
gen_Token stmt_end = currtok;
|
||||||
eat(Tok_Statement_End);
|
eat(Tok_Statement_End);
|
||||||
// <Attributes> <Specifiers> <ReturnType> <Name> ( <Paraemters> ) <Specifiers>;
|
// <Attributes> <Specifiers> <ReturnType> <Name> ( <Paraemters> ) <Specifiers> <Attributes> < = 0 or delete > ;
|
||||||
|
|
||||||
if (currtok_noskip.Type == Tok_Comment && currtok_noskip.Line == stmt_end.Line)
|
if (currtok_noskip.Type == Tok_Comment && currtok_noskip.Line == stmt_end.Line)
|
||||||
inline_cmt = gen_parse_comment();
|
inline_cmt = gen_parse_comment();
|
||||||
// <Attributes> <Specifiers> <ReturnType> <Name> ( <Paraemters> ) <Specifiers>; <InlineCmt>
|
// <Attributes> <Specifiers> <ReturnType> <Name> ( <Paraemters> ) <Specifiers> <Attributes> < = 0 or delete > ; <InlineCmt>
|
||||||
}
|
}
|
||||||
|
|
||||||
gen_StrBuilder name_stripped = gen_strbuilder_make_str(gen__ctx->Allocator_Temp, name.Text);
|
gen_StrBuilder name_stripped = gen_strbuilder_make_str(gen__ctx->Allocator_Temp, name.Text);
|
||||||
@@ -24223,8 +24246,16 @@ gen_internal gen_Token gen_parse_identifier(bool* possible_member_function)
|
|||||||
|
|
||||||
// Typename can be: '::' <name>
|
// Typename can be: '::' <name>
|
||||||
// If that is the case first option will be Tok_Access_StaticSymbol below
|
// If that is the case first option will be Tok_Access_StaticSymbol below
|
||||||
if (check(Tok_Identifier) || accept_as_identifier)
|
if (check(Tok_Identifier) || accept_as_identifier)
|
||||||
eat(Tok_Identifier);
|
{
|
||||||
|
if (macro) {
|
||||||
|
gen_Code name_macro = gen_parse_simple_preprocess(currtok.Type);
|
||||||
|
name.Text.Len = ( ( gen_sptr )prevtok.Text.Ptr + prevtok.Text.Len ) - ( gen_sptr )name.Text.Ptr;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
eat(Tok_Identifier);
|
||||||
|
}
|
||||||
|
}
|
||||||
// <Name>
|
// <Name>
|
||||||
|
|
||||||
gen_parse_template_args(&name);
|
gen_parse_template_args(&name);
|
||||||
@@ -26908,32 +26939,49 @@ gen_internal gen_CodeTypename gen_parser_parse_type(bool from_template, bool* ge
|
|||||||
// All kinds of nonsense can makeup a type signature, first we check for a in-place definition of a class, enum, struct, or union
|
// All kinds of nonsense can makeup a type signature, first we check for a in-place definition of a class, enum, struct, or union
|
||||||
else if (currtok.Type == Tok_Decl_Class || currtok.Type == Tok_Decl_Enum || currtok.Type == Tok_Decl_Struct || currtok.Type == Tok_Decl_Union)
|
else if (currtok.Type == Tok_Decl_Class || currtok.Type == Tok_Decl_Enum || currtok.Type == Tok_Decl_Struct || currtok.Type == Tok_Decl_Union)
|
||||||
{
|
{
|
||||||
switch (currtok.Type)
|
gen_Token next = nexttok;
|
||||||
|
|
||||||
|
// names are optional if its an inplace
|
||||||
|
if (next.Type == Tok_Identifier)
|
||||||
{
|
{
|
||||||
case Tok_Decl_Class:
|
switch (currtok.Type)
|
||||||
tag = Tag_Class;
|
{
|
||||||
break;
|
case Tok_Decl_Class:
|
||||||
case Tok_Decl_Enum:
|
tag = Tag_Class;
|
||||||
tag = Tag_Enum;
|
break;
|
||||||
break;
|
case Tok_Decl_Enum:
|
||||||
case Tok_Decl_Struct:
|
tag = Tag_Enum;
|
||||||
tag = Tag_Struct;
|
break;
|
||||||
break;
|
case Tok_Decl_Struct:
|
||||||
case Tok_Decl_Union:
|
tag = Tag_Struct;
|
||||||
tag = Tag_Union;
|
break;
|
||||||
break;
|
case Tok_Decl_Union:
|
||||||
default:
|
tag = Tag_Union;
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
eat(currtok.Type);
|
||||||
|
// <Attributes> <Specifiers> <class, enum, struct, union>
|
||||||
|
|
||||||
|
name = gen_parse_identifier(gen_nullptr);
|
||||||
|
// <Attributes> <Specifiers> <class, enum, struct, union> <Name>
|
||||||
}
|
}
|
||||||
eat(currtok.Type);
|
else if (next.Type == Tok_BraceCurly_Open)
|
||||||
// <Attributes> <Specifiers> <class, enum, struct, union>
|
{
|
||||||
|
name = currtok;
|
||||||
|
// We have an inplace definition, we need to consume that...
|
||||||
|
|
||||||
name = gen_parse_identifier(gen_nullptr);
|
// TODO(Ed): we need to add a way for AST_CodeTypename to track an implace definition..
|
||||||
|
gen_b32 const inplace = true;
|
||||||
|
gen_Code indplace_def = gen_cast(gen_Code, gen_parser_parse_struct(inplace));
|
||||||
|
|
||||||
// name.Length = ( ( gen_sptr )currtok.Text + currtok.Length ) - ( gen_sptr )name.Text;
|
// For now we lose the structural information,
|
||||||
// eat( Tok_Identifier );
|
name.Text.Len = ( ( gen_sptr )prevtok.Text.Ptr + prevtok.Text.Len ) - ( gen_sptr )name.Text.Ptr;
|
||||||
gen__ctx->parser.Scope->Name = name.Text;
|
// eat( Tok_Identifier );
|
||||||
// <Attributes> <Specifiers> <class, enum, struct, union> <Name>
|
gen__ctx->parser.Scope->Name = name.Text;
|
||||||
|
// <Attributes> <Specifiers> <class, enum, struct, union> <inplace def>
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Decltype draft implementation
|
// Decltype draft implementation
|
||||||
|
|||||||
Vendored
+20
-9
@@ -229,23 +229,34 @@ STBSP__PUBLICDEC void STB_SPRINTF_DECORATE(set_separators)(char comma, char peri
|
|||||||
|
|
||||||
#ifdef STB_SPRINTF_IMPLEMENTATION
|
#ifdef STB_SPRINTF_IMPLEMENTATION
|
||||||
|
|
||||||
#define stbsp__uint32 unsigned int
|
// NOTE(Ed): Modifying because I don't want to introduce this kind of mess to the gencpp parser
|
||||||
#define stbsp__int32 signed int
|
|
||||||
|
// #define stbsp__uint32 unsigned int
|
||||||
|
// #define stbsp__int32 signed int
|
||||||
|
typedef unsigned int stbsp__uint32;
|
||||||
|
typedef signed int stbsp__int32;
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
# define stbsp__uint64 unsigned __int64
|
// # define stbsp__uint64 unsigned __int64
|
||||||
# define stbsp__int64 signed __int64
|
// # define stbsp__int64 signed __int64
|
||||||
|
typedef unsigned __int64 stbsp__uint64;
|
||||||
|
typedef signed __int64 stbsp__int64;
|
||||||
#else
|
#else
|
||||||
# define stbsp__uint64 unsigned long long
|
// # define stbsp__uint64 unsigned long long
|
||||||
# define stbsp__int64 signed long long
|
// # define stbsp__int64 signed long long
|
||||||
|
typedef unsigned long long stbsp__uint64;
|
||||||
|
typedef signed long long stbsp__int64;
|
||||||
#endif
|
#endif
|
||||||
#define stbsp__uint16 unsigned short
|
// #define stbsp__uint16 unsigned short
|
||||||
|
typedef unsigned short stbsp__uint16;
|
||||||
|
|
||||||
#ifndef stbsp__uintptr
|
#ifndef stbsp__uintptr
|
||||||
# if defined(__ppc64__) || defined(__powerpc64__) || defined(__aarch64__) || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__s390x__)
|
# if defined(__ppc64__) || defined(__powerpc64__) || defined(__aarch64__) || defined(_M_X64) || defined(__x86_64__) || defined(__x86_64) || defined(__s390x__)
|
||||||
# define stbsp__uintptr stbsp__uint64
|
// # define stbsp__uintptr stbsp__uint64
|
||||||
|
typedef stbsp__uint64 stbsp__uintptr;
|
||||||
# else
|
# else
|
||||||
# define stbsp__uintptr stbsp__uint32
|
// # define stbsp__uintptr stbsp__uint32
|
||||||
|
typedef stbsp__uint32 stbsp__uintptr;
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user