diff options
author | John Hodge <tpg@mutabah.net> | 2016-08-07 22:33:35 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-08-07 22:33:35 +0800 |
commit | 9f4a1747941b6fac6a431cee5796b594adbdb117 (patch) | |
tree | f6489803cc521e3bf9c035ca2eba1410fb22eac4 /src | |
parent | c7a5e62be494ed6cee6b69ef0b98fd0de35b7af2 (diff) | |
download | mrust-9f4a1747941b6fac6a431cee5796b594adbdb117.tar.gz |
HIR - Add clone method to GenericParams
Diffstat (limited to 'src')
-rw-r--r-- | src/hir/generic_params.cpp | 49 | ||||
-rw-r--r-- | src/hir/generic_params.hpp | 3 |
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; |