aboutsummaryrefslogtreecommitdiff
path: root/gcc/rust/backend/rust-compile-expr.h
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/rust/backend/rust-compile-expr.h')
-rw-r--r--gcc/rust/backend/rust-compile-expr.h96
1 files changed, 45 insertions, 51 deletions
diff --git a/gcc/rust/backend/rust-compile-expr.h b/gcc/rust/backend/rust-compile-expr.h
index d2f79ec..2f6395c 100644
--- a/gcc/rust/backend/rust-compile-expr.h
+++ b/gcc/rust/backend/rust-compile-expr.h
@@ -33,7 +33,7 @@ class CompileExpr : public HIRCompileBase
using Rust::Compile::HIRCompileBase::visit;
public:
- static Bexpression *Compile (HIR::Expr *expr, Context *ctx)
+ static tree Compile (HIR::Expr *expr, Context *ctx)
{
CompileExpr compiler (ctx);
expr->accept_vis (compiler);
@@ -45,7 +45,7 @@ public:
HIR::Expr *tuple_expr = expr.get_tuple_expr ().get ();
TupleIndex index = expr.get_tuple_index ();
- Bexpression *receiver_ref = CompileExpr::Compile (tuple_expr, ctx);
+ tree receiver_ref = CompileExpr::Compile (tuple_expr, ctx);
TyTy::BaseType *tuple_expr_ty = nullptr;
bool ok = ctx->get_tyctx ()->lookup_type (
@@ -60,7 +60,7 @@ public:
TyTy::BaseType *tuple_type = r->get_base ();
tree tuple_tyty = TyTyResolveCompile::compile (ctx, tuple_type);
- Bexpression *indirect
+ tree indirect
= ctx->get_backend ()->indirect_expression (tuple_tyty, receiver_ref,
true, expr.get_locus ());
receiver_ref = indirect;
@@ -92,7 +92,7 @@ public:
rust_assert (tuple_type != nullptr);
// this assumes all fields are in order from type resolution
- std::vector<Bexpression *> vals;
+ std::vector<tree> vals;
for (auto &elem : expr.get_tuple_elems ())
{
auto e = CompileExpr::Compile (elem.get (), ctx);
@@ -108,10 +108,10 @@ public:
{
auto fncontext = ctx->peek_fn ();
- std::vector<Bexpression *> retstmts;
+ std::vector<tree> retstmts;
if (expr.has_return_expr ())
{
- Bexpression *compiled_expr
+ tree compiled_expr
= CompileExpr::Compile (expr.return_expr.get (), ctx);
rust_assert (compiled_expr != nullptr);
@@ -330,21 +330,19 @@ public:
auto array_tyty = static_cast<TyTy::ArrayType *> (base_tyty);
std::string value_str = expr.get_literal ()->as_string ();
- std::vector<Bexpression *> vals;
+ std::vector<tree> vals;
std::vector<unsigned long> indexes;
for (size_t i = 0; i < value_str.size (); i++)
{
char b = value_str.at (i);
- Bexpression *bb
- = ctx->get_backend ()->char_constant_expression (b);
+ tree bb = ctx->get_backend ()->char_constant_expression (b);
vals.push_back (bb);
indexes.push_back (i);
}
tree array_type = TyTyResolveCompile::compile (ctx, array_tyty);
- Bexpression *constructed
- = ctx->get_backend ()->array_constructor_expression (
- array_type, indexes, vals, expr.get_locus ());
+ tree constructed = ctx->get_backend ()->array_constructor_expression (
+ array_type, indexes, vals, expr.get_locus ());
translated
= ctx->get_backend ()->address_expression (constructed,
@@ -392,8 +390,8 @@ public:
void visit (HIR::ArrayIndexExpr &expr) override
{
- Bexpression *array = CompileExpr::Compile (expr.get_array_expr (), ctx);
- Bexpression *index = CompileExpr::Compile (expr.get_index_expr (), ctx);
+ tree array = CompileExpr::Compile (expr.get_array_expr (), ctx);
+ tree index = CompileExpr::Compile (expr.get_index_expr (), ctx);
translated
= ctx->get_backend ()->array_index_expression (array, index,
expr.get_locus ());
@@ -432,14 +430,14 @@ public:
{
for (auto &elem : elems.get_values ())
{
- Bexpression *translated_expr = CompileExpr::Compile (elem.get (), ctx);
+ tree translated_expr = CompileExpr::Compile (elem.get (), ctx);
constructor.push_back (translated_expr);
}
}
void visit (HIR::ArrayElemsCopied &elems) override
{
- Bexpression *translated_expr
+ tree translated_expr
= CompileExpr::Compile (elems.get_elem_to_copy (), ctx);
size_t capacity;
@@ -645,10 +643,10 @@ public:
// this assumes all fields are in order from type resolution and if a base
// struct was specified those fields are filed via accesors
- std::vector<Bexpression *> vals;
+ std::vector<tree> vals;
for (auto &field : struct_expr.get_fields ())
{
- Bexpression *expr = CompileStructExprField::Compile (field.get (), ctx);
+ tree expr = CompileStructExprField::Compile (field.get (), ctx);
vals.push_back (expr);
}
@@ -665,7 +663,7 @@ public:
void visit (HIR::FieldAccessExpr &expr) override
{
- Bexpression *receiver_ref
+ tree receiver_ref
= CompileExpr::Compile (expr.get_receiver_expr ().get (), ctx);
// resolve the receiver back to ADT type
@@ -706,7 +704,7 @@ public:
rust_assert (ok);
tree adt_tyty = TyTyResolveCompile::compile (ctx, adt);
- Bexpression *indirect
+ tree indirect
= ctx->get_backend ()->indirect_expression (adt_tyty, receiver_ref,
true, expr.get_locus ());
receiver_ref = indirect;
@@ -777,7 +775,7 @@ public:
Bblock *code_block
= CompileBlock::compile (expr.get_loop_block ().get (), ctx, nullptr);
- Bexpression *loop_expr
+ tree loop_expr
= ctx->get_backend ()->loop_expression (code_block, expr.get_locus ());
Bstatement *loop_stmt
= ctx->get_backend ()->expression_statement (fnctx.fndecl, loop_expr);
@@ -826,9 +824,9 @@ public:
ctx->add_statement (loop_begin_label_decl);
ctx->push_loop_begin_label (loop_begin_label);
- Bexpression *condition
+ tree condition
= CompileExpr::Compile (expr.get_predicate_expr ().get (), ctx);
- Bexpression *exit_expr
+ tree exit_expr
= ctx->get_backend ()->exit_expression (condition, expr.get_locus ());
Bstatement *break_stmt
= ctx->get_backend ()->expression_statement (fnctx.fndecl, exit_expr);
@@ -843,7 +841,7 @@ public:
ctx->pop_loop_begin_label ();
ctx->pop_block ();
- Bexpression *loop_expr
+ tree loop_expr
= ctx->get_backend ()->loop_expression (loop_block, expr.get_locus ());
Bstatement *loop_stmt
= ctx->get_backend ()->expression_statement (fnctx.fndecl, loop_expr);
@@ -855,11 +853,11 @@ public:
fncontext fnctx = ctx->peek_fn ();
if (expr.has_break_expr ())
{
- Bexpression *compiled_expr
+ tree compiled_expr
= CompileExpr::Compile (expr.get_expr ().get (), ctx);
Bvariable *loop_result_holder = ctx->peek_loop_context ();
- Bexpression *result_reference = ctx->get_backend ()->var_expression (
+ tree result_reference = ctx->get_backend ()->var_expression (
loop_result_holder, expr.get_expr ()->get_locus ());
Bstatement *assignment = ctx->get_backend ()->assignment_statement (
@@ -904,7 +902,7 @@ public:
}
else
{
- Bexpression *exit_expr = ctx->get_backend ()->exit_expression (
+ tree exit_expr = ctx->get_backend ()->exit_expression (
ctx->get_backend ()->boolean_constant_expression (true),
expr.get_locus ());
Bstatement *break_stmt
@@ -954,8 +952,7 @@ public:
void visit (HIR::BorrowExpr &expr) override
{
- Bexpression *main_expr
- = CompileExpr::Compile (expr.get_expr ().get (), ctx);
+ tree main_expr = CompileExpr::Compile (expr.get_expr ().get (), ctx);
translated
= ctx->get_backend ()->address_expression (main_expr, expr.get_locus ());
@@ -963,8 +960,7 @@ public:
void visit (HIR::DereferenceExpr &expr) override
{
- Bexpression *main_expr
- = CompileExpr::Compile (expr.get_expr ().get (), ctx);
+ tree main_expr = CompileExpr::Compile (expr.get_expr ().get (), ctx);
TyTy::BaseType *tyty = nullptr;
if (!ctx->get_tyctx ()->lookup_type (expr.get_mappings ().get_hirid (),
@@ -984,33 +980,31 @@ public:
}
protected:
- Bexpression *compile_dyn_dispatch_call (const TyTy::DynamicObjectType *dyn,
- TyTy::BaseType *receiver,
- TyTy::FnType *fntype,
- Bexpression *receiver_ref,
- std::vector<HIR::Expr *> &arguments,
- Location expr_locus);
-
- Bexpression *resolve_method_address (TyTy::FnType *fntype, HirId ref,
- TyTy::BaseType *receiver,
- HIR::PathIdentSegment &segment,
- Analysis::NodeMapping expr_mappings,
- Location expr_locus);
-
- Bexpression *
+ tree compile_dyn_dispatch_call (const TyTy::DynamicObjectType *dyn,
+ TyTy::BaseType *receiver,
+ TyTy::FnType *fntype, tree receiver_ref,
+ std::vector<HIR::Expr *> &arguments,
+ Location expr_locus);
+
+ tree resolve_method_address (TyTy::FnType *fntype, HirId ref,
+ TyTy::BaseType *receiver,
+ HIR::PathIdentSegment &segment,
+ Analysis::NodeMapping expr_mappings,
+ Location expr_locus);
+
+ tree
resolve_operator_overload (Analysis::RustLangItem::ItemType lang_item_type,
- HIR::OperatorExpr &expr, Bexpression *lhs,
- Bexpression *rhs, HIR::Expr *lhs_expr,
- HIR::Expr *rhs_expr);
+ HIR::OperatorExpr &expr, tree lhs, tree rhs,
+ HIR::Expr *lhs_expr, HIR::Expr *rhs_expr);
private:
CompileExpr (Context *ctx)
: HIRCompileBase (ctx), translated (nullptr), capacity_expr (nullptr)
{}
- Bexpression *translated;
- Bexpression *capacity_expr;
- std::vector<Bexpression *> constructor;
+ tree translated;
+ tree capacity_expr;
+ std::vector<tree> constructor;
};
} // namespace Compile