mirror of
				https://github.com/Ed94/gencpp.git
				synced 2025-10-31 06:50:53 -07:00 
			
		
		
		
	Add restrict specifier support for C
This commit is contained in:
		| @@ -23,6 +23,7 @@ enum Specifier : u32 | ||||
| 	Spec_Ptr, | ||||
| 	Spec_Ref, | ||||
| 	Spec_Register, | ||||
| 	Spec_Restrict, | ||||
| 	Spec_RValue, | ||||
| 	Spec_Static, | ||||
| 	Spec_Thread_Local, | ||||
| @@ -56,6 +57,7 @@ inline Str spec_to_str( Specifier type ) | ||||
| 		{ "*",             sizeof( "*" ) - 1             }, | ||||
| 		{ "&",             sizeof( "&" ) - 1             }, | ||||
| 		{ "register",      sizeof( "register" ) - 1      }, | ||||
| 		{ "restrict",      sizeof( "restrict" ) - 1      }, | ||||
| 		{ "&&",            sizeof( "&&" ) - 1            }, | ||||
| 		{ "static",        sizeof( "static" ) - 1        }, | ||||
| 		{ "thread_local",  sizeof( "thread_local" ) - 1  }, | ||||
|   | ||||
| @@ -83,6 +83,7 @@ enum TokType : u32 | ||||
| 	Tok_Spec_Mutable, | ||||
| 	Tok_Spec_NeverInline, | ||||
| 	Tok_Spec_Override, | ||||
| 	Tok_Spec_Restrict, | ||||
| 	Tok_Spec_Static, | ||||
| 	Tok_Spec_ThreadLocal, | ||||
| 	Tok_Spec_Volatile, | ||||
| @@ -188,6 +189,7 @@ inline Str toktype_to_str( TokType type ) | ||||
| 		{ "mutable",              sizeof( "mutable" ) - 1              }, | ||||
| 		{ "neverinline",          sizeof( "neverinline" ) - 1          }, | ||||
| 		{ "override",             sizeof( "override" ) - 1             }, | ||||
| 		{ "restrict",             sizeof( "restrict" ) - 1             }, | ||||
| 		{ "static",               sizeof( "static" ) - 1               }, | ||||
| 		{ "thread_local",         sizeof( "thread_local" ) - 1         }, | ||||
| 		{ "volatile",             sizeof( "volatile" ) - 1             }, | ||||
|   | ||||
| @@ -1217,9 +1217,9 @@ Code parse_complicated_definition( TokType which ) | ||||
| 			Token name = parse_identifier(nullptr); | ||||
| 			_ctx->parser.Scope->Name = name.Text; | ||||
|  | ||||
| 			Code result = parse_variable_after_name(ModuleFlag_None, NullCode, NullCode, type, name.Text); | ||||
| 			CodeVar result = parse_variable_after_name(ModuleFlag_None, NullCode, NullCode, type, name.Text); | ||||
| 			parser_pop(& _ctx->parser); | ||||
| 			return result; | ||||
| 			return (Code) result; | ||||
| 		} | ||||
| 		else if ( tok.Type == Tok_Identifier && tokens.Arr[ idx - 3 ].Type == which ) | ||||
| 		{ | ||||
| @@ -4719,13 +4719,16 @@ else if ( currtok.Type == Tok_DeclType ) | ||||
| 	{ | ||||
| 		Specifier spec = str_to_specifier( currtok.Text ); | ||||
|  | ||||
| 		if ( spec != Spec_Const && spec != Spec_Ptr && spec != Spec_Ref && spec != Spec_RValue ) | ||||
| 		{ | ||||
| 			log_failure( "Error, invalid specifier used in type definition: %S\n%SB", currtok.Text, parser_to_strbuilder(_ctx->parser) ); | ||||
| 			parser_pop(& _ctx->parser); | ||||
| 			return InvalidCode; | ||||
| 		} | ||||
| 		switch (spec ) { | ||||
| 			GEN_PARSER_TYPENAME_ALLOWED_SUFFIX_SPECIFIER_CASES: | ||||
| 			break; | ||||
|  | ||||
| 			default: { | ||||
| 				log_failure( "Error, invalid specifier used in type definition: %S\n%SB", currtok.Text, parser_to_strbuilder(_ctx->parser) ); | ||||
| 				parser_pop(& _ctx->parser); | ||||
| 				return InvalidCode; | ||||
| 			} | ||||
| 		} | ||||
| 		specs_found[ NumSpecifiers ] = spec; | ||||
| 		NumSpecifiers++; | ||||
| 		eat( currtok.Type ); | ||||
|   | ||||
| @@ -97,9 +97,16 @@ case Spec_Global:           \ | ||||
| case Spec_Inline:           \ | ||||
| case Spec_Local_Persist:    \ | ||||
| case Spec_Mutable:          \ | ||||
| case Spec_Restrict:         \ | ||||
| case Spec_Static:           \ | ||||
| case Spec_Thread_Local:     \ | ||||
| case Spec_Volatile | ||||
|  | ||||
| #define GEN_PARSER_TYPENAME_ALLOWED_SUFFIX_SPECIFIER_CASES \ | ||||
| case Spec_Const:    \ | ||||
| case Spec_Ptr:      \ | ||||
| case Spec_Restrict: \ | ||||
| case Spec_Ref:      \ | ||||
| case Spec_RValue | ||||
|  | ||||
|  | ||||
|   | ||||
| @@ -14,6 +14,7 @@ NeverInline,      neverinline | ||||
| Ptr,              * | ||||
| Ref,              & | ||||
| Register,         register | ||||
| Restrict,         restrict | ||||
| RValue,           && | ||||
| Static,           static | ||||
| Thread_Local,     thread_local | ||||
|   | ||||
| 
 | 
| @@ -72,6 +72,7 @@ Spec_LocalPersist,          "local_persist" | ||||
| Spec_Mutable,               "mutable" | ||||
| Spec_NeverInline,           "neverinline" | ||||
| Spec_Override,              "override" | ||||
| Spec_Restrict,              "restrict" | ||||
| Spec_Static,                "static" | ||||
| Spec_ThreadLocal,           "thread_local" | ||||
| Spec_Volatile,              "volatile" | ||||
|   | ||||
| 
 | 
		Reference in New Issue
	
	Block a user