summaryrefslogtreecommitdiff
path: root/src/trans/enumerate.cpp
diff options
context:
space:
mode:
authorJohn Hodge <tpg@ucc.asn.au>2017-08-18 13:40:21 +0800
committerJohn Hodge <tpg@ucc.asn.au>2017-08-18 13:40:21 +0800
commitf55e3c45f16f4d271e528eabbea1bf36f9ffa3c0 (patch)
treea279d3b6bf384c20940bc773fc36d2d5725d8cb0 /src/trans/enumerate.cpp
parent7ee9fc53ab6caa32261496cb76eebda40fbfe000 (diff)
downloadmrust-f55e3c45f16f4d271e528eabbea1bf36f9ffa3c0.tar.gz
Trans - VTable unsizing in statics, emit vtables before statics
Diffstat (limited to 'src/trans/enumerate.cpp')
-rw-r--r--src/trans/enumerate.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/src/trans/enumerate.cpp b/src/trans/enumerate.cpp
index b45b72fd..adc9575a 100644
--- a/src/trans/enumerate.cpp
+++ b/src/trans/enumerate.cpp
@@ -51,6 +51,7 @@ void Trans_Enumerate_FillFrom(EnumState& state, const ::HIR::Function& function,
void Trans_Enumerate_FillFrom(EnumState& state, const ::HIR::Static& stat, TransList_Static& stat_out, Trans_Params pp={});
void Trans_Enumerate_FillFrom_VTable (EnumState& state, ::HIR::Path vtable_path, const Trans_Params& pp);
void Trans_Enumerate_FillFrom_Literal(EnumState& state, const ::HIR::Literal& lit, const Trans_Params& pp);
+void Trans_Enumerate_FillFrom_MIR(EnumState& state, const ::MIR::Function& code, const Trans_Params& pp);
/// Enumerate trans items starting from `::main` (binary crate)
TransList Trans_Enumerate_Main(const ::HIR::Crate& crate)
@@ -1181,7 +1182,7 @@ namespace {
),
(Static,
auto it = impl.m_statics.find(e.item);
- if( it == impl.m_statics.end() ) {
+ if( it == impl.m_statics.end() && e.item != "#vtable" ) {
DEBUG("Static " << e.item << " missing in trait " << e.trait << " for " << *e.type);
return false;
}
@@ -1231,14 +1232,17 @@ namespace {
TODO(sp, "Associated constant - " << path);
),
(Static,
+ if( e.item == "#vtable" )
+ {
+ DEBUG("VTable, autogen");
+ return EntPtr::make_AutoGenerate( {} );
+ }
auto it = impl.m_statics.find(e.item);
if( it != impl.m_statics.end() )
{
DEBUG("Found impl" << impl.m_params.fmt_args() << " " << impl.m_type);
return EntPtr { &it->second.data };
}
- if( e.item == "#vtable" )
- return EntPtr::make_AutoGenerate( {} );
TODO(sp, "Associated static - " << path);
),
(Function,