summaryrefslogtreecommitdiff
path: root/src/trans
diff options
context:
space:
mode:
Diffstat (limited to 'src/trans')
-rw-r--r--src/trans/codegen_c.cpp33
-rw-r--r--src/trans/enumerate.cpp29
-rw-r--r--src/trans/monomorphise.cpp19
3 files changed, 28 insertions, 53 deletions
diff --git a/src/trans/codegen_c.cpp b/src/trans/codegen_c.cpp
index 878a55d4..2841db10 100644
--- a/src/trans/codegen_c.cpp
+++ b/src/trans/codegen_c.cpp
@@ -1303,16 +1303,10 @@ namespace {
m_of << "{\n";
// Variables
m_of << "\t"; emit_ctype(ret_type, FMT_CB(ss, ss << "rv";)); m_of << ";\n";
- for(unsigned int i = 0; i < code->named_variables.size(); i ++) {
- DEBUG("var" << i << " : " << code->named_variables[i]);
- m_of << "\t"; emit_ctype(code->named_variables[i], FMT_CB(ss, ss << "var" << i;)); m_of << ";";
- m_of << "\t// " << code->named_variables[i];
- m_of << "\n";
- }
- for(unsigned int i = 0; i < code->temporaries.size(); i ++) {
- DEBUG("tmp" << i << " : " << code->temporaries[i]);
- m_of << "\t"; emit_ctype(code->temporaries[i], FMT_CB(ss, ss << " tmp" << i;)); m_of << ";";
- m_of << "\t// " << code->temporaries[i];
+ for(unsigned int i = 0; i < code->locals.size(); i ++) {
+ DEBUG("var" << i << " : " << code->locals[i]);
+ m_of << "\t"; emit_ctype(code->locals[i], FMT_CB(ss, ss << "var" << i;)); m_of << ";";
+ m_of << "\t// " << code->locals[i];
m_of << "\n";
}
for(unsigned int i = 0; i < code->drop_flags.size(); i ++) {
@@ -2612,7 +2606,7 @@ namespace {
// Call destructor on all entries
m_of << "for(unsigned i = 0; i < "; emit_lvalue(*lvp->as_Deref().val); m_of << ".META; i++) {";
m_of << "\t\t";
- emit_destructor_call(::MIR::LValue::make_Index({ box$(slot.clone()), box$(::MIR::LValue::make_Temporary({~0u})) }), *te.inner, false);
+ emit_destructor_call(::MIR::LValue::make_Index({ box$(slot.clone()), box$(::MIR::LValue::make_Local(~0u)) }), *te.inner, false);
m_of << "\n\t}";
)
)
@@ -2814,20 +2808,17 @@ namespace {
void emit_lvalue(const ::MIR::LValue& val) {
TU_MATCHA( (val), (e),
- (Variable,
- m_of << "var" << e;
- ),
- (Temporary,
- if( e.idx == ~0u )
- m_of << "i";
- else
- m_of << "tmp" << e.idx;
+ (Return,
+ m_of << "rv";
),
(Argument,
m_of << "arg" << e.idx;
),
- (Return,
- m_of << "rv";
+ (Local,
+ if( e == ~0u )
+ m_of << "i";
+ else
+ m_of << "var" << e;
),
(Static,
m_of << Trans_Mangle(e);
diff --git a/src/trans/enumerate.cpp b/src/trans/enumerate.cpp
index 02116d18..fb577959 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 )
@@ -1344,17 +1337,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);
),
diff --git a/src/trans/monomorphise.cpp b/src/trans/monomorphise.cpp
index 3ac2ee09..f708060d 100644
--- a/src/trans/monomorphise.cpp
+++ b/src/trans/monomorphise.cpp
@@ -13,10 +13,9 @@ namespace {
::MIR::LValue monomorph_LValue(const ::StaticTraitResolve& resolve, const Trans_Params& params, const ::MIR::LValue& tpl)
{
TU_MATCHA( (tpl), (e),
- (Variable, return e; ),
- (Temporary, return e; ),
- (Argument, return e; ),
(Return, return e; ),
+ (Argument, return e; ),
+ (Local, return e; ),
(Static,
return params.monomorph(resolve, e);
),
@@ -120,17 +119,11 @@ namespace {
::MIR::Function output;
// 1. Monomorphise locals and temporaries
- output.named_variables.reserve( tpl->named_variables.size() );
- for(const auto& var : tpl->named_variables)
- {
- DEBUG("- var" << output.named_variables.size());
- output.named_variables.push_back( params.monomorph(resolve, var) );
- }
- output.temporaries.reserve( tpl->temporaries.size() );
- for(const auto& ty : tpl->temporaries)
+ output.locals.reserve( tpl->locals.size() );
+ for(const auto& var : tpl->locals)
{
- DEBUG("- tmp" << output.temporaries.size());
- output.temporaries.push_back( params.monomorph(resolve, ty) );
+ DEBUG("- _" << output.locals.size());
+ output.locals.push_back( params.monomorph(resolve, var) );
}
output.drop_flags = tpl->drop_flags;