Skip to content

Commit 6aca5b5

Browse files
authored
Merge pull request #2 from YuyaAizawa/gc_timing
fix, not to gc cons cells in the expressions being evaluation
2 parents 2797578 + 8cecb17 commit 6aca5b5

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

secd.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ void _ld() {
6767
_work = car(_work);
6868
_stack = cons(_work, _stack);
6969
_control = cdr(cdr(_control));
70+
_work = _nil;
7071
}
7172

7273
void _car() {
@@ -138,8 +139,11 @@ void _eq() {
138139
}
139140

140141
void _ldf() {
141-
_stack = cons(cons(car(cdr(_control)), _environ), _stack);
142+
_work = cons(car(cdr(_control)), _environ);
143+
_stack = cons(_work, _stack);
144+
_environ = cdr(_environ);
142145
_control = cdr(cdr(_control));
146+
_work = _nil;
143147
}
144148

145149
void _rtn() {
@@ -155,7 +159,9 @@ void _dum() {
155159
}
156160

157161
void _rap() {
158-
_dump = cons(cdr(cdr(_stack)), cons(cdr(_environ), cons(cdr(_control),_dump)));
162+
_dump = cons(cdr(_control),_dump);
163+
_dump = cons(cdr(_environ), _dump);
164+
_dump = cons(cdr(cdr(_stack)), _dump);
159165
_environ = cdr(car(_stack));
160166
_environ->Cons.car = car(cdr(_stack));
161167
_control = car(car(_stack));
@@ -178,7 +184,9 @@ void _join() {
178184
}
179185

180186
void _ap() {
181-
_dump = cons(cdr(cdr(_stack)),cons(_environ,cons(cdr(_control), _dump)));
187+
_dump = cons(cdr(_control), _dump);
188+
_dump = cons(_environ, _dump);
189+
_dump = cons(cdr(cdr(_stack)), _dump);
182190
_environ = cons(car(cdr(_stack)),cdr(car(_stack)));
183191
_control = car(car(_stack));
184192
_stack = _nil;

0 commit comments

Comments
 (0)