Skip to content

Commit 9bb2e2b

Browse files
committed
Minor reorganization.
1 parent b55d59a commit 9bb2e2b

File tree

4 files changed

+43
-63
lines changed

4 files changed

+43
-63
lines changed

core.c

+1-50
Original file line numberDiff line numberDiff line change
@@ -56,43 +56,6 @@ pair list(void *o) {
5656
return cons(o, emptyList);
5757
}
5858

59-
pair nreverse(pair l) {
60-
pair next, last = emptyList;
61-
while (!empty(l)) {
62-
next = cdr(l);
63-
setcdr(l, last);
64-
last = l;
65-
l = next;
66-
}
67-
return last;
68-
}
69-
70-
pair nappend(pair x, pair y) {
71-
pair first = x, next;
72-
while (!empty(next = cdr(x))) x = next;
73-
setcdr(x, y);
74-
return first;
75-
}
76-
77-
int length(pair l) {
78-
int i = 0;
79-
while (!empty(l)) {
80-
l = cdr(l);
81-
i++;
82-
}
83-
return i;
84-
}
85-
86-
vector listToVector(vector list) {
87-
vector v = makeVector(length(list));
88-
for (int i = 0; !empty(list); i++, list = cdr(list)) setIdx(v, i, car(list));
89-
return v;
90-
}
91-
92-
pair map(void *fn, pair list) {
93-
return empty(list) ? list : cons(((void *(*)(void *))fn)(car(list)), map(fn, cdr(list)));
94-
}
95-
9659
typedef vector continuation;
9760

9861
continuation newContinuation(void *origin,
@@ -382,15 +345,11 @@ void *cdr(vector pair) { return idx(pair, 1); }
382345
vector setcar(vector pair, void *val) { return setIdx(pair, 0, val); }
383346
vector setcdr(vector pair, void *val) { return setIdx(pair, 1, val); }
384347

385-
int isEmpty(vector v) {
386-
return vectorLength(v) == 0;
387-
}
388-
389348
obj intern(obj symbol) {
390349
acquireSymbolTableLock();
391350
obj symbolTable = hiddenEntity(oInternals);
392351
char *string = stringData(symbol);
393-
for (pair st = symbolTable; !empty(st); st = cdr(st))
352+
for (pair st = symbolTable; st; st = cdr(st))
394353
if (!strcmp(string, stringData(car(st)))) {
395354
releaseSymbolTableLock();
396355
return car(st);
@@ -492,14 +451,6 @@ void *loadStream(FILE *, obj, obj);
492451
#undef retarget
493452
#undef check
494453

495-
obj appendSymbols(pair symbols) {
496-
obj s = string("");
497-
for (; !empty(symbols); symbols = cdr(symbols))
498-
s = appendStrings(s, car(symbols));
499-
setProto(s, oSymbol);
500-
return intern(s);
501-
}
502-
503454
obj symbol(const char *s) {
504455
obj o = string(s);
505456
setProto(o, oSymbol);

core.h

+1-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ obj integer(int);
4040
int integerValue(obj);
4141

4242
obj symbol(const char *c);
43-
obj appendSymbols(vector);
43+
obj intern(obj);
4444

4545
obj message(obj, obj, vector);
4646
obj setMessageTarget(obj, obj);

parser.y

+41
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@
2222
#include "objects.h"
2323
#include <stdio.h>
2424

25+
vector nreverse(vector);
26+
vector listToVector(vector);
27+
obj appendSymbols(vector);
2528
obj keywordMessage(obj target, pair args);
2629
void yyerror(YYLTYPE *, int *, int *, void **, void *, char const *);
2730

@@ -278,6 +281,44 @@ lines:
278281

279282
%%
280283

284+
pair nreverse(pair l) {
285+
pair next, last = emptyList;
286+
while (l) {
287+
next = cdr(l);
288+
setcdr(l, last);
289+
last = l;
290+
l = next;
291+
}
292+
return last;
293+
}
294+
295+
int length(pair l) {
296+
int i = 0;
297+
while (l) {
298+
l = cdr(l);
299+
i++;
300+
}
301+
return i;
302+
}
303+
304+
vector listToVector(vector list) {
305+
vector v = makeVector(length(list));
306+
for (int i = 0; list; i++, list = cdr(list)) setIdx(v, i, car(list));
307+
return v;
308+
}
309+
310+
pair map(void *fn, pair list) {
311+
return list ? cons(((void *(*)(void *))fn)(car(list)), map(fn, cdr(list))) : list;
312+
}
313+
314+
obj appendSymbols(pair symbols) {
315+
obj s = string("");
316+
for (; symbols; symbols = cdr(symbols))
317+
s = appendStrings(s, car(symbols));
318+
setProto(s, oSymbol);
319+
return intern(s);
320+
}
321+
281322
obj keywordMessage(obj target, pair args) {
282323
return message(target,
283324
appendSymbols(map(car, args)),

test.c

-12
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,6 @@ test(integer,
4646
test(intern,
4747
assert_equal(symbol("foo"), symbol("foo"));
4848
)
49-
test(appendSymbols,
50-
assert_equal(appendSymbols(cons(symbol("foo"), list(symbol("bar")))),
51-
symbol("foobar"));
52-
)
5349
test(appendStrings,
5450
obj s1 = string("foo"),
5551
s2 = string("bar"),
@@ -64,14 +60,6 @@ test(freeSpaceCount,
6460
// Free space should now be reduced by the size of a zero-length vector and its edenspace.
6561
assert_equal(freeSpaceCount(), oldCount - 3 - EDEN_OVERHEAD);
6662
)
67-
test(listToVector,
68-
vector n = integer(42),
69-
m = symbol("foo"),
70-
v = listToVector(cons(n, list(m)));
71-
assert_equal(vectorLength(v), 2);
72-
assert_equal(idx(v, 0), n);
73-
assert_equal(idx(v, 1), m);
74-
)
7563
test(spawn,
7664
void *p = newPromise();
7765
vector i = integer(42);

0 commit comments

Comments
 (0)