X-Git-Url: https://jxself.org/git/?a=blobdiff_plain;f=src%2Fmain.c;h=6645f6e4564f72f72f67d1bea7949761452be844;hb=58a5ffdfec139a0c9d399f603b77a764ae8607f7;hp=b57ee6d06bf2ad4b3dcd6ae99d1888e1e0d27c05;hpb=8d55156675587a770c5654362bcbd3d2a98e4aa9;p=muddle-interpreter.git diff --git a/src/main.c b/src/main.c index b57ee6d..6645f6e 100644 --- a/src/main.c +++ b/src/main.c @@ -1,5 +1,5 @@ /* -Copyright (C) 2017 Keziah Wesley +Copyright (C) 2017-2018 Keziah Wesley You can redistribute and/or modify this file under the terms of the GNU Affero General Public License as published by the Free Software @@ -26,9 +26,10 @@ License along with this file. If not, see #include // TODO: put these in interpreter-wide ctx object -char *pool; -char *vhp_base; -char *vhp; +pool_object *pool; +pool_ptr ptop; +object *vhp_base; +heap_ptr vhp; // TODO: store these in current PROCESS frame *cf; @@ -53,10 +54,10 @@ int main () { // The REST pool (in low mem). - char *pool_base = + pool = mmap (0, POOL_OBJCT * sizeof (object), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_32BIT, -1, 0); - pool = pool_base; + ptop = 1; // 0 is null // The CONTROL STACKs (TODO: per-PROCESS). object *cst_base = @@ -70,7 +71,7 @@ main () vhp_base = mmap (0, VECTOR_OBJCT * sizeof (object), PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0); - vhp = vhp_base; + vhp = 1; // Reader stack (TODO: dynamically allocate as VECTOR). object rst_base[READER_OBJCT]; @@ -83,8 +84,8 @@ main () while ((n = read (STDIN_FILENO, buf, sizeof (buf))) > 0) { // mock GC (no object persistence) - pool = pool_base; - vhp = vhp_base; + ptop = 1; + vhp = 1; // terminate input assert (buf[n - 1] == '\n'); buf[n - 1] = '\0'; @@ -99,26 +100,23 @@ main () } assert (p); if (!st.framelen) - continue; + continue; assert (st.framelen == 1); - /* // Eval the thing + cf->prevcst = cst; push_frame (eval, new_tuple (st.pos, 1), 0); - while (cf->cont.fn) + while (cf->cont.val.fn) { - cf->cont.fn (); + cf->cont.val.fn (); } // Print the thing print_object (&ret); - */ - // debugging: print without eval - print_object (st.pos); printf ("\n"); // Loop! } munmap (cst_base, STACK_OBJCT * sizeof (object)); munmap (vhp_base, VECTOR_OBJCT * sizeof (object)); - munmap (pool_base, POOL_OBJCT * sizeof (object)); + munmap (pool, POOL_OBJCT * sizeof (object)); return 0; }