diff options
author | John Hodge <tpg@ucc.asn.au> | 2017-08-18 13:40:21 +0800 |
---|---|---|
committer | John Hodge <tpg@ucc.asn.au> | 2017-08-18 13:40:21 +0800 |
commit | f55e3c45f16f4d271e528eabbea1bf36f9ffa3c0 (patch) | |
tree | a279d3b6bf384c20940bc773fc36d2d5725d8cb0 /src/trans/enumerate.cpp | |
parent | 7ee9fc53ab6caa32261496cb76eebda40fbfe000 (diff) | |
download | mrust-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.cpp | 10 |
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, |