All global vars (except concepts) have been retrofitetd to the library's new Context struct

This commit is contained in:
2024-12-13 20:40:18 -05:00
parent 76ac3a0f93
commit 16d0e0834f
21 changed files with 584 additions and 716 deletions

View File

@ -10,23 +10,21 @@
CodeClass parse_class( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
push_scope();
CodeClass result = (CodeClass) parse_class_struct( Tok_Decl_Class, parser_not_inplace_def );
parser_pop(& parser_ctx);
parser_pop(& _ctx->parser);
return result;
}
CodeConstructor parse_constructor( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
@ -59,8 +57,8 @@ CodeConstructor parse_constructor( Str def )
break;
default :
log_failure( "Invalid specifier %s for variable\n%S", spec_to_str( spec ), parser_to_strbuilder(parser_ctx) );
parser_pop(& parser_ctx);
log_failure( "Invalid specifier %s for variable\n%S", spec_to_str( spec ), parser_to_strbuilder(_ctx->parser) );
parser_pop(& _ctx->parser);
return InvalidCode;
}
@ -79,14 +77,13 @@ CodeConstructor parse_constructor( Str def )
// <specifiers> ...
}
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
CodeConstructor result = parser_parse_constructor( specifiers );
return result;
}
CodeDestructor parse_destructor( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
@ -96,225 +93,209 @@ CodeDestructor parse_destructor( Str def )
// TODO(Ed): Destructors can have prefix attributes
// TODO(Ed): Destructors can have virtual
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
CodeDestructor result = parser_parse_destructor(NullCode);
return result;
}
CodeEnum parse_enum( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
{
parser_pop(& parser_ctx);
parser_pop(& _ctx->parser);
return InvalidCode;
}
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_enum( parser_not_inplace_def);
}
CodeBody parse_export_body( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_export_body();
}
CodeExtern parse_extern_link( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_extern_link();
}
CodeFriend parse_friend( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_friend();
}
CodeFn parse_function( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return (CodeFn) parser_parse_function();
}
CodeBody parse_global_body( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
push_scope();
CodeBody result = parse_global_nspace( CT_Global_Body );
parser_pop(& parser_ctx);
parser_pop(& _ctx->parser);
return result;
}
CodeNS parse_namespace( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_namespace();
}
CodeOperator parse_operator( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return (CodeOperator) parser_parse_operator();
}
CodeOpCast parse_operator_cast( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_operator_cast(NullCode);
}
CodeStruct parse_struct( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
push_scope();
CodeStruct result = (CodeStruct) parse_class_struct( Tok_Decl_Struct, parser_not_inplace_def );
parser_pop(& parser_ctx);
parser_pop(& _ctx->parser);
return result;
}
CodeTemplate parse_template( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_template();
}
CodeTypename parse_type( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_type( parser_not_from_template, nullptr);
}
CodeTypedef parse_typedef( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_typedef();
}
CodeUnion parse_union( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_union( parser_not_inplace_def);
}
CodeUsing parse_using( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_using();
}
CodeVar parse_variable( Str def )
{
GEN_USING_NS_PARSER;
check_parse_args( def );
TokArray toks = lex( def );
if ( toks.Arr == nullptr )
return InvalidCode;
parser_ctx.Tokens = toks;
_ctx->parser.Tokens = toks;
return parser_parse_variable();
}