aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend/rust-compile-pattern.h
diff options
context:
space:
mode:
authorOwen Avery <powerboat9.gamer@gmail.com>2023-01-27 11:47:30 -0500
committerOwen Avery <powerboat9.gamer@gmail.com>2023-01-30 15:18:15 -0500
commita731476b50301c0f551ec7964d08e669a2b13e66 (patch)
tree131d1a073723e60be8c01be2a017338cc4fc04fd /gcc/rust/backend/rust-compile-pattern.h
parent026e20b1dcc4765f17d593031fe8c1114e4bfaa5 (diff)
downloadgcc-a731476b50301c0f551ec7964d08e669a2b13e66.zip
gcc-a731476b50301c0f551ec7964d08e669a2b13e66.tar.gz
gcc-a731476b50301c0f551ec7964d08e669a2b13e66.tar.bz2
Create and use CompilePatternLet visitor for compiling let statments
Signed-off-by: Owen Avery <powerboat9.gamer@gmail.com>
Diffstat (limited to 'gcc/rust/backend/rust-compile-pattern.h')
-rw-r--r--gcc/rust/backend/rust-compile-pattern.h87
1 files changed, 87 insertions, 0 deletions
diff --git a/gcc/rust/backend/rust-compile-pattern.h b/gcc/rust/backend/rust-compile-pattern.h
index 19d1e4b..5272137 100644
--- a/gcc/rust/backend/rust-compile-pattern.h
+++ b/gcc/rust/backend/rust-compile-pattern.h
@@ -91,5 +91,92 @@ protected:
tree match_scrutinee_expr;
};
+class CompilePatternLet : public HIRCompileBase, public HIR::HIRPatternVisitor
+{
+public:
+ static void Compile (HIR::Pattern *pattern, tree init_expr,
+ TyTy::BaseType *ty, Location rval_locus, Context *ctx)
+ {
+ CompilePatternLet compiler (ctx, init_expr, ty, rval_locus);
+ pattern->accept_vis (compiler);
+ }
+
+ void visit (HIR::IdentifierPattern &) override;
+ void visit (HIR::WildcardPattern &) override;
+
+ // check for unimplemented Pattern HIR nodes.
+ void visit (HIR::GroupedPattern &pattern) override
+ {
+ rust_sorry_at (pattern.get_locus (),
+ "grouped pattern let statements not supported");
+ }
+
+ void visit (HIR::LiteralPattern &pattern) override
+ {
+ rust_sorry_at (pattern.get_locus (),
+ "literal pattern let statements not supported");
+ }
+
+ void visit (HIR::PathInExpression &pattern) override
+ {
+ rust_sorry_at (pattern.get_locus (),
+ "path-in-expression pattern let statements not supported");
+ }
+
+ void visit (HIR::QualifiedPathInExpression &pattern) override
+ {
+ rust_sorry_at (
+ pattern.get_locus (),
+ "qualified-path-in-expression pattern let statements not supported");
+ }
+
+ void visit (HIR::RangePattern &pattern) override
+ {
+ rust_sorry_at (pattern.get_locus (),
+ "range pattern let statements not supported");
+ }
+
+ void visit (HIR::ReferencePattern &pattern) override
+ {
+ rust_sorry_at (pattern.get_locus (),
+ "reference pattern let statements not supported");
+ }
+
+ void visit (HIR::SlicePattern &pattern) override
+ {
+ rust_sorry_at (pattern.get_locus (),
+ "slice pattern let statements not supported");
+ }
+
+ void visit (HIR::StructPattern &pattern) override
+ {
+ rust_sorry_at (pattern.get_locus (),
+ "struct pattern let statements not supported");
+ }
+
+ void visit (HIR::TuplePattern &pattern) override
+ {
+ rust_sorry_at (pattern.get_locus (),
+ "tuple pattern let statements not supported");
+ }
+
+ void visit (HIR::TupleStructPattern &pattern) override
+ {
+ rust_sorry_at (pattern.get_locus (),
+ "tuple-struct pattern let statements not supported");
+ }
+
+protected:
+ CompilePatternLet (Context *ctx, tree init_expr, TyTy::BaseType *ty,
+ Location rval_locus)
+ : HIRCompileBase (ctx), init_expr (init_expr), ty (ty),
+ rval_locus (rval_locus)
+ {}
+
+ tree init_expr;
+ TyTy::BaseType *ty;
+ Location rval_locus;
+};
+
} // namespace Compile
} // namespace Rust