aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarvin Borner2023-05-22 12:31:05 +0200
committerMarvin Borner2023-05-22 12:31:05 +0200
commitc1ce8eb719a95b22fea8e6220bf407d2eb7447b3 (patch)
treecdec2e905982e196cfb9e5b5c60d6c9d96666f92
parentcbb215c7f8f78f0a54c22fa90569733bef05907e (diff)
Changed order of abstraction and application encodings
This gives some minor space improvements as almost all abstractions imply a following application but not so much with applications. At least by case-analysis :)
-rw-r--r--makefile2
-rw-r--r--readme.md13
-rw-r--r--src/build.c2
-rw-r--r--src/parse.c12
-rw-r--r--test/aoc.blc.dump188
-rw-r--r--test/fac.blc.dump64
6 files changed, 142 insertions, 139 deletions
diff --git a/makefile b/makefile
index 5575ae5..0431d3c 100644
--- a/makefile
+++ b/makefile
@@ -10,7 +10,7 @@ INC = ${CURDIR}/inc
SRCS = $(wildcard $(SRC)/*.c)
OBJS = $(patsubst $(SRC)/%.c, $(BUILD)/%.o, $(SRCS))
-CFLAGS_DEBUG = -Wno-error -g -O0 -Wno-unused -fsanitize=address,undefined,leak
+CFLAGS_DEBUG = -fsanitize=leak
CFLAGS_WARNINGS = -Wall -Wextra -Wshadow -Wpointer-arith -Wwrite-strings -Wredundant-decls -Wnested-externs -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wcast-qual -Wswitch-default -Wswitch-enum -Wunreachable-code -Wundef -Wold-style-definition -pedantic -Wno-switch-enum
CFLAGS = $(CFLAGS_WARNINGS) -std=c99 -Ofast -I$(INC)
diff --git a/readme.md b/readme.md
index 2ce8f3d..c38d889 100644
--- a/readme.md
+++ b/readme.md
@@ -13,20 +13,20 @@ first show you some results:
1. x86 C compiler [8cc](https://github.com/rui314/8cc) translated [to
lambda calculus](https://github.com/woodrush/lambda-8cc):
- the original expression takes ~5M bytes in bit-encoded BLC
- - the same expression in BLoC needs only ~650K bytes (which is
+ - the same expression in BLoC needs only ~640K bytes (which is
around 2x the original 8cc!)
2. The [bruijn](https://github.com/marvinborner/bruijn) expression
`fac (+30)`, where `fac` is the factorial implementation from
`std/Math`:
- the original expression takes 1200 bytes in bit-encoded BLC
- - the same expression in BLoC needs only 348 bytes
+ - the same expression in BLoC needs only 349 bytes
3. [My
solution](https://github.com/marvinborner/bruijn/blob/main/samples/aoc/2022/01/solve.bruijn)
for the “Advent of Code” challenge
[2022/01](https://adventofcode.com/2022/day/1) in
[bruijn](https://github.com/marvinborner/bruijn):
- the original expression takes 6258 bytes in bit-encoded BLC
- - the same expression in BLoC needs only 946 bytes
+ - the same expression in BLoC needs only 935 bytes
You can find these examples in `test/`.
@@ -50,8 +50,8 @@ following derivation of normal bit-encoded BLC:
| prefix | content |
|:-----------------|:------------------------------|
-| 00M | abstraction of expression `M` |
-| 010MN | application of `M` and `N` |
+| 010M | abstraction of expression `M` |
+| 00MN | application of `M` and `N` |
| 1<sup>i+1</sup>0 | bruijn index `i` |
| 011I | index\* to an entry |
@@ -84,6 +84,9 @@ Even in this small example BLoC uses less space than BLC (0x34 vs. 0x42
bytes). Depending on the content of `M` and `N`, this could have
potentially been compressed even more.
+You can dump the bloc table using the `-d/--dump` flag of `bloc`. Some
+additional dumps for testing can also be found in `test/`.
+
## Optimizer
The optimizer converts a normal BLC expression to the BLoC format.
diff --git a/src/build.c b/src/build.c
index 4c26e69..50b565b 100644
--- a/src/build.c
+++ b/src/build.c
@@ -26,12 +26,12 @@ static void rec_write_bblc(struct tree *tree, FILE *file, char *byte, int *bit)
switch (tree->type) {
case ABS:
write_bit(0, file, byte, bit);
+ write_bit(1, file, byte, bit);
write_bit(0, file, byte, bit);
rec_write_bblc(tree->u.abs.term, file, byte, bit);
break;
case APP:
write_bit(0, file, byte, bit);
- write_bit(1, file, byte, bit);
write_bit(0, file, byte, bit);
rec_write_bblc(tree->u.app.lhs, file, byte, bit);
rec_write_bblc(tree->u.app.rhs, file, byte, bit);
diff --git a/src/parse.c b/src/parse.c
index 5f00ffa..7051dd8 100644
--- a/src/parse.c
+++ b/src/parse.c
@@ -46,19 +46,19 @@ struct term *parse_blc(const char *term)
#define BIT_AT(i) ((term[(i) / 8] & (1 << (7 - ((i) % 8)))) >> (7 - ((i) % 8)))
// parses bloc's bit-encoded blc
-// 00M -> abstraction of M
-// 010MN -> application of M and N
+// 010M -> abstraction of M
+// 00MN -> application of M and N
// 1X0 -> bruijn index, amount of 1s in X
// 011I -> 2B index to entry
static struct term *parse_bloc_bblc(const char *term, size_t *bit)
{
struct term *res = 0;
- if (!BIT_AT(*bit) && !BIT_AT(*bit + 1)) {
- (*bit) += 2;
+ if (!BIT_AT(*bit) && BIT_AT(*bit + 1) && !BIT_AT(*bit + 2)) {
+ (*bit) += 3;
res = new_term(ABS);
res->u.abs.term = parse_bloc_bblc(term, bit);
- } else if (!BIT_AT(*bit) && BIT_AT(*bit + 1) && !BIT_AT(*bit + 2)) {
- (*bit) += 3;
+ } else if (!BIT_AT(*bit) && !BIT_AT(*bit + 1)) {
+ (*bit) += 2;
res = new_term(APP);
res->u.app.lhs = parse_bloc_bblc(term, bit);
res->u.app.rhs = parse_bloc_bblc(term, bit);
diff --git a/test/aoc.blc.dump b/test/aoc.blc.dump
index 0cc6113..f5ecf68 100644
--- a/test/aoc.blc.dump
+++ b/test/aoc.blc.dump
@@ -1,100 +1,100 @@
=== START BLOC ===
| entries: 95
-| entry 93: [[[[(1 3)]]]]
-| entry 92: (<20> 1)
-| entry 91: ((<9> (<2> [[[(<1> (((<18> <8>) [0]) <42>))]]])) <6>)
-| entry 90: ((3 0) [[0]])
-| entry 89: (<0> <92>)
-| entry 88: ([(0 0)] [[((<46> [(<38> <76>)]) [(<22> <76>)])]])
-| entry 87: ((0 [[0]]) [[1]])
-| entry 86: (2 (<39> 1))
-| entry 85: ((3 0) [[[1]]])
-| entry 84: ((3 0) [[1]])
-| entry 83: [[[[[(((4 1) 0) <41>)]]]]]
-| entry 82: ((<19> <49>) [[[[(((3 2) 0) 1)]]]])
-| entry 81: (<10> <85>)
-| entry 80: (<2> [[[[(<25> (((3 2) ((2 1) <14>)) <6>))]]]])
-| entry 79: (<0> <12>)
-| entry 78: [(([[[[[[((((5 2) 1) 0) <5>)]]]]]] 1) <7>)]
-| entry 77: (<83> 1)
-| entry 76: ([((3 3) 0)] 0)
-| entry 75: [[((([[[((<2> [[((<15> 3) ((4 <14>) (1 <6>)))]]) 0)]]] <83>) [[[2]]]) ((([[[((<54> 0) (((<9> (([[[[((3 0) (2 1))]]]] <47>) (<2> [[(<52> (1 0))]]))) ([(((((<19> [(((0 [[1]]) [[0]]) [[0]])]) <44>) 0) <56>) 0)] ((<34> 2) (<61> 0)))) 1))]]] (<61> (<73> ([(<45> (((0 (<21> [[1]])) [(0 [[(<26> [[0]])]])]) [(0 [[((<0> (<46> <12>)) 0)]])]))] 1)))) [[0]]) (<73> 0)))]]
-| entry 74: (<20> <7>)
-| entry 73: [(((0 [[0]]) [((<0> [[1]]) 0)]) [((<0> [[0]]) 0)])]
-| entry 72: ((3 0) [[[2]]])
-| entry 71: (4 3)
-| entry 70: (<0> (((<2> [[[(<1> ((<18> (<8> <42>)) [[0]]))]]]) <27>) 0))
-| entry 69: [(1 [((1 1) 0)])]
-| entry 68: (<0> <3>)
-| entry 67: (<20> <72>)
-| entry 66: [<87>]
-| entry 65: (<0> <40>)
-| entry 64: [[(([(((0 [(<59> (<88> 0))]) [[(((0 [[0]]) [(2 0)]) [[[0]]])]]) [[(((0 (1 0)) [[[0]]]) [(2 0)])]])] 1) <55>)]]
-| entry 63: [([(0 [[0]])] ((((0 (<68> [[[[(2 3)]]]])) [(0 [[(<37> (<20> 0))]])]) [(0 [[(<89> <40>)]])]) [(0 [[(<65> <51>)]])]))]
-| entry 62: [((1 (<22> <84>)) (<38> <90>))]
-| entry 61: ((<2> [[[(<25> (<86> <6>))]]]) <3>)
-| entry 60: (0 <3>)
-| entry 59: [(<33> [0])]
-| entry 58: (0 (1 3))
-| entry 57: (<38> 1)
-| entry 56: ([[[[[(((<71> 1) 2) 0)]]]]] 0)
-| entry 55: ([((<46> <93>) [[[[(0 3)]]]])] 0)
-| entry 54: (<2> [[[(((<31> 1) 0) ((<0> (<45> 1)) ((2 ([(0 [[0]])] 1)) 0)))]]])
-| entry 53: ([[((([<33>] 1) ([[[(0 2)]]] 0)) 1)]] 0)
-| entry 52: (<0> 0)
-| entry 51: (<10> 1)
-| entry 50: [(<77> <90>)]
-| entry 49: [([(0 [[0]])] (((0 (<21> [[[(1 2)]]])) [(0 [[(<26> (<22> 0))]])]) [(0 [[(<79> <57>)]])]))]
-| entry 48: ((<80> <16>) <3>)
-| entry 47: (<2> [[[(<1> (((<32> 1) [[0]]) (<8> ((2 (<63> 1)) <6>))))]]])
-| entry 46: (0 [[[2]]])
-| entry 45: [(0 [[1]])]
-| entry 44: [(([[((0 1) [0])]] [[[0]]]) ((((0 [[1]]) [(<53> [[[2]]])]) [(<53> [[[1]]])]) [0]))]
-| entry 43: (<10> <7>)
-| entry 42: ((2 1) <6>)
-| entry 41: (((3 2) 1) 0)
-| entry 40: (<4> 1)
-| entry 39: [([(0 [[0]])] ((((0 (<68> <93>)) [(0 [[(<37> <40>)]])]) [(0 [[(<89> (<10> 0))]])]) [(0 [[(<65> <92>)]])]))]
-| entry 38: [[[[(1 <41>)]]]]
-| entry 37: (<0> <51>)
-| entry 36: (<4> <7>)
-| entry 35: ([(<52> [[0]])] <14>)
-| entry 34: [[((<16> 1) <56>)]]
-| entry 33: ((0 [[1]]) [[[0]]])
-| entry 32: [((<33> [[[0]]]) [0])]
-| entry 31: [((0 [[[[[0]]]]]) [[1]])]
-| entry 30: (<2> [[[(<1> ((<0> <18>) <42>))]]])
-| entry 29: (((<2> [[[(<1> ((<18> <42>) 0))]]]) <27>) 0)
-| entry 28: [[(((<19> [(<87> [[0]])]) <44>) ((<34> 1) 0))]]
-| entry 27: ((<19> <66>) 1)
-| entry 26: (<0> <57>)
-| entry 25: (<15> 1)
-| entry 24: (<4> 0)
-| entry 23: [(((1 <36>) <81>) <74>)]
-| entry 22: [[[[(0 <41>)]]]]
-| entry 21: (<0> [[[2]]])
-| entry 20: [[[[[(1 <5>)]]]]]
-| entry 19: [[[(2 (1 0))]]]
-| entry 18: (1 <14>)
-| entry 17: (([([(1 (0 0))] [(1 (0 0))])] [[(((<60> [(<10> (2 0))]) [(<20> (2 0))]) [(<4> (2 0))])]]) 1)
-| entry 16: [[(([([[((1 0) [[[0]]])]] ((((0 [[(((0 (<63> <17>)) (<39> <17>)) <17>)]]) [[[((((1 (<11> 1)) [(((1 (<4> <72>)) <43>) <67>)]) <78>) <11>)]]]) [[[((((1 (<23> 1)) <78>) [(((1 <74>) (<4> <85>)) <81>)]) <23>)]]]) [[[((((1 (<78> 1)) <11>) <23>) <78>)]]]))] 1) ([(((<60> [[[[[(2 4)]]]]]) [[[[[(1 4)]]]]]) [[[[[(0 4)]]]]])] 0))]]
-| entry 15: (<31> 0)
-| entry 14: (<45> 0)
-| entry 13: (<88> 1)
-| entry 12: (<22> 1)
-| entry 11: [(((1 <67>) <36>) <43>)]
-| entry 10: [[[[[(2 <5>)]]]]]
-| entry 9: [[[((2 0) 1)]]]
-| entry 8: (<0> <14>)
-| entry 7: ((3 0) [[[0]]])
-| entry 6: ([(0 [[0]])] 0)
-| entry 5: (((<71> 2) 1) 0)
-| entry 4: [[[[[(0 <5>)]]]]]
-| entry 3: [[[[3]]]]
-| entry 2: [(<69> <69>)]
-| entry 1: (<15> [[0]])
+| entry 93: (<1> [[[(<3> (((<78> 1) [[0]]) (<8> ((2 (<33> 1)) <2>))))]]])
+| entry 92: (<9> 0)
+| entry 91: [[(((<45> [(<85> [[0]])]) <62>) ((<34> 1) 0))]]
+| entry 90: (((3 2) 1) 0)
+| entry 89: [[[[[(((4 1) 0) <90>)]]]]]
+| entry 88: [([(0 [[0]])] (((0 (<17> [[[(1 2)]]])) [(0 [[(<28> (<11> 0))]])]) [(0 [[(<30> <23>)]])]))]
+| entry 87: (((<1> [[[(<3> ((<13> <6>) 0))]]]) <86>) 0)
+| entry 86: ((<45> <56>) 1)
+| entry 85: ((0 [[0]]) [[1]])
+| entry 84: ((0 [[1]]) [[[0]]])
+| entry 83: ([[[[[(((<49> 1) 2) 0)]]]]] 0)
+| entry 82: (<9> <44>)
+| entry 81: (<0> <39>)
+| entry 80: (<1> [[[[(<32> (((3 2) ((2 1) <10>)) <2>))]]]])
+| entry 79: [[((([[[((<1> [[((<40> 3) ((4 <10>) (1 <2>)))]]) 0)]]] <89>) [[[2]]]) ((([[[((<7> 0) (((<22> (([[[[((3 0) (2 1))]]]] <93>) (<1> [[(<59> (1 0))]]))) ([(((((<45> [(((0 [[1]]) [[0]]) [[0]])]) <62>) 0) <83>) 0)] ((<34> 2) (<42> 0)))) 1))]]] (<42> (<51> ([(<24> (((0 (<17> [[1]])) [(0 [[(<28> [[0]])]])]) [(0 [[((<0> (<43> <36>)) 0)]])]))] 1)))) [[0]]) (<51> 0)))]]
+| entry 78: [((<84> [[[0]]]) [0])]
+| entry 77: ([((3 3) 0)] 0)
+| entry 76: ([(0 0)] [[((<43> [(<18> <77>)]) [(<11> <77>)])]])
+| entry 75: (<76> 1)
+| entry 74: ((3 0) [[[1]]])
+| entry 73: [[(([(((0 [(<29> (<76> 0))]) [[(((0 [[0]]) [(2 0)]) [[[0]]])]]) [[(((0 (1 0)) [[[0]]]) [(2 0)])]])] 1) <31>)]]
+| entry 72: ((3 0) [[1]])
+| entry 71: [([(0 [[0]])] ((((0 (<64> <53>)) [(0 [[(<46> <35>)]])]) [(0 [[(<81> (<12> 0))]])]) [(0 [[(<47> <39>)]])]))]
+| entry 70: ((3 0) [[[2]]])
+| entry 69: ([(<59> [[0]])] <10>)
+| entry 68: (<12> <74>)
+| entry 67: (<12> <44>)
+| entry 66: (<5> <44>)
+| entry 65: (<0> (((<1> [[[(<3> ((<13> (<8> <6>)) [[0]]))]]]) <86>) 0))
+| entry 64: (<0> <4>)
+| entry 63: (<89> 1)
+| entry 62: [(([[((0 1) [0])]] [[[0]]]) ((((0 [[1]]) [(<58> [[[2]]])]) [(<58> [[[1]]])]) [0]))]
+| entry 61: (2 (<71> 1))
+| entry 60: (<5> <70>)
+| entry 59: (<0> 0)
+| entry 58: ([[((([<84>] 1) ([[[(0 2)]]] 0)) 1)]] 0)
+| entry 57: (0 <4>)
+| entry 56: [<85>]
+| entry 55: ((<80> <21>) <4>)
+| entry 54: ((3 0) [[0]])
+| entry 53: [[[[(1 3)]]]]
+| entry 52: (0 (1 3))
+| entry 51: [(((0 [[0]]) [((<0> [[1]]) 0)]) [((<0> [[0]]) 0)])]
+| entry 50: ((<22> (<1> [[[(<3> (((<13> <8>) [0]) <6>))]]])) <2>)
+| entry 49: (4 3)
+| entry 48: (<12> 1)
+| entry 47: (<0> <35>)
+| entry 46: (<0> <48>)
+| entry 45: [[[(2 (1 0))]]]
+| entry 44: ((3 0) [[[0]]])
+| entry 43: (0 [[[2]]])
+| entry 42: ((<1> [[[(<32> (<61> <2>))]]]) <4>)
+| entry 41: (([([(1 (0 0))] [(1 (0 0))])] [[(((<57> [(<12> (2 0))]) [(<5> (2 0))]) [(<9> (2 0))])]]) 1)
+| entry 40: (<16> 0)
+| entry 39: (<5> 1)
+| entry 38: (((<49> 2) 1) 0)
+| entry 37: [(<63> <54>)]
+| entry 36: (<11> 1)
+| entry 35: (<9> 1)
+| entry 34: [[((<21> 1) <83>)]]
+| entry 33: [([(0 [[0]])] ((((0 (<64> [[[[(2 3)]]]])) [(0 [[(<46> (<5> 0))]])]) [(0 [[(<81> <35>)]])]) [(0 [[(<47> <48>)]])]))]
+| entry 32: (<40> 1)
+| entry 31: ([((<43> <53>) [[[[(0 3)]]]])] 0)
+| entry 30: (<0> <36>)
+| entry 29: [(<84> [0])]
+| entry 28: (<0> <23>)
+| entry 27: [(((1 <60>) <82>) <67>)]
+| entry 26: [((1 (<11> <72>)) (<18> <54>))]
+| entry 25: [(1 [((1 1) 0)])]
+| entry 24: [(0 [[1]])]
+| entry 23: (<18> 1)
+| entry 22: [[[((2 0) 1)]]]
+| entry 21: [[(([([[((1 0) [[[0]]])]] ((((0 [[(((0 (<33> <41>)) (<71> <41>)) <41>)]]) [[[((((1 (<27> 1)) [(((1 (<9> <70>)) <67>) <60>)]) <19>) <27>)]]]) [[[((((1 (<15> 1)) <19>) [(((1 <66>) (<9> <74>)) <68>)]) <15>)]]]) [[[((((1 (<19> 1)) <27>) <15>) <19>)]]]))] 1) ([(((<57> [[[[[(2 4)]]]]]) [[[[[(1 4)]]]]]) [[[[[(0 4)]]]]])] 0))]]
+| entry 20: (<1> [[[(<3> ((<0> <13>) <6>))]]])
+| entry 19: [(([[[[[[((((5 2) 1) 0) <38>)]]]]]] 1) <44>)]
+| entry 18: [[[[(1 <90>)]]]]
+| entry 17: (<0> [[[2]]])
+| entry 16: [((0 [[[[[0]]]]]) [[1]])]
+| entry 15: [(((1 <82>) <68>) <66>)]
+| entry 14: ((<45> <88>) [[[[(((3 2) 0) 1)]]]])
+| entry 13: (1 <10>)
+| entry 12: [[[[[(2 <38>)]]]]]
+| entry 11: [[[[(0 <90>)]]]]
+| entry 10: (<24> 0)
+| entry 9: [[[[[(0 <38>)]]]]]
+| entry 8: (<0> <10>)
+| entry 7: (<1> [[[(((<16> 1) 0) ((<0> (<24> 1)) ((2 ([(0 [[0]])] 1)) 0)))]]])
+| entry 6: ((2 1) <2>)
+| entry 5: [[[[[(1 <38>)]]]]]
+| entry 4: [[[[3]]]]
+| entry 3: (<40> [[0]])
+| entry 2: ([(0 [[0]])] 0)
+| entry 1: [(<25> <25>)]
| entry 0: [[[((0 2) 1)]]]
-| final: [([(<8> (<48> ((<47> [[[[<58>]]]]) 0)))] ((<2> [[(<1> ((<54> ((<54> (1 (<91> ((<9> (<9> [[(<66> ((<28> 1) 0))]])) <14>)))) <35>)) (1 (<91> ((<9> (<9> <28>)) <14>)))))]]) ((<30> <48>) (((<2> [[[(<1> ([(<8> ((3 2) <6>))] (([[(<70> ([(<1> <6>)] <29>))]] 1) 0)))]]]) <32>) ((<30> ((<19> ((<80> [[((<16> (([[((((1 <3>) [((<34> <24>) 1)]) [((<16> <24>) 1)]) [<24>])]] [[[[(1 <58>)]]]]) 1)) 0)]]) <3>)) (<30> [(((<2> [[[(((<59> 0) 1) (<86> ([([(0 [[0]])] (((0 (<21> [[[2]]])) [(0 [[(<26> <12>)]])]) [(0 [[(<79> (<38> 0))]])]))] 0)))]]]) <3>) (([[((((<64> 0) 1) [[[2]]]) (<82> (([[(([([[((1 0) [[0]])]] (((0 [[((0 (<49> <13>)) <13>)]]) [[[(((1 (<62> 1)) [(<77> <84>)]) <62>)]]]) [[[(((1 (<50> 1)) <62>) <50>)]]]))] 1) <55>)]] ((<75> 1) 0)) (<82> ((<75> 0) 1)))))]] 0) [[[(0 (0 (0 (0 (1 (1 (0 (0 2))))))))]]]))]))) ((<2> [[([(((<31> <6>) <35>) (<8> (2 ([(0 [[0]])] <6>))))] (([[(<70> <29>)]] (<64> [[[(0 (1 (0 (1 (0 (0 (0 (0 2))))))))]]])) 0))]]) 0))))))]
+| final: [([(<8> (<55> ((<93> [[[[<52>]]]]) 0)))] ((<1> [[(<3> ((<7> ((<7> (1 (<50> ((<22> (<22> [[(<56> ((<91> 1) 0))]])) <10>)))) <69>)) (1 (<50> ((<22> (<22> <91>)) <10>)))))]]) ((<20> <55>) (((<1> [[[(<3> ([(<8> ((3 2) <2>))] (([[(<65> ([(<3> <2>)] <87>))]] 1) 0)))]]]) <78>) ((<20> ((<45> ((<80> [[((<21> (([[((((1 <4>) [((<34> <92>) 1)]) [((<21> <92>) 1)]) [<92>])]] [[[[(1 <52>)]]]]) 1)) 0)]]) <4>)) (<20> [(((<1> [[[(((<29> 0) 1) (<61> ([([(0 [[0]])] (((0 (<17> [[[2]]])) [(0 [[(<28> <36>)]])]) [(0 [[(<30> (<18> 0))]])]))] 0)))]]]) <4>) (([[((((<73> 0) 1) [[[2]]]) (<14> (([[(([([[((1 0) [[0]])]] (((0 [[((0 (<88> <75>)) <75>)]]) [[[(((1 (<26> 1)) [(<63> <72>)]) <26>)]]]) [[[(((1 (<37> 1)) <26>) <37>)]]]))] 1) <31>)]] ((<79> 1) 0)) (<14> ((<79> 0) 1)))))]] 0) [[[(0 (0 (0 (0 (1 (1 (0 (0 2))))))))]]]))]))) ((<1> [[([(((<16> <2>) <69>) (<8> (2 ([(0 [[0]])] <2>))))] (([[(<65> <87>)]] (<73> [[[(0 (1 (0 (1 (0 (0 (0 (0 2))))))))]]])) 0))]]) 0))))))]
=== END BLOC ===
diff --git a/test/fac.blc.dump b/test/fac.blc.dump
index db72801..e46df2a 100644
--- a/test/fac.blc.dump
+++ b/test/fac.blc.dump
@@ -1,40 +1,40 @@
=== START BLOC ===
| entries: 35
-| entry 33: (<2> <26>)
-| entry 32: (<2> 1)
-| entry 31: (<5> <32>)
-| entry 30: [[(([([[((1 0) [[[0]]])]] ((((0 [[(((0 ([([(0 [[0]])] ((((0 (<27> [[[[(2 3)]]]])) [(0 [[(<13> (<2> 0))]])]) [(0 [[(<31> <12>)]])]) [(0 [[(<24> <19>)]])]))] <11>)) (<8> <11>)) <11>)]]) [[[((((1 (<10> 1)) [(((1 (<0> <26>)) <18>) <33>)]) <14>) <10>)]]]) [[[((((1 (<9> 1)) <14>) [(((1 <29>) (<0> <25>)) <17>)]) <9>)]]]) [[[((((1 (<14> 1)) <10>) <9>) <14>)]]]))] 1) <20>)]]
-| entry 29: (<2> <1>)
-| entry 28: (4 3)
-| entry 27: (<5> <3>)
+| entry 33: (<1> 1)
+| entry 32: [(((1 <18>) <24>) <22>)]
+| entry 31: (0 <5>)
+| entry 30: (<2> <33>)
+| entry 29: (<3> 1)
+| entry 28: (<2> <5>)
+| entry 27: ([([(1 (0 0))] [(1 (0 0))])] [[(((<31> [(<3> (2 0))]) [(<1> (2 0))]) [(<0> (2 0))])]])
| entry 26: ((3 0) [[[2]]])
-| entry 25: ((3 0) [[[1]]])
-| entry 24: (<5> <12>)
-| entry 23: (<0> <1>)
-| entry 22: (<0> 0)
-| entry 21: ([([(1 (0 0))] [(1 (0 0))])] [[(((<16> [(<6> (2 0))]) [(<2> (2 0))]) [(<0> (2 0))])]])
-| entry 20: ([(((<16> [[[[[(2 4)]]]]]) [[[[[(1 4)]]]]]) [[[[[(0 4)]]]]])] 0)
-| entry 19: (<6> 1)
-| entry 18: (<6> <1>)
-| entry 17: (<6> <25>)
-| entry 16: (0 <3>)
-| entry 15: [(1 [((1 1) 0)])]
-| entry 14: [(([[[[[[((((5 2) 1) 0) <4>)]]]]]] 1) <1>)]
-| entry 13: (<5> <19>)
+| entry 25: [[(([([[((1 0) [[[0]]])]] ((((0 [[(((0 ([([(0 [[0]])] ((((0 (<28> [[[[(2 3)]]]])) [(0 [[(<19> (<1> 0))]])]) [(0 [[(<30> <12>)]])]) [(0 [[(<17> <29>)]])]))] <6>)) (<11> <6>)) <6>)]]) [[[((((1 (<32> 1)) [(((1 (<0> <26>)) <22>) <18>)]) <7>) <32>)]]]) [[[((((1 (<9> 1)) <7>) [(((1 <21>) (<0> <13>)) <23>)]) <9>)]]]) [[[((((1 (<7> 1)) <32>) <9>) <7>)]]]))] 1) <20>)]]
+| entry 24: (<0> <15>)
+| entry 23: (<3> <13>)
+| entry 22: (<3> <15>)
+| entry 21: (<1> <15>)
+| entry 20: ([(((<31> [[[[[(2 4)]]]]]) [[[[[(1 4)]]]]]) [[[[[(0 4)]]]]])] 0)
+| entry 19: (<2> <29>)
+| entry 18: (<1> <26>)
+| entry 17: (<2> <12>)
+| entry 16: (<0> 0)
+| entry 15: ((3 0) [[[0]]])
+| entry 14: (4 3)
+| entry 13: ((3 0) [[[1]]])
| entry 12: (<0> 1)
-| entry 11: (<21> 1)
-| entry 10: [(((1 <33>) <23>) <18>)]
-| entry 9: [(((1 <23>) <17>) <29>)]
-| entry 8: [([(0 [[0]])] ((((0 (<27> <7>)) [(0 [[(<13> <12>)]])]) [(0 [[(<31> (<6> 0))]])]) [(0 [[(<24> <32>)]])]))]
-| entry 7: [[[[(1 3)]]]]
-| entry 6: [[[[[(2 <4>)]]]]]
-| entry 5: [[[((0 2) 1)]]]
-| entry 4: (((<28> 2) 1) 0)
-| entry 3: [[[[3]]]]
-| entry 2: [[[[[(1 <4>)]]]]]
-| entry 1: ((3 0) [[[0]]])
+| entry 11: [([(0 [[0]])] ((((0 (<28> <8>)) [(0 [[(<19> <12>)]])]) [(0 [[(<30> (<3> 0))]])]) [(0 [[(<17> <33>)]])]))]
+| entry 10: [(1 [((1 1) 0)])]
+| entry 9: [(((1 <24>) <23>) <21>)]
+| entry 8: [[[[(1 3)]]]]
+| entry 7: [(([[[[[[((((5 2) 1) 0) <4>)]]]]]] 1) <15>)]
+| entry 6: (<27> 1)
+| entry 5: [[[[3]]]]
+| entry 4: (((<14> 2) 1) 0)
+| entry 3: [[[[[(2 <4>)]]]]]
+| entry 2: [[[((0 2) 1)]]]
+| entry 1: [[[[[(1 <4>)]]]]]
| entry 0: [[[[[(0 <4>)]]]]]
-| final: ([((((([(<15> <15>)] [[[[[(((([[(([((((0 [([((((0 [[1]]) [[[0]]]) [[[0]]]) [0])] (<21> 0))]) [[((((0 [[0]]) [(2 0)]) [[[0]]]) [[[0]]])]]) [[((((0 [[0]]) [[[0]]]) [(2 0)]) [[[0]]])]]) [[((((0 (1 0)) [[[0]]]) [[[0]]]) [(2 0)])]])] 1) <20>)]] 2) (<8> 1)) 3) ((((4 (([[((((1 <3>) [(([[((<30> 1) ([[[[[(((<28> 1) 2) 0)]]]]] 0))]] <22>) 1)]) [((<30> <22>) 1)]) [<22>])]] 3) (0 2))) (<8> 2)) 1) 0))]]]]]) <7>) <7>) 0) [0])] [[[[(0 (1 (0 (1 3))))]]]])
+| final: ([((((([(<10> <10>)] [[[[[(((([[(([((((0 [([((((0 [[1]]) [[[0]]]) [[[0]]]) [0])] (<27> 0))]) [[((((0 [[0]]) [(2 0)]) [[[0]]]) [[[0]]])]]) [[((((0 [[0]]) [[[0]]]) [(2 0)]) [[[0]]])]]) [[((((0 (1 0)) [[[0]]]) [[[0]]]) [(2 0)])]])] 1) <20>)]] 2) (<11> 1)) 3) ((((4 (([[((((1 <5>) [(([[((<25> 1) ([[[[[(((<14> 1) 2) 0)]]]]] 0))]] <16>) 1)]) [((<25> <16>) 1)]) [<16>])]] 3) (0 2))) (<11> 2)) 1) 0))]]]]]) <8>) <8>) 0) [0])] [[[[(0 (1 (0 (1 3))))]]]])
=== END BLOC ===