aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/rust-backend.h
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2021-08-02 09:13:20 +0000
committerGitHub <noreply@github.com>2021-08-02 09:13:20 +0000
commitb56c6fdfaad9ca1681714d288d1282cf08554462 (patch)
treed815a7d24660b24da5fcf7d05b5f2b3e8de99ae1 /gcc/rust/rust-backend.h
parent06a65591eb09fbec25e4ee38c1cf751b416af5bf (diff)
parent389fd74a3f3e9422a965263b6961b51295c55976 (diff)
downloadgcc-b56c6fdfaad9ca1681714d288d1282cf08554462.zip
gcc-b56c6fdfaad9ca1681714d288d1282cf08554462.tar.gz
gcc-b56c6fdfaad9ca1681714d288d1282cf08554462.tar.bz2
Merge #601
601: union support for hir type checking and gcc backend r=dkm a=dkm From Mark Wielaard : https://gcc.gnu.org/pipermail/gcc-rust/2021-August/000107.html > > Treat a union as a Struct variant like a tuple struct. Add an > iterator and get_identifier functions to the AST Union class. Same > for the HIR Union class, plus a get_generics_params method. Add a new > ADTKind enum and adt_kind field to the ADTType to select the > underlying abstract data type (struct struct, tuple struct or union, > with enum as possible future variant). > > An union constructor can have only one field. Add an union_index field > to StructExprStruct which is set during type checking in the > TypeCheckStructExpr HIR StructExprStructFields visitor. > > For the Gcc_backend class rename fill_in_struct to fill_in_fields and > use it from a new union_type method. Handle union_index in > constructor_expression (so only one field is initialized). Fixes #157 Co-authored-by: Mark Wielaard <mark@klomp.org>
Diffstat (limited to 'gcc/rust/rust-backend.h')
-rw-r--r--gcc/rust/rust-backend.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/rust/rust-backend.h b/gcc/rust/rust-backend.h
index be23fd3..4635796 100644
--- a/gcc/rust/rust-backend.h
+++ b/gcc/rust/rust-backend.h
@@ -178,6 +178,9 @@ public:
// Get a struct type.
virtual Btype *struct_type (const std::vector<Btyped_identifier> &fields) = 0;
+ // Get a union type.
+ virtual Btype *union_type (const std::vector<Btyped_identifier> &fields) = 0;
+
// Get an array type.
virtual Btype *array_type (Btype *element_type, Bexpression *length) = 0;
@@ -424,7 +427,7 @@ public:
// corresponding fields in BTYPE.
virtual Bexpression *
constructor_expression (Btype *btype, const std::vector<Bexpression *> &vals,
- Location)
+ int, Location)
= 0;
// Return an expression that constructs an array of BTYPE with INDEXES and