mirror of
				https://github.com/Ed94/gencpp.git
				synced 2025-10-31 06:50:53 -07:00 
			
		
		
		
	Removing c99 header gen code, going to use the scanner implementation when its done.
This commit is contained in:
		| @@ -1,541 +0,0 @@ | |||||||
| /* |  | ||||||
| 	Will generate a c99 compliant version of the gen library |  | ||||||
|  |  | ||||||
| 	Note: This is done this way to test usage of library. |  | ||||||
| */ |  | ||||||
|  |  | ||||||
| #define GEN_DEFINE_DSL |  | ||||||
| #include "gen.cpp" |  | ||||||
|  |  | ||||||
| using namespace gen; |  | ||||||
|  |  | ||||||
| ct char const* Header_Comment =  |  | ||||||
| R"(/* |  | ||||||
| 	genc: A simple staged metaprogramming library for C99. |  | ||||||
| 	 |  | ||||||
| 	This library is intended for small-to midsize projects. |  | ||||||
|  |  | ||||||
| 	AST type checking supports only a small subset of c++.  |  | ||||||
| 	See the 'ECode' namespace and 'gen API' region to see what is supported. |  | ||||||
|  |  | ||||||
| 	### *WHAT IS NOT PROVIDED* |  | ||||||
|  |  | ||||||
| 	* Macro or template generation      : This library is to avoid those, adding support for them adds unnecessary complexity.  |  | ||||||
| 	                                      If you desire define them outside the gen_time scopes.  |  | ||||||
| 	* Expression validation             : Execution expressions are defined using the untyped string API.  |  | ||||||
| 	                                      There is no parse API for validating expression (possibly will add in the future) |  | ||||||
| 	* Complete file parser DSL          : This isn't like the unreal header tool.  |  | ||||||
| 	                                      Code injection to file or based off a file contents is not supported by the api. However nothing is stopping you using the library for that purpose. |  | ||||||
| 	* Modern c++ (STL library) features |  | ||||||
|  |  | ||||||
| 	The AST is managed by the library and provided the user via its interface prodedures. |  | ||||||
|  |  | ||||||
| 	Notes: |  | ||||||
|  |  | ||||||
| 	* The allocator definitions used are exposed to the user incase they want to dictate memory usage |  | ||||||
| 	* ASTs are wrapped for the user in a Code struct which essentially a warpper for a AST* type.   |  | ||||||
| 	* Both AST and Code have member symbols but their data layout is enforced to be POD types. |  | ||||||
|  |  | ||||||
| 	Data layout of AST struct: |  | ||||||
|  |  | ||||||
| 	genc_CodeT             Type;     |  | ||||||
| 	bool                   Readonly; |  | ||||||
| 	genc_AST*              Parent;   |  | ||||||
| 	genc_string            Name ;     |  | ||||||
| 	genc_string            Comment;  |  | ||||||
| 	union {                     |  | ||||||
| 		array(genc_AST*)   Entries; |  | ||||||
| 		genc_string        Content; |  | ||||||
| 	}; |  | ||||||
|  |  | ||||||
| 	*`CodeT` is a typedef for `ECode::Type` which is the type of the enum.* |  | ||||||
|  |  | ||||||
| 	ASTs can be set to readonly by calling Code's lock() member function. |  | ||||||
| 	Adding comments is always available even if the AST is set to readonly.   |  | ||||||
|  |  | ||||||
| 	### There are four sets of interfaces for Code AST generation the library provides |  | ||||||
|  |  | ||||||
| 	* Upfront |  | ||||||
| 	* Incremental |  | ||||||
| 	* Parsing |  | ||||||
| 	* Untyped |  | ||||||
|  |  | ||||||
| 	### Upfront Construction |  | ||||||
|  |  | ||||||
| 	All component ASTs must be previously constructed, and provided on creation of the code AST. |  | ||||||
| 	The construction will fail and return InvalidCode otherwise. |  | ||||||
|  |  | ||||||
| 	Interface : |  | ||||||
|  |  | ||||||
| 	* genc_def_class |  | ||||||
| 	* genc_def_class_body |  | ||||||
| 	* genc_def_class_fwd |  | ||||||
| 	* genc_def_enum |  | ||||||
| 	* genc_def_enum_class |  | ||||||
| 	* genc_def_enum_body |  | ||||||
| 	* genc_def_global_body |  | ||||||
| 	* genc_def_namespace |  | ||||||
| 	* genc_def_namespace_body |  | ||||||
| 	* genc_def_operator |  | ||||||
| 	* genc_def_param |  | ||||||
| 	* genc_def_params |  | ||||||
| 	* genc_def_proc |  | ||||||
| 	* genc_def_proc_body |  | ||||||
| 	* genc_def_proc_fwd |  | ||||||
| 	* genc_def_operator_fwd |  | ||||||
| 	* genc_def_specifier |  | ||||||
| 	* genc_def_specifiers |  | ||||||
| 	* genc_def_struct |  | ||||||
| 	* genc_def_struct_body |  | ||||||
| 	* genc_def_struct_fwd |  | ||||||
| 	* genc_def_variable |  | ||||||
| 	* genc_def_type |  | ||||||
| 	* genc_def_using |  | ||||||
| 	* genc_def_using_namespace |  | ||||||
|  |  | ||||||
| 	### Incremental construction |  | ||||||
|  |  | ||||||
| 	A Code ast is provided but only completed upfront if all components are provided. |  | ||||||
| 	Components are then added using the AST API for adding ASTs: |  | ||||||
|  |  | ||||||
| 	* genc_code_add( AST*, AST* other )                     // Adds AST with validation. |  | ||||||
| 	* genc_code_add_entry( AST*, AST* other )               // Adds AST entry without validation. |  | ||||||
|  |  | ||||||
| 	Code ASTs may be explictly validated at anytime using Code's check() member function. |  | ||||||
|  |  | ||||||
| 	Interface : |  | ||||||
|  |  | ||||||
| 	* genc_make_class |  | ||||||
| 	* genc_make_enum |  | ||||||
| 	* genc_make_enum_class |  | ||||||
| 	* genc_make_fwd |  | ||||||
| 	* genc_make_global_body |  | ||||||
| 	* genc_make_namespace |  | ||||||
| 	* genc_make_operator |  | ||||||
| 	* genc_make_params |  | ||||||
| 	* genc_make_proc |  | ||||||
| 	* genc_make_specifiers |  | ||||||
| 	* genc_make_struct |  | ||||||
| 	* genc_make_variable |  | ||||||
| 	* genc_make_type |  | ||||||
| 	* genc_make_using |  | ||||||
|  |  | ||||||
| 	### Parse construction |  | ||||||
|  |  | ||||||
| 	A string provided to the API is parsed for the intended language construct. |  | ||||||
|  |  | ||||||
| 	Interface : |  | ||||||
|  |  | ||||||
| 	* genc_parse_class |  | ||||||
| 	* genc_parse_classes |  | ||||||
| 	* genc_parse_class_fwd |  | ||||||
| 	* genc_parse_classes_fwd |  | ||||||
| 	* genc_parse_enum |  | ||||||
| 	* genc_parse_enums |  | ||||||
| 	* genc_parse_global_body |  | ||||||
| 	* genc_parse_namespace |  | ||||||
| 	* genc_parse_namespaces |  | ||||||
| 	* genc_parse_params |  | ||||||
| 	* genc_parse_proc |  | ||||||
| 	* genc_parse_procs |  | ||||||
| 	* genc_parse_operator |  | ||||||
| 	* genc_parse_operators |  | ||||||
| 	* genc_parse_specifiers |  | ||||||
| 	* genc_parse_struct |  | ||||||
| 	* genc_parse_strucs |  | ||||||
| 	* genc_parse_variable |  | ||||||
| 	* genc_parse_variables |  | ||||||
| 	* genc_parse_type |  | ||||||
| 	* genc_parse_types |  | ||||||
| 	* genc_parse_using |  | ||||||
| 	* genc_parse_usings |  | ||||||
|  |  | ||||||
| 	The parse API treats any execution scope definitions with no validation and are turned into untyped Code ASTs. |  | ||||||
| 	This includes the assignmetn of variables; due to the library not yet supporting c/c++ expression parsing. |  | ||||||
|  |  | ||||||
| 	The plural variants provide an array of codes, its up to the user to add them to a body AST  |  | ||||||
| 	(they are not auto-added to a body) |  | ||||||
|  |  | ||||||
| 	### Untyped constructions |  | ||||||
|  |  | ||||||
| 	Code ASTs are constructed using unvalidated strings. |  | ||||||
|  |  | ||||||
| 	Interface : |  | ||||||
|  |  | ||||||
| 	* genc_untyped_str |  | ||||||
| 	* genc_untyped_fmt |  | ||||||
| 	* genc_untyped_token_fmt |  | ||||||
|  |  | ||||||
| 	During serialization any untyped Code AST is has its string value directly injected inline of  |  | ||||||
| 	whatever context the content existed as an entry within. |  | ||||||
| 	Even though thse are not validated from somewhat correct c/c++ syntax or components, it doesn't mean that |  | ||||||
| 	Untyped code can be added as any component of a Code AST: |  | ||||||
|  |  | ||||||
| 	* Untyped code cannot have children, thus there cannot be recursive injection this way. |  | ||||||
| 	* Untyped code can only be a child of a parent of body AST, or for values of an assignment. |  | ||||||
|  |  | ||||||
| 	These restrictions help prevent abuse of untyped code to some extent. |  | ||||||
| */ |  | ||||||
| )"; |  | ||||||
|  |  | ||||||
| Code IfDef_GENC_IMPLEMENTATION; |  | ||||||
| Code EndIf_GENC_IMPLEMENTATION; |  | ||||||
|  |  | ||||||
| Code make_log_failure() |  | ||||||
| { |  | ||||||
| 	Code result = make_global_body(); |  | ||||||
| 	{ |  | ||||||
| 		result->add( untyped_str( |  | ||||||
| 			R"(#ifdef GEN_USE_FATAL)" |  | ||||||
| 		)); |  | ||||||
|  |  | ||||||
| 		result->add( function_code( |  | ||||||
| 			inline |  | ||||||
| 			sw genc_log_failure(char const *fmt, ...)  |  | ||||||
| 			{ |  | ||||||
| 				if ( genc_global_ShouldShowDebug == false ) |  | ||||||
| 					return 0; |  | ||||||
|  |  | ||||||
| 				sw res; |  | ||||||
| 				va_list va; |  | ||||||
| 				 |  | ||||||
| 				va_start(va, fmt); |  | ||||||
| 				res = zpl_printf_va(fmt, va); |  | ||||||
| 				va_end(va); |  | ||||||
| 				 |  | ||||||
| 				return res; |  | ||||||
| 			} |  | ||||||
| 		)); |  | ||||||
|  |  | ||||||
| 		result->add( untyped_str( |  | ||||||
| 			R"(#else)" |  | ||||||
| 		)); |  | ||||||
|  |  | ||||||
| 		result->add( proc_code( |  | ||||||
| 			inline |  | ||||||
| 			sw genc_log_failure(char const *fmt, ...)  |  | ||||||
| 			{ |  | ||||||
| 				local_persist thread_local  |  | ||||||
| 				char buf[ZPL_PRINTF_MAXLEN] = { 0 }; |  | ||||||
|  |  | ||||||
| 				va_list va; |  | ||||||
|  |  | ||||||
| 			#if Build_Debug |  | ||||||
| 				va_start(va, fmt); |  | ||||||
| 				zpl_snprintf_va(buf, ZPL_PRINTF_MAXLEN, fmt, va); |  | ||||||
| 				va_end(va); |  | ||||||
|  |  | ||||||
| 				assert_crash(buf); |  | ||||||
| 				return -1; |  | ||||||
| 			#else |  | ||||||
| 				va_start(va, fmt); |  | ||||||
| 				zpl_printf_err_va( fmt, va); |  | ||||||
| 				va_end(va); |  | ||||||
|  |  | ||||||
| 				zpl_exit(1); |  | ||||||
| 				return -1; |  | ||||||
| 			#endif |  | ||||||
| 			} |  | ||||||
| 		)); |  | ||||||
|  |  | ||||||
| 		result->add( untyped_str( |  | ||||||
| 			R"(#endif)" |  | ||||||
| 		)); |  | ||||||
|  |  | ||||||
| 		result->check(); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return result; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_ECode() |  | ||||||
| { |  | ||||||
| 	Code ECode = make_global_body(); |  | ||||||
| 	{ |  | ||||||
| 		ECode->add( enum_code( |  | ||||||
| 			enum genc_ECode |  | ||||||
| 			{ |  | ||||||
| 				Invalid, |  | ||||||
| 				Untyped, |  | ||||||
| 				Enum, |  | ||||||
| 				Enum_Body, |  | ||||||
| 				Global_Body, |  | ||||||
| 				Parameters, |  | ||||||
| 				Proc,            |  | ||||||
| 				Proc_Body,       |  | ||||||
| 				Proc_Forward,    |  | ||||||
| 				Specifiers,      |  | ||||||
| 				Struct,          |  | ||||||
| 				Struct_Body,     |  | ||||||
| 				Variable,        |  | ||||||
| 				Typedef,         |  | ||||||
| 				Typename,   |  | ||||||
|  |  | ||||||
| 				Num_Types |  | ||||||
| 			}; |  | ||||||
| 			typedef u32 genc_CodeT; |  | ||||||
| 		)); |  | ||||||
|  |  | ||||||
| 		ECode->add( function_code( |  | ||||||
| 			inline |  | ||||||
| 			char const* genc_ecode_to_str( Type type ) |  | ||||||
| 			{ |  | ||||||
| 				genc_local_persist |  | ||||||
| 				char const* lookup[Num_Types] = { |  | ||||||
| 					"Invalid", |  | ||||||
| 					"Untyped", |  | ||||||
| 					"Access_Public", |  | ||||||
| 					"Access_Private", |  | ||||||
| 					"Access_Protected", |  | ||||||
| 					"Class", |  | ||||||
| 					"Enum", |  | ||||||
| 					"Enum_Body", |  | ||||||
| 					"Global_Body", |  | ||||||
| 					"Namespace", |  | ||||||
| 					"Namespace_Body", |  | ||||||
| 					"Parameters", |  | ||||||
| 					"Proc", |  | ||||||
| 					"Proc_Body", |  | ||||||
| 					"Proc_Forward", |  | ||||||
| 					"Specifiers", |  | ||||||
| 					"Struct", |  | ||||||
| 					"Struct_Body", |  | ||||||
| 					"Variable", |  | ||||||
| 					"Typedef", |  | ||||||
| 					"Typename", |  | ||||||
| 					"Using", |  | ||||||
| 				}; |  | ||||||
|  |  | ||||||
| 				return lookup[ type ]; |  | ||||||
| 			} |  | ||||||
| 		)); |  | ||||||
|  |  | ||||||
| 		ECode->check(); |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	return ECode; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_EOperator() |  | ||||||
| { |  | ||||||
| 	Code eoperator = make_global_body(); |  | ||||||
|  |  | ||||||
| 	return eoperator; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_ESpecifier() |  | ||||||
| { |  | ||||||
| 	Code especifier = make_global_body(); |  | ||||||
|  |  | ||||||
| 	return especifier; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_Code() |  | ||||||
| { |  | ||||||
| 	Code code = make_global_body(); |  | ||||||
|  |  | ||||||
| 	code->add( struct_code( |  | ||||||
| 		struct genc_AST |  | ||||||
| 		{ |  | ||||||
| 			genc_CodeT             Type;     |  | ||||||
| 			bool                   Readonly; |  | ||||||
| 			genc_AST*              Parent;   |  | ||||||
| 			genc_string            Name;     |  | ||||||
| 			genc_string            Comment;  |  | ||||||
| 			union {                     |  | ||||||
| 				array(genc_AST*)   Entries; |  | ||||||
| 				genc_string        Content; |  | ||||||
| 			}; |  | ||||||
| 		}; |  | ||||||
| 		typedef struct genc_AST genc_AST; |  | ||||||
| 		typedef genc_AST* Code; |  | ||||||
| 	)); |  | ||||||
|  |  | ||||||
| 	code->add( function_code( |  | ||||||
| 		bool genc_ast_add( genc_Code other ); |  | ||||||
| 	)); |  | ||||||
|  |  | ||||||
| 	code->add( function_code(  |  | ||||||
| 		genc_forceinline |  | ||||||
| 		void genc_ast_add_entry( genc_Code self,  genc_Code other ) |  | ||||||
| 		{ |  | ||||||
| 			genc_array_append( self->Entries, other ); |  | ||||||
|  |  | ||||||
| 			other->Parent = self; |  | ||||||
| 		} |  | ||||||
| 	)); |  | ||||||
|  |  | ||||||
| 	code->add( untyped_str( |  | ||||||
| 		R"(#define genc_code_body( AST_ ) AST->Entries[0])", 47 |  | ||||||
| 	)); |  | ||||||
|  |  | ||||||
| 	code->add( function_code(  |  | ||||||
| 		genc_forceinline |  | ||||||
| 		bool genc_code_has_entries( Code self ) const |  | ||||||
| 		{ |  | ||||||
| 			genc_local_persist  |  | ||||||
| 			bool lookup[ genc_ECode::Num_Types] = { |  | ||||||
| 				false, // Invalid |  | ||||||
| 				false, // Untyped |  | ||||||
| 				true,  // Global_Body |  | ||||||
| 				true,  // Parameters |  | ||||||
| 				true,  // Proc |  | ||||||
| 				true,  // Proc_Body |  | ||||||
| 				true,  // Proc_Foward |  | ||||||
| 				false, // Specifies |  | ||||||
| 				true,  // Struct |  | ||||||
| 				true,  // Struct_Body |  | ||||||
| 				true,  // Variable |  | ||||||
| 				true,  // Typedef |  | ||||||
| 				true,  // Typename |  | ||||||
| 			}; |  | ||||||
|  |  | ||||||
| 			return lookup[self->Type]; |  | ||||||
| 		} |  | ||||||
| 	)); |  | ||||||
|  |  | ||||||
| 	code->check(); |  | ||||||
|  |  | ||||||
| 	return code; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_static_Data() |  | ||||||
| { |  | ||||||
| 	Code  |  | ||||||
| 	data = make_global_body(); |  | ||||||
| 	data->add( IfDef_GENC_IMPLEMENTATION ); |  | ||||||
| 	data->add( global_body_code( |  | ||||||
| 		static genc_array(genc_AST) genc_CodePool = nullptr; |  | ||||||
|  |  | ||||||
| 		static genc_array(genc_arena) genc_StringArenas =  nullptr; |  | ||||||
|  |  | ||||||
| 		static genc_StringTable    genc_StringMap; |  | ||||||
| 		static genc_TypeTable      genc_TypeMap; |  | ||||||
|  |  | ||||||
| 		static sw genc_InitSize_CodePool       = genc_megabytes(64); |  | ||||||
| 		static sw genc_InitSize_StringArena    = genc_megabytes(32); |  | ||||||
| 		static sw genc_InitSize_StringTable    = genc_megabytes(4); |  | ||||||
| 		static sw genc_InitSize_TypeTable      = genc_megabytes(4); |  | ||||||
|  |  | ||||||
| 		static allocator genc_Allocator_CodePool    = zpl_heap(); |  | ||||||
| 		static allocator genc_Allocator_StringArena = zpl_heap(); |  | ||||||
| 		static allocator genc_Allocator_StringTable = zpl_heap(); |  | ||||||
| 		static allocator genc_Allocator_TypeTable   = zpl_heap(); |  | ||||||
| 	)); |  | ||||||
| 	data->add( untyped_str( R"(#ifdef GENC_DEFINE_LIBRARY_CODE_CONSTANTS)")); |  | ||||||
| 	data->add( global_body_code( |  | ||||||
| 		Code t_void; |  | ||||||
|  |  | ||||||
| 		Code t_bool; |  | ||||||
| 		Code t_char; |  | ||||||
| 		Code t_char_wide; |  | ||||||
|  |  | ||||||
| 		Code t_s8; |  | ||||||
| 		Code t_s16; |  | ||||||
| 		Code t_s32; |  | ||||||
| 		Code t_s64; |  | ||||||
|  |  | ||||||
| 		Code t_u8; |  | ||||||
| 		Code t_u16; |  | ||||||
| 		Code t_u32; |  | ||||||
| 		Code t_u64; |  | ||||||
|  |  | ||||||
| 		Code t_sw; |  | ||||||
| 		Code t_uw; |  | ||||||
|  |  | ||||||
| 		Code t_f32; |  | ||||||
| 		Code t_f64; |  | ||||||
| 	)); |  | ||||||
| 	data->add( untyped_str( R"(#endif)")); |  | ||||||
| 	data->add( global_body_code( |  | ||||||
| 		Code spec_inline; |  | ||||||
| 		Code spec_const; |  | ||||||
| 	)); |  | ||||||
| 	data->add( EndIf_GENC_IMPLEMENTATION ); |  | ||||||
|  |  | ||||||
| 	return data; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_make_code() |  | ||||||
| { |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_init() |  | ||||||
| { |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_mem_config_interface() |  | ||||||
| { |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_internal_funcs() |  | ||||||
| { |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_upfront() |  | ||||||
| { |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_incremental() |  | ||||||
| { |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_parsing() |  | ||||||
| { |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_untyped() |  | ||||||
| { |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
| Code make_interface() |  | ||||||
| { |  | ||||||
|  |  | ||||||
| } |  | ||||||
|  |  | ||||||
|  |  | ||||||
| int gen_main() |  | ||||||
| { |  | ||||||
| 	Memory::setup(); |  | ||||||
| 	gen::init(); |  | ||||||
| 	 |  | ||||||
| 	IfDef_GENC_IMPLEMENTATION = untyped_str( |  | ||||||
| 		R"(#ifdef GENC_IMPLEMENTATION)" |  | ||||||
| 	); |  | ||||||
|  |  | ||||||
| 	EndIf_GENC_IMPLEMENTATION = untyped_str( |  | ||||||
| 		R"(#endif // GENC_IMPLEMENTATION)" |  | ||||||
| 	); |  | ||||||
|  |  | ||||||
| 	Code header_comment = untyped_str( Header_Comment, sizeof( Header_Comment ) ); |  | ||||||
| 	Code log_failure    = make_log_failure(); |  | ||||||
|  |  | ||||||
| 	Code ecode          = make_ECode(); |  | ||||||
| 	Code eoperator      = make_EOperator(); |  | ||||||
| 	Code especifier     = make_ESpecifier(); |  | ||||||
| 	Code code           = make_Code(); |  | ||||||
| 	 |  | ||||||
| 	Builder |  | ||||||
| 	builder; |  | ||||||
| 	builder.open( "genc.h" ); |  | ||||||
|  |  | ||||||
| 	builder.print( header_comment ); |  | ||||||
| 	builder.print( log_failure ); |  | ||||||
| 	builder.print( ecode ); |  | ||||||
| 	builder.print( eoperator ); |  | ||||||
| 	builder.print( especifier ); |  | ||||||
| 	builder.print( code ); |  | ||||||
|  |  | ||||||
| 	builder.write(); |  | ||||||
|  |  | ||||||
| 	Memory::cleanup(); |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| @@ -1,55 +0,0 @@ | |||||||
| # HEADER COMMENT |  | ||||||
| 1, 166 |  | ||||||
|  |  | ||||||
| # CODE TYPES |  | ||||||
| Invalid |  | ||||||
| Untyped         |  | ||||||
| Enum            |  | ||||||
| Enum_Body |  | ||||||
| Global_Body |  | ||||||
| Parameters |  | ||||||
| Proc       |  | ||||||
| Proc_Body |  | ||||||
| Proc_Forward |  | ||||||
| Specifiers     |  | ||||||
| Struct       |  | ||||||
| Struct_Body |  | ||||||
| Variable      |  | ||||||
| Typedef         |  | ||||||
| Typename |  | ||||||
| Using     |  | ||||||
|  |  | ||||||
| # CODE_HAS_ENTRIES |  | ||||||
|  |  | ||||||
| # SPECIFIER_TYPES |  | ||||||
| Attribute |  | ||||||
| Alignas           |  | ||||||
| Constexpr |  | ||||||
| Const           |  | ||||||
| Inline |  | ||||||
| Pointer |  | ||||||
| API_Import         |  | ||||||
| API_Export         |  | ||||||
| External_Linkage |  | ||||||
| Internal_Linkage   |  | ||||||
| Local_Persist |  | ||||||
| Thread_Local       |  | ||||||
| Invalid |  | ||||||
|  |  | ||||||
| # SPECIFIER_STRINGS |  | ||||||
| "alignas", |  | ||||||
| "const", |  | ||||||
| "inline", |  | ||||||
| "*", |  | ||||||
| #if defined(ZPL_SYSTEM_WINDOWS) |  | ||||||
| "__declspec(dllexport)", |  | ||||||
| "__declspec(dllimport)", |  | ||||||
| #elif defined(ZPL_SYSTEM_MACOS) |  | ||||||
| "__attribute__ ((visibility (\"default\")))", |  | ||||||
| "__attribute__ ((visibility (\"default\")))", |  | ||||||
| #endif |  | ||||||
| "extern", |  | ||||||
| "static", |  | ||||||
| "static", |  | ||||||
| "thread_local" |  | ||||||
|  |  | ||||||
| @@ -1,34 +0,0 @@ | |||||||
| __VERSION 1 |  | ||||||
|  |  | ||||||
| word AST,  genc_AST |  | ||||||
| word Code, genc_Code |  | ||||||
|  |  | ||||||
| word ECode,      genc_ECode |  | ||||||
| word EOperator,  genc_EOperator |  | ||||||
| word ESpecifier, genc_ESpecifier |  | ||||||
| word CodeT,      genc_CodeT |  | ||||||
|  |  | ||||||
| word string, genc_string |  | ||||||
| word init,   genc_init |  | ||||||
|  |  | ||||||
| namespace def_,           genc_def_ |  | ||||||
| namespace make_,          genc_make_ |  | ||||||
| namespace parse_,         genc_parse_ |  | ||||||
| namespace untyped_,       genc_untyped_ |  | ||||||
| namespace set_init_,      genc_set_init_ |  | ||||||
| namespace set_allocator_, genc_set_allocator_ |  | ||||||
|  |  | ||||||
| word clean_code_pool, genc_clean_code_pool |  | ||||||
|  |  | ||||||
| word Builder, genc_Builder |  | ||||||
|  |  | ||||||
| word CodePool,     genc_CodePool |  | ||||||
| word StringArenas, genc_StringArenas |  | ||||||
| word CodePOD,      genc_AST |  | ||||||
| word StringMap,    genc_StringMap |  | ||||||
| word TypeMap,      genc_TypeMap |  | ||||||
|  |  | ||||||
| namespace InitSize_,  genc_InitSize_ |  | ||||||
| namespace Allocator_, genc_Allocator_ |  | ||||||
|  |  | ||||||
| namespace spec_, genc_spec |  | ||||||
		Reference in New Issue
	
	Block a user