summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Hodge <tpg@mutabah.net>2016-12-10 14:40:27 +0800
committerJohn Hodge <tpg@mutabah.net>2016-12-10 14:40:27 +0800
commit22bd7357129f1af9228df66be76b9edfedb5adf2 (patch)
tree740e5560bf4490b9946689fee61af2e31f0711dc /src
parent19ed45d6273199af5c1b2f9fa142237709108d30 (diff)
downloadmrust-22bd7357129f1af9228df66be76b9edfedb5adf2.tar.gz
Trans Enumerate - Emit start language item too
Diffstat (limited to 'src')
-rw-r--r--src/trans/enumerate.cpp31
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,