mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-08 06:48:41 +00:00
const/volatile/unsigned/signed type operators
This commit is contained in:
@@ -2486,6 +2486,64 @@ e2_compile_from_expr(Arena *arena, E2_CompileState *state, E2_IRNode *resolve_re
|
||||
scratch_end(scratch);
|
||||
}break;
|
||||
|
||||
//- rjf: const type operator
|
||||
case E2_ExprKind_Const:
|
||||
{
|
||||
E2_TypeKey const_type_key = e2_type_key_cons(E2_TypeKind_Modifier, .flags = E2_TypeFlag_Const, .direct = lhs->type_key);
|
||||
finished_root = e2_irnode(arena);
|
||||
finished_root->type_key = const_type_key;
|
||||
}break;
|
||||
|
||||
//- rjf: volatile type operator
|
||||
case E2_ExprKind_Volatile:
|
||||
{
|
||||
E2_TypeKey volatile_type_key = e2_type_key_cons(E2_TypeKind_Modifier, .flags = E2_TypeFlag_Volatile, .direct = lhs->type_key);
|
||||
finished_root = e2_irnode(arena);
|
||||
finished_root->type_key = volatile_type_key;
|
||||
}break;
|
||||
|
||||
//- rjf: unsigned type operator
|
||||
case E2_ExprKind_Unsigned:
|
||||
{
|
||||
E2_TypeKey unsigned_type_key = lhs->type_key;
|
||||
E2_TypeKey int_type_key = e2_type_key_undecorate(lhs->type_key);
|
||||
E2_TypeKind int_type_kind = e2_type_kind_from_key(int_type_key);
|
||||
switch(int_type_kind)
|
||||
{
|
||||
default:{}break;
|
||||
case E2_TypeKind_S8: {unsigned_type_key = e2_type_key_basic(E2_TypeKind_U8);}break;
|
||||
case E2_TypeKind_S16: {unsigned_type_key = e2_type_key_basic(E2_TypeKind_U16);}break;
|
||||
case E2_TypeKind_S32: {unsigned_type_key = e2_type_key_basic(E2_TypeKind_U32);}break;
|
||||
case E2_TypeKind_S64: {unsigned_type_key = e2_type_key_basic(E2_TypeKind_U64);}break;
|
||||
case E2_TypeKind_S128:{unsigned_type_key = e2_type_key_basic(E2_TypeKind_U128);}break;
|
||||
case E2_TypeKind_S256:{unsigned_type_key = e2_type_key_basic(E2_TypeKind_U256);}break;
|
||||
case E2_TypeKind_S512:{unsigned_type_key = e2_type_key_basic(E2_TypeKind_U512);}break;
|
||||
}
|
||||
finished_root = e2_irnode(arena);
|
||||
finished_root->type_key = unsigned_type_key;
|
||||
}break;
|
||||
|
||||
//- rjf: signed type operator
|
||||
case E2_ExprKind_Signed:
|
||||
{
|
||||
E2_TypeKey signed_type_key = lhs->type_key;
|
||||
E2_TypeKey int_type_key = e2_type_key_undecorate(lhs->type_key);
|
||||
E2_TypeKind int_type_kind = e2_type_kind_from_key(int_type_key);
|
||||
switch(int_type_kind)
|
||||
{
|
||||
default:{}break;
|
||||
case E2_TypeKind_U8: {signed_type_key = e2_type_key_basic(E2_TypeKind_S8);}break;
|
||||
case E2_TypeKind_U16: {signed_type_key = e2_type_key_basic(E2_TypeKind_S16);}break;
|
||||
case E2_TypeKind_U32: {signed_type_key = e2_type_key_basic(E2_TypeKind_S32);}break;
|
||||
case E2_TypeKind_U64: {signed_type_key = e2_type_key_basic(E2_TypeKind_S64);}break;
|
||||
case E2_TypeKind_U128:{signed_type_key = e2_type_key_basic(E2_TypeKind_S128);}break;
|
||||
case E2_TypeKind_U256:{signed_type_key = e2_type_key_basic(E2_TypeKind_S256);}break;
|
||||
case E2_TypeKind_U512:{signed_type_key = e2_type_key_basic(E2_TypeKind_S512);}break;
|
||||
}
|
||||
finished_root = e2_irnode(arena);
|
||||
finished_root->type_key = signed_type_key;
|
||||
}break;
|
||||
|
||||
//- rjf: leaf numerics
|
||||
case E2_ExprKind_Numeric:
|
||||
{
|
||||
|
||||
@@ -147,11 +147,19 @@ struct E2_TypeKeyList
|
||||
////////////////////////////////
|
||||
//~ rjf: Constructed Type Cache Types
|
||||
|
||||
typedef U32 E2_TypeFlags;
|
||||
enum
|
||||
{
|
||||
E2_TypeFlag_Const = (1<<0),
|
||||
E2_TypeFlag_Volatile = (1<<1),
|
||||
};
|
||||
|
||||
typedef struct E2_ConsTypeParams E2_ConsTypeParams;
|
||||
struct E2_ConsTypeParams
|
||||
{
|
||||
Arch arch;
|
||||
E2_TypeKind kind;
|
||||
E2_TypeFlags flags;
|
||||
String8 name;
|
||||
E2_TypeKey direct;
|
||||
U64 count;
|
||||
|
||||
+55
-42
@@ -4,15 +4,24 @@
|
||||
@table(name allow_type_operands is_type_expression is_first_operand_type_maybe target_operand_count)
|
||||
E2_ExprKindTable:
|
||||
{
|
||||
//- rjf: leaves
|
||||
{Identifier 0 0 0 0 }
|
||||
{MacroArg 0 0 0 0 }
|
||||
{TypeIdentifier 0 1 0 0 }
|
||||
{Ptr 1 1 1 1 }
|
||||
{Array 1 1 1 2 }
|
||||
{Function 1 1 1 0xffffffffffffffffull}
|
||||
{Numeric 0 0 0 0 }
|
||||
{StringLiteral 0 0 0 0 }
|
||||
{CharLiteral 0 0 0 0 }
|
||||
|
||||
//- rjf: type operators
|
||||
{Ptr 1 1 1 1 }
|
||||
{Array 1 1 1 2 }
|
||||
{Function 1 1 1 0xffffffffffffffffull}
|
||||
{Const 1 1 1 1 }
|
||||
{Volatile 1 1 1 1 }
|
||||
{Unsigned 1 1 1 1 }
|
||||
{Signed 1 1 1 1 }
|
||||
|
||||
//- rjf: operators
|
||||
{Dot 1 0 0 1 }
|
||||
{Index 0 0 0 2 }
|
||||
{Call 0 0 0 0xffffffffffffffffull}
|
||||
@@ -117,45 +126,49 @@ E2_LangKindTable:
|
||||
@table(name parse_kind precedence pre sep pos chain reverse_children)
|
||||
E2_ExprKindParseInfoTable_CLike:
|
||||
{
|
||||
{Dot Postfix 1 "" "." "" "" 0}
|
||||
{Index Postfix 1 "" "[" "]" "" 0}
|
||||
{Call Postfix 1 "" "(" ")" "," 0}
|
||||
{Function Postfix 1 "" "(" ")" "," 0}
|
||||
{DerefAsm Prefix 1 "[" "" "]" "" 0}
|
||||
{SizeOf Prefix 1 "sizeof " "" "" "" 0}
|
||||
{TypeOf Prefix 1 "typeof " "" "" "" 0}
|
||||
{SizeOf Prefix 1 "size_of " "" "" "" 0}
|
||||
{TypeOf Prefix 1 "type_of " "" "" "" 0}
|
||||
{Cast Prefix 1 "" "" "" "" 0}
|
||||
{Deref Prefix 2 "*" "" "" "" 0}
|
||||
{Address Prefix 2 "&" "" "" "" 0}
|
||||
{Pos Prefix 2 "+" "" "" "" 0}
|
||||
{Neg Prefix 2 "-" "" "" "" 0}
|
||||
{LogNot Prefix 2 "!" "" "" "" 0}
|
||||
{BitNot Prefix 2 "~" "" "" "" 0}
|
||||
{Cast Prefix 1 "cast " "" "" "" 0}
|
||||
{Cast Postfix 1 "" "as" "" "" 1}
|
||||
{Ptr Postfix 1 "" "" "*" "" 0}
|
||||
{Array Postfix 1 "" "[" "]" "" 0}
|
||||
{Mul Postfix 3 "" "*" "" "" 0}
|
||||
{Div Postfix 3 "" "/" "" "" 0}
|
||||
{Mod Postfix 3 "" "%" "" "" 0}
|
||||
{Add Postfix 4 "" "+" "" "" 0}
|
||||
{Sub Postfix 4 "" "-" "" "" 0}
|
||||
{LShift Postfix 5 "" "<<" "" "" 0}
|
||||
{RShift Postfix 5 "" ">>" "" "" 0}
|
||||
{Less Postfix 6 "" "<" "" "" 0}
|
||||
{LtEq Postfix 6 "" "<=" "" "" 0}
|
||||
{Grtr Postfix 6 "" ">" "" "" 0}
|
||||
{GrEq Postfix 6 "" ">=" "" "" 0}
|
||||
{EqEq Postfix 7 "" "==" "" "" 0}
|
||||
{NtEq Postfix 7 "" "!=" "" "" 0}
|
||||
{BitAnd Postfix 8 "" "&" "" "" 0}
|
||||
{BitXor Postfix 9 "" "^" "" "" 0}
|
||||
{BitOr Postfix 10 "" "|" "" "" 0}
|
||||
{LogAnd Postfix 11 "" "&&" "" "" 0}
|
||||
{LogOr Postfix 12 "" "||" "" "" 0}
|
||||
{Cond Postfix 14 "" "?" "" ":" 0}
|
||||
{Dot Postfix 1 "" "." "" "" 0}
|
||||
{Index Postfix 1 "" "[" "]" "" 0}
|
||||
{Call Postfix 1 "" "(" ")" "," 0}
|
||||
{Function Postfix 1 "" "(" ")" "," 0}
|
||||
{DerefAsm Prefix 1 "[" "" "]" "" 0}
|
||||
{Unsigned Prefix 1 "unsigned " "" "" "" 0}
|
||||
{Signed Prefix 1 "signed " "" "" "" 0}
|
||||
{Volatile Prefix 1 "volatile " "" "" "" 0}
|
||||
{Const Prefix 1 "const " "" "" "" 0}
|
||||
{SizeOf Prefix 1 "sizeof " "" "" "" 0}
|
||||
{TypeOf Prefix 1 "typeof " "" "" "" 0}
|
||||
{SizeOf Prefix 1 "size_of " "" "" "" 0}
|
||||
{TypeOf Prefix 1 "type_of " "" "" "" 0}
|
||||
{Cast Prefix 1 "" "" "" "" 0}
|
||||
{Deref Prefix 2 "*" "" "" "" 0}
|
||||
{Address Prefix 2 "&" "" "" "" 0}
|
||||
{Pos Prefix 2 "+" "" "" "" 0}
|
||||
{Neg Prefix 2 "-" "" "" "" 0}
|
||||
{LogNot Prefix 2 "!" "" "" "" 0}
|
||||
{BitNot Prefix 2 "~" "" "" "" 0}
|
||||
{Cast Prefix 1 "cast " "" "" "" 0}
|
||||
{Cast Postfix 1 "" "as" "" "" 1}
|
||||
{Ptr Postfix 1 "" "" "*" "" 0}
|
||||
{Array Postfix 1 "" "[" "]" "" 0}
|
||||
{Mul Postfix 3 "" "*" "" "" 0}
|
||||
{Div Postfix 3 "" "/" "" "" 0}
|
||||
{Mod Postfix 3 "" "%" "" "" 0}
|
||||
{Add Postfix 4 "" "+" "" "" 0}
|
||||
{Sub Postfix 4 "" "-" "" "" 0}
|
||||
{LShift Postfix 5 "" "<<" "" "" 0}
|
||||
{RShift Postfix 5 "" ">>" "" "" 0}
|
||||
{Less Postfix 6 "" "<" "" "" 0}
|
||||
{LtEq Postfix 6 "" "<=" "" "" 0}
|
||||
{Grtr Postfix 6 "" ">" "" "" 0}
|
||||
{GrEq Postfix 6 "" ">=" "" "" 0}
|
||||
{EqEq Postfix 7 "" "==" "" "" 0}
|
||||
{NtEq Postfix 7 "" "!=" "" "" 0}
|
||||
{BitAnd Postfix 8 "" "&" "" "" 0}
|
||||
{BitXor Postfix 9 "" "^" "" "" 0}
|
||||
{BitOr Postfix 10 "" "|" "" "" 0}
|
||||
{LogAnd Postfix 11 "" "&&" "" "" 0}
|
||||
{LogOr Postfix 12 "" "||" "" "" 0}
|
||||
{Cond Postfix 14 "" "?" "" ":" 0}
|
||||
}
|
||||
|
||||
@data(E2_ExprKindParseInfo) e2_expr_kind_parse_info_table__clike:
|
||||
|
||||
@@ -4,19 +4,23 @@
|
||||
//- GENERATED CODE
|
||||
|
||||
C_LINKAGE_BEGIN
|
||||
B8 e2_expr_kind_allow_type_operands_table[44] =
|
||||
B8 e2_expr_kind_allow_type_operands_table[48] =
|
||||
{
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
@@ -52,18 +56,22 @@ B8 e2_expr_kind_allow_type_operands_table[44] =
|
||||
1,
|
||||
};
|
||||
|
||||
B8 e2_expr_kind_is_type_expr_table[44] =
|
||||
B8 e2_expr_kind_is_type_expr_table[48] =
|
||||
{
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
@@ -100,18 +108,22 @@ B8 e2_expr_kind_is_type_expr_table[44] =
|
||||
0,
|
||||
};
|
||||
|
||||
B8 e2_expr_kind_is_first_operand_type_maybe_table[44] =
|
||||
B8 e2_expr_kind_is_first_operand_type_maybe_table[48] =
|
||||
{
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
@@ -148,18 +160,22 @@ B8 e2_expr_kind_is_first_operand_type_maybe_table[44] =
|
||||
0,
|
||||
};
|
||||
|
||||
U64 e2_expr_kind_target_operand_count_table[44] =
|
||||
U64 e2_expr_kind_target_operand_count_table[48] =
|
||||
{
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
0xffffffffffffffffull,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
1,
|
||||
2,
|
||||
0xffffffffffffffffull,
|
||||
@@ -201,13 +217,17 @@ E2_LangInfo e2_lang_kind_info_table[1] =
|
||||
{ArrayCount(e2_expr_kind_parse_info_table__clike), (e2_expr_kind_parse_info_table__clike)},
|
||||
};
|
||||
|
||||
E2_ExprKindParseInfo e2_expr_kind_parse_info_table__clike[39] =
|
||||
E2_ExprKindParseInfo e2_expr_kind_parse_info_table__clike[43] =
|
||||
{
|
||||
{E2_ExprKind_Dot, E2_ExprParseKind_Postfix, 1, 0, str8_lit_comp(""), str8_lit_comp("."), str8_lit_comp(""), str8_lit_comp("")},
|
||||
{E2_ExprKind_Index, E2_ExprParseKind_Postfix, 1, 0, str8_lit_comp(""), str8_lit_comp("["), str8_lit_comp("]"), str8_lit_comp("")},
|
||||
{E2_ExprKind_Call, E2_ExprParseKind_Postfix, 1, 0, str8_lit_comp(""), str8_lit_comp("("), str8_lit_comp(")"), str8_lit_comp(",")},
|
||||
{E2_ExprKind_Function, E2_ExprParseKind_Postfix, 1, 0, str8_lit_comp(""), str8_lit_comp("("), str8_lit_comp(")"), str8_lit_comp(",")},
|
||||
{E2_ExprKind_DerefAsm, E2_ExprParseKind_Prefix, 1, 0, str8_lit_comp("["), str8_lit_comp(""), str8_lit_comp("]"), str8_lit_comp("")},
|
||||
{E2_ExprKind_Unsigned, E2_ExprParseKind_Prefix, 1, 0, str8_lit_comp("unsigned "), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("")},
|
||||
{E2_ExprKind_Signed, E2_ExprParseKind_Prefix, 1, 0, str8_lit_comp("signed "), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("")},
|
||||
{E2_ExprKind_Volatile, E2_ExprParseKind_Prefix, 1, 0, str8_lit_comp("volatile "), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("")},
|
||||
{E2_ExprKind_Const, E2_ExprParseKind_Prefix, 1, 0, str8_lit_comp("const "), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("")},
|
||||
{E2_ExprKind_SizeOf, E2_ExprParseKind_Prefix, 1, 0, str8_lit_comp("sizeof "), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("")},
|
||||
{E2_ExprKind_TypeOf, E2_ExprParseKind_Prefix, 1, 0, str8_lit_comp("typeof "), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("")},
|
||||
{E2_ExprKind_SizeOf, E2_ExprParseKind_Prefix, 1, 0, str8_lit_comp("size_of "), str8_lit_comp(""), str8_lit_comp(""), str8_lit_comp("")},
|
||||
|
||||
@@ -12,12 +12,16 @@ E2_ExprKind_Null,
|
||||
E2_ExprKind_Identifier,
|
||||
E2_ExprKind_MacroArg,
|
||||
E2_ExprKind_TypeIdentifier,
|
||||
E2_ExprKind_Ptr,
|
||||
E2_ExprKind_Array,
|
||||
E2_ExprKind_Function,
|
||||
E2_ExprKind_Numeric,
|
||||
E2_ExprKind_StringLiteral,
|
||||
E2_ExprKind_CharLiteral,
|
||||
E2_ExprKind_Ptr,
|
||||
E2_ExprKind_Array,
|
||||
E2_ExprKind_Function,
|
||||
E2_ExprKind_Const,
|
||||
E2_ExprKind_Volatile,
|
||||
E2_ExprKind_Unsigned,
|
||||
E2_ExprKind_Signed,
|
||||
E2_ExprKind_Dot,
|
||||
E2_ExprKind_Index,
|
||||
E2_ExprKind_Call,
|
||||
@@ -159,12 +163,12 @@ E2_ExprKindParseInfo *expr_kind_parse_infos;
|
||||
};
|
||||
|
||||
C_LINKAGE_BEGIN
|
||||
extern B8 e2_expr_kind_allow_type_operands_table[44];
|
||||
extern B8 e2_expr_kind_is_type_expr_table[44];
|
||||
extern B8 e2_expr_kind_is_first_operand_type_maybe_table[44];
|
||||
extern U64 e2_expr_kind_target_operand_count_table[44];
|
||||
extern B8 e2_expr_kind_allow_type_operands_table[48];
|
||||
extern B8 e2_expr_kind_is_type_expr_table[48];
|
||||
extern B8 e2_expr_kind_is_first_operand_type_maybe_table[48];
|
||||
extern U64 e2_expr_kind_target_operand_count_table[48];
|
||||
extern E2_LangInfo e2_lang_kind_info_table[1];
|
||||
extern E2_ExprKindParseInfo e2_expr_kind_parse_info_table__clike[39];
|
||||
extern E2_ExprKindParseInfo e2_expr_kind_parse_info_table__clike[43];
|
||||
extern U8 e2_type_kind_basic_byte_size_table[61];
|
||||
extern String8 e2_type_kind_basic_string_table[61];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user