mirror of
https://github.com/roc-lang/roc.git
synced 2025-09-30 15:21:12 +00:00
add ir unknowninc instruction
This commit is contained in:
parent
c2108d4ecd
commit
ebd62485df
7 changed files with 56 additions and 14 deletions
|
@ -575,6 +575,17 @@ fn expand_and_cancel<'a>(env: &mut Env<'a, '_>, stmt: &'a Stmt<'a>) -> &'a Stmt<
|
|||
expand_and_cancel(env, cont)
|
||||
}
|
||||
|
||||
Refcounting(
|
||||
ModifyRc::IncUnknown {
|
||||
to_increment: _,
|
||||
amount: _,
|
||||
},
|
||||
cont,
|
||||
) => {
|
||||
// TODO
|
||||
expand_and_cancel(env, cont)
|
||||
}
|
||||
|
||||
Refcounting(ModifyRc::Inc(symbol, inc_amount), cont) => {
|
||||
let count = env.deferred.inc_dec_map.entry(*symbol).or_insert(0);
|
||||
*count += *inc_amount as i64;
|
||||
|
|
|
@ -468,7 +468,16 @@ impl<'a> Context<'a> {
|
|||
arguments,
|
||||
});
|
||||
|
||||
&*self.arena.alloc(Stmt::Let(z, v, l, b))
|
||||
let mut b = Stmt::Let(z, v, l, b);
|
||||
|
||||
if !ps[1].borrow {
|
||||
b = Stmt::Refcounting(
|
||||
ModifyRc::Inc(arguments[2], 2),
|
||||
self.arena.alloc(b),
|
||||
)
|
||||
}
|
||||
|
||||
&*self.arena.alloc(b)
|
||||
}
|
||||
None => unreachable!(),
|
||||
}
|
||||
|
|
|
@ -902,6 +902,10 @@ impl<'a> BranchInfo<'a> {
|
|||
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||
pub enum ModifyRc {
|
||||
Inc(Symbol, u64),
|
||||
IncUnknown {
|
||||
to_increment: Symbol,
|
||||
amount: Symbol,
|
||||
},
|
||||
Dec(Symbol),
|
||||
DecRef(Symbol),
|
||||
}
|
||||
|
@ -925,6 +929,15 @@ impl ModifyRc {
|
|||
.append(alloc.text(format!("{}", n)))
|
||||
.append(symbol_to_doc(alloc, *symbol))
|
||||
.append(";"),
|
||||
IncUnknown {
|
||||
to_increment,
|
||||
amount,
|
||||
} => alloc
|
||||
.text("inc ")
|
||||
.append(symbol_to_doc(alloc, *to_increment))
|
||||
.append(" by ")
|
||||
.append(symbol_to_doc(alloc, *amount))
|
||||
.append(";"),
|
||||
Dec(symbol) => alloc
|
||||
.text("dec ")
|
||||
.append(symbol_to_doc(alloc, *symbol))
|
||||
|
@ -941,6 +954,7 @@ impl ModifyRc {
|
|||
|
||||
match self {
|
||||
Inc(symbol, _) => *symbol,
|
||||
IncUnknown { to_increment, .. } => *to_increment,
|
||||
Dec(symbol) => *symbol,
|
||||
DecRef(symbol) => *symbol,
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue