summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-08-07 22:33:35 +0800
committerJohn Hodge <tpg@mutabah.net>2016-08-07 22:33:35 +0800
commit9f4a1747941b6fac6a431cee5796b594adbdb117 (patch)
treef6489803cc521e3bf9c035ca2eba1410fb22eac4 /src
parentc7a5e62be494ed6cee6b69ef0b98fd0de35b7af2 (diff)
downloadmrust-9f4a1747941b6fac6a431cee5796b594adbdb117.tar.gz
HIR - Add clone method to GenericParams
Diffstat (limited to 'src')
-rw-r--r--src/hir/generic_params.cpp49
-rw-r--r--src/hir/generic_params.hpp3
2 files changed, 52 insertions, 0 deletions
diff --git a/src/hir/generic_params.cpp b/src/hir/generic_params.cpp
index 399bddbf..041567b7 100644
--- a/src/hir/generic_params.cpp
+++ b/src/hir/generic_params.cpp
@@ -59,3 +59,52 @@ namespace HIR {
return os;
}
}
+
+::HIR::GenericParams HIR::GenericParams::clone() const
+{
+ ::HIR::GenericParams rv;
+ rv.m_types.resize(m_types.size());
+ for(const auto& type : m_types)
+ {
+ rv.m_types.push_back(::HIR::TypeParamDef {
+ type.m_name,
+ type.m_default.clone(),
+ type.m_is_sized
+ });
+ }
+ rv.m_lifetimes = m_lifetimes;
+ rv.m_bounds.resize(m_bounds.size());
+ for(const auto& bound : m_bounds)
+ {
+ TU_MATCH(::HIR::GenericBound, (bound), (e),
+ (Lifetime,
+ rv.m_bounds.push_back(::HIR::GenericBound::make_Lifetime(e));
+ ),
+ (TypeLifetime,
+ rv.m_bounds.push_back(::HIR::GenericBound::make_TypeLifetime({
+ e.type.clone(),
+ e.valid_for
+ }));
+ ),
+ (TraitBound,
+ rv.m_bounds.push_back(::HIR::GenericBound::make_TraitBound({
+ e.type.clone(),
+ e.trait.clone()
+ }));
+ )/*,
+ (NotTrait,
+ rv.m_bounds.push_back(::HIR::GenericBound::make_NotTrait({
+ e.type.clone(),
+ e.trait.clone()
+ }));
+ )*/,
+ (TypeEquality,
+ rv.m_bounds.push_back(::HIR::GenericBound::make_TypeEquality({
+ e.type.clone(),
+ e.other_type.clone()
+ }));
+ )
+ )
+ }
+ return rv;
+}
diff --git a/src/hir/generic_params.hpp b/src/hir/generic_params.hpp
index 6d1a62e6..a17f61f5 100644
--- a/src/hir/generic_params.hpp
+++ b/src/hir/generic_params.hpp
@@ -46,6 +46,9 @@ struct GenericParams
::std::vector<GenericBound> m_bounds;
+ //GenericParams() {}
+
+ GenericParams clone() const;
struct PrintArgs {
const GenericParams& gp;