diff options
author | John Hodge <tpg@mutabah.net> | 2016-12-10 14:40:27 +0800 |
---|---|---|
committer | John Hodge <tpg@mutabah.net> | 2016-12-10 14:40:27 +0800 |
commit | 22bd7357129f1af9228df66be76b9edfedb5adf2 (patch) | |
tree | 740e5560bf4490b9946689fee61af2e31f0711dc /src | |
parent | 19ed45d6273199af5c1b2f9fa142237709108d30 (diff) | |
download | mrust-22bd7357129f1af9228df66be76b9edfedb5adf2.tar.gz |
Trans Enumerate - Emit start language item too
Diffstat (limited to 'src')
-rw-r--r-- | src/trans/enumerate.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/src/trans/enumerate.cpp b/src/trans/enumerate.cpp index 505a4d19..62f6648e 100644 --- a/src/trans/enumerate.cpp +++ b/src/trans/enumerate.cpp @@ -24,12 +24,27 @@ TransList Trans_Enumerate_Main(const ::HIR::Crate& crate) static Span sp; TransList rv; - auto main_path = ::HIR::SimplePath("", {"main"}); - const auto& fcn = crate.get_function_by_path(sp, main_path); - auto* ptr = rv.add_function(main_path); - assert(ptr); - Trans_Enumerate_FillFrom(rv, crate, fcn, *ptr); + // "start" language item + // - Takes main, and argc/argv as arguments + { + auto start_path = crate.get_lang_item_path(sp, "start"); + const auto& fcn = crate.get_function_by_path(sp, start_path); + + auto* ptr = rv.add_function(start_path); + assert(ptr); + Trans_Enumerate_FillFrom(rv, crate, fcn, *ptr); + } + + // user entrypoint + { + auto main_path = ::HIR::SimplePath("", {"main"}); + const auto& fcn = crate.get_function_by_path(sp, main_path); + + auto* ptr = rv.add_function(main_path); + assert(ptr); + Trans_Enumerate_FillFrom(rv, crate, fcn, *ptr); + } return rv; } @@ -322,9 +337,13 @@ void Trans_Enumerate_FillFrom_Path(TransList& out, const ::HIR::Crate& crate, co { // Must have been a dynamic dispatch request, just leave as-is } + else if( path_mono.m_data.as_UfcsKnown().type->m_data.is_Function() ) + { + // Must have been a dynamic dispatch request, just leave as-is + } else { - BUG(sp, ""); + BUG(sp, "VTable returned for unknown path type - " << path_mono); } ), (Function, |