mirror of
				https://github.com/Ed94/gencpp.git
				synced 2025-10-31 06:50:53 -07:00 
			
		
		
		
	fixes for c library
This commit is contained in:
		| @@ -1036,12 +1036,24 @@ void specifiers_to_strbuilder_ref( CodeSpecifiers self, StrBuilder* result ) | ||||
| 	GEN_ASSERT(result); | ||||
| 	s32 idx  = 0; | ||||
| 	s32 left = self->NumEntries; | ||||
| 	while ( left-- ) | ||||
| 	while ( left -- ) | ||||
| 	{ | ||||
| 		Str spec = spec_to_str( self->ArrSpecs[idx] ); | ||||
| 		strbuilder_append_fmt( result, "%.*s ", spec.Len, spec.Ptr ); | ||||
| 		Specifier spec     = self->ArrSpecs[idx]; | ||||
| 		Str       spec_str = spec_to_str( spec ); | ||||
| 		if ( idx > 0 ) switch (spec) { | ||||
| 			case Spec_Ptr: | ||||
| 			case Spec_Ref: | ||||
| 			case Spec_RValue: | ||||
| 			break; | ||||
|  | ||||
| 			default: | ||||
| 				strbuilder_append_str(result, txt(" ")); | ||||
| 			break; | ||||
| 		} | ||||
| 		strbuilder_append_fmt( result, "%S", spec_str ); | ||||
| 		idx++; | ||||
| 	} | ||||
| 	strbuilder_append_str(result, txt(" ")); | ||||
| } | ||||
|  | ||||
| StrBuilder struct_to_strbuilder(CodeStruct self) | ||||
| @@ -1445,7 +1457,7 @@ void var_to_strbuilder_ref(CodeVar self, StrBuilder* result ) | ||||
| 			strbuilder_append_fmt( result, "%SB ", attributes_to_strbuilder(self->Attributes) ); | ||||
|  | ||||
| 		if ( self->Specs ) | ||||
| 			strbuilder_append_fmt( result, "%SB\n", specifiers_to_strbuilder(self->Specs) ); | ||||
| 			strbuilder_append_fmt( result, "%SB", specifiers_to_strbuilder(self->Specs) ); | ||||
|  | ||||
| 		strbuilder_append_fmt( result, "%SB %S", typename_to_strbuilder(self->ValueType), self->Name ); | ||||
|  | ||||
|   | ||||
| @@ -503,7 +503,7 @@ void register_macros( s32 num, ... ) | ||||
| 	va_end(va); | ||||
| } | ||||
|  | ||||
| void register_macros( s32 num,  Macro* macros ) | ||||
| void register_macros_arr( s32 num,  Macro* macros ) | ||||
| { | ||||
| 	GEN_ASSERT(num > 0); | ||||
| 	do | ||||
|   | ||||
| @@ -93,6 +93,9 @@ struct Context | ||||
|  | ||||
| 	// TODO(Ed): Active parse context vs a parse result need to be separated conceptually | ||||
| 	ParseContext parser; | ||||
|  | ||||
| 	// TODO(Ed): Formatting - This will eventually be in a separate struct when in the process of serialization of the builder. | ||||
| 	s32 temp_serialize_indent; | ||||
| }; | ||||
|  | ||||
| // Initialize the library. There first ctx initialized must exist for lifetime of other contextes that come after as its the one that | ||||
| @@ -121,7 +124,11 @@ GEN_API void register_macro( Macro macro ); | ||||
|  | ||||
| // Ease of use batch registration | ||||
| GEN_API void register_macros( s32 num, ... ); | ||||
| GEN_API void register_macros( s32 num,  Macro* macros ); | ||||
| GEN_API void register_macros_arr( s32 num, Macro* macros ); | ||||
|  | ||||
| #if GEN_COMPILER_CPP | ||||
| forceinline void register_macros( s32 num, Macro* macros ) { return register_macros_arr(num, macros); } | ||||
| #endif | ||||
|  | ||||
| // Used internally to retrive or make string allocations. | ||||
| // Strings are stored in a series of string arenas of fixed size (SizePer_StringArena) | ||||
| @@ -276,30 +283,45 @@ GEN_API CodeBody def_body( CodeType type ); | ||||
| // There are two options for defining a struct body, either varadically provided with the args macro to auto-deduce the arg num, | ||||
| /// or provide as an array of Code objects. | ||||
|  | ||||
| GEN_API CodeBody         def_class_body      ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_class_body      ( s32 num, Code* codes ); | ||||
| GEN_API CodeDefineParams def_define_params   ( s32 num, ... ); | ||||
| GEN_API CodeDefineParams def_define_params   ( s32 num, CodeDefineParams* codes ); | ||||
| GEN_API CodeBody         def_enum_body       ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_enum_body       ( s32 num, Code* codes ); | ||||
| GEN_API CodeBody         def_export_body     ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_export_body     ( s32 num, Code* codes); | ||||
| GEN_API CodeBody         def_extern_link_body( s32 num, ... ); | ||||
| GEN_API CodeBody         def_extern_link_body( s32 num, Code* codes ); | ||||
| GEN_API CodeBody         def_function_body   ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_function_body   ( s32 num, Code* codes ); | ||||
| GEN_API CodeBody         def_global_body     ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_global_body     ( s32 num, Code* codes ); | ||||
| GEN_API CodeBody         def_namespace_body  ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_namespace_body  ( s32 num, Code* codes ); | ||||
| GEN_API CodeParams       def_params          ( s32 num, ... ); | ||||
| GEN_API CodeParams       def_params          ( s32 num, CodeParams* params ); | ||||
| GEN_API CodeSpecifiers   def_specifiers      ( s32 num, ... ); | ||||
| GEN_API CodeSpecifiers   def_specifiers      ( s32 num, Specifier* specs ); | ||||
| GEN_API CodeBody         def_struct_body     ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_struct_body     ( s32 num, Code* codes ); | ||||
| GEN_API CodeBody         def_union_body      ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_union_body      ( s32 num, Code* codes ); | ||||
| GEN_API CodeBody         def_class_body           ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_class_body_arr       ( s32 num, Code* codes ); | ||||
| GEN_API CodeDefineParams def_define_params        ( s32 num, ... ); | ||||
| GEN_API CodeDefineParams def_define_params_arr    ( s32 num, CodeDefineParams* codes ); | ||||
| GEN_API CodeBody         def_enum_body            ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_enum_body_arr        ( s32 num, Code* codes ); | ||||
| GEN_API CodeBody         def_export_body          ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_export_body_arr      ( s32 num, Code* codes); | ||||
| GEN_API CodeBody         def_extern_link_body     ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_extern_link_body_arr ( s32 num, Code* codes ); | ||||
| GEN_API CodeBody         def_function_body        ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_function_body_arr    ( s32 num, Code* codes ); | ||||
| GEN_API CodeBody         def_global_body          ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_global_body_arr      ( s32 num, Code* codes ); | ||||
| GEN_API CodeBody         def_namespace_body       ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_namespace_body_arr   ( s32 num, Code* codes ); | ||||
| GEN_API CodeParams       def_params               ( s32 num, ... ); | ||||
| GEN_API CodeParams       def_params_arr           ( s32 num, CodeParams* params ); | ||||
| GEN_API CodeSpecifiers   def_specifiers           ( s32 num, ... ); | ||||
| GEN_API CodeSpecifiers   def_specifiers_arr       ( s32 num, Specifier* specs ); | ||||
| GEN_API CodeBody         def_struct_body          ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_struct_body_arr      ( s32 num, Code* codes ); | ||||
| GEN_API CodeBody         def_union_body           ( s32 num, ... ); | ||||
| GEN_API CodeBody         def_union_body_arr       ( s32 num, Code* codes ); | ||||
|  | ||||
| #if GEN_COMPILER_CPP | ||||
| forceinline CodeBody         def_class_body      ( s32 num, Code* codes )             { return def_class_body_arr(num, codes); } | ||||
| forceinline CodeDefineParams def_define_params   ( s32 num, CodeDefineParams* codes ) { return def_define_params_arr(num, codes); } | ||||
| forceinline CodeBody         def_enum_body       ( s32 num, Code* codes )             { return def_enum_body_arr(num, codes); } | ||||
| forceinline CodeBody         def_export_body     ( s32 num, Code* codes)              { return def_export_body_arr(num, codes); } | ||||
| forceinline CodeBody         def_extern_link_body( s32 num, Code* codes )             { return def_extern_link_body_arr(num, codes); } | ||||
| forceinline CodeBody         def_function_body   ( s32 num, Code* codes )             { return def_function_body_arr(num, codes); } | ||||
| forceinline CodeBody         def_global_body     ( s32 num, Code* codes )             { return def_global_body_arr(num, codes); } | ||||
| forceinline CodeBody         def_namespace_body  ( s32 num, Code* codes )             { return def_namespace_body_arr(num, codes); } | ||||
| forceinline CodeParams       def_params          ( s32 num, CodeParams* params )      { return def_params_arr(num, params); } | ||||
| forceinline CodeSpecifiers   def_specifiers      ( s32 num, Specifier* specs )        { return def_specifiers_arr(num, specs); } | ||||
| forceinline CodeBody         def_struct_body     ( s32 num, Code* codes )             { return def_struct_body_arr(num, codes); } | ||||
| forceinline CodeBody         def_union_body      ( s32 num, Code* codes )             { return def_union_body_arr(num, codes); } | ||||
| #endif | ||||
|  | ||||
| #pragma endregion Upfront | ||||
|  | ||||
|   | ||||
| @@ -73,7 +73,7 @@ CodeConstructor parse_constructor( Str def ) | ||||
|  | ||||
| 	if ( NumSpecifiers ) | ||||
| 	{ | ||||
| 		specifiers = def_specifiers( NumSpecifiers, specs_found ); | ||||
| 		specifiers = def_specifiers_arr( NumSpecifiers, specs_found ); | ||||
| 		// <specifiers> ... | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -1369,7 +1369,7 @@ CodeBody def_class_body( s32 num, ... ) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| CodeBody def_class_body( s32 num, Code* codes ) | ||||
| CodeBody def_class_body_arr( s32 num, Code* codes ) | ||||
| { | ||||
| 	def_body_code_array_start( def_class_body ); | ||||
|  | ||||
| @@ -1432,7 +1432,7 @@ CodeDefineParams def_define_params( s32 num, ... ) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| CodeDefineParams def_define_params( s32 num, CodeDefineParams* codes ) | ||||
| CodeDefineParams def_define_params_arr( s32 num, CodeDefineParams* codes ) | ||||
| { | ||||
| 	def_body_code_array_start( def_define_params ); | ||||
|  | ||||
| @@ -1491,7 +1491,7 @@ CodeBody def_enum_body( s32 num, ... ) | ||||
| 	return (CodeBody) result; | ||||
| } | ||||
|  | ||||
| CodeBody def_enum_body( s32 num, Code* codes ) | ||||
| CodeBody def_enum_body_arr( s32 num, Code* codes ) | ||||
| { | ||||
| 	def_body_code_array_start( def_enum_body ); | ||||
|  | ||||
| @@ -1552,7 +1552,7 @@ CodeBody def_export_body( s32 num, ... ) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| CodeBody def_export_body( s32 num, Code* codes ) | ||||
| CodeBody def_export_body_arr( s32 num, Code* codes ) | ||||
| { | ||||
| 	def_body_code_array_start( def_export_body ); | ||||
|  | ||||
| @@ -1618,7 +1618,7 @@ CodeBody def_extern_link_body( s32 num, ... ) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| CodeBody def_extern_link_body( s32 num, Code* codes ) | ||||
| CodeBody def_extern_link_body_arr( s32 num, Code* codes ) | ||||
| { | ||||
| 	def_body_code_array_start( def_extern_linkage_body ); | ||||
|  | ||||
| @@ -1685,7 +1685,7 @@ CodeBody def_function_body( s32 num, ... ) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| CodeBody def_function_body( s32 num, Code* codes ) | ||||
| CodeBody def_function_body_arr( s32 num, Code* codes ) | ||||
| { | ||||
| 	def_body_code_array_start( def_function_body ); | ||||
|  | ||||
| @@ -1756,7 +1756,7 @@ CodeBody def_global_body( s32 num, ... ) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| CodeBody def_global_body( s32 num, Code* codes ) | ||||
| CodeBody def_global_body_arr( s32 num, Code* codes ) | ||||
| { | ||||
| 	def_body_code_array_start( def_global_body ); | ||||
|  | ||||
| @@ -1827,7 +1827,7 @@ CodeBody def_namespace_body( s32 num, ... ) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| CodeBody def_namespace_body( s32 num, Code* codes ) | ||||
| CodeBody def_namespace_body_arr( s32 num, Code* codes ) | ||||
| { | ||||
| 	def_body_code_array_start( def_namespace_body ); | ||||
|  | ||||
| @@ -1889,7 +1889,7 @@ CodeParams def_params( s32 num, ... ) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| CodeParams def_params( s32 num, CodeParams* codes ) | ||||
| CodeParams def_params_arr( s32 num, CodeParams* codes ) | ||||
| { | ||||
| 	def_body_code_array_start( def_params ); | ||||
|  | ||||
| @@ -1945,7 +1945,7 @@ CodeSpecifiers def_specifiers( s32 num, ... ) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| CodeSpecifiers def_specifiers( s32 num, Specifier* specs ) | ||||
| CodeSpecifiers def_specifiers_arr( s32 num, Specifier* specs ) | ||||
| { | ||||
| 	if ( num <= 0 ) { | ||||
| 		log_failure("gen::def_specifiers: num cannot be zero or less"); | ||||
| @@ -2004,7 +2004,7 @@ CodeBody def_struct_body( s32 num, ... ) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| CodeBody def_struct_body( s32 num, Code* codes ) | ||||
| CodeBody def_struct_body_arr( s32 num, Code* codes ) | ||||
| { | ||||
| 	def_body_code_array_start( def_struct_body ); | ||||
|  | ||||
| @@ -2065,7 +2065,7 @@ CodeBody def_union_body( s32 num, ... ) | ||||
| 	return result; | ||||
| } | ||||
|  | ||||
| CodeBody def_union_body( s32 num, Code* codes ) | ||||
| CodeBody def_union_body_arr( s32 num, Code* codes ) | ||||
| { | ||||
| 	def_body_code_array_start( def_union_body ); | ||||
|  | ||||
|   | ||||
| @@ -532,7 +532,7 @@ void lex_found_token( LexContext* ctx ) | ||||
| 		ctx->token.Type   = macrotype_to_toktype(macro->Type); | ||||
| 		b32 is_functional = macro_is_functional(* macro); | ||||
| 		resolved_to_macro = has_args ? is_functional : ! is_functional; | ||||
| 		if ( ! resolved_to_macro ) { | ||||
| 		if ( ! resolved_to_macro && GEN_BUILD_DEBUG ) { | ||||
| 			log_fmt("Info(%d, %d): %S identified as a macro but usage here does not resolve to one (interpreting as identifier)\n" | ||||
| 				, ctx->token.Line | ||||
| 				, ctx->token.Line | ||||
|   | ||||
| @@ -1028,7 +1028,7 @@ CodeBody parse_class_struct_body( TokType which, Token name ) | ||||
|  | ||||
| 				if ( NumSpecifiers ) | ||||
| 				{ | ||||
| 					specifiers = def_specifiers( NumSpecifiers, specs_found ); | ||||
| 					specifiers = def_specifiers_arr( NumSpecifiers, specs_found ); | ||||
| 				} | ||||
| 				// <Attributes> <Specifiers> | ||||
|  | ||||
| @@ -1753,7 +1753,7 @@ CodeBody parse_global_nspace( CodeType which ) | ||||
|  | ||||
| 				if ( NumSpecifiers ) | ||||
| 				{ | ||||
| 					specifiers = def_specifiers( NumSpecifiers, specs_found ); | ||||
| 					specifiers = def_specifiers_arr( NumSpecifiers, specs_found ); | ||||
| 				} | ||||
| 				// <Attributes> <Specifiers> | ||||
| 			} | ||||
| @@ -4012,7 +4012,7 @@ CodeFriend parser_parse_friend() | ||||
| 		} | ||||
|  | ||||
| 		if ( NumSpecifiers ) { | ||||
| 			specifiers = def_specifiers( NumSpecifiers, specs_found ); | ||||
| 			specifiers = def_specifiers_arr( NumSpecifiers, specs_found ); | ||||
| 		} | ||||
| 		// <friend> <specifiers> | ||||
| 	} | ||||
| @@ -4129,7 +4129,7 @@ CodeFn parser_parse_function() | ||||
| 	} | ||||
|  | ||||
| 	if ( NumSpecifiers ) { | ||||
| 		specifiers = def_specifiers( NumSpecifiers, specs_found ); | ||||
| 		specifiers = def_specifiers_arr( NumSpecifiers, specs_found ); | ||||
| 	} | ||||
| 	// <export> <Attributes> <Specifiers> | ||||
|  | ||||
| @@ -4237,7 +4237,7 @@ CodeOperator parser_parse_operator() | ||||
| 	} | ||||
|  | ||||
| 	if ( NumSpecifiers ) { | ||||
| 		specifiers = def_specifiers( NumSpecifiers, specs_found ); | ||||
| 		specifiers = def_specifiers_arr( NumSpecifiers, specs_found ); | ||||
| 	} | ||||
| 	// <export> <Attributes> <Specifiers> | ||||
|  | ||||
| @@ -4475,7 +4475,7 @@ CodeTemplate parser_parse_template() | ||||
| 			} | ||||
|  | ||||
| 			if ( NumSpecifiers ) { | ||||
| 				specifiers = def_specifiers( NumSpecifiers, specs_found ); | ||||
| 				specifiers = def_specifiers_arr( NumSpecifiers, specs_found ); | ||||
| 			} | ||||
| 			// <export> template< <Parameters> > <Attributes> <Specifiers> | ||||
| 		} | ||||
| @@ -4733,7 +4733,7 @@ else if ( currtok.Type == Tok_DeclType ) | ||||
| #ifdef GEN_USE_NEW_TYPENAME_PARSING | ||||
| 	if ( NumSpecifiers ) | ||||
| 	{ | ||||
| 		specifiers    = def_specifiers( NumSpecifiers, specs_found ); | ||||
| 		specifiers    = def_specifiers_arr( NumSpecifiers, specs_found ); | ||||
| 		NumSpecifiers = 0; | ||||
| 	} | ||||
| #endif | ||||
| @@ -4813,7 +4813,7 @@ else if ( currtok.Type == Tok_DeclType ) | ||||
|  | ||||
| #else | ||||
| 		if ( NumSpecifiers ) | ||||
| 			return_type->Specs = def_specifiers( NumSpecifiers, ( Specifier* )specs_found ); | ||||
| 			return_type->Specs = def_specifiers_arr( NumSpecifiers, ( Specifier* )specs_found ); | ||||
|  | ||||
| 		// Reset specifiers, the function itself will have its own suffix specifiers possibly. | ||||
| 		NumSpecifiers = 0; | ||||
| @@ -4864,7 +4864,7 @@ else if ( currtok.Type == Tok_DeclType ) | ||||
|  | ||||
| 			if ( NumSpecifiers ) | ||||
| 			{ | ||||
| 				specifiers = def_specifiers( NumSpecifiers, specs_found ); | ||||
| 				specifiers = def_specifiers_arr( NumSpecifiers, specs_found ); | ||||
| 			} | ||||
| 			NumSpecifiers = 0; | ||||
| 			// <Attributes> <ReturnType> ( <Specifiers> | ||||
| @@ -4935,7 +4935,7 @@ else if ( currtok.Type == Tok_DeclType ) | ||||
| #ifdef GEN_USE_NEW_TYPENAME_PARSING | ||||
| 		if ( NumSpecifiers ) | ||||
| 		{ | ||||
| 			func_suffix_specs = def_specifiers( NumSpecifiers, specs_found ); | ||||
| 			func_suffix_specs = def_specifiers_arr( NumSpecifiers, specs_found ); | ||||
| 			NumSpecifiers     = 0; | ||||
| 		} | ||||
| #endif | ||||
| @@ -4985,7 +4985,7 @@ else if ( currtok.Type == Tok_DeclType ) | ||||
| #else | ||||
| 	if ( NumSpecifiers ) | ||||
| 	{ | ||||
| 		CodeSpecifiers specifiers = def_specifiers( NumSpecifiers, ( Specifier* )specs_found ); | ||||
| 		CodeSpecifiers specifiers = def_specifiers_arr( NumSpecifiers, ( Specifier* )specs_found ); | ||||
| 		result->Specs   = specifiers; | ||||
| 	} | ||||
| #endif | ||||
| @@ -5523,7 +5523,7 @@ CodeVar parser_parse_variable() | ||||
| 	} | ||||
|  | ||||
| 	if ( NumSpecifiers ) { | ||||
| 		specifiers = def_specifiers( NumSpecifiers, specs_found ); | ||||
| 		specifiers = def_specifiers_arr( NumSpecifiers, specs_found ); | ||||
| 	} | ||||
| 	// <ModuleFlags> <Attributes> <Specifiers> | ||||
|  | ||||
|   | ||||
| @@ -5,10 +5,9 @@ | ||||
|  | ||||
| #pragma region StaticData | ||||
| global Context* _ctx; | ||||
| global u32      context_counter; | ||||
|  | ||||
| #pragma region Constants | ||||
| global u32 context_counter; | ||||
|  | ||||
| global Macro enum_underlying_macro; | ||||
|  | ||||
| global Code Code_Global; | ||||
|   | ||||
| @@ -282,10 +282,9 @@ bool array_fill(Array<Type> array, usize begin, usize end, Type value) | ||||
| 	ArrayHeader* header = array_get_header(array); | ||||
|  | ||||
| 	if (begin < 0 || end > header->Num) | ||||
| 	return false; | ||||
| 		return false; | ||||
|  | ||||
| 	for (ssize idx = ssize(begin); idx < ssize(end); idx++) | ||||
| 	{ | ||||
| 	for (ssize idx = ssize(begin); idx < ssize(end); idx++) { | ||||
| 		array[idx] = value; | ||||
| 	} | ||||
|  | ||||
| @@ -754,7 +753,7 @@ HashTableFindResult hashtable__find(HashTable<Type> table, u64 key) | ||||
| 			if (table.Entries[result.EntryIndex].Key == key) | ||||
| 				break; | ||||
|  | ||||
| 			result.PrevIndex = result.EntryIndex; | ||||
| 			result.PrevIndex  = result.EntryIndex; | ||||
| 			result.EntryIndex = table.Entries[result.EntryIndex].Next; | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -11,10 +11,10 @@ | ||||
| #if GEN_BUILD_DEBUG | ||||
| #	if defined( GEN_COMPILER_MSVC ) | ||||
| #		if _MSC_VER < 1300 | ||||
| #pragma message("GEN_BUILD_DEBUG: __asm int 3") | ||||
| // #pragma message("GEN_BUILD_DEBUG: __asm int 3") | ||||
| #			define GEN_DEBUG_TRAP() __asm int 3 /* Trap to debugger! */ | ||||
| #		else | ||||
| #pragma message("GEN_BUILD_DEBUG: __debugbreak()") | ||||
| // #pragma message("GEN_BUILD_DEBUG: __debugbreak()") | ||||
| #			define GEN_DEBUG_TRAP() __debugbreak() | ||||
| #		endif | ||||
| #	elif defined( GEN_COMPILER_TINYC ) | ||||
| @@ -23,7 +23,7 @@ | ||||
| #		define GEN_DEBUG_TRAP() __builtin_trap() | ||||
| #	endif | ||||
| #else | ||||
| #pragma message("GEN_BUILD_DEBUG: omitted") | ||||
| // #pragma message("GEN_BUILD_DEBUG: omitted") | ||||
| #	define GEN_DEBUG_TRAP() | ||||
| #endif | ||||
|  | ||||
|   | ||||
| @@ -89,13 +89,13 @@ | ||||
| #define src_line_str stringize(__LINE__) | ||||
|  | ||||
| #ifndef do_once | ||||
| #define do_once()                                                                       \ | ||||
|     static int __do_once_counter_##src_line_str = 0;                                    \ | ||||
|     for(; __do_once_counter_##src_line_str != 1; __do_once_counter_##src_line_str = 1 ) \ | ||||
| #define do_once()                                                                            \ | ||||
| 	local_persist int __do_once_counter_##src_line_str  = 0;                                 \ | ||||
|     for(;      __do_once_counter_##src_line_str != 1; __do_once_counter_##src_line_str = 1 ) \ | ||||
|  | ||||
| #define do_once_defer( expression )                                                                       \ | ||||
|     static int __do_once_counter_##src_line_str = 0;                                                      \ | ||||
|     for(;      __do_once_counter_##src_line_str != 1; __do_once_counter_##src_line_str = 1, (expression)) \ | ||||
| #define do_once_defer( expression )                                                                 \ | ||||
|     local_persist int __do_once_counter_##src_line_str  = 0;                                        \ | ||||
|     for(;__do_once_counter_##src_line_str != 1; __do_once_counter_##src_line_str = 1, (expression)) \ | ||||
|  | ||||
| #define do_once_start      \ | ||||
| 	do                     \ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user