mirror of
https://github.com/Ed94/gencpp.git
synced 2024-12-22 15:54:45 -08:00
reduction done on eoperator
This commit is contained in:
parent
c6fba23173
commit
72d088c566
@ -202,7 +202,7 @@ char const* debug_str(Code self)
|
|||||||
append_fmt( result, "\n\tNext: %S %S", type_str(self->Prev), self->Prev->Name ? self->Prev->Name : "Null" );
|
append_fmt( result, "\n\tNext: %S %S", type_str(self->Prev), self->Prev->Name ? self->Prev->Name : "Null" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Operator:
|
case ECode::Operator:
|
||||||
case Operator_Member:
|
case Operator_Member:
|
||||||
if ( self->Prev )
|
if ( self->Prev )
|
||||||
append_fmt( result, "\n\tPrev: %S %S", type_str(self->Prev), self->Prev->Name ? self->Prev->Name : "Null" );
|
append_fmt( result, "\n\tPrev: %S %S", type_str(self->Prev), self->Prev->Name ? self->Prev->Name : "Null" );
|
||||||
@ -482,7 +482,7 @@ void to_string( Code self, String* result )
|
|||||||
to_string(cast(CodeNS, self), result );
|
to_string(cast(CodeNS, self), result );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Operator:
|
case ECode::Operator:
|
||||||
case Operator_Member:
|
case Operator_Member:
|
||||||
to_string_def(cast(CodeOperator, self), result );
|
to_string_def(cast(CodeOperator, self), result );
|
||||||
break;
|
break;
|
||||||
@ -860,7 +860,7 @@ bool is_equal( Code self, Code other )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
case Operator:
|
case ECode::Operator:
|
||||||
case Operator_Member:
|
case Operator_Member:
|
||||||
{
|
{
|
||||||
check_member_val( ModuleFlags );
|
check_member_val( ModuleFlags );
|
||||||
|
@ -359,7 +359,7 @@ struct AST
|
|||||||
union {
|
union {
|
||||||
b32 IsFunction; // Used by typedef to not serialize the name field.
|
b32 IsFunction; // Used by typedef to not serialize the name field.
|
||||||
b32 IsParamPack; // Used by typename to know if type should be considered a parameter pack.
|
b32 IsParamPack; // Used by typename to know if type should be considered a parameter pack.
|
||||||
OperatorT Op;
|
Operator Op;
|
||||||
AccessSpec ParentAccess;
|
AccessSpec ParentAccess;
|
||||||
s32 NumEntries;
|
s32 NumEntries;
|
||||||
s32 VarConstructorInit; // Used by variables to know that initialization is using a constructor expression instead of an assignment expression.
|
s32 VarConstructorInit; // Used by variables to know that initialization is using a constructor expression instead of an assignment expression.
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
case Global_Body: \
|
case Global_Body: \
|
||||||
case Namespace: \
|
case Namespace: \
|
||||||
case Namespace_Body: \
|
case Namespace_Body: \
|
||||||
case Operator: \
|
case ECode::Operator: \
|
||||||
case Operator_Fwd: \
|
case Operator_Fwd: \
|
||||||
case Parameters: \
|
case Parameters: \
|
||||||
case Specifiers: \
|
case Specifiers: \
|
||||||
@ -30,7 +30,7 @@
|
|||||||
case Global_Body: \
|
case Global_Body: \
|
||||||
case Namespace: \
|
case Namespace: \
|
||||||
case Namespace_Body: \
|
case Namespace_Body: \
|
||||||
case Operator: \
|
case ECode::Operator: \
|
||||||
case Operator_Fwd: \
|
case Operator_Fwd: \
|
||||||
case Operator_Member: \
|
case Operator_Member: \
|
||||||
case Operator_Member_Fwd: \
|
case Operator_Member_Fwd: \
|
||||||
|
@ -605,7 +605,7 @@ struct AST_Operator
|
|||||||
StringCached Name;
|
StringCached Name;
|
||||||
CodeT Type;
|
CodeT Type;
|
||||||
ModuleFlag ModuleFlags;
|
ModuleFlag ModuleFlags;
|
||||||
OperatorT Op;
|
Operator Op;
|
||||||
};
|
};
|
||||||
static_assert( sizeof(AST_Operator) == sizeof(AST), "ERROR: AST_Operator is not the same size as AST");
|
static_assert( sizeof(AST_Operator) == sizeof(AST), "ERROR: AST_Operator is not the same size as AST");
|
||||||
|
|
||||||
|
@ -636,7 +636,7 @@ String to_string(CodeOperator self)
|
|||||||
switch ( self->Type )
|
switch ( self->Type )
|
||||||
{
|
{
|
||||||
using namespace ECode;
|
using namespace ECode;
|
||||||
case Operator:
|
case ECode::Operator:
|
||||||
case Operator_Member:
|
case Operator_Member:
|
||||||
to_string_def( self, & result );
|
to_string_def( self, & result );
|
||||||
break;
|
break;
|
||||||
|
@ -5,114 +5,110 @@
|
|||||||
|
|
||||||
// This file was generated automatially by gencpp's bootstrap.cpp (See: https://github.com/Ed94/gencpp)
|
// This file was generated automatially by gencpp's bootstrap.cpp (See: https://github.com/Ed94/gencpp)
|
||||||
|
|
||||||
namespace EOperator
|
typedef enum Operator_Def Operator;
|
||||||
|
|
||||||
|
enum Operator_Def : u32
|
||||||
{
|
{
|
||||||
enum Type : u32
|
Op_Invalid,
|
||||||
{
|
Op_Assign,
|
||||||
Invalid,
|
Op_Assign_Add,
|
||||||
Assign,
|
Op_Assign_Subtract,
|
||||||
Assign_Add,
|
Op_Assign_Multiply,
|
||||||
Assign_Subtract,
|
Op_Assign_Divide,
|
||||||
Assign_Multiply,
|
Op_Assign_Modulo,
|
||||||
Assign_Divide,
|
Op_Assign_BAnd,
|
||||||
Assign_Modulo,
|
Op_Assign_BOr,
|
||||||
Assign_BAnd,
|
Op_Assign_BXOr,
|
||||||
Assign_BOr,
|
Op_Assign_LShift,
|
||||||
Assign_BXOr,
|
Op_Assign_RShift,
|
||||||
Assign_LShift,
|
Op_Increment,
|
||||||
Assign_RShift,
|
Op_Decrement,
|
||||||
Increment,
|
Op_Unary_Plus,
|
||||||
Decrement,
|
Op_Unary_Minus,
|
||||||
Unary_Plus,
|
Op_UnaryNot,
|
||||||
Unary_Minus,
|
Op_Add,
|
||||||
UnaryNot,
|
Op_Subtract,
|
||||||
Add,
|
Op_Multiply,
|
||||||
Subtract,
|
Op_Divide,
|
||||||
Multiply,
|
Op_Modulo,
|
||||||
Divide,
|
Op_BNot,
|
||||||
Modulo,
|
Op_BAnd,
|
||||||
BNot,
|
Op_BOr,
|
||||||
BAnd,
|
Op_BXOr,
|
||||||
BOr,
|
Op_LShift,
|
||||||
BXOr,
|
Op_RShift,
|
||||||
LShift,
|
Op_LAnd,
|
||||||
RShift,
|
Op_LOr,
|
||||||
LAnd,
|
Op_LEqual,
|
||||||
LOr,
|
Op_LNot,
|
||||||
LEqual,
|
Op_Lesser,
|
||||||
LNot,
|
Op_Greater,
|
||||||
Lesser,
|
Op_LesserEqual,
|
||||||
Greater,
|
Op_GreaterEqual,
|
||||||
LesserEqual,
|
Op_Subscript,
|
||||||
GreaterEqual,
|
Op_Indirection,
|
||||||
Subscript,
|
Op_AddressOf,
|
||||||
Indirection,
|
Op_MemberOfPointer,
|
||||||
AddressOf,
|
Op_PtrToMemOfPtr,
|
||||||
MemberOfPointer,
|
Op_FunctionCall,
|
||||||
PtrToMemOfPtr,
|
Op_Comma,
|
||||||
FunctionCall,
|
Op_New,
|
||||||
Comma,
|
Op_NewArray,
|
||||||
New,
|
Op_Delete,
|
||||||
NewArray,
|
Op_DeleteArray,
|
||||||
Delete,
|
NumOps
|
||||||
DeleteArray,
|
};
|
||||||
NumOps
|
|
||||||
|
inline StrC to_str( Operator op )
|
||||||
|
{
|
||||||
|
local_persist StrC lookup[] {
|
||||||
|
{ sizeof( "INVALID" ), "INVALID" },
|
||||||
|
{ sizeof( "=" ), "=" },
|
||||||
|
{ sizeof( "+=" ), "+=" },
|
||||||
|
{ sizeof( "-=" ), "-=" },
|
||||||
|
{ sizeof( "*=" ), "*=" },
|
||||||
|
{ sizeof( "/=" ), "/=" },
|
||||||
|
{ sizeof( "%=" ), "%=" },
|
||||||
|
{ sizeof( "&=" ), "&=" },
|
||||||
|
{ sizeof( "|=" ), "|=" },
|
||||||
|
{ sizeof( "^=" ), "^=" },
|
||||||
|
{ sizeof( "<<=" ), "<<=" },
|
||||||
|
{ sizeof( ">>=" ), ">>=" },
|
||||||
|
{ sizeof( "++" ), "++" },
|
||||||
|
{ sizeof( "--" ), "--" },
|
||||||
|
{ sizeof( "+" ), "+" },
|
||||||
|
{ sizeof( "-" ), "-" },
|
||||||
|
{ sizeof( "!" ), "!" },
|
||||||
|
{ sizeof( "+" ), "+" },
|
||||||
|
{ sizeof( "-" ), "-" },
|
||||||
|
{ sizeof( "*" ), "*" },
|
||||||
|
{ sizeof( "/" ), "/" },
|
||||||
|
{ sizeof( "%" ), "%" },
|
||||||
|
{ sizeof( "~" ), "~" },
|
||||||
|
{ sizeof( "&" ), "&" },
|
||||||
|
{ sizeof( "|" ), "|" },
|
||||||
|
{ sizeof( "^" ), "^" },
|
||||||
|
{ sizeof( "<<" ), "<<" },
|
||||||
|
{ sizeof( ">>" ), ">>" },
|
||||||
|
{ sizeof( "&&" ), "&&" },
|
||||||
|
{ sizeof( "||" ), "||" },
|
||||||
|
{ sizeof( "==" ), "==" },
|
||||||
|
{ sizeof( "!=" ), "!=" },
|
||||||
|
{ sizeof( "<" ), "<" },
|
||||||
|
{ sizeof( ">" ), ">" },
|
||||||
|
{ sizeof( "<=" ), "<=" },
|
||||||
|
{ sizeof( ">=" ), ">=" },
|
||||||
|
{ sizeof( "[]" ), "[]" },
|
||||||
|
{ sizeof( "*" ), "*" },
|
||||||
|
{ sizeof( "&" ), "&" },
|
||||||
|
{ sizeof( "->" ), "->" },
|
||||||
|
{ sizeof( "->*" ), "->*" },
|
||||||
|
{ sizeof( "()" ), "()" },
|
||||||
|
{ sizeof( "," ), "," },
|
||||||
|
{ sizeof( "new" ), "new" },
|
||||||
|
{ sizeof( "new[]" ), "new[]" },
|
||||||
|
{ sizeof( "delete" ), "delete" },
|
||||||
|
{ sizeof( "delete[]" ), "delete[]" },
|
||||||
};
|
};
|
||||||
|
return lookup[op];
|
||||||
inline StrC to_str( Type op )
|
}
|
||||||
{
|
|
||||||
local_persist StrC lookup[] {
|
|
||||||
{ sizeof( "INVALID" ), "INVALID" },
|
|
||||||
{ sizeof( "=" ), "=" },
|
|
||||||
{ sizeof( "+=" ), "+=" },
|
|
||||||
{ sizeof( "-=" ), "-=" },
|
|
||||||
{ sizeof( "*=" ), "*=" },
|
|
||||||
{ sizeof( "/=" ), "/=" },
|
|
||||||
{ sizeof( "%=" ), "%=" },
|
|
||||||
{ sizeof( "&=" ), "&=" },
|
|
||||||
{ sizeof( "|=" ), "|=" },
|
|
||||||
{ sizeof( "^=" ), "^=" },
|
|
||||||
{ sizeof( "<<=" ), "<<=" },
|
|
||||||
{ sizeof( ">>=" ), ">>=" },
|
|
||||||
{ sizeof( "++" ), "++" },
|
|
||||||
{ sizeof( "--" ), "--" },
|
|
||||||
{ sizeof( "+" ), "+" },
|
|
||||||
{ sizeof( "-" ), "-" },
|
|
||||||
{ sizeof( "!" ), "!" },
|
|
||||||
{ sizeof( "+" ), "+" },
|
|
||||||
{ sizeof( "-" ), "-" },
|
|
||||||
{ sizeof( "*" ), "*" },
|
|
||||||
{ sizeof( "/" ), "/" },
|
|
||||||
{ sizeof( "%" ), "%" },
|
|
||||||
{ sizeof( "~" ), "~" },
|
|
||||||
{ sizeof( "&" ), "&" },
|
|
||||||
{ sizeof( "|" ), "|" },
|
|
||||||
{ sizeof( "^" ), "^" },
|
|
||||||
{ sizeof( "<<" ), "<<" },
|
|
||||||
{ sizeof( ">>" ), ">>" },
|
|
||||||
{ sizeof( "&&" ), "&&" },
|
|
||||||
{ sizeof( "||" ), "||" },
|
|
||||||
{ sizeof( "==" ), "==" },
|
|
||||||
{ sizeof( "!=" ), "!=" },
|
|
||||||
{ sizeof( "<" ), "<" },
|
|
||||||
{ sizeof( ">" ), ">" },
|
|
||||||
{ sizeof( "<=" ), "<=" },
|
|
||||||
{ sizeof( ">=" ), ">=" },
|
|
||||||
{ sizeof( "[]" ), "[]" },
|
|
||||||
{ sizeof( "*" ), "*" },
|
|
||||||
{ sizeof( "&" ), "&" },
|
|
||||||
{ sizeof( "->" ), "->" },
|
|
||||||
{ sizeof( "->*" ), "->*" },
|
|
||||||
{ sizeof( "()" ), "()" },
|
|
||||||
{ sizeof( "," ), "," },
|
|
||||||
{ sizeof( "new" ), "new" },
|
|
||||||
{ sizeof( "new[]" ), "new[]" },
|
|
||||||
{ sizeof( "delete" ), "delete" },
|
|
||||||
{ sizeof( "delete[]" ), "delete[]" },
|
|
||||||
};
|
|
||||||
return lookup[op];
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace EOperator
|
|
||||||
|
|
||||||
using OperatorT = EOperator::Type;
|
|
||||||
|
@ -106,7 +106,7 @@ struct Opts_def_operator {
|
|||||||
CodeAttributes attributes;
|
CodeAttributes attributes;
|
||||||
ModuleFlag mflags;
|
ModuleFlag mflags;
|
||||||
};
|
};
|
||||||
CodeOperator def_operator( OperatorT op, StrC nspace, Opts_def_operator opts GEN_PARAM_DEFAULT );
|
CodeOperator def_operator( Operator op, StrC nspace, Opts_def_operator opts GEN_PARAM_DEFAULT );
|
||||||
|
|
||||||
struct Opts_def_operator_cast {
|
struct Opts_def_operator_cast {
|
||||||
Code body;
|
Code body;
|
||||||
|
@ -12,11 +12,9 @@ enum class OpValidateResult : u32
|
|||||||
Member
|
Member
|
||||||
};
|
};
|
||||||
|
|
||||||
OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeType ret_type, CodeSpecifiers specifier )
|
OpValidateResult operator__validate( Operator op, CodeParam params_code, CodeType ret_type, CodeSpecifiers specifier )
|
||||||
{
|
{
|
||||||
using namespace EOperator;
|
if ( op == Op_Invalid )
|
||||||
|
|
||||||
if ( op == EOperator::Invalid )
|
|
||||||
{
|
{
|
||||||
log_failure("gen::def_operator: op cannot be invalid");
|
log_failure("gen::def_operator: op cannot be invalid");
|
||||||
return OpValidateResult::Fail;
|
return OpValidateResult::Fail;
|
||||||
@ -65,7 +63,7 @@ OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeTy
|
|||||||
switch ( op )
|
switch ( op )
|
||||||
{
|
{
|
||||||
# define specs( ... ) num_args( __VA_ARGS__ ), __VA_ARGS__
|
# define specs( ... ) num_args( __VA_ARGS__ ), __VA_ARGS__
|
||||||
case Assign:
|
case Op_Assign:
|
||||||
check_params();
|
check_params();
|
||||||
|
|
||||||
if ( params_code->NumEntries > 1 )
|
if ( params_code->NumEntries > 1 )
|
||||||
@ -81,16 +79,16 @@ OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeTy
|
|||||||
is_member_symbol = true;
|
is_member_symbol = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Assign_Add:
|
case Op_Assign_Add:
|
||||||
case Assign_Subtract:
|
case Op_Assign_Subtract:
|
||||||
case Assign_Multiply:
|
case Op_Assign_Multiply:
|
||||||
case Assign_Divide:
|
case Op_Assign_Divide:
|
||||||
case Assign_Modulo:
|
case Op_Assign_Modulo:
|
||||||
case Assign_BAnd:
|
case Op_Assign_BAnd:
|
||||||
case Assign_BOr:
|
case Op_Assign_BOr:
|
||||||
case Assign_BXOr:
|
case Op_Assign_BXOr:
|
||||||
case Assign_LShift:
|
case Op_Assign_LShift:
|
||||||
case Assign_RShift:
|
case Op_Assign_RShift:
|
||||||
check_params();
|
check_params();
|
||||||
|
|
||||||
if ( params_code->NumEntries == 1 )
|
if ( params_code->NumEntries == 1 )
|
||||||
@ -110,8 +108,8 @@ OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeTy
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Increment:
|
case Op_Increment:
|
||||||
case Decrement:
|
case Op_Decrement:
|
||||||
// If its not set, it just means its a prefix member op.
|
// If its not set, it just means its a prefix member op.
|
||||||
if ( params_code )
|
if ( params_code )
|
||||||
{
|
{
|
||||||
@ -157,8 +155,8 @@ OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeTy
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Unary_Plus:
|
case Op_Unary_Plus:
|
||||||
case Unary_Minus:
|
case Op_Unary_Minus:
|
||||||
if ( ! params_code )
|
if ( ! params_code )
|
||||||
is_member_symbol = true;
|
is_member_symbol = true;
|
||||||
|
|
||||||
@ -193,7 +191,7 @@ OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeTy
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BNot:
|
case Op_BNot:
|
||||||
{
|
{
|
||||||
// Some compilers let you do this...
|
// Some compilers let you do this...
|
||||||
#if 0
|
#if 0
|
||||||
@ -228,16 +226,16 @@ OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeTy
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case Add:
|
case Op_Add:
|
||||||
case Subtract:
|
case Op_Subtract:
|
||||||
case Multiply:
|
case Op_Multiply:
|
||||||
case Divide:
|
case Op_Divide:
|
||||||
case Modulo:
|
case Op_Modulo:
|
||||||
case BAnd:
|
case Op_BAnd:
|
||||||
case BOr:
|
case Op_BOr:
|
||||||
case BXOr:
|
case Op_BXOr:
|
||||||
case LShift:
|
case Op_LShift:
|
||||||
case RShift:
|
case Op_RShift:
|
||||||
check_params();
|
check_params();
|
||||||
|
|
||||||
switch ( params_code->NumEntries )
|
switch ( params_code->NumEntries )
|
||||||
@ -269,7 +267,7 @@ OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeTy
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case UnaryNot:
|
case Op_UnaryNot:
|
||||||
if ( ! params_code )
|
if ( ! params_code )
|
||||||
is_member_symbol = true;
|
is_member_symbol = true;
|
||||||
|
|
||||||
@ -301,14 +299,14 @@ OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeTy
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case LAnd:
|
case Op_LAnd:
|
||||||
case LOr:
|
case Op_LOr:
|
||||||
case LEqual:
|
case Op_LEqual:
|
||||||
case LNot:
|
case Op_LNot:
|
||||||
case Lesser:
|
case Op_Lesser:
|
||||||
case Greater:
|
case Op_Greater:
|
||||||
case LesserEqual:
|
case Op_LesserEqual:
|
||||||
case GreaterEqual:
|
case Op_GreaterEqual:
|
||||||
check_params();
|
check_params();
|
||||||
|
|
||||||
switch ( params_code->NumEntries )
|
switch ( params_code->NumEntries )
|
||||||
@ -329,9 +327,9 @@ OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeTy
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Indirection:
|
case Op_Indirection:
|
||||||
case AddressOf:
|
case Op_AddressOf:
|
||||||
case MemberOfPointer:
|
case Op_MemberOfPointer:
|
||||||
if ( params_code && params_code->NumEntries > 1)
|
if ( params_code && params_code->NumEntries > 1)
|
||||||
{
|
{
|
||||||
log_failure("gen::def_operator: operator%s recieved unexpected number of paramters recived %d instead of 0-1"
|
log_failure("gen::def_operator: operator%s recieved unexpected number of paramters recived %d instead of 0-1"
|
||||||
@ -346,7 +344,7 @@ OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeTy
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case PtrToMemOfPtr:
|
case Op_PtrToMemOfPtr:
|
||||||
if ( params_code )
|
if ( params_code )
|
||||||
{
|
{
|
||||||
log_failure("gen::def_operator: operator%s expects no paramters - %s", to_str(op), debug_str(params_code));
|
log_failure("gen::def_operator: operator%s expects no paramters - %s", to_str(op), debug_str(params_code));
|
||||||
@ -354,14 +352,14 @@ OpValidateResult operator__validate( OperatorT op, CodeParam params_code, CodeTy
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Subscript:
|
case Op_Subscript:
|
||||||
case FunctionCall:
|
case Op_FunctionCall:
|
||||||
case Comma:
|
case Op_Comma:
|
||||||
check_params();
|
check_params();
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case New:
|
case Op_New:
|
||||||
case Delete:
|
case Op_Delete:
|
||||||
// This library doesn't support validating new and delete yet.
|
// This library doesn't support validating new and delete yet.
|
||||||
break;
|
break;
|
||||||
# undef specs
|
# undef specs
|
||||||
@ -956,7 +954,7 @@ CodeNS def_namespace( StrC name, Code body, Opts_def_namespace p )
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeOperator def_operator( OperatorT op, StrC nspace, Opts_def_operator p )
|
CodeOperator def_operator( Operator op, StrC nspace, Opts_def_operator p )
|
||||||
{
|
{
|
||||||
CodeParam params_code = p.params;
|
CodeParam params_code = p.params;
|
||||||
CodeType ret_type = p.ret_type;
|
CodeType ret_type = p.ret_type;
|
||||||
|
@ -2135,7 +2135,6 @@ CodeOperator parse_operator_after_ret_type(
|
|||||||
, CodeType ret_type
|
, CodeType ret_type
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
using namespace EOperator;
|
|
||||||
push_scope();
|
push_scope();
|
||||||
|
|
||||||
Token nspace = NullToken;
|
Token nspace = NullToken;
|
||||||
@ -2171,19 +2170,19 @@ CodeOperator parse_operator_after_ret_type(
|
|||||||
|
|
||||||
bool was_new_or_delete = false;
|
bool was_new_or_delete = false;
|
||||||
|
|
||||||
OperatorT op = Invalid;
|
Operator op = Op_Invalid;
|
||||||
switch ( currtok.Text[0] )
|
switch ( currtok.Text[0] )
|
||||||
{
|
{
|
||||||
case '+':
|
case '+':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == '=' )
|
if ( currtok.Text[1] == '=' )
|
||||||
op = Assign_Add;
|
op = Op_Assign_Add;
|
||||||
|
|
||||||
else if ( currtok.Text[1] == '+' )
|
else if ( currtok.Text[1] == '+' )
|
||||||
op = Increment;
|
op = Op_Increment;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = Add;
|
op = Op_Add;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '-':
|
case '-':
|
||||||
@ -2191,25 +2190,25 @@ CodeOperator parse_operator_after_ret_type(
|
|||||||
if ( currtok.Text[1] == '>' )
|
if ( currtok.Text[1] == '>' )
|
||||||
{
|
{
|
||||||
if ( currtok.Text[2] == '*' )
|
if ( currtok.Text[2] == '*' )
|
||||||
op = MemberOfPointer;
|
op = Op_MemberOfPointer;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = MemberOfPointer;
|
op = Op_MemberOfPointer;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if ( currtok.Text[1] == '=' )
|
else if ( currtok.Text[1] == '=' )
|
||||||
op = Assign_Subtract;
|
op = Op_Assign_Subtract;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = Subtract;
|
op = Op_Subtract;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '*':
|
case '*':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == '=' )
|
if ( currtok.Text[1] == '=' )
|
||||||
op = Assign_Multiply;
|
op = Op_Assign_Multiply;
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -2218,154 +2217,154 @@ CodeOperator parse_operator_after_ret_type(
|
|||||||
{
|
{
|
||||||
if ( finder.Type == Tok_Identifier)
|
if ( finder.Type == Tok_Identifier)
|
||||||
{
|
{
|
||||||
op = Indirection;
|
op = Op_Indirection;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( op == Invalid)
|
if ( op == Op_Invalid)
|
||||||
op = Multiply;
|
op = Op_Multiply;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '/':
|
case '/':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == '=' )
|
if ( currtok.Text[1] == '=' )
|
||||||
op = Assign_Divide;
|
op = Op_Assign_Divide;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = Divide;
|
op = Op_Divide;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '%':
|
case '%':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == '=' )
|
if ( currtok.Text[1] == '=' )
|
||||||
op = Assign_Modulo;
|
op = Op_Assign_Modulo;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = Modulo;
|
op = Op_Modulo;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '&':
|
case '&':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == '=' )
|
if ( currtok.Text[1] == '=' )
|
||||||
op = Assign_BAnd;
|
op = Op_Assign_BAnd;
|
||||||
|
|
||||||
else if ( currtok.Text[1] == '&' )
|
else if ( currtok.Text[1] == '&' )
|
||||||
op = LAnd;
|
op = Op_LAnd;
|
||||||
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
if ( op == Invalid )
|
if ( op == Op_Invalid )
|
||||||
op = BAnd;
|
op = Op_BAnd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '|':
|
case '|':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == '=' )
|
if ( currtok.Text[1] == '=' )
|
||||||
op = Assign_BOr;
|
op = Op_Assign_BOr;
|
||||||
|
|
||||||
else if ( currtok.Text[1] == '|' )
|
else if ( currtok.Text[1] == '|' )
|
||||||
op = LOr;
|
op = Op_LOr;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = BOr;
|
op = Op_BOr;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '^':
|
case '^':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == '=' )
|
if ( currtok.Text[1] == '=' )
|
||||||
op = Assign_BXOr;
|
op = Op_Assign_BXOr;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = BXOr;
|
op = Op_BXOr;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '~':
|
case '~':
|
||||||
{
|
{
|
||||||
op = BNot;
|
op = Op_BNot;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '!':
|
case '!':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == '=' )
|
if ( currtok.Text[1] == '=' )
|
||||||
op = LNot;
|
op = Op_LNot;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = UnaryNot;
|
op = Op_UnaryNot;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '=':
|
case '=':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == '=' )
|
if ( currtok.Text[1] == '=' )
|
||||||
op = LEqual;
|
op = Op_LEqual;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = Assign;
|
op = Op_Assign;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '<':
|
case '<':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == '=' )
|
if ( currtok.Text[1] == '=' )
|
||||||
op = LEqual;
|
op = Op_LEqual;
|
||||||
|
|
||||||
else if ( currtok.Text[1] == '<' )
|
else if ( currtok.Text[1] == '<' )
|
||||||
{
|
{
|
||||||
if ( currtok.Text[2] == '=' )
|
if ( currtok.Text[2] == '=' )
|
||||||
op = Assign_LShift;
|
op = Op_Assign_LShift;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = LShift;
|
op = Op_LShift;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
op = Lesser;
|
op = Op_Lesser;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '>':
|
case '>':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == '=' )
|
if ( currtok.Text[1] == '=' )
|
||||||
op = GreaterEqual;
|
op = Op_GreaterEqual;
|
||||||
|
|
||||||
else if ( currtok.Text[1] == '>' )
|
else if ( currtok.Text[1] == '>' )
|
||||||
{
|
{
|
||||||
if ( currtok.Text[2] == '=' )
|
if ( currtok.Text[2] == '=' )
|
||||||
op = Assign_RShift;
|
op = Op_Assign_RShift;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = RShift;
|
op = Op_RShift;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
op = Greater;
|
op = Op_Greater;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '(':
|
case '(':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == ')' )
|
if ( currtok.Text[1] == ')' )
|
||||||
op = FunctionCall;
|
op = Op_FunctionCall;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = Invalid;
|
op = Op_Invalid;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case '[':
|
case '[':
|
||||||
{
|
{
|
||||||
if ( currtok.Text[1] == ']' )
|
if ( currtok.Text[1] == ']' )
|
||||||
op = Subscript;
|
op = Op_Subscript;
|
||||||
|
|
||||||
else
|
else
|
||||||
op = Invalid;
|
op = Op_Invalid;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
StrC str_new = to_str(OperatorT::New);
|
StrC str_new = to_str(Op_New);
|
||||||
StrC str_delete = to_str(OperatorT::Delete);
|
StrC str_delete = to_str(Op_Delete);
|
||||||
if ( str_compare( currtok.Text, str_new.Ptr, max(str_new.Len - 1, currtok.Length)) == 0)
|
if ( str_compare( currtok.Text, str_new.Ptr, max(str_new.Len - 1, currtok.Length)) == 0)
|
||||||
{
|
{
|
||||||
op = OperatorT::New;
|
op = Op_New;
|
||||||
eat( Tok_Identifier );
|
eat( Tok_Identifier );
|
||||||
was_new_or_delete = true;
|
was_new_or_delete = true;
|
||||||
|
|
||||||
@ -2378,18 +2377,18 @@ CodeOperator parse_operator_after_ret_type(
|
|||||||
if ( currtok.Type == Tok_Operator && str_compare(currtok.Text, "[]", 2) == 0)
|
if ( currtok.Type == Tok_Operator && str_compare(currtok.Text, "[]", 2) == 0)
|
||||||
{
|
{
|
||||||
eat(Tok_Operator);
|
eat(Tok_Operator);
|
||||||
op = OperatorT::NewArray;
|
op = Op_NewArray;
|
||||||
}
|
}
|
||||||
else if ( currtok.Type == Tok_BraceSquare_Open && next.Type == Tok_BraceSquare_Close)
|
else if ( currtok.Type == Tok_BraceSquare_Open && next.Type == Tok_BraceSquare_Close)
|
||||||
{
|
{
|
||||||
eat(Tok_BraceSquare_Open);
|
eat(Tok_BraceSquare_Open);
|
||||||
eat(Tok_BraceSquare_Close);
|
eat(Tok_BraceSquare_Close);
|
||||||
op = OperatorT::NewArray;
|
op = Op_NewArray;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ( str_compare( currtok.Text, str_delete.Ptr, max(str_delete.Len - 1, currtok.Length )) == 0)
|
else if ( str_compare( currtok.Text, str_delete.Ptr, max(str_delete.Len - 1, currtok.Length )) == 0)
|
||||||
{
|
{
|
||||||
op = OperatorT::Delete;
|
op = Op_Delete;
|
||||||
eat(Tok_Identifier);
|
eat(Tok_Identifier);
|
||||||
was_new_or_delete = true;
|
was_new_or_delete = true;
|
||||||
|
|
||||||
@ -2402,18 +2401,18 @@ CodeOperator parse_operator_after_ret_type(
|
|||||||
if ( currtok.Type == Tok_Operator && str_compare(currtok.Text, "[]", 2) == 0)
|
if ( currtok.Type == Tok_Operator && str_compare(currtok.Text, "[]", 2) == 0)
|
||||||
{
|
{
|
||||||
eat(Tok_Operator);
|
eat(Tok_Operator);
|
||||||
op = OperatorT::DeleteArray;
|
op = Op_DeleteArray;
|
||||||
}
|
}
|
||||||
else if ( currtok.Type == Tok_BraceSquare_Open && next.Type == Tok_BraceSquare_Close)
|
else if ( currtok.Type == Tok_BraceSquare_Open && next.Type == Tok_BraceSquare_Close)
|
||||||
{
|
{
|
||||||
eat(Tok_BraceSquare_Open);
|
eat(Tok_BraceSquare_Open);
|
||||||
eat(Tok_BraceSquare_Close);
|
eat(Tok_BraceSquare_Close);
|
||||||
op = OperatorT::DeleteArray;
|
op = Op_DeleteArray;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( op == Invalid )
|
if ( op == Op_Invalid )
|
||||||
{
|
{
|
||||||
log_failure( "Invalid operator '%s'\n%s", prevtok.Text, to_string(Context) );
|
log_failure( "Invalid operator '%s'\n%s", prevtok.Text, to_string(Context) );
|
||||||
pop(& Context);
|
pop(& Context);
|
||||||
@ -2423,7 +2422,7 @@ CodeOperator parse_operator_after_ret_type(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( op == Invalid )
|
if ( op == Op_Invalid )
|
||||||
{
|
{
|
||||||
log_failure( "Invalid operator '%s'\n%s", currtok.Text, to_string(Context) );
|
log_failure( "Invalid operator '%s'\n%s", currtok.Text, to_string(Context) );
|
||||||
pop(& Context);
|
pop(& Context);
|
||||||
@ -2438,8 +2437,8 @@ CodeOperator parse_operator_after_ret_type(
|
|||||||
CodeParam params = parse_params();
|
CodeParam params = parse_params();
|
||||||
// <ExportFlag> <Attributes> <Specifiers> <ReturnType> <Qualifier::...> operator <Op> ( <Parameters> )
|
// <ExportFlag> <Attributes> <Specifiers> <ReturnType> <Qualifier::...> operator <Op> ( <Parameters> )
|
||||||
|
|
||||||
if ( params.ast == nullptr && op == EOperator::Multiply )
|
if ( params.ast == nullptr && op == Op_Multiply )
|
||||||
op = MemberOfPointer;
|
op = Op_MemberOfPointer;
|
||||||
|
|
||||||
while ( left && is_specifier(currtok) )
|
while ( left && is_specifier(currtok) )
|
||||||
{
|
{
|
||||||
|
@ -76,12 +76,12 @@ CodeBody gen_eoperator( char const* path )
|
|||||||
char const* enum_str = enum_strs[idx].string;
|
char const* enum_str = enum_strs[idx].string;
|
||||||
char const* entry_to_str = str_strs [idx].string;
|
char const* entry_to_str = str_strs [idx].string;
|
||||||
|
|
||||||
append_fmt( & enum_entries, "%s,\n", enum_str );
|
append_fmt( & enum_entries, "Op_%s,\n", enum_str );
|
||||||
append_fmt( & to_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str);
|
append_fmt( & to_str_entries, "{ sizeof(\"%s\"), \"%s\" },\n", entry_to_str, entry_to_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeEnum enum_code = parse_enum(token_fmt("entries", (StrC)enum_entries, stringize(
|
CodeEnum enum_code = parse_enum(token_fmt("entries", (StrC)enum_entries, stringize(
|
||||||
enum Type : u32
|
enum Operator_Def : u32
|
||||||
{
|
{
|
||||||
<entries>
|
<entries>
|
||||||
NumOps
|
NumOps
|
||||||
@ -92,7 +92,7 @@ CodeBody gen_eoperator( char const* path )
|
|||||||
#undef local_persist
|
#undef local_persist
|
||||||
CodeFn to_str = parse_function(token_fmt("entries", (StrC)to_str_entries, stringize(
|
CodeFn to_str = parse_function(token_fmt("entries", (StrC)to_str_entries, stringize(
|
||||||
inline
|
inline
|
||||||
StrC to_str( Type op )
|
StrC to_str( Operator op )
|
||||||
{
|
{
|
||||||
local_persist
|
local_persist
|
||||||
StrC lookup[] {
|
StrC lookup[] {
|
||||||
@ -104,11 +104,11 @@ CodeBody gen_eoperator( char const* path )
|
|||||||
)));
|
)));
|
||||||
#pragma pop_macro("local_persist")
|
#pragma pop_macro("local_persist")
|
||||||
|
|
||||||
CodeNS nspace = def_namespace( name(EOperator), def_namespace_body( args( enum_code, to_str ) ) );
|
//CodeNS nspace = def_namespace( name(EOperator), def_namespace_body( args( enum_code, to_str ) ) );
|
||||||
|
//CodeUsing operator_t = def_using( name(OperatorT), def_type( name(EOperator::Type) ) );
|
||||||
|
CodeTypedef operator_t = parse_typedef(code( typedef enum Operator_Def Operator; ));
|
||||||
|
|
||||||
CodeUsing operator_t = def_using( name(OperatorT), def_type( name(EOperator::Type) ) );
|
return def_global_body( args( operator_t, enum_code, to_str, fmt_newline ) );
|
||||||
|
|
||||||
return def_global_body( args( nspace, operator_t, fmt_newline ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CodeBody gen_especifier( char const* path )
|
CodeBody gen_especifier( char const* path )
|
||||||
|
Loading…
Reference in New Issue
Block a user