FreeRegions bind_regions (std::vector<TyTy::Region> regions,
FreeRegions parent_free_regions)
{
- std::vector<FreeRegion> free_regions;
+ FreeRegions free_regions;
for (auto ®ion : regions)
{
if (region.is_early_bound ())
rust_unreachable ();
}
}
- // This is necesarry because of clash of current gcc and gcc4.8.
- FreeRegions free_regions_final{std::move (free_regions)};
- return free_regions_final;
+ return free_regions;
}
protected: // Helpers to add BIR statements
/** Instantiate `num_lifetime_params` free regions. */
void handle_lifetime_params (size_t num_lifetime_params)
{
- std::vector<FreeRegion> function_free_regions;
+ FreeRegions regions;
for (size_t i = 0; i < num_lifetime_params; i++)
{
- function_free_regions.push_back (ctx.place_db.get_next_free_region ());
+ regions.push_back (ctx.place_db.get_next_free_region ());
}
rust_debug ("\tctx.fn_free_region={%s}",
ctx.fn_free_regions.to_string ().c_str ());
- ctx.fn_free_regions.set_from (std::move (function_free_regions));
+ ctx.fn_free_regions = regions;
}
void handle_lifetime_param_constraints (
FreeRegions make_fresh_regions (size_t size)
{
- std::vector<FreeRegion> free_regions;
+ FreeRegions free_regions;
for (size_t i = 0; i < size; i++)
free_regions.push_back (region_binder.get_next_free_region ());
- return FreeRegions (std::move (free_regions));
+ return free_regions;
}
public:
rust_debug ("\tSanitize deref of %s", base.tyty->as_string ().c_str ());
- std::vector<FreeRegion> regions;
- regions.insert (regions.end (), base.regions.begin () + 1,
- base.regions.end ());
- FreeRegions r;
- r.set_from (std::move (regions));
- push_subset_all (place.tyty, r, place.regions);
+ FreeRegions regions;
+ for (auto it = base.regions.begin () + 1; it != base.regions.end (); ++it)
+ {
+ regions.push_back (*it);
+ }
+ push_subset_all (place.tyty, regions, place.regions);
}
void sanizite_field (PlaceId place_id)
{
.query_field_regions (base.tyty->as<TyTy::ADTType> (), 0,
place.variable_or_field_index,
base.regions); // FIXME
- FreeRegions f;
- f.set_from (std::move (r));
- push_subset_all (place.tyty, f, place.regions);
+ push_subset_all (place.tyty, r, place.regions);
}
void visit_statemensts ()
FreeRegion &operator[] (size_t i) { return regions.at (i); }
const FreeRegion &operator[] (size_t i) const { return regions.at (i); }
const std::vector<FreeRegion> &get_regions () const { return regions; }
- void set_from (std::vector<Rust::Polonius::Origin> &®ions)
- {
- this->regions.clear ();
- for (auto ®ion : regions)
- {
- this->regions.push_back ({region});
- }
- }
- void set_from (std::vector<FreeRegion> &®ions)
- {
- this->regions.clear ();
- for (auto ®ion : regions)
- {
- this->regions.push_back (region);
- }
- }
WARN_UNUSED_RESULT FreeRegions prepend (FreeRegion region) const
{
return FreeRegions (std::move (new_regions));
}
- FreeRegions (std::vector<FreeRegion> &®ions) : regions (regions) {}
+ void push_back (FreeRegion region) { regions.push_back (region); }
+
FreeRegions () {}
+ FreeRegions (std::vector<FreeRegion> &®ions) : regions (regions) {}
WARN_UNUSED_RESULT std::string to_string () const
{
FreeRegions bind_regions (std::vector<TyTy::Region> regions,
FreeRegions parent_free_regions)
{
- std::vector<FreeRegion> free_regions;
+ FreeRegions free_regions;
for (auto ®ion : regions)
{
if (region.is_early_bound ())
rust_unreachable ();
}
}
- // This is necesarry because of clash of current gcc and gcc4.8.
- FreeRegions free_regions_final{std::move (free_regions)};
- return free_regions_final;
+ return free_regions;
}
};
auto variances = Resolver::TypeCheckContext::get ()
->get_variance_analysis_ctx ()
.query_type_variances (new_place_ref.tyty);
- std::vector<Polonius::Origin> regions;
+ FreeRegions regions;
for (size_t i = 0; i < variances.size (); ++i)
- regions.push_back (next_free_region.value++);
+ {
+ regions.push_back (next_free_region);
+ ++next_free_region.value;
+ }
- new_place_ref.regions.set_from (std::move (regions));
+ new_place_ref.regions = regions;
return new_place;
}
std::vector<Variance> query_generic_variance (const ADTType &type);
- std::vector<size_t> query_field_regions (const ADTType *parent,
- size_t variant_index,
- size_t field_index,
- const FreeRegions &parent_regions);
+ FreeRegions query_field_regions (const ADTType *parent, size_t variant_index,
+ size_t field_index,
+ const FreeRegions &parent_regions);
std::vector<Region> query_type_regions (BaseType *base);
public:
using Visitor = VisitorBase<Variance>;
- std::vector<size_t> collect_regions (BaseType &ty);
+ FreeRegions collect_regions (BaseType &ty);
FieldVisitorCtx (GenericTyPerCrateCtx &ctx, const SubstitutionRef &subst,
const FreeRegions &parent_regions)
private:
GenericTyPerCrateCtx &ctx;
const SubstitutionRef &subst;
- std::vector<size_t> regions;
+ FreeRegions regions;
FreeRegions parent_regions;
std::vector<size_t> type_param_ranges;
};
return private_ctx->query_type_regions (type);
}
-std::vector<size_t>
+FreeRegions
CrateCtx::query_field_regions (const ADTType *parent, size_t variant_index,
size_t field_index,
const FreeRegions &parent_regions)
return result;
}
-std::vector<size_t>
+FreeRegions
GenericTyPerCrateCtx::query_field_regions (const ADTType *parent,
size_t variant_index,
size_t field_index,
}
}
-std::vector<size_t>
+FreeRegions
FieldVisitorCtx::collect_regions (BaseType &ty)
{
// Segment the regions into ranges for each type parameter. Type parameter
{
if (region.is_early_bound ())
{
- regions.push_back (parent_regions[region.get_index ()].value);
+ regions.push_back (parent_regions[region.get_index ()]);
}
else if (region.is_late_bound ())
{
for (size_t i = type_param_ranges[param_i];
i < type_param_ranges[param_i + 1]; i++)
{
- regions.push_back (parent_regions[i].value);
+ regions.push_back (parent_regions[i]);
}
}
/** Get regions mentioned in a type. */
std::vector<Region> query_type_regions (BaseType *type);
- std::vector<size_t> query_field_regions (const ADTType *parent,
- size_t variant_index,
- size_t field_index,
- const FreeRegions &parent_regions);
+ FreeRegions query_field_regions (const ADTType *parent, size_t variant_index,
+ size_t field_index,
+ const FreeRegions &parent_regions);
private:
std::unique_ptr<GenericTyPerCrateCtx> private_ctx;