rewrite constFolding logic

This commit is contained in:
Folkert 2023-06-20 14:47:37 +02:00
parent 4a5b6a7a0a
commit 9ab4413beb
No known key found for this signature in database
GPG key ID: 1F17F6FFD112B97C
2 changed files with 18 additions and 25 deletions

View file

@ -100,35 +100,27 @@ constFolding = \e ->
x1 = constFolding e1
x2 = constFolding e2
when Pair x1 x2 is
Pair (Val a) (Val b) ->
Val (a + b)
when x1 is
Val a ->
when x2 is
Val b -> Val (a + b)
Add (Val b) x | Add x (Val b) -> Add (Val (a + b)) x
_ -> Add x1 x2
Pair (Val a) (Add (Val b) x) ->
Add (Val (a + b)) x
Pair (Val a) (Add x (Val b)) ->
Add (Val (a + b)) x
Pair y1 y2 ->
Add y1 y2
_ -> Add x1 x2
Mul e1 e2 ->
x1 = constFolding e1
x2 = constFolding e2
when Pair x1 x2 is
Pair (Val a) (Val b) ->
Val (a * b)
when x1 is
Val a ->
when x2 is
Val b -> Val (a * b)
Mul (Val b) x | Mul x (Val b) -> Mul (Val (a * b)) x
_ -> Mul x1 x2
Pair (Val a) (Mul (Val b) x) ->
Mul (Val (a * b)) x
Pair (Val a) (Mul x (Val b)) ->
Mul (Val (a * b)) x
Pair y1 y2 ->
Add y1 y2
_ -> Mul x1 x2
_ ->
e

View file

@ -272,9 +272,10 @@ impl<'v> RefcountEnvironment<'v> {
*/
fn consume_rc_symbol(&mut self, symbol: Symbol) -> Ownership {
// Consume the symbol by setting it to borrowed (if it was owned before), and return the previous ownership.
self.symbols_ownership
.insert(symbol, Ownership::Borrowed)
.expect("Expected symbol to be in environment")
match self.symbols_ownership.insert(symbol, Ownership::Borrowed) {
Some(ownership) => ownership,
None => internal_error!("Expected symbol {symbol:?} to be in environment"),
}
}
/**