remove tok_to_str, fix for parsing inpalce dfinitions that don't have an identifier for the type.

This commit is contained in:
Edward R. Gonzalez 2024-12-16 20:16:44 -05:00
parent d410590a86
commit 28aa2c4dec
4 changed files with 75 additions and 70 deletions

View File

@ -39,7 +39,7 @@ CodeConstructor parse_constructor( Str def )
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
b32 ignore_spec = false; b32 ignore_spec = false;

View File

@ -281,7 +281,7 @@ s32 lex_preprocessor_directive( LexContext* ctx )
ctx->token.Text.Len++; ctx->token.Text.Len++;
} }
ctx->token.Type = str_to_toktype( tok_to_str(ctx->token) ); ctx->token.Type = str_to_toktype( ctx->token.Text );
bool is_preprocessor = ctx->token.Type >= Tok_Preprocess_Define && ctx->token.Type <= Tok_Preprocess_Pragma; bool is_preprocessor = ctx->token.Type >= Tok_Preprocess_Define && ctx->token.Type <= Tok_Preprocess_Pragma;
if ( ! is_preprocessor ) if ( ! is_preprocessor )
@ -488,7 +488,7 @@ void lex_found_token( LexContext* ctx )
return; return;
} }
TokType type = str_to_toktype( tok_to_str(ctx->token) ); TokType type = str_to_toktype( ctx->token.Text );
if (type <= Tok_Access_Public && type >= Tok_Access_Private ) { if (type <= Tok_Access_Public && type >= Tok_Access_Private ) {
ctx->token.Flags |= TF_AccessSpecifier; ctx->token.Flags |= TF_AccessSpecifier;

View File

@ -533,7 +533,7 @@ Code parse_array_decl()
untyped_tok.Text.Len = ( (sptr)prevtok.Text.Ptr + prevtok.Text.Len ) - (sptr)untyped_tok.Text.Ptr; untyped_tok.Text.Len = ( (sptr)prevtok.Text.Ptr + prevtok.Text.Len ) - (sptr)untyped_tok.Text.Ptr;
Code array_expr = untyped_str( tok_to_str(untyped_tok) ); Code array_expr = untyped_str( untyped_tok.Text );
// [ <Content> // [ <Content>
if ( left == 0 ) if ( left == 0 )
@ -737,7 +737,7 @@ Code parse_class_struct( TokType which, bool inplace_def )
} }
Token parent_tok = parse_identifier(nullptr); Token parent_tok = parse_identifier(nullptr);
parent = def_type( tok_to_str(parent_tok) ); parent = def_type( parent_tok.Text );
// <ModuleFlags> <class/struct> <Attributes> <Name> : <Access Specifier> <Parent/Interface Name> // <ModuleFlags> <class/struct> <Attributes> <Name> : <Access Specifier> <Parent/Interface Name>
while ( check(Tok_Comma) ) while ( check(Tok_Comma) )
@ -750,7 +750,7 @@ Code parse_class_struct( TokType which, bool inplace_def )
} }
Token interface_tok = parse_identifier(nullptr); Token interface_tok = parse_identifier(nullptr);
array_append( interfaces, def_type( tok_to_str(interface_tok) ) ); array_append( interfaces, def_type( interface_tok.Text ) );
// <ModuleFlags> <class/struct> <Attributes> <Name> : <Access Specifier> <Name>, ... // <ModuleFlags> <class/struct> <Attributes> <Name> : <Access Specifier> <Name>, ...
} }
} }
@ -773,10 +773,10 @@ Code parse_class_struct( TokType which, bool inplace_def )
} }
if ( which == Tok_Decl_Class ) if ( which == Tok_Decl_Class )
result = cast(Code, def_class( tok_to_str(name), def_assign( body, parent, access, attributes, interfaces, scast(s32, array_num(interfaces)), mflags ) )); result = cast(Code, def_class( name.Text, def_assign( body, parent, access, attributes, interfaces, scast(s32, array_num(interfaces)), mflags ) ));
else else
result = cast(Code, def_struct( tok_to_str(name), def_assign( body, (CodeTypename)parent, access, attributes, interfaces, scast(s32, array_num(interfaces)), mflags ) )); result = cast(Code, def_struct( name.Text, def_assign( body, (CodeTypename)parent, access, attributes, interfaces, scast(s32, array_num(interfaces)), mflags ) ));
if ( inline_cmt ) if ( inline_cmt )
result->InlineCmt = cast(Code, inline_cmt); result->InlineCmt = cast(Code, inline_cmt);
@ -994,7 +994,7 @@ CodeBody parse_class_struct_body( TokType which, Token name )
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
b32 ignore_spec = false; b32 ignore_spec = false;
@ -1102,7 +1102,7 @@ CodeBody parse_class_struct_body( TokType which, Token name )
untyped_tok.Text.Len = ( (sptr)currtok.Text.Ptr + currtok.Text.Len ) - (sptr)untyped_tok.Text.Ptr; untyped_tok.Text.Len = ( (sptr)currtok.Text.Ptr + currtok.Text.Len ) - (sptr)untyped_tok.Text.Ptr;
eat( currtok.Type ); eat( currtok.Type );
} }
member = untyped_str( tok_to_str(untyped_tok) ); member = untyped_str( untyped_tok.Text );
// Something unknown // Something unknown
break; break;
} }
@ -1130,7 +1130,7 @@ CodeComment parse_comment()
CodeComment CodeComment
result = (CodeComment) make_code(); result = (CodeComment) make_code();
result->Type = CT_Comment; result->Type = CT_Comment;
result->Content = cache_str( tok_to_str(currtok_noskip) ); result->Content = cache_str( currtok_noskip.Text );
// result->Token = currtok_noskip; // result->Token = currtok_noskip;
eat( Tok_Comment ); eat( Tok_Comment );
@ -1171,13 +1171,13 @@ Code parse_complicated_definition( TokType which )
} }
Token tok = tokens.Arr[ idx - 1 ]; Token tok = tokens.Arr[ idx - 1 ];
if ( tok_is_specifier(tok) && spec_is_trailing( str_to_specifier( tok_to_str(tok))) ) if ( tok_is_specifier(tok) && spec_is_trailing( str_to_specifier( tok.Text)) )
{ {
// <which> <type_identifier>(...) <specifier> ...; // <which> <type_identifier>(...) <specifier> ...;
s32 spec_idx = idx - 1; s32 spec_idx = idx - 1;
Token spec = tokens.Arr[spec_idx]; Token spec = tokens.Arr[spec_idx];
while ( tok_is_specifier(spec) && spec_is_trailing( str_to_specifier( tok_to_str(spec))) ) while ( tok_is_specifier(spec) && spec_is_trailing( str_to_specifier( spec.Text)) )
{ {
-- spec_idx; -- spec_idx;
spec = tokens.Arr[spec_idx]; spec = tokens.Arr[spec_idx];
@ -1207,9 +1207,19 @@ Code parse_complicated_definition( TokType which )
if ( tok.Type == Tok_BraceCurly_Close ) if ( tok.Type == Tok_BraceCurly_Close )
{ {
// Its an inplace definition // Its an inplace definition
// <which> <type_identifier> { ... } <identifier>; // <which> <type_identifier ?> { ... } <identifier>;
ok_to_parse = true; ok_to_parse = true;
is_inplace = true; is_inplace = true;
CodeTypename type = cast(CodeTypename, parse_forward_or_definition(which, is_inplace));
// Should be a name right after the type.
Token name = parse_identifier(nullptr);
_ctx->parser.Scope->Name = name.Text;
Code result = parse_variable_after_name(ModuleFlag_None, NullCode, NullCode, type, name.Text);
parser_pop(& _ctx->parser);
return result;
} }
else if ( tok.Type == Tok_Identifier && tokens.Arr[ idx - 3 ].Type == which ) else if ( tok.Type == Tok_Identifier && tokens.Arr[ idx - 3 ].Type == which )
{ {
@ -1327,7 +1337,7 @@ Code parse_assignment_expression()
} }
expr_tok.Text.Len = ( ( sptr )currtok.Text.Ptr + currtok.Text.Len ) - ( sptr )expr_tok.Text.Ptr - 1; expr_tok.Text.Len = ( ( sptr )currtok.Text.Ptr + currtok.Text.Len ) - ( sptr )expr_tok.Text.Ptr - 1;
expr = untyped_str( tok_to_str(expr_tok) ); expr = untyped_str( expr_tok.Text );
// = <Expression> // = <Expression>
return expr; return expr;
} }
@ -1383,12 +1393,12 @@ CodeFn parse_function_after_name(
{ {
if ( specifiers == nullptr ) if ( specifiers == nullptr )
{ {
specifiers = def_specifier( str_to_specifier( tok_to_str(currtok)) ); specifiers = def_specifier( str_to_specifier( currtok.Text) );
eat( currtok.Type ); eat( currtok.Type );
continue; continue;
} }
specifiers_append(specifiers, str_to_specifier( tok_to_str(currtok)) ); specifiers_append(specifiers, str_to_specifier( currtok.Text) );
eat( currtok.Type ); eat( currtok.Type );
} }
// <Attributes> <Specifiers> <ReturnType> <Name> ( <Paraemters> ) <Specifiers> // <Attributes> <Specifiers> <ReturnType> <Name> ( <Paraemters> ) <Specifiers>
@ -1431,7 +1441,7 @@ CodeFn parse_function_after_name(
} }
StrBuilder StrBuilder
name_stripped = strbuilder_make_str( _ctx->Allocator_Temp, tok_to_str(name) ); name_stripped = strbuilder_make_str( _ctx->Allocator_Temp, name.Text );
strbuilder_strip_space(name_stripped); strbuilder_strip_space(name_stripped);
CodeFn CodeFn
@ -1718,7 +1728,7 @@ CodeBody parse_global_nspace( CodeType which )
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
bool ignore_spec = false; bool ignore_spec = false;
@ -2059,7 +2069,7 @@ CodeInclude parse_include()
} }
_ctx->parser.Scope->Name = currtok.Text; _ctx->parser.Scope->Name = currtok.Text;
include->Content = cache_str( tok_to_str(currtok) ); include->Content = cache_str( currtok.Text );
eat( Tok_String ); eat( Tok_String );
// #include <Path> or "Path" // #include <Path> or "Path"
@ -2384,12 +2394,12 @@ CodeOperator parse_operator_after_ret_type(
{ {
if ( specifiers == nullptr ) if ( specifiers == nullptr )
{ {
specifiers = def_specifier( str_to_specifier( tok_to_str(currtok)) ); specifiers = def_specifier( str_to_specifier( currtok.Text) );
eat( currtok.Type ); eat( currtok.Type );
continue; continue;
} }
specifiers_append(specifiers, str_to_specifier( tok_to_str(currtok)) ); specifiers_append(specifiers, str_to_specifier( currtok.Text) );
eat( currtok.Type ); eat( currtok.Type );
} }
// <ExportFlag> <Attributes> <Specifiers> <ReturnType> <Qualifier::...> operator <Op> ( <Parameters> ) <Specifiers> // <ExportFlag> <Attributes> <Specifiers> <ReturnType> <Qualifier::...> operator <Op> ( <Parameters> ) <Specifiers>
@ -2419,7 +2429,7 @@ CodeOperator parse_operator_after_ret_type(
} }
// OpValidateResult check_result = operator__validate( op, params, ret_type, specifiers ); // OpValidateResult check_result = operator__validate( op, params, ret_type, specifiers );
CodeOperator result = def_operator( op, tok_to_str(nspace), def_assign( params, ret_type, body, specifiers, attributes, mflags ) ); CodeOperator result = def_operator( op, nspace.Text, def_assign( params, ret_type, body, specifiers, attributes, mflags ) );
if ( inline_cmt ) if ( inline_cmt )
result->InlineCmt = inline_cmt; result->InlineCmt = inline_cmt;
@ -2537,7 +2547,7 @@ Code parse_operator_function_or_variable( bool expects_function, CodeAttributes
return InvalidCode; return InvalidCode;
} }
// Dealing with a variable // Dealing with a variable
result = cast(Code, parse_variable_after_name( ModuleFlag_None, attributes, specifiers, type, tok_to_str(name) )); result = cast(Code, parse_variable_after_name( ModuleFlag_None, attributes, specifiers, type, name.Text ));
// <Attributes> <Specifiers> <ValueType> <Name> ... // <Attributes> <Specifiers> <ValueType> <Name> ...
} }
} }
@ -2595,7 +2605,7 @@ CodePragma parse_pragma()
_ctx->parser.Scope->Name = currtok.Text; _ctx->parser.Scope->Name = currtok.Text;
pragma->Content = cache_str( tok_to_str(currtok) ); pragma->Content = cache_str( currtok.Text );
eat( Tok_Preprocess_Content ); eat( Tok_Preprocess_Content );
// #pragma <Content> // #pragma <Content>
@ -2729,7 +2739,7 @@ CodeParams parse_params( bool use_template_capture )
eat( currtok.Type ); eat( currtok.Type );
} }
value = untyped_str( strbuilder_to_str(parser_strip_formatting( tok_to_str(value_tok), parser_strip_formatting_dont_preserve_newlines )) ); value = untyped_str( strbuilder_to_str(parser_strip_formatting( value_tok.Text, parser_strip_formatting_dont_preserve_newlines )) );
// ( <Macro> <ValueType> <Name> = <Expression> // ( <Macro> <ValueType> <Name> = <Expression>
} }
} }
@ -2740,7 +2750,7 @@ CodeParams parse_params( bool use_template_capture )
result->Macro = macro; result->Macro = macro;
if ( name.Text.Len > 0 ) if ( name.Text.Len > 0 )
result->Name = cache_str( tok_to_str(name) ); result->Name = cache_str( name.Text );
result->ValueType = type; result->ValueType = type;
@ -2843,7 +2853,7 @@ CodeParams parse_params( bool use_template_capture )
eat( currtok.Type ); eat( currtok.Type );
} }
value = untyped_str( strbuilder_to_str(parser_strip_formatting( tok_to_str(value_tok), parser_strip_formatting_dont_preserve_newlines )) ); value = untyped_str( strbuilder_to_str(parser_strip_formatting( value_tok.Text, parser_strip_formatting_dont_preserve_newlines )) );
// ( <Macro> <ValueType> <Name> = <Expression>, <Macro> <ValueType> <Name> <PostNameMacro> = <Expression> // ( <Macro> <ValueType> <Name> = <Expression>, <Macro> <ValueType> <Name> <PostNameMacro> = <Expression>
} }
// ( <Macro> <ValueType> <Name> = <Expression>, <Macro> <ValueType> <Name> <PostNameMacro> = <Expression>, .. // ( <Macro> <ValueType> <Name> = <Expression>, <Macro> <ValueType> <Name> <PostNameMacro> = <Expression>, ..
@ -2855,7 +2865,7 @@ CodeParams parse_params( bool use_template_capture )
param->Macro = macro; param->Macro = macro;
if ( name.Text.Len > 0 ) if ( name.Text.Len > 0 )
param->Name = cache_str( tok_to_str(name) ); param->Name = cache_str( name.Text );
param->PostNameMacro = post_name_macro; param->PostNameMacro = post_name_macro;
param->ValueType = cast(CodeTypename, type); param->ValueType = cast(CodeTypename, type);
@ -2912,7 +2922,7 @@ CodePreprocessCond parse_preprocess_cond()
} }
_ctx->parser.Scope->Name = currtok.Text; _ctx->parser.Scope->Name = currtok.Text;
cond->Content = cache_str( tok_to_str(currtok) ); cond->Content = cache_str( currtok.Text );
eat( Tok_Preprocess_Content ); eat( Tok_Preprocess_Content );
// #<Conditiona> <Content> // #<Conditiona> <Content>
@ -3179,7 +3189,7 @@ CodeVar parse_variable_after_name(
eat( Tok_BraceCurly_Close ); eat( Tok_BraceCurly_Close );
expr_tok.Text.Len = ( (sptr)prevtok.Text.Ptr + prevtok.Text.Len ) - (sptr)expr_tok.Text.Ptr; expr_tok.Text.Len = ( (sptr)prevtok.Text.Ptr + prevtok.Text.Len ) - (sptr)expr_tok.Text.Ptr;
expr = untyped_str( tok_to_str(expr_tok) ); expr = untyped_str( expr_tok.Text );
// <Attributes> <Specifiers> <ValueType> <Name> = { <Expression> } // <Attributes> <Specifiers> <ValueType> <Name> = { <Expression> }
} }
@ -3205,7 +3215,7 @@ CodeVar parse_variable_after_name(
} }
expr_token.Text.Len = ( (sptr)prevtok.Text.Ptr + prevtok.Text.Len ) - (sptr)expr_token.Text.Ptr; expr_token.Text.Len = ( (sptr)prevtok.Text.Ptr + prevtok.Text.Len ) - (sptr)expr_token.Text.Ptr;
expr = untyped_str( tok_to_str(expr_token) ); expr = untyped_str( expr_token.Text );
eat( Tok_Paren_Close ); eat( Tok_Paren_Close );
// <Attributes> <Specifiers> <ValueType> <Name> ( <Expression> ) // <Attributes> <Specifiers> <ValueType> <Name> ( <Expression> )
} }
@ -3228,7 +3238,7 @@ CodeVar parse_variable_after_name(
} }
expr_tok.Text.Len = ( (sptr)prevtok.Text.Ptr + prevtok.Text.Len ) - (sptr)expr_tok.Text.Ptr; expr_tok.Text.Len = ( (sptr)prevtok.Text.Ptr + prevtok.Text.Len ) - (sptr)expr_tok.Text.Ptr;
bitfield_expr = untyped_str( tok_to_str(expr_tok) ); bitfield_expr = untyped_str( expr_tok.Text );
// <Attributes> <Specifiers> <ValueType> <Name> : <Expression> // <Attributes> <Specifiers> <ValueType> <Name> : <Expression>
} }
@ -3309,7 +3319,7 @@ CodeVar parse_variable_declaration_list()
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
switch ( spec ) switch ( spec )
{ {
@ -3333,7 +3343,7 @@ CodeVar parse_variable_declaration_list()
{ {
log_failure( "Error, invalid specifier '%S' proceeding comma\n" log_failure( "Error, invalid specifier '%S' proceeding comma\n"
"(Parser will add and continue to specifiers, but will most likely fail to compile)\n%S" "(Parser will add and continue to specifiers, but will most likely fail to compile)\n%S"
, tok_to_str(currtok), strbuilder_to_str( parser_to_strbuilder(_ctx->parser)) ); , currtok.Text, strbuilder_to_str( parser_to_strbuilder(_ctx->parser)) );
continue; continue;
} }
break; break;
@ -3348,7 +3358,7 @@ CodeVar parse_variable_declaration_list()
} }
// , <Specifiers> // , <Specifiers>
Str name = tok_to_str(currtok); Str name = currtok.Text;
eat( Tok_Identifier ); eat( Tok_Identifier );
// , <Specifiers> <Name> // , <Specifiers> <Name>
@ -3417,7 +3427,7 @@ CodeConstructor parser_parse_constructor( CodeSpecifiers specifiers )
initializer_list_tok.Text.Len = ( ( sptr )prevtok.Text.Ptr + prevtok.Text.Len ) - ( sptr )initializer_list_tok.Text.Ptr; initializer_list_tok.Text.Len = ( ( sptr )prevtok.Text.Ptr + prevtok.Text.Len ) - ( sptr )initializer_list_tok.Text.Ptr;
// <Name> ( <Parameters> ) : <InitializerList> // <Name> ( <Parameters> ) : <InitializerList>
initializer_list = untyped_str( tok_to_str(initializer_list_tok) ); initializer_list = untyped_str( initializer_list_tok.Text );
// TODO(Ed): Constructors can have post-fix specifiers // TODO(Ed): Constructors can have post-fix specifiers
@ -3446,7 +3456,7 @@ CodeConstructor parser_parse_constructor( CodeSpecifiers specifiers )
CodeConstructor result = ( CodeConstructor )make_code(); CodeConstructor result = ( CodeConstructor )make_code();
result->Name = cache_str( tok_to_str(identifier)); result->Name = cache_str( identifier.Text );
result->Specs = specifiers; result->Specs = specifiers;
@ -3492,7 +3502,7 @@ CodeDefine parser_parse_define()
return InvalidCode; return InvalidCode;
} }
_ctx->parser.Scope->Name = currtok.Text; _ctx->parser.Scope->Name = currtok.Text;
define->Name = cache_str( tok_to_str(currtok) ); define->Name = cache_str( currtok.Text );
eat( Tok_Identifier ); eat( Tok_Identifier );
// #define <Name> // #define <Name>
@ -3550,7 +3560,7 @@ CodeDefine parser_parse_define()
return define; return define;
} }
define->Body = untyped_str( strbuilder_to_str( parser_strip_formatting( tok_to_str(currtok), parser_strip_formatting_dont_preserve_newlines )) ); define->Body = untyped_str( strbuilder_to_str( parser_strip_formatting( currtok.Text, parser_strip_formatting_dont_preserve_newlines )) );
eat( Tok_Preprocess_Content ); eat( Tok_Preprocess_Content );
// #define <Name> ( <params> ) <Content> // #define <Name> ( <params> ) <Content>
@ -3650,7 +3660,7 @@ CodeDestructor parser_parse_destructor( CodeSpecifiers specifiers )
if ( tok_is_valid(prefix_identifier) ) { if ( tok_is_valid(prefix_identifier) ) {
prefix_identifier.Text.Len += 1 + identifier.Text.Len; prefix_identifier.Text.Len += 1 + identifier.Text.Len;
result->Name = cache_str( tok_to_str(prefix_identifier) ); result->Name = cache_str( prefix_identifier.Text );
} }
if ( specifiers ) if ( specifiers )
@ -3726,7 +3736,7 @@ CodeEnum parser_parse_enum( bool inplace_def )
else if ( currtok.Type == Tok_Preprocess_Macro_Expr ) else if ( currtok.Type == Tok_Preprocess_Macro_Expr )
{ {
// We'll support the enum_underlying macro // We'll support the enum_underlying macro
if ( str_contains( tok_to_str(currtok), enum_underlying_macro.Name) ) if ( str_contains( currtok.Text, enum_underlying_macro.Name) )
{ {
use_macro_underlying = true; use_macro_underlying = true;
underlying_macro = parse_simple_preprocess( Tok_Preprocess_Macro_Expr ); underlying_macro = parse_simple_preprocess( Tok_Preprocess_Macro_Expr );
@ -3761,7 +3771,7 @@ CodeEnum parser_parse_enum( bool inplace_def )
switch ( currtok_noskip.Type ) switch ( currtok_noskip.Type )
{ {
case Tok_NewLine: case Tok_NewLine:
member = untyped_str( tok_to_str(currtok_noskip) ); member = untyped_str( currtok_noskip.Text );
eat( Tok_NewLine ); eat( Tok_NewLine );
break; break;
@ -3854,7 +3864,7 @@ CodeEnum parser_parse_enum( bool inplace_def )
Token prev = * lex_previous(_ctx->parser.Tokens, lex_dont_skip_formatting); Token prev = * lex_previous(_ctx->parser.Tokens, lex_dont_skip_formatting);
entry.Text.Len = ( (sptr)prev.Text.Ptr + prev.Text.Len ) - (sptr)entry.Text.Ptr; entry.Text.Len = ( (sptr)prev.Text.Ptr + prev.Text.Len ) - (sptr)entry.Text.Ptr;
member = untyped_str( tok_to_str(entry) ); member = untyped_str( entry.Text );
} }
break; break;
} }
@ -3898,7 +3908,7 @@ CodeEnum parser_parse_enum( bool inplace_def )
result->Type = is_enum_class ? CT_Enum_Class_Fwd : CT_Enum_Fwd; result->Type = is_enum_class ? CT_Enum_Class_Fwd : CT_Enum_Fwd;
} }
result->Name = cache_str( tok_to_str(name) ); result->Name = cache_str( name.Text );
if ( attributes ) if ( attributes )
result->Attributes = attributes; result->Attributes = attributes;
@ -3950,7 +3960,7 @@ CodeExtern parser_parse_extern_link()
CodeExtern CodeExtern
result = (CodeExtern) make_code(); result = (CodeExtern) make_code();
result->Type = CT_Extern_Linkage; result->Type = CT_Extern_Linkage;
result->Name = cache_str( tok_to_str(name) ); result->Name = cache_str( name.Text );
CodeBody entry = parser_parse_extern_link_body(); CodeBody entry = parser_parse_extern_link_body();
if ( cast(Code, entry) == Code_Invalid ) if ( cast(Code, entry) == Code_Invalid )
@ -3986,7 +3996,7 @@ CodeFriend parser_parse_friend()
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
switch ( spec ) switch ( spec )
{ {
@ -4104,7 +4114,7 @@ CodeFn parser_parse_function()
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
switch ( spec ) switch ( spec )
{ {
@ -4174,7 +4184,7 @@ CodeNS parser_parse_namespace()
CodeNS CodeNS
result = (CodeNS) make_code(); result = (CodeNS) make_code();
result->Type = CT_Namespace; result->Type = CT_Namespace;
result->Name = cache_str( tok_to_str(name) ); result->Name = cache_str( name.Text );
result->Body = body; result->Body = body;
@ -4205,7 +4215,7 @@ CodeOperator parser_parse_operator()
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
switch ( spec ) switch ( spec )
{ {
@ -4319,7 +4329,7 @@ CodeOpCast parser_parse_operator_cast( CodeSpecifiers specifiers )
eat( Tok_BraceCurly_Close ); eat( Tok_BraceCurly_Close );
// <Specifiers> <Qualifier> :: ... operator <UnderlyingType>() <const> { <Body> } // <Specifiers> <Qualifier> :: ... operator <UnderlyingType>() <const> { <Body> }
body = untyped_str( tok_to_str(body_str) ); body = untyped_str( body_str.Text );
} }
else else
{ {
@ -4335,7 +4345,7 @@ CodeOpCast parser_parse_operator_cast( CodeSpecifiers specifiers )
CodeOpCast result = (CodeOpCast) make_code(); CodeOpCast result = (CodeOpCast) make_code();
if ( tok_is_valid(name) ) if ( tok_is_valid(name) )
result->Name = cache_str( tok_to_str(name) ); result->Name = cache_str( name.Text );
if (body) { if (body) {
result->Type = CT_Operator_Cast; result->Type = CT_Operator_Cast;
@ -4438,7 +4448,7 @@ CodeTemplate parser_parse_template()
{ {
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
switch ( spec ) switch ( spec )
{ {
@ -4568,10 +4578,10 @@ CodeTypename parser_parse_type( bool from_template, bool* typedef_is_function )
// Prefix specifiers // Prefix specifiers
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
if ( spec != Spec_Const ) { if ( spec != Spec_Const ) {
log_failure( "Error, invalid specifier used in type definition: %S\n%SB", tok_to_str(currtok), parser_to_strbuilder(_ctx->parser) ); log_failure( "Error, invalid specifier used in type definition: %S\n%SB", currtok.Text, parser_to_strbuilder(_ctx->parser) );
parser_pop(& _ctx->parser); parser_pop(& _ctx->parser);
return InvalidCode; return InvalidCode;
} }
@ -4707,11 +4717,11 @@ else if ( currtok.Type == Tok_DeclType )
// Suffix specifiers for typename. // Suffix specifiers for typename.
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
if ( spec != Spec_Const && spec != Spec_Ptr && spec != Spec_Ref && spec != Spec_RValue ) 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", tok_to_str(currtok), parser_to_strbuilder(_ctx->parser) ); log_failure( "Error, invalid specifier used in type definition: %S\n%SB", currtok.Text, parser_to_strbuilder(_ctx->parser) );
parser_pop(& _ctx->parser); parser_pop(& _ctx->parser);
return InvalidCode; return InvalidCode;
} }
@ -4793,7 +4803,7 @@ else if ( currtok.Type == Tok_DeclType )
// StrBuilder // StrBuilder
// name_stripped = StrBuilder::make( FallbackAllocator, name ); // name_stripped = StrBuilder::make( FallbackAllocator, name );
// name_stripped.strip_space(); // name_stripped.strip_space();
return_type->Name = cache_str( tok_to_str(name) ); return_type->Name = cache_str( name.Text );
#ifdef GEN_USE_NEW_TYPENAME_PARSING #ifdef GEN_USE_NEW_TYPENAME_PARSING
if ( specifiers ) if ( specifiers )
@ -4906,14 +4916,14 @@ else if ( currtok.Type == Tok_DeclType )
// Look for suffix specifiers for the function // Look for suffix specifiers for the function
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
if ( spec != Spec_Const if ( spec != Spec_Const
// TODO : Add support for NoExcept, l-value, volatile, l-value, etc // TODO : Add support for NoExcept, l-value, volatile, l-value, etc
// && spec != Spec_NoExcept // && spec != Spec_NoExcept
&& spec != Spec_RValue ) && spec != Spec_RValue )
{ {
log_failure( "Error, invalid specifier used in type definition: %S\n%S", tok_to_str(currtok), strbuilder_to_str( parser_to_strbuilder(_ctx->parser)) ); log_failure( "Error, invalid specifier used in type definition: %S\n%S", currtok.Text, strbuilder_to_str( parser_to_strbuilder(_ctx->parser)) );
parser_pop(& _ctx->parser); parser_pop(& _ctx->parser);
return InvalidCode; return InvalidCode;
} }
@ -4947,7 +4957,7 @@ else if ( currtok.Type == Tok_DeclType )
// result->Token = _ctx->parser.Scope->Start; // result->Token = _ctx->parser.Scope->Start;
// Need to wait until were using the new parsing method to do this. // Need to wait until were using the new parsing method to do this.
StrBuilder name_stripped = parser_strip_formatting( tok_to_str(name), parser_strip_formatting_dont_preserve_newlines ); StrBuilder name_stripped = parser_strip_formatting( name.Text, parser_strip_formatting_dont_preserve_newlines );
// name_stripped.strip_space(); // name_stripped.strip_space();
@ -5206,7 +5216,7 @@ CodeTypedef parser_parse_typedef()
} }
else else
{ {
result->Name = cache_str( tok_to_str(name) ); result->Name = cache_str( name.Text );
result->IsFunction = false; result->IsFunction = false;
} }
@ -5250,7 +5260,7 @@ CodeUnion parser_parse_union( bool inplace_def )
Str name = { nullptr, 0 }; Str name = { nullptr, 0 };
if ( check( Tok_Identifier ) ) if ( check( Tok_Identifier ) )
{ {
name = tok_to_str(currtok); name = currtok.Text;
_ctx->parser.Scope->Name = currtok.Text; _ctx->parser.Scope->Name = currtok.Text;
eat( Tok_Identifier ); eat( Tok_Identifier );
} }
@ -5441,7 +5451,7 @@ CodeUsing parser_parse_using()
CodeUsing CodeUsing
result = (CodeUsing) make_code(); result = (CodeUsing) make_code();
result->Name = cache_str( tok_to_str(name) ); result->Name = cache_str( name.Text );
result->ModuleFlags = mflags; result->ModuleFlags = mflags;
if ( is_namespace) if ( is_namespace)
@ -5492,7 +5502,7 @@ CodeVar parser_parse_variable()
while ( left && tok_is_specifier(currtok) ) while ( left && tok_is_specifier(currtok) )
{ {
Specifier spec = str_to_specifier( tok_to_str(currtok) ); Specifier spec = str_to_specifier( currtok.Text );
switch ( spec ) switch ( spec )
{ {
GEN_PARSER_VARIABLE_ALLOWED_SPECIFIER_CASES: GEN_PARSER_VARIABLE_ALLOWED_SPECIFIER_CASES:

View File

@ -43,11 +43,6 @@ AccessSpec tok_to_access_specifier(Token tok) {
return scast(AccessSpec, tok.Type); return scast(AccessSpec, tok.Type);
} }
forceinline
Str tok_to_str(Token tok) {
return tok.Text;
}
forceinline forceinline
bool tok_is_valid( Token tok ) { bool tok_is_valid( Token tok ) {
return tok.Text.Ptr && tok.Text.Len && tok.Type != Tok_Invalid; return tok.Text.Ptr && tok.Text.Len && tok.Type != Tok_Invalid;