Replace Byte pointer with a generic pointer type
This commit is contained in:
@ -28,7 +28,7 @@ namespace elna::gcc
|
||||
elna_int_type_node = long_integer_type_node;
|
||||
elna_word_type_node = size_type_node;
|
||||
elna_char_type_node = unsigned_char_type_node;
|
||||
elna_byte_type_node = make_unsigned_type(8);
|
||||
elna_pointer_type_node = ptr_type_node;
|
||||
elna_float_type_node = double_type_node;
|
||||
|
||||
elna_bool_type_node = boolean_type_node;
|
||||
@ -70,7 +70,7 @@ namespace elna::gcc
|
||||
declare_builtin_type(symbol_table, "Word", elna_word_type_node);
|
||||
declare_builtin_type(symbol_table, "Char", elna_char_type_node);
|
||||
declare_builtin_type(symbol_table, "Bool", elna_bool_type_node);
|
||||
declare_builtin_type(symbol_table, "Byte", elna_byte_type_node);
|
||||
declare_builtin_type(symbol_table, "Pointer", elna_pointer_type_node);
|
||||
declare_builtin_type(symbol_table, "Float", elna_float_type_node);
|
||||
|
||||
tree string_declaration = declare_builtin_type(symbol_table, "String", elna_string_type_node);
|
||||
|
@ -59,9 +59,9 @@ namespace elna::gcc
|
||||
{
|
||||
return "Bool";
|
||||
}
|
||||
else if (unqualified_type == elna_byte_type_node)
|
||||
else if (unqualified_type == elna_pointer_type_node)
|
||||
{
|
||||
return "Byte";
|
||||
return "Pointer";
|
||||
}
|
||||
else if (unqualified_type == elna_float_type_node)
|
||||
{
|
||||
|
@ -138,22 +138,27 @@ namespace elna::gcc
|
||||
{
|
||||
tree pointer{ NULL_TREE };
|
||||
tree offset{ NULL_TREE };
|
||||
tree pointer_type{ NULL_TREE };
|
||||
|
||||
if (POINTER_TYPE_P(left_type) && is_integral_type(right_type))
|
||||
{
|
||||
pointer = left;
|
||||
offset = right;
|
||||
pointer_type = left_type;
|
||||
}
|
||||
else if (is_integral_type(left_type) && POINTER_TYPE_P(right_type))
|
||||
{
|
||||
pointer = right;
|
||||
offset = left;
|
||||
pointer_type = right_type;
|
||||
}
|
||||
else
|
||||
{
|
||||
return error_mark_node;
|
||||
}
|
||||
tree size_exp = fold_convert(TREE_TYPE(offset), size_in_bytes(TREE_TYPE(TREE_TYPE(pointer))));
|
||||
tree size_exp = pointer_type == elna_pointer_type_node
|
||||
? size_one_node
|
||||
: fold_convert(TREE_TYPE(offset), size_in_bytes(TREE_TYPE(TREE_TYPE(pointer))));
|
||||
|
||||
offset = fold_build2(MULT_EXPR, TREE_TYPE(offset), offset, size_exp);
|
||||
offset = fold_convert(sizetype, offset);
|
||||
|
Reference in New Issue
Block a user