mirror of
				https://github.com/Ed94/gencpp.git
				synced 2025-10-30 22:40:54 -07:00 
			
		
		
		
	working to towards https://github.com/Ed94/gencpp/issues/56
This commit is contained in:
		| @@ -9,58 +9,58 @@ using namespace gen; | ||||
|  | ||||
| CodeBody gen_ecode( char const* path, bool use_c_definition = false ) | ||||
| { | ||||
| 	FixedArena_32KB scratch; fixed_arena_init(& scratch); | ||||
| 	FixedArena_32KB scratch;       fixed_arena_init(& scratch); | ||||
| 	AllocatorInfo   scratch_info = fixed_arena_allocator_info(& scratch); | ||||
|  | ||||
| 	CSV_Columns2 csv_enum         = parse_csv_two_columns( scratch_info, path ); | ||||
| 	String enum_entries           = string_make_reserve( GlobalAllocator, kilobytes(1) ); | ||||
| 	String to_str_entries         = string_make_reserve( GlobalAllocator, kilobytes(1) ); | ||||
| 	String to_keyword_str_entries = string_make_reserve( GlobalAllocator, kilobytes(1) ); | ||||
| 	CSV_Columns2 csv_enum                 = parse_csv_two_columns( scratch_info, path ); | ||||
| 	StrBuilder   enum_entries             = strbuilder_make_reserve( GlobalAllocator, kilobytes(1) ); | ||||
| 	StrBuilder   to_c_str_entries         = strbuilder_make_reserve( GlobalAllocator, kilobytes(1) ); | ||||
| 	StrBuilder   to_keyword_c_str_entries = strbuilder_make_reserve( GlobalAllocator, kilobytes(1) ); | ||||
|  | ||||
| 	for ( ssize idx = 0; idx < array_num(csv_enum.Col_1); ++ idx ) 	{ | ||||
| 		char const* code    = csv_enum.Col_1[idx].string; | ||||
| 		char const* keyword = csv_enum.Col_2[idx].string; | ||||
| 		// TODO(Ed): to_str_entries and the others in here didn't have proper sizing of the StrC slice. | ||||
| 		string_append_fmt( & enum_entries,           "CT_%s,\n", code ); | ||||
| 		string_append_fmt( & to_str_entries,         "{ sizeof(\"%s\"), \"%s\" },\n", code, code ); | ||||
| 		string_append_fmt( & to_keyword_str_entries, "{ sizeof(\"%s\") - 1, \"%s\" },\n", keyword, keyword ); | ||||
| 		// TODO(Ed): to_c_str_entries and the others in here didn't have proper sizing of the Str slice. | ||||
| 		strbuilder_append_fmt( & enum_entries,             "CT_%s,\n", code ); | ||||
| 		strbuilder_append_fmt( & to_c_str_entries,         "{ sizeof(\"%s\"), \"%s\" },\n", code, code ); | ||||
| 		strbuilder_append_fmt( & to_keyword_c_str_entries, "{ sizeof(\"%s\") - 1, \"%s\" },\n", keyword, keyword ); | ||||
| 	} | ||||
|  | ||||
| 	CodeEnum enum_code; | ||||
| 	if (use_c_definition) { | ||||
| 		enum_code = parse_enum(token_fmt_impl((3 + 1) / 2, "entries", string_to_strc(enum_entries), | ||||
| 		enum_code = parse_enum(token_fmt_impl((3 + 1) / 2, "entries", strbuilder_to_str(enum_entries), | ||||
| 			"enum CodeType enum_underlying(u32) { <entries> CT_NumTypes, CT_UnderlyingType = GEN_U32_MAX };" | ||||
| 		)); | ||||
| 	} | ||||
| 	else { | ||||
| 		enum_code = parse_enum(token_fmt_impl((3 + 1) / 2, "entries", string_to_strc(enum_entries), | ||||
| 		enum_code = parse_enum(token_fmt_impl((3 + 1) / 2, "entries", strbuilder_to_str(enum_entries), | ||||
| 			"enum CodeType : u32 { <entries> CT_NumTypes, CT_UnderlyingType = GEN_U32_MAX };" | ||||
| 		)); | ||||
| 	} | ||||
|  | ||||
| #pragma push_macro("local_persist") | ||||
| #undef local_persist | ||||
| 	StrC lookup_size = string_to_strc(string_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); | ||||
| 	CodeBody to_str_fns = parse_global_body( token_fmt( | ||||
| 		"entries",  string_to_strc(to_str_entries) | ||||
| 	,	"keywords", string_to_strc(to_keyword_str_entries) | ||||
| 	Str lookup_size = strbuilder_to_str(strbuilder_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); | ||||
| 	CodeBody to_c_str_fns = parse_global_body( token_fmt( | ||||
| 		"entries",  strbuilder_to_str(to_c_str_entries) | ||||
| 	,	"keywords", strbuilder_to_str(to_keyword_c_str_entries) | ||||
| 	,	"num",      lookup_size | ||||
| 	, stringize( | ||||
| 		inline | ||||
| 		StrC codetype_to_str( CodeType type ) | ||||
| 		Str codetype_to_str( CodeType type ) | ||||
| 		{ | ||||
| 			local_persist | ||||
| 			StrC lookup[<num>] = { | ||||
| 			Str lookup[<num>] = { | ||||
| 				<entries> | ||||
| 			}; | ||||
| 			return lookup[ type ]; | ||||
| 		} | ||||
|  | ||||
| 		inline | ||||
| 		StrC codetype_to_keyword_str( CodeType type ) | ||||
| 		Str codetype_to_keyword_str( CodeType type ) | ||||
| 		{ | ||||
| 			local_persist | ||||
| 			StrC lookup[ <num> ] = { | ||||
| 			Str lookup[ <num> ] = { | ||||
| 				<keywords> | ||||
| 			}; | ||||
| 			return lookup[ type ]; | ||||
| @@ -76,14 +76,14 @@ CodeBody gen_ecode( char const* path, bool use_c_definition = false ) | ||||
| 		body_append(result, code_t); | ||||
| 	} | ||||
|  | ||||
| 	body_append(result, to_str_fns); | ||||
| 	body_append(result, to_c_str_fns); | ||||
|  | ||||
| 	if (! use_c_definition) { | ||||
| 		#pragma push_macro("forceinline") | ||||
| 		#undef forceinline | ||||
| 		CodeBody alias_mappings = parse_global_body(code( | ||||
| 			forceinline StrC to_str        (CodeType type) { return codetype_to_str(type);         } | ||||
| 			forceinline StrC to_keyword_str(CodeType type) { return codetype_to_keyword_str(type); } | ||||
| 			forceinline Str to_str        (CodeType type) { return codetype_to_str(type);         } | ||||
| 			forceinline Str to_keyword_str(CodeType type) { return codetype_to_keyword_str(type); } | ||||
| 		)); | ||||
| 		#pragma pop_macro("forceinline") | ||||
| 		body_append(result, alias_mappings); | ||||
| @@ -93,19 +93,18 @@ CodeBody gen_ecode( char const* path, bool use_c_definition = false ) | ||||
|  | ||||
| CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) | ||||
| { | ||||
| 	FixedArena_16KB scratch; fixed_arena_init(& scratch); | ||||
| 	FixedArena_16KB scratch;       fixed_arena_init(& scratch); | ||||
| 	AllocatorInfo   scratch_info = fixed_arena_allocator_info(& scratch); | ||||
|  | ||||
| 	CSV_Columns2 csv_enum = parse_csv_two_columns( scratch_info, path ); | ||||
| 	String enum_entries   = string_make_reserve( GlobalAllocator, 32 ); | ||||
| 	String to_str_entries = string_make_reserve( GlobalAllocator, 32 ); | ||||
| 	CSV_Columns2 csv_enum       = parse_csv_two_columns( scratch_info, path ); | ||||
| 	StrBuilder enum_entries     = strbuilder_make_reserve( GlobalAllocator, 32 ); | ||||
| 	StrBuilder to_c_str_entries = strbuilder_make_reserve( GlobalAllocator, 32 ); | ||||
|  | ||||
| 	for (usize idx = 0; idx < array_num(csv_enum.Col_1); idx++) { | ||||
| 		char const* enum_str     = csv_enum.Col_1[idx].string; | ||||
| 		char const* entry_to_str = csv_enum.Col_2[idx].string; | ||||
|  | ||||
| 		string_append_fmt( & enum_entries, "Op_%s,\n", enum_str ); | ||||
| 		string_append_fmt( & to_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); | ||||
| 		strbuilder_append_fmt( & enum_entries,     "Op_%s,\n", enum_str ); | ||||
| 		strbuilder_append_fmt( & to_c_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); | ||||
| 	} | ||||
|  | ||||
| 	CodeEnum  enum_code; | ||||
| @@ -113,7 +112,7 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) | ||||
| 	{ | ||||
| 	#pragma push_macro("enum_underlying") | ||||
| 	#undef enum_underlying | ||||
| 		enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), stringize( | ||||
| 		enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), stringize( | ||||
| 			enum Operator enum_underlying(u32) | ||||
| 			{ | ||||
| 				<entries> | ||||
| @@ -125,7 +124,7 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), stringize( | ||||
| 		enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), stringize( | ||||
| 			enum Operator : u32 | ||||
| 			{ | ||||
| 				<entries> | ||||
| @@ -137,16 +136,16 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) | ||||
|  | ||||
| #pragma push_macro("local_persist") | ||||
| #undef local_persist | ||||
| 	StrC lookup_size = string_to_strc(string_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); | ||||
| 	Str lookup_size = strbuilder_to_str(strbuilder_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); | ||||
| 	CodeFn to_str   = parse_function(token_fmt( | ||||
| 		"entries", string_to_strc(to_str_entries) | ||||
| 		"entries", strbuilder_to_str(to_c_str_entries) | ||||
| 	,	"num",     lookup_size | ||||
| 	, stringize( | ||||
| 		inline | ||||
| 		StrC operator_to_str( Operator op ) | ||||
| 		Str operator_to_str( Operator op ) | ||||
| 		{ | ||||
| 			local_persist | ||||
| 			StrC lookup[<num>] = { | ||||
| 			Str lookup[<num>] = { | ||||
| 				<entries> | ||||
| 			}; | ||||
|  | ||||
| @@ -169,7 +168,7 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) | ||||
| 	#pragma push_macro("forceinline") | ||||
| 	#undef forceinline | ||||
| 		CodeBody alias_mappings = parse_global_body(code( | ||||
| 			forceinline StrC to_str(Operator op) { return operator_to_str(op); } | ||||
| 			forceinline Str to_str(Operator op) { return operator_to_str(op); } | ||||
| 		)); | ||||
| 	#pragma pop_macro("forceinline") | ||||
| 		body_append(result, alias_mappings); | ||||
| @@ -179,20 +178,19 @@ CodeBody gen_eoperator( char const* path, bool use_c_definition = false ) | ||||
|  | ||||
| CodeBody gen_especifier( char const* path, bool use_c_definition = false ) | ||||
| { | ||||
| 	FixedArena_16KB scratch; fixed_arena_init(& scratch); | ||||
| 	FixedArena_16KB scratch;       fixed_arena_init(& scratch); | ||||
| 	AllocatorInfo   scratch_info = fixed_arena_allocator_info(& scratch); | ||||
|  | ||||
| 	CSV_Columns2 csv_enum = parse_csv_two_columns( scratch_info, path ); | ||||
| 	String enum_entries   = string_make_reserve( scratch_info, kilobytes(1) ); | ||||
| 	String to_str_entries = string_make_reserve( scratch_info, kilobytes(1) ); | ||||
| 	CSV_Columns2 csv_enum       = parse_csv_two_columns( scratch_info, path ); | ||||
| 	StrBuilder enum_entries     = strbuilder_make_reserve( scratch_info, kilobytes(1) ); | ||||
| 	StrBuilder to_c_str_entries = strbuilder_make_reserve( scratch_info, kilobytes(1) ); | ||||
|  | ||||
| 	for (usize idx = 0; idx < array_num(csv_enum.Col_1); idx++) | ||||
| 	{ | ||||
| 		char const* enum_str     = csv_enum.Col_1[idx].string; | ||||
| 		char const* entry_to_str = csv_enum.Col_2[idx].string; | ||||
|  | ||||
| 		string_append_fmt( & enum_entries, "Spec_%s,\n", enum_str ); | ||||
| 		string_append_fmt( & to_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); | ||||
| 		strbuilder_append_fmt( & enum_entries,     "Spec_%s,\n", enum_str ); | ||||
| 		strbuilder_append_fmt( & to_c_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); | ||||
| 	} | ||||
|  | ||||
| 	CodeEnum enum_code; | ||||
| @@ -200,7 +198,7 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) | ||||
| 	{ | ||||
| 	#pragma push_macro("enum_underlying") | ||||
| 	#undef enum_underlying | ||||
| 		enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), stringize( | ||||
| 		enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), stringize( | ||||
| 			enum Specifier enum_underlying(u32) | ||||
| 			{ | ||||
| 				<entries> | ||||
| @@ -212,7 +210,7 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), stringize( | ||||
| 		enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), stringize( | ||||
| 			enum Specifier : u32 | ||||
| 			{ | ||||
| 				<entries> | ||||
| @@ -221,8 +219,7 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) | ||||
| 			}; | ||||
| 		))); | ||||
| 	} | ||||
|  | ||||
| 	CodeFn is_trailing = parse_function(token_fmt("specifier", string_to_strc(to_str_entries), stringize( | ||||
| 	CodeFn is_trailing = parse_function(token_fmt("specifier", strbuilder_to_str(to_c_str_entries), stringize( | ||||
| 		inline | ||||
| 		bool spec_is_trailing( Specifier specifier ) | ||||
| 		{ | ||||
| @@ -240,16 +237,16 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) | ||||
| #undef do_once_end | ||||
| #undef forceinline | ||||
| #undef neverinline | ||||
| 	StrC lookup_size = string_to_strc(string_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); | ||||
| 	Str lookup_size = strbuilder_to_str(strbuilder_fmt_buf(GlobalAllocator, "%d", array_num(csv_enum.Col_1) )); | ||||
| 	CodeFn to_str   = parse_function(token_fmt( | ||||
| 		"entries", string_to_strc(to_str_entries) | ||||
| 		"entries", strbuilder_to_str(to_c_str_entries) | ||||
| 	,	"num",     lookup_size | ||||
| 	, stringize( | ||||
| 		inline | ||||
| 		StrC spec_to_str( Specifier type ) | ||||
| 		Str spec_to_str( Specifier type ) | ||||
| 		{ | ||||
| 			local_persist | ||||
| 			StrC lookup[<num>] = { | ||||
| 			Str lookup[<num>] = { | ||||
| 				<entries> | ||||
| 			}; | ||||
|  | ||||
| @@ -257,16 +254,16 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) | ||||
| 		} | ||||
| 	))); | ||||
|  | ||||
| 	CodeFn to_type = parse_function( token_fmt( "entries", string_to_strc(to_str_entries), stringize( | ||||
| 	CodeFn to_type = parse_function( token_fmt( "entries", strbuilder_to_str(to_c_str_entries), stringize( | ||||
| 		inline | ||||
| 		Specifier strc_to_specifier( StrC str ) | ||||
| 		Specifier str_to_specifier( Str str ) | ||||
| 		{ | ||||
| 			local_persist | ||||
| 			u32 keymap[ Spec_NumSpecifiers ]; | ||||
| 			do_once_start | ||||
| 				for ( u32 index = 0; index < Spec_NumSpecifiers; index++ ) | ||||
| 				{ | ||||
| 					StrC enum_str = spec_to_str( (Specifier)index ); | ||||
| 					Str enum_str = spec_to_str( (Specifier)index ); | ||||
|  | ||||
| 					// We subtract 1 to remove the null terminator | ||||
| 					// This is because the tokens lexed are not null terminated. | ||||
| @@ -308,8 +305,8 @@ CodeBody gen_especifier( char const* path, bool use_c_definition = false ) | ||||
| 	#pragma push_macro("forceinline") | ||||
| 	#undef forceinline | ||||
| 		CodeBody alias_mappings = parse_global_body(code( | ||||
| 			forceinline StrC      to_str (Specifier spec)            { return spec_to_str(spec); } | ||||
| 			forceinline Specifier to_type( StrC str )                { return strc_to_specifier(str); } | ||||
| 			forceinline Str      to_str (Specifier spec)            { return spec_to_str(spec); } | ||||
| 			forceinline Specifier to_type( Str str )                { return str_to_specifier(str); } | ||||
| 			forceinline bool      is_trailing( Specifier specifier ) { return spec_is_trailing(specifier); } | ||||
| 		)); | ||||
| 	#pragma pop_macro("forceinline") | ||||
| @@ -334,50 +331,50 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ | ||||
| 	csv_parse( &csv_attr_nodes, rcast(char*, attrib_content.data), scratch_info, false ); | ||||
|  | ||||
| 	Array<ADT_Node> enum_strs          = csv_enum_nodes.nodes[0].nodes; | ||||
| 	Array<ADT_Node> enum_str_strs      = csv_enum_nodes.nodes[1].nodes; | ||||
| 	Array<ADT_Node> enum_c_str_strs      = csv_enum_nodes.nodes[1].nodes; | ||||
| 	Array<ADT_Node> attribute_strs     = csv_attr_nodes.nodes[0].nodes; | ||||
| 	Array<ADT_Node> attribute_str_strs = csv_attr_nodes.nodes[1].nodes; | ||||
| 	Array<ADT_Node> attribute_c_str_strs = csv_attr_nodes.nodes[1].nodes; | ||||
|  | ||||
| 	String enum_entries             = string_make_reserve( scratch_info, kilobytes(2) ); | ||||
| 	String to_str_entries           = string_make_reserve( scratch_info, kilobytes(4) ); | ||||
| 	String attribute_entries        = string_make_reserve( scratch_info, kilobytes(2) ); | ||||
| 	String to_str_attributes        = string_make_reserve( scratch_info, kilobytes(4) ); | ||||
| 	String attribute_define_entries = string_make_reserve( scratch_info, kilobytes(4) ); | ||||
| 	StrBuilder enum_entries             = strbuilder_make_reserve( scratch_info, kilobytes(2) ); | ||||
| 	StrBuilder to_c_str_entries           = strbuilder_make_reserve( scratch_info, kilobytes(4) ); | ||||
| 	StrBuilder attribute_entries        = strbuilder_make_reserve( scratch_info, kilobytes(2) ); | ||||
| 	StrBuilder to_c_str_attributes        = strbuilder_make_reserve( scratch_info, kilobytes(4) ); | ||||
| 	StrBuilder attribute_define_entries = strbuilder_make_reserve( scratch_info, kilobytes(4) ); | ||||
|  | ||||
| 	for (usize idx = 0; idx < array_num(enum_strs); idx++) | ||||
| 	{ | ||||
| 		char const* enum_str     = enum_strs[idx].string; | ||||
| 		char const* entry_to_str = enum_str_strs [idx].string; | ||||
| 		char const* entry_to_str = enum_c_str_strs [idx].string; | ||||
|  | ||||
| 		string_append_fmt( & enum_entries, "Tok_%s,\n", enum_str ); | ||||
| 		string_append_fmt( & to_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); | ||||
| 		strbuilder_append_fmt( & enum_entries, "Tok_%s,\n", enum_str ); | ||||
| 		strbuilder_append_fmt( & to_c_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); | ||||
| 	} | ||||
|  | ||||
| 	for ( usize idx = 0; idx < array_num(attribute_strs); idx++ ) | ||||
| 	{ | ||||
| 		char const* attribute_str = attribute_strs[idx].string; | ||||
| 		char const* entry_to_str  = attribute_str_strs [idx].string; | ||||
| 		char const* entry_to_str  = attribute_c_str_strs [idx].string; | ||||
|  | ||||
| 		string_append_fmt( & attribute_entries, "Tok_Attribute_%s,\n", attribute_str ); | ||||
| 		string_append_fmt( & to_str_attributes, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); | ||||
| 		string_append_fmt( & attribute_define_entries, "Entry( Tok_Attribute_%s, \"%s\" )", attribute_str, entry_to_str ); | ||||
| 		strbuilder_append_fmt( & attribute_entries, "Tok_Attribute_%s,\n", attribute_str ); | ||||
| 		strbuilder_append_fmt( & to_c_str_attributes, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str); | ||||
| 		strbuilder_append_fmt( & attribute_define_entries, "Entry( Tok_Attribute_%s, \"%s\" )", attribute_str, entry_to_str ); | ||||
|  | ||||
| 		if ( idx < array_num(attribute_strs) - 1 ) | ||||
| 			string_append_strc( & attribute_define_entries, txt(" \\\n")); | ||||
| 			strbuilder_append_str( & attribute_define_entries, txt(" \\\n")); | ||||
| 		else | ||||
| 			string_append_strc( & attribute_define_entries, txt("\n")); | ||||
| 			strbuilder_append_str( & attribute_define_entries, txt("\n")); | ||||
| 	} | ||||
|  | ||||
| #pragma push_macro("GEN_DEFINE_ATTRIBUTE_TOKENS") | ||||
| #undef GEN_DEFINE_ATTRIBUTE_TOKENS | ||||
| 	CodeDefine attribute_entires_def = def_define( name(GEN_DEFINE_ATTRIBUTE_TOKENS), string_to_strc(attribute_define_entries)  ); | ||||
| 	CodeDefine attribute_entires_def = def_define( name(GEN_DEFINE_ATTRIBUTE_TOKENS), strbuilder_to_str(attribute_define_entries)  ); | ||||
| #pragma pop_macro("GEN_DEFINE_ATTRIBUTE_TOKENS") | ||||
|  | ||||
| 	// We cannot parse this enum, it has Attribute names as enums | ||||
| 	CodeEnum enum_code; | ||||
| 	if (use_c_definition) | ||||
| 	{ | ||||
| 		enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), "attribute_toks", string_to_strc(attribute_entries), stringize( | ||||
| 		enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), "attribute_toks", strbuilder_to_str(attribute_entries), stringize( | ||||
| 			enum TokType | ||||
| 			{ | ||||
| 				<entries> | ||||
| @@ -389,7 +386,7 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ | ||||
| 	} | ||||
| 	else | ||||
| 	{ | ||||
| 		enum_code = parse_enum(token_fmt("entries", string_to_strc(enum_entries), "attribute_toks", string_to_strc(attribute_entries), stringize( | ||||
| 		enum_code = parse_enum(token_fmt("entries", strbuilder_to_str(enum_entries), "attribute_toks", strbuilder_to_str(attribute_entries), stringize( | ||||
| 			enum TokType : u32 | ||||
| 			{ | ||||
| 				<entries> | ||||
| @@ -405,12 +402,12 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ | ||||
| #undef local_persist | ||||
| #undef do_once_start | ||||
| #undef do_once_end | ||||
| 	CodeFn to_str = parse_function(token_fmt("entries", string_to_strc(to_str_entries), "attribute_toks", string_to_strc(to_str_attributes), stringize( | ||||
| 	CodeFn to_str = parse_function(token_fmt("entries", strbuilder_to_str(to_c_str_entries), "attribute_toks", strbuilder_to_str(to_c_str_attributes), stringize( | ||||
| 		inline | ||||
| 		StrC toktype_to_str( TokType type ) | ||||
| 		Str toktype_to_str( TokType type ) | ||||
| 		{ | ||||
| 			local_persist | ||||
| 			StrC lookup[] = { | ||||
| 			Str lookup[] = { | ||||
| 				<entries> | ||||
| 				<attribute_toks> | ||||
| 			}; | ||||
| @@ -419,16 +416,16 @@ CodeBody gen_etoktype( char const* etok_path, char const* attr_path, bool use_c_ | ||||
| 		} | ||||
| 	))); | ||||
|  | ||||
| 	CodeFn to_type = parse_function( token_fmt( "entries", string_to_strc(to_str_entries), stringize( | ||||
| 	CodeFn to_type = parse_function( token_fmt( "entries", strbuilder_to_str(to_c_str_entries), stringize( | ||||
| 		inline | ||||
| 		TokType strc_to_toktype( StrC str ) | ||||
| 		TokType str_to_toktype( Str str ) | ||||
| 		{ | ||||
| 			local_persist | ||||
| 			u32 keymap[ Tok_NumTokens ]; | ||||
| 			do_once_start | ||||
| 				for ( u32 index = 0; index < Tok_NumTokens; index++ ) | ||||
| 				{ | ||||
| 					StrC enum_str = toktype_to_str( (TokType)index ); | ||||
| 					Str enum_str = toktype_to_str( (TokType)index ); | ||||
|  | ||||
| 					// We subtract 1 to remove the null terminator | ||||
| 					// This is because the tokens lexed are not null terminated. | ||||
| @@ -518,59 +515,59 @@ CodeBody gen_ast_inlines() | ||||
| #pragma pop_macro("GEN_NS") | ||||
| #pragma pop_macro("CodeInvalid") | ||||
|  | ||||
| 	CodeBody impl_code          = parse_global_body( token_fmt( "typename", StrC name(Code),               code_impl_tmpl )); | ||||
| 	CodeBody impl_code_body     = parse_global_body( token_fmt( "typename", StrC name(CodeBody),           code_impl_tmpl )); | ||||
| 	CodeBody impl_code_attr     = parse_global_body( token_fmt( "typename", StrC name(CodeAttributes),     code_impl_tmpl )); | ||||
| 	CodeBody impl_code_cmt      = parse_global_body( token_fmt( "typename", StrC name(CodeComment),        code_impl_tmpl )); | ||||
| 	CodeBody impl_code_constr   = parse_global_body( token_fmt( "typename", StrC name(CodeConstructor),    code_impl_tmpl )); | ||||
| 	CodeBody impl_code_class    = parse_global_body( token_fmt( "typename", StrC name(CodeClass),          code_impl_tmpl )); | ||||
| 	CodeBody impl_code_define   = parse_global_body( token_fmt( "typename", StrC name(CodeDefine),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_destruct = parse_global_body( token_fmt( "typename", StrC name(CodeDestructor),     code_impl_tmpl )); | ||||
| 	CodeBody impl_code_enum     = parse_global_body( token_fmt( "typename", StrC name(CodeEnum),           code_impl_tmpl )); | ||||
| 	CodeBody impl_code_exec     = parse_global_body( token_fmt( "typename", StrC name(CodeExec),           code_impl_tmpl )); | ||||
| 	CodeBody impl_code_extern   = parse_global_body( token_fmt( "typename", StrC name(CodeExtern),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_include  = parse_global_body( token_fmt( "typename", StrC name(CodeInclude),        code_impl_tmpl )); | ||||
| 	CodeBody impl_code_friend   = parse_global_body( token_fmt( "typename", StrC name(CodeFriend),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_fn	    = parse_global_body( token_fmt( "typename", StrC name(CodeFn),             code_impl_tmpl )); | ||||
| 	CodeBody impl_code_module   = parse_global_body( token_fmt( "typename", StrC name(CodeModule),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_ns       = parse_global_body( token_fmt( "typename", StrC name(CodeNS),             code_impl_tmpl )); | ||||
| 	CodeBody impl_code_op       = parse_global_body( token_fmt( "typename", StrC name(CodeOperator),       code_impl_tmpl )); | ||||
| 	CodeBody impl_code_opcast   = parse_global_body( token_fmt( "typename", StrC name(CodeOpCast),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_params   = parse_global_body( token_fmt( "typename", StrC name(CodeParams),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_pragma   = parse_global_body( token_fmt( "typename", StrC name(CodePragma),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_precond  = parse_global_body( token_fmt( "typename", StrC name(CodePreprocessCond), code_impl_tmpl )); | ||||
| 	CodeBody impl_code_specs    = parse_global_body( token_fmt( "typename", StrC name(CodeSpecifiers),     code_impl_tmpl )); | ||||
| 	CodeBody impl_code_struct   = parse_global_body( token_fmt( "typename", StrC name(CodeStruct),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_tmpl     = parse_global_body( token_fmt( "typename", StrC name(CodeTemplate),       code_impl_tmpl )); | ||||
| 	CodeBody impl_code_type     = parse_global_body( token_fmt( "typename", StrC name(CodeTypename),       code_impl_tmpl )); | ||||
| 	CodeBody impl_code_typedef  = parse_global_body( token_fmt( "typename", StrC name(CodeTypedef),        code_impl_tmpl )); | ||||
| 	CodeBody impl_code_union    = parse_global_body( token_fmt( "typename", StrC name(CodeUnion),          code_impl_tmpl )); | ||||
| 	CodeBody impl_code_using    = parse_global_body( token_fmt( "typename", StrC name(CodeUsing),          code_impl_tmpl )); | ||||
| 	CodeBody impl_code_var      = parse_global_body( token_fmt( "typename", StrC name(CodeVar),            code_impl_tmpl )); | ||||
| 	CodeBody impl_code          = parse_global_body( token_fmt( "typename", Str name(Code),               code_impl_tmpl )); | ||||
| 	CodeBody impl_code_body     = parse_global_body( token_fmt( "typename", Str name(CodeBody),           code_impl_tmpl )); | ||||
| 	CodeBody impl_code_attr     = parse_global_body( token_fmt( "typename", Str name(CodeAttributes),     code_impl_tmpl )); | ||||
| 	CodeBody impl_code_cmt      = parse_global_body( token_fmt( "typename", Str name(CodeComment),        code_impl_tmpl )); | ||||
| 	CodeBody impl_code_constr   = parse_global_body( token_fmt( "typename", Str name(CodeConstructor),    code_impl_tmpl )); | ||||
| 	CodeBody impl_code_class    = parse_global_body( token_fmt( "typename", Str name(CodeClass),          code_impl_tmpl )); | ||||
| 	CodeBody impl_code_define   = parse_global_body( token_fmt( "typename", Str name(CodeDefine),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_destruct = parse_global_body( token_fmt( "typename", Str name(CodeDestructor),     code_impl_tmpl )); | ||||
| 	CodeBody impl_code_enum     = parse_global_body( token_fmt( "typename", Str name(CodeEnum),           code_impl_tmpl )); | ||||
| 	CodeBody impl_code_exec     = parse_global_body( token_fmt( "typename", Str name(CodeExec),           code_impl_tmpl )); | ||||
| 	CodeBody impl_code_extern   = parse_global_body( token_fmt( "typename", Str name(CodeExtern),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_include  = parse_global_body( token_fmt( "typename", Str name(CodeInclude),        code_impl_tmpl )); | ||||
| 	CodeBody impl_code_friend   = parse_global_body( token_fmt( "typename", Str name(CodeFriend),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_fn	    = parse_global_body( token_fmt( "typename", Str name(CodeFn),             code_impl_tmpl )); | ||||
| 	CodeBody impl_code_module   = parse_global_body( token_fmt( "typename", Str name(CodeModule),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_ns       = parse_global_body( token_fmt( "typename", Str name(CodeNS),             code_impl_tmpl )); | ||||
| 	CodeBody impl_code_op       = parse_global_body( token_fmt( "typename", Str name(CodeOperator),       code_impl_tmpl )); | ||||
| 	CodeBody impl_code_opcast   = parse_global_body( token_fmt( "typename", Str name(CodeOpCast),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_params   = parse_global_body( token_fmt( "typename", Str name(CodeParams),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_pragma   = parse_global_body( token_fmt( "typename", Str name(CodePragma),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_precond  = parse_global_body( token_fmt( "typename", Str name(CodePreprocessCond), code_impl_tmpl )); | ||||
| 	CodeBody impl_code_specs    = parse_global_body( token_fmt( "typename", Str name(CodeSpecifiers),     code_impl_tmpl )); | ||||
| 	CodeBody impl_code_struct   = parse_global_body( token_fmt( "typename", Str name(CodeStruct),         code_impl_tmpl )); | ||||
| 	CodeBody impl_code_tmpl     = parse_global_body( token_fmt( "typename", Str name(CodeTemplate),       code_impl_tmpl )); | ||||
| 	CodeBody impl_code_type     = parse_global_body( token_fmt( "typename", Str name(CodeTypename),       code_impl_tmpl )); | ||||
| 	CodeBody impl_code_typedef  = parse_global_body( token_fmt( "typename", Str name(CodeTypedef),        code_impl_tmpl )); | ||||
| 	CodeBody impl_code_union    = parse_global_body( token_fmt( "typename", Str name(CodeUnion),          code_impl_tmpl )); | ||||
| 	CodeBody impl_code_using    = parse_global_body( token_fmt( "typename", Str name(CodeUsing),          code_impl_tmpl )); | ||||
| 	CodeBody impl_code_var      = parse_global_body( token_fmt( "typename", Str name(CodeVar),            code_impl_tmpl )); | ||||
|  | ||||
| 	body_append(impl_code_attr,     parse_global_body( token_fmt( "typename", StrC name(Attributes),     codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_cmt,      parse_global_body( token_fmt( "typename", StrC name(Comment),        codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_constr,   parse_global_body( token_fmt( "typename", StrC name(Constructor),    codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_define,   parse_global_body( token_fmt( "typename", StrC name(Define),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_destruct, parse_global_body( token_fmt( "typename", StrC name(Destructor),     codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_enum,     parse_global_body( token_fmt( "typename", StrC name(Enum),           codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_exec,     parse_global_body( token_fmt( "typename", StrC name(Exec),           codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_extern,   parse_global_body( token_fmt( "typename", StrC name(Extern),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_include,  parse_global_body( token_fmt( "typename", StrC name(Include),        codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_friend,   parse_global_body( token_fmt( "typename", StrC name(Friend),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_fn,       parse_global_body( token_fmt( "typename", StrC name(Fn),             codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_module,   parse_global_body( token_fmt( "typename", StrC name(Module),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_ns,       parse_global_body( token_fmt( "typename", StrC name(NS),             codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_op,       parse_global_body( token_fmt( "typename", StrC name(Operator),       codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_opcast,   parse_global_body( token_fmt( "typename", StrC name(OpCast),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_pragma,   parse_global_body( token_fmt( "typename", StrC name(Pragma),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_precond,  parse_global_body( token_fmt( "typename", StrC name(PreprocessCond), codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_tmpl,     parse_global_body( token_fmt( "typename", StrC name(Template),       codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_type,     parse_global_body( token_fmt( "typename", StrC name(Typename),       codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_typedef,  parse_global_body( token_fmt( "typename", StrC name(Typedef),        codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_union,    parse_global_body( token_fmt( "typename", StrC name(Union),          codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_using,    parse_global_body( token_fmt( "typename", StrC name(Using),          codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_var,      parse_global_body( token_fmt( "typename", StrC name(Var),            codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_attr,     parse_global_body( token_fmt( "typename", Str name(Attributes),     codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_cmt,      parse_global_body( token_fmt( "typename", Str name(Comment),        codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_constr,   parse_global_body( token_fmt( "typename", Str name(Constructor),    codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_define,   parse_global_body( token_fmt( "typename", Str name(Define),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_destruct, parse_global_body( token_fmt( "typename", Str name(Destructor),     codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_enum,     parse_global_body( token_fmt( "typename", Str name(Enum),           codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_exec,     parse_global_body( token_fmt( "typename", Str name(Exec),           codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_extern,   parse_global_body( token_fmt( "typename", Str name(Extern),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_include,  parse_global_body( token_fmt( "typename", Str name(Include),        codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_friend,   parse_global_body( token_fmt( "typename", Str name(Friend),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_fn,       parse_global_body( token_fmt( "typename", Str name(Fn),             codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_module,   parse_global_body( token_fmt( "typename", Str name(Module),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_ns,       parse_global_body( token_fmt( "typename", Str name(NS),             codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_op,       parse_global_body( token_fmt( "typename", Str name(Operator),       codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_opcast,   parse_global_body( token_fmt( "typename", Str name(OpCast),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_pragma,   parse_global_body( token_fmt( "typename", Str name(Pragma),         codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_precond,  parse_global_body( token_fmt( "typename", Str name(PreprocessCond), codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_tmpl,     parse_global_body( token_fmt( "typename", Str name(Template),       codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_type,     parse_global_body( token_fmt( "typename", Str name(Typename),       codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_typedef,  parse_global_body( token_fmt( "typename", Str name(Typedef),        codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_union,    parse_global_body( token_fmt( "typename", Str name(Union),          codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_using,    parse_global_body( token_fmt( "typename", Str name(Using),          codetype_impl_tmpl ))); | ||||
| 	body_append(impl_code_var,      parse_global_body( token_fmt( "typename", Str name(Var),            codetype_impl_tmpl ))); | ||||
|  | ||||
| 	#pragma push_macro("forceinline") | ||||
| 	#undef forceinline | ||||
| @@ -582,34 +579,34 @@ CodeBody gen_ast_inlines() | ||||
| 	); | ||||
| 	#pragma pop_macro("forceinline") | ||||
|  | ||||
| 	CodeBody impl_cast_body      = parse_global_body( token_fmt( "typename", StrC name(Body),           cast_tmpl )); | ||||
| 	CodeBody impl_cast_attribute = parse_global_body( token_fmt( "typename", StrC name(Attributes),     cast_tmpl )); | ||||
| 	CodeBody impl_cast_cmt       = parse_global_body( token_fmt( "typename", StrC name(Comment),        cast_tmpl )); | ||||
| 	CodeBody impl_cast_constr    = parse_global_body( token_fmt( "typename", StrC name(Constructor),    cast_tmpl )); | ||||
| 	CodeBody impl_cast_class     = parse_global_body( token_fmt( "typename", StrC name(Class),          cast_tmpl )); | ||||
| 	CodeBody impl_cast_define    = parse_global_body( token_fmt( "typename", StrC name(Define),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_destruct  = parse_global_body( token_fmt( "typename", StrC name(Destructor),     cast_tmpl )); | ||||
| 	CodeBody impl_cast_enum      = parse_global_body( token_fmt( "typename", StrC name(Enum),           cast_tmpl )); | ||||
| 	CodeBody impl_cast_exec      = parse_global_body( token_fmt( "typename", StrC name(Exec),           cast_tmpl )); | ||||
| 	CodeBody impl_cast_extern    = parse_global_body( token_fmt( "typename", StrC name(Extern),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_friend    = parse_global_body( token_fmt( "typename", StrC name(Friend),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_fn        = parse_global_body( token_fmt( "typename", StrC name(Fn),             cast_tmpl )); | ||||
| 	CodeBody impl_cast_include   = parse_global_body( token_fmt( "typename", StrC name(Include),        cast_tmpl )); | ||||
| 	CodeBody impl_cast_module    = parse_global_body( token_fmt( "typename", StrC name(Module),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_ns        = parse_global_body( token_fmt( "typename", StrC name(NS),             cast_tmpl )); | ||||
| 	CodeBody impl_cast_op        = parse_global_body( token_fmt( "typename", StrC name(Operator),       cast_tmpl )); | ||||
| 	CodeBody impl_cast_opcast    = parse_global_body( token_fmt( "typename", StrC name(OpCast),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_params    = parse_global_body( token_fmt( "typename", StrC name(Params),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_pragma    = parse_global_body( token_fmt( "typename", StrC name(Pragma),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_precond   = parse_global_body( token_fmt( "typename", StrC name(PreprocessCond), cast_tmpl )); | ||||
| 	CodeBody impl_cast_specs     = parse_global_body( token_fmt( "typename", StrC name(Specifiers),     cast_tmpl )); | ||||
| 	CodeBody impl_cast_struct    = parse_global_body( token_fmt( "typename", StrC name(Struct),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_tmpl      = parse_global_body( token_fmt( "typename", StrC name(Template),       cast_tmpl )); | ||||
| 	CodeBody impl_cast_type      = parse_global_body( token_fmt( "typename", StrC name(Typename),       cast_tmpl )); | ||||
| 	CodeBody impl_cast_typedef   = parse_global_body( token_fmt( "typename", StrC name(Typedef),        cast_tmpl )); | ||||
| 	CodeBody impl_cast_union     = parse_global_body( token_fmt( "typename", StrC name(Union),          cast_tmpl )); | ||||
| 	CodeBody impl_cast_using     = parse_global_body( token_fmt( "typename", StrC name(Using),          cast_tmpl )); | ||||
| 	CodeBody impl_cast_var       = parse_global_body( token_fmt( "typename", StrC name(Var),            cast_tmpl )); | ||||
| 	CodeBody impl_cast_body      = parse_global_body( token_fmt( "typename", Str name(Body),           cast_tmpl )); | ||||
| 	CodeBody impl_cast_attribute = parse_global_body( token_fmt( "typename", Str name(Attributes),     cast_tmpl )); | ||||
| 	CodeBody impl_cast_cmt       = parse_global_body( token_fmt( "typename", Str name(Comment),        cast_tmpl )); | ||||
| 	CodeBody impl_cast_constr    = parse_global_body( token_fmt( "typename", Str name(Constructor),    cast_tmpl )); | ||||
| 	CodeBody impl_cast_class     = parse_global_body( token_fmt( "typename", Str name(Class),          cast_tmpl )); | ||||
| 	CodeBody impl_cast_define    = parse_global_body( token_fmt( "typename", Str name(Define),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_destruct  = parse_global_body( token_fmt( "typename", Str name(Destructor),     cast_tmpl )); | ||||
| 	CodeBody impl_cast_enum      = parse_global_body( token_fmt( "typename", Str name(Enum),           cast_tmpl )); | ||||
| 	CodeBody impl_cast_exec      = parse_global_body( token_fmt( "typename", Str name(Exec),           cast_tmpl )); | ||||
| 	CodeBody impl_cast_extern    = parse_global_body( token_fmt( "typename", Str name(Extern),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_friend    = parse_global_body( token_fmt( "typename", Str name(Friend),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_fn        = parse_global_body( token_fmt( "typename", Str name(Fn),             cast_tmpl )); | ||||
| 	CodeBody impl_cast_include   = parse_global_body( token_fmt( "typename", Str name(Include),        cast_tmpl )); | ||||
| 	CodeBody impl_cast_module    = parse_global_body( token_fmt( "typename", Str name(Module),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_ns        = parse_global_body( token_fmt( "typename", Str name(NS),             cast_tmpl )); | ||||
| 	CodeBody impl_cast_op        = parse_global_body( token_fmt( "typename", Str name(Operator),       cast_tmpl )); | ||||
| 	CodeBody impl_cast_opcast    = parse_global_body( token_fmt( "typename", Str name(OpCast),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_params    = parse_global_body( token_fmt( "typename", Str name(Params),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_pragma    = parse_global_body( token_fmt( "typename", Str name(Pragma),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_precond   = parse_global_body( token_fmt( "typename", Str name(PreprocessCond), cast_tmpl )); | ||||
| 	CodeBody impl_cast_specs     = parse_global_body( token_fmt( "typename", Str name(Specifiers),     cast_tmpl )); | ||||
| 	CodeBody impl_cast_struct    = parse_global_body( token_fmt( "typename", Str name(Struct),         cast_tmpl )); | ||||
| 	CodeBody impl_cast_tmpl      = parse_global_body( token_fmt( "typename", Str name(Template),       cast_tmpl )); | ||||
| 	CodeBody impl_cast_type      = parse_global_body( token_fmt( "typename", Str name(Typename),       cast_tmpl )); | ||||
| 	CodeBody impl_cast_typedef   = parse_global_body( token_fmt( "typename", Str name(Typedef),        cast_tmpl )); | ||||
| 	CodeBody impl_cast_union     = parse_global_body( token_fmt( "typename", Str name(Union),          cast_tmpl )); | ||||
| 	CodeBody impl_cast_using     = parse_global_body( token_fmt( "typename", Str name(Using),          cast_tmpl )); | ||||
| 	CodeBody impl_cast_var       = parse_global_body( token_fmt( "typename", Str name(Var),            cast_tmpl )); | ||||
|  | ||||
| 	CodeBody result = def_global_body( args( | ||||
| 		def_pragma( txt("region generated code inline implementation")), | ||||
|   | ||||
| @@ -21,22 +21,22 @@ using namespace gen; | ||||
| void clang_format_file( char const* path, char const* style_path ) | ||||
| { | ||||
| 	GEN_ASSERT_NOT_NULL(path); | ||||
| 	String resolved_path = string_make_strc(GlobalAllocator, to_strc_from_c_str(path)); | ||||
| 	String style_arg; | ||||
| 	StrBuilder resolved_path = strbuilder_make_str(GlobalAllocator, to_str_from_c_str(path)); | ||||
| 	StrBuilder style_arg; | ||||
| 	if (style_path) { | ||||
| 		style_arg = string_make_strc(GlobalAllocator, txt("-style=file:")); | ||||
| 		string_append_fmt( & style_arg, "%s ", style_path ); | ||||
| 		style_arg = strbuilder_make_str(GlobalAllocator, txt("-style=file:")); | ||||
| 		strbuilder_append_fmt( & style_arg, "%s ", style_path ); | ||||
| 	} | ||||
|  | ||||
| 	StrC clang_format      = txt("clang-format "); | ||||
| 	StrC cf_format_inplace = txt("-i "); | ||||
| 	StrC cf_verbose        = txt("-verbose "); | ||||
| 	Str clang_format      = txt("clang-format "); | ||||
| 	Str cf_format_inplace = txt("-i "); | ||||
| 	Str cf_verbose        = txt("-verbose "); | ||||
|  | ||||
| 	String command = string_make_strc( GlobalAllocator, clang_format ); | ||||
| 	string_append_strc( & command, cf_format_inplace ); | ||||
| 	string_append_strc( & command, cf_verbose ); | ||||
| 	string_append_string( & command, style_arg ); | ||||
| 	string_append_string( & command, resolved_path ); | ||||
| 	StrBuilder command = strbuilder_make_str( GlobalAllocator, clang_format ); | ||||
| 	strbuilder_append_str( & command, cf_format_inplace ); | ||||
| 	strbuilder_append_str( & command, cf_verbose ); | ||||
| 	strbuilder_append_string( & command, style_arg ); | ||||
| 	strbuilder_append_string( & command, resolved_path ); | ||||
| 	system( command ); | ||||
| } | ||||
|  | ||||
| @@ -48,11 +48,11 @@ void refactor_file( char const* path, char const* refactor_script ) | ||||
| 	GEN_ASSERT_NOT_NULL(path); | ||||
| 	GEN_ASSERT_NOT_NULL(refactor_script); | ||||
|  | ||||
| 	String command = string_make_strc(GlobalAllocator, txt("refactor ")); | ||||
| 	// string_append_strc( & command, txt("-debug ") ); | ||||
| 	string_append_strc( & command, txt("-num=1 ") ); | ||||
| 	string_append_fmt( & command, "-src=%s ", path ); | ||||
| 	string_append_fmt( & command,"-spec=%s ", refactor_script ); | ||||
| 	StrBuilder command = strbuilder_make_str(GlobalAllocator, txt("refactor ")); | ||||
| 	// strbuilder_append_str( & command, txt("-debug ") ); | ||||
| 	strbuilder_append_str( & command, txt("-num=1 ") ); | ||||
| 	strbuilder_append_fmt( & command, "-src=%s ", path ); | ||||
| 	strbuilder_append_fmt( & command,"-spec=%s ", refactor_script ); | ||||
| 	system(command); | ||||
| 	log_fmt("\n"); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user