summaryrefslogtreecommitdiff
path: root/src/trans/enumerate.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/trans/enumerate.cpp')
-rw-r--r--src/trans/enumerate.cpp35
1 files changed, 16 insertions, 19 deletions
diff --git a/src/trans/enumerate.cpp b/src/trans/enumerate.cpp
index 02116d18..41489e2b 100644
--- a/src/trans/enumerate.cpp
+++ b/src/trans/enumerate.cpp
@@ -623,9 +623,7 @@ void Trans_Enumerate_Types(EnumState& state)
if( fcn.m_code.m_mir )
{
const auto& mir = *fcn.m_code.m_mir;
- for(const auto& ty : mir.named_variables)
- tv.visit_type(monomorph(ty));
- for(const auto& ty : mir.temporaries)
+ for(const auto& ty : mir.locals)
tv.visit_type(monomorph(ty));
// TODO: Find all LValue::Deref instances and get the result type
@@ -646,19 +644,19 @@ void Trans_Enumerate_Types(EnumState& state)
};
// Recurse, if Deref get the type and add it to the visitor
TU_MATCHA( (lv), (e),
- (Variable,
+ (Return,
if( tmp_ty_ptr ) {
- return monomorph_outer(fcn.m_code.m_mir->named_variables[e]);
+ TODO(Span(), "Get return type for MIR type enumeration");
}
),
- (Temporary,
+ (Argument,
if( tmp_ty_ptr ) {
- return monomorph_outer(fcn.m_code.m_mir->temporaries[e.idx]);
+ return monomorph_outer(fcn.m_args[e.idx].second);
}
),
- (Argument,
+ (Local,
if( tmp_ty_ptr ) {
- return monomorph_outer(fcn.m_args[e.idx].second);
+ return monomorph_outer(fcn.m_code.m_mir->locals[e]);
}
),
(Static,
@@ -682,11 +680,6 @@ void Trans_Enumerate_Types(EnumState& state)
)
}
),
- (Return,
- if( tmp_ty_ptr ) {
- TODO(Span(), "Get return type for MIR type enumeration");
- }
- ),
(Field,
const auto& ity = visit_lvalue(tv,pp,fcn, *e.val, tmp_ty_ptr);
if( tmp_ty_ptr )
@@ -942,6 +935,9 @@ void Trans_Enumerate_Types(EnumState& state)
(Switch,
H::visit_lvalue(tv,pp,fcn, te.val);
),
+ (SwitchValue,
+ H::visit_lvalue(tv,pp,fcn, te.val);
+ ),
(Call,
if( te.fcn.is_Value() )
H::visit_lvalue(tv,pp,fcn, te.fcn.as_Value());
@@ -1344,17 +1340,15 @@ void Trans_Enumerate_FillFrom_Path(EnumState& state, const ::HIR::Path& path, co
void Trans_Enumerate_FillFrom_MIR_LValue(EnumState& state, const ::MIR::LValue& lv, const Trans_Params& pp)
{
TU_MATCHA( (lv), (e),
- (Variable,
- ),
- (Temporary,
+ (Return,
),
(Argument,
),
+ (Local,
+ ),
(Static,
Trans_Enumerate_FillFrom_Path(state, e, pp);
),
- (Return,
- ),
(Field,
Trans_Enumerate_FillFrom_MIR_LValue(state, *e.val, pp);
),
@@ -1485,6 +1479,9 @@ void Trans_Enumerate_FillFrom_MIR(EnumState& state, const ::MIR::Function& code,
(Switch,
Trans_Enumerate_FillFrom_MIR_LValue(state, e.val, pp);
),
+ (SwitchValue,
+ Trans_Enumerate_FillFrom_MIR_LValue(state, e.val, pp);
+ ),
(Call,
Trans_Enumerate_FillFrom_MIR_LValue(state, e.ret_val, pp);
TU_MATCHA( (e.fcn), (e2),