History

port to plan 9

Sigrid Haflínudóttir committed 6 years ago

Commit f06dca91 parent 3efa0753 files · +61 −28Browse files

Unified · Split

3 files
  1. mkfile +14 −0
  2. src/fe.c +47 −25
  3. src/fe.h +0 −3
mkfile+14−0
@@ -0,0 +1,14 @@
1+</$objtype/mkfile
2+
3+CFLAGS=$CFLAGS -p -D__plan9__ -DFE_STANDALONE -Isrc
4+BIN=/$objtype/bin
5+TARG=fe
6+OFILES=\
7+ fe.$O
8+
9+default:V: all
10+
11+</sys/src/cmd/mkone
12+
13+fe.$O: src/fe.c
14+ $CC $CFLAGS $prereq
src/fe.c+47−25
@@ -20,14 +20,22 @@ · 19 unmodified lines
2020 ** IN THE SOFTWARE.
2121 */
2222
23+#ifdef __plan9__
24+#include <u.h>
25+#include <libc.h>
26+#define unused USED
27+#else
2328 #include <string.h>
29+#include <stdlib.h>
30+#define unused(x) ( (void) (x) )
31+#endif
32+#include <stdio.h>
2433 #include "fe.h"
2534
26−#define unused(x) ( (void) (x) )
2735 #define car(x) ( (x)->car.o )
2836 #define cdr(x) ( (x)->cdr.o )
2937 #define tag(x) ( (x)->car.c )
30−#define isnil(x) ( (x) == &nil )
38+#define isnil(x) ( (x) == &Nil )
3139 #define type(x) ( tag(x) & 0x1 ? tag(x) >> 2 : FE_TPAIR )
3240 #define settype(x,t) ( tag(x) = (t) << 2 | 1 )
3341 #define number(x) ( (x)->cdr.n )
@@ -74,7 +82,7 @@ struct fe_Context { · 40 unmodified lines
7482 int nextchr;
7583 };
7684
77−static fe_Object nil = {{ (void*) (FE_TNIL << 2 | 1) }, { NULL }};
85+static fe_Object Nil = {{ (void*) (FE_TNIL << 2 | 1) }, { NULL }};
7886
7987
8088 fe_Handlers* fe_handlers(fe_Context *ctx) {
@@ -85,7 +93,7 @@ fe_Handlers* fe_handlers(fe_Context *ctx) { · 4 unmodified lines
8593 void fe_error(fe_Context *ctx, const char *msg) {
8694 fe_Object *cl = ctx->calllist;
8795 /* reset context state */
88− ctx->calllist = &nil;
96+ ctx->calllist = &Nil;
8997 /* do error handler */
9098 if (ctx->handlers.error) { ctx->handlers.error(ctx, msg, cl); }
9199 /* error handler returned -- print error and traceback, exit */
@@ -95,7 +103,11 @@ void fe_error(fe_Context *ctx, const char *msg) { · 3 unmodified lines
95103 fe_tostring(ctx, car(cl), buf, sizeof(buf));
96104 fprintf(stderr, "=> %s\n", buf);
97105 }
106+#ifdef __plan9__
107+ exits("fail");
108+#else
98109 exit(EXIT_FAILURE);
110+#endif
99111 }
100112
101113
@@ -248,7 +260,7 @@ fe_Object* fe_cons(fe_Context *ctx, fe_Object *car, fe_Object *cdr) { · 146 unmodified lines
248260
249261
250262 fe_Object* fe_bool(fe_Context *ctx, int b) {
251− return b ? ctx->t : &nil;
263+ return b ? ctx->t : &Nil;
252264 }
253265
254266
@@ -262,7 +274,7 @@ fe_Object* fe_number(fe_Context *ctx, fe_Number n) { · 7 unmodified lines
262274
263275 static fe_Object* buildstring(fe_Context *ctx, fe_Object *tail, int chr) {
264276 if (!tail || strbuf(tail)[STRBUFSIZE - 1] != '\0') {
265− fe_Object *obj = fe_cons(ctx, NULL, &nil);
277+ fe_Object *obj = fe_cons(ctx, NULL, &Nil);
266278 settype(obj, FE_TSTRING);
267279 if (tail) {
268280 cdr(tail) = obj;
@@ -296,7 +308,7 @@ fe_Object* fe_symbol(fe_Context *ctx, const char *name) { · 27 unmodified lines
296308 /* create new object, push to symlist and return */
297309 obj = object(ctx);
298310 settype(obj, FE_TSYMBOL);
299− cdr(obj) = fe_cons(ctx, fe_string(ctx, name), &nil);
311+ cdr(obj) = fe_cons(ctx, fe_string(ctx, name), &Nil);
300312 ctx->symlist = fe_cons(ctx, obj, ctx->symlist);
301313 return obj;
302314 }
@@ -319,7 +331,7 @@ fe_Object* fe_ptr(fe_Context *ctx, void *ptr) { · 16 unmodified lines
319331
320332
321333 fe_Object* fe_list(fe_Context *ctx, fe_Object **objs, int n) {
322− fe_Object *res = &nil;
334+ fe_Object *res = &Nil;
323335 while (n--) {
324336 res = fe_cons(ctx, objs[n], res);
325337 }
@@ -447,7 +459,7 @@ static fe_Object* getbound(fe_Object *sym, fe_Object *env) { · 121 unmodified lines
447459
448460 void fe_set(fe_Context *ctx, fe_Object *sym, fe_Object *v) {
449461 unused(ctx);
450− cdr(getbound(sym, &nil)) = v;
462+ cdr(getbound(sym, &Nil)) = v;
451463 }
452464
453465
@@ -481,7 +493,7 @@ static fe_Object* read_(fe_Context *ctx, fe_ReadFn fn, void *udata) { · 27 unmodified lines
481493 return &rparen;
482494
483495 case '(':
484− res = &nil;
496+ res = &Nil;
485497 tail = &res;
486498 gc = fe_savegc(ctx);
487499 fe_pushgc(ctx, res); /* to cause error on too-deep nesting */
@@ -492,7 +504,7 @@ static fe_Object* read_(fe_Context *ctx, fe_ReadFn fn, void *udata) { · 4 unmodified lines
492504 *tail = fe_read(ctx, fn, udata);
493505 } else {
494506 /* proper pair */
495− *tail = fe_cons(ctx, v, &nil);
507+ *tail = fe_cons(ctx, v, &Nil);
496508 tail = &cdr(*tail);
497509 }
498510 fe_restoregc(ctx, gc);
@@ -503,7 +515,7 @@ static fe_Object* read_(fe_Context *ctx, fe_ReadFn fn, void *udata) { · 4 unmodified lines
503515 case '\'':
504516 v = fe_read(ctx, fn, udata);
505517 if (!v) { fe_error(ctx, "stray '''"); }
506− return fe_cons(ctx, fe_symbol(ctx, "quote"), fe_cons(ctx, v, &nil));
518+ return fe_cons(ctx, fe_symbol(ctx, "quote"), fe_cons(ctx, v, &Nil));
507519
508520 case '"':
509521 res = buildstring(ctx, NULL, '\0');
@@ -531,7 +543,7 @@ static fe_Object* read_(fe_Context *ctx, fe_ReadFn fn, void *udata) { · 21 unmodified lines
531543 ctx->nextchr = chr;
532544 n = strtod(buf, &p); /* try to read as number */
533545 if (p != buf && strchr(delimiter, *p)) { return fe_number(ctx, n); }
534− if (!strcmp(buf, "nil")) { return &nil; }
546+ if (!strcmp(buf, "nil")) { return &Nil; }
535547 return fe_symbol(ctx, buf);
536548 }
537549 }
@@ -558,10 +570,10 @@ fe_Object* fe_readfp(fe_Context *ctx, FILE *fp) { · 20 unmodified lines
558570 static fe_Object* eval(fe_Context *ctx, fe_Object *obj, fe_Object *env, fe_Object **bind);
559571
560572 static fe_Object* evallist(fe_Context *ctx, fe_Object *lst, fe_Object *env) {
561− fe_Object *res = &nil;
573+ fe_Object *res = &Nil;
562574 fe_Object **tail = &res;
563575 while (!isnil(lst)) {
564− *tail = fe_cons(ctx, eval(ctx, fe_nextarg(ctx, &lst), env, NULL), &nil);
576+ *tail = fe_cons(ctx, eval(ctx, fe_nextarg(ctx, &lst), env, NULL), &Nil);
565577 tail = &cdr(*tail);
566578 }
567579 return res;
@@ -569,7 +581,7 @@ static fe_Object* evallist(fe_Context *ctx, fe_Object *lst, fe_Object *env) { · 1 unmodified line
569581
570582
571583 static fe_Object* dolist(fe_Context *ctx, fe_Object *lst, fe_Object *env) {
572− fe_Object *res = &nil;
584+ fe_Object *res = &Nil;
573585 int save = fe_savegc(ctx);
574586 while (!isnil(lst)) {
575587 fe_restoregc(ctx, save);
@@ -626,7 +638,7 @@ static fe_Object* eval(fe_Context *ctx, fe_Object *obj, fe_Object *env, fe_Objec · 50 unmodified lines
626638 gc = fe_savegc(ctx);
627639 fn = eval(ctx, car(obj), env, NULL);
628640 arg = cdr(obj);
629− res = &nil;
641+ res = &Nil;
630642
631643 switch (type(fn)) {
632644 case FE_TPRIM:
@@ -777,7 +789,7 @@ static fe_Object* eval(fe_Context *ctx, fe_Object *obj, fe_Object *env, fe_Objec · 144 unmodified lines
777789
778790
779791 fe_Object* fe_eval(fe_Context *ctx, fe_Object *obj) {
780− return eval(ctx, obj, &nil, NULL);
792+ return eval(ctx, obj, &Nil, NULL);
781793 }
782794
783795
@@ -796,9 +808,9 @@ fe_Context* fe_open(void *ptr, int size) { · 12 unmodified lines
796808 ctx->object_count = size / sizeof(fe_Object);
797809
798810 /* init lists */
799− ctx->calllist = &nil;
800− ctx->freelist = &nil;
801− ctx->symlist = &nil;
811+ ctx->calllist = &Nil;
812+ ctx->freelist = &Nil;
813+ ctx->symlist = &Nil;
802814
803815 /* populate freelist */
804816 for (i = 0; i < ctx->object_count; i++) {
@@ -829,26 +841,32 @@ fe_Context* fe_open(void *ptr, int size) { · 24 unmodified lines
829841 void fe_close(fe_Context *ctx) {
830842 /* clear gcstack and symlist; makes all objects unreachable */
831843 ctx->gcstack_idx = 0;
832− ctx->symlist = &nil;
844+ ctx->symlist = &Nil;
833845 collectgarbage(ctx);
834846 }
835847
836848
837849 #ifdef FE_STANDALONE
838850
851+#ifndef __plan9__
839852 #include <setjmp.h>
853+#endif
840854
841855 static jmp_buf toplevel;
842856 static char buf[64000];
843857
844858 static void onerror(fe_Context *ctx, const char *msg, fe_Object *cl) {
845− unused(ctx), unused(cl);
859+ unused(ctx); unused(cl);
846860 fprintf(stderr, "error: %s\n", msg);
847861 longjmp(toplevel, -1);
848862 }
849863
850−
851−int main(int argc, char **argv) {
864+#ifdef __plan9__
865+void
866+#else
867+int
868+#endif
869+main(int argc, char **argv) {
852870 int gc;
853871 fe_Object *obj;
854872 FILE *volatile fp = stdin;
@@ -873,7 +891,11 @@ int main(int argc, char **argv) { · 18 unmodified lines
873891 if (fp == stdin) { fe_writefp(ctx, obj, stdout); printf("\n"); }
874892 }
875893
894+#ifdef __plan9__
895+ exits(nil);
896+#else
876897 return EXIT_SUCCESS;
898+#endif
877899 }
878900
879901 #endif
src/fe.h+0−3
@@ -8,9 +8,6 @@ · 7 unmodified lines
88 #ifndef FE_H
99 #define FE_H
1010
11−#include <stdlib.h>
12−#include <stdio.h>
13−
1411 #define FE_VERSION "1.0"
1512
1613 typedef float fe_Number;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t