]> git.mdlowis.com Git - proto/sclpl.git/commitdiff
checkpoint
authorMichael D. Lowis <mike@mdlowis.com>
Fri, 4 Apr 2014 21:01:58 +0000 (17:01 -0400)
committerMichael D. Lowis <mike@mdlowis.com>
Fri, 4 Apr 2014 21:01:58 +0000 (17:01 -0400)
source/slvm/main.c

index 08271aa20ab66c937473c2f4f2ccaeee060deddb..5e3f3092d84adc4416ee3b1e02373d1952a078fc 100644 (file)
@@ -103,6 +103,8 @@ defcode("getw", get_word, 0, &is_ws){
         EXEC(is_ws);
         wschar = *(ArgStackPtr);
         ArgStackPtr--;
+        if(wschar == '\n')
+            printf((state_val) ? "=> " : ".. ");
     } while(wschar);
 
     /* Read the rest of the word */
@@ -125,7 +127,6 @@ defcode("getw", get_word, 0, &is_ws){
 }
 
 defcode("findw", findw, 0, &get_word){
-    puts("finding word");
     word_t const* curr = (word_t const*)latest_val;
     char* name = (char*)*(ArgStackPtr);
     while(curr)
@@ -145,13 +146,12 @@ defcode("execute", execute, 0, &findw){
 }
 
 defcode("parsenum", parse_num, 0, &execute){
-    puts("Parsing Number");
     *(ArgStackPtr) = atoi((const char *)*(ArgStackPtr));
 }
 
 defcode("interpret", interpret, 0, &parse_num){
     char* curr_word;
-    printf("=> ");
+    //printf((0 == state_val) ? "=> " : ".. ");
     /* Parse a word */
     EXEC(get_word);
     curr_word = (char*)*(ArgStackPtr);
@@ -167,7 +167,6 @@ defcode("interpret", interpret, 0, &parse_num){
     {
         *(ArgStackPtr) = (long)curr_word;
         EXEC(parse_num);
-        //number.codeword(number.code);
     }
 }
 
@@ -200,228 +199,11 @@ defcode("create", create, 0, &quit){
     *(ArgStackPtr) = (long)word;
 }
 
-/* Built-in Primitive Words
- *****************************************************************************/
-defcode("drop", drop, 0, &create){
-    ArgStackPtr--;
-}
-
-defcode("swap", swap, 0, &drop){
-    long temp = *(ArgStackPtr);
-    *(ArgStackPtr) = *(ArgStackPtr-1);
-    *(ArgStackPtr-1) = temp;
-}
-
-defcode("dup", dup, 0, &swap){
-    ArgStackPtr++;
-    *(ArgStackPtr) = *(ArgStackPtr-1);
-}
-
-defcode("over", over, 0, &dup){
-    ArgStackPtr++;
-    *(ArgStackPtr) = *(ArgStackPtr-2);
-}
-
-defcode("rot", rot, 0, &over){
-    long temp = *(ArgStackPtr);
-    *(ArgStackPtr) = *(ArgStackPtr-1);
-    *(ArgStackPtr-1) = *(ArgStackPtr-2);
-    *(ArgStackPtr-2) = temp;
-}
-
-defcode("-rot", nrot, 0, &rot){
-    long temp = *(ArgStackPtr-2);
-    *(ArgStackPtr-2) = *(ArgStackPtr-1);
-    *(ArgStackPtr-1) = *(ArgStackPtr);
-    *(ArgStackPtr) = temp;
-}
-
-defcode("2drop", twodrop, 0, &nrot){
-    ArgStackPtr -= 2;
-}
-
-defcode("2dup", twodup, 0, &twodrop){
-    ArgStackPtr += 2;
-    *(ArgStackPtr-1) = *(ArgStackPtr-3);
-    *(ArgStackPtr) = *(ArgStackPtr-2);
-}
-
-defcode("2swap", twoswap, 0, &twodup){
-}
-
-defcode("?dup", qdup, 0, &twoswap){
-}
-
-defcode("1+", incr, 0, &qdup){
-    *(ArgStackPtr) += 1;
-}
-
-defcode("1-", decr, 0, &incr){
-    *(ArgStackPtr) -= 1;
-}
-
-defcode("4+", incr4, 0, &decr){
-    *(ArgStackPtr) += 1;
-}
-
-defcode("4-", decr4, 0, &incr4){
-    *(ArgStackPtr) -= 1;
-}
-
-defcode("+", add, 0, &decr4){
-    *(ArgStackPtr-1) += *(ArgStackPtr);
-    ArgStackPtr--;
-}
 
-defcode("-", sub, 0, &add){
-    *(ArgStackPtr-1) -= *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode("*", mul, 0, &sub){
-    *(ArgStackPtr-1) *= *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode("/", divide, 0, &mul){
-    *(ArgStackPtr-1) /= *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode("%", mod, 0, &divide){
-    *(ArgStackPtr-1) %= *(ArgStackPtr);
-    ArgStackPtr--;
-}
 
-defcode("/%", divmod, 0, &mod){
-}
 
-defcode("=", equal, 0, &divmod){
-    *(ArgStackPtr-1) = *(ArgStackPtr-1) == *(ArgStackPtr);
-    ArgStackPtr--;
-}
 
-defcode("!=", notequal, 0, &equal){
-    *(ArgStackPtr-1) = *(ArgStackPtr-1) != *(ArgStackPtr);
-    ArgStackPtr--;
-}
 
-defcode("<", lessthan, 0, &notequal){
-    *(ArgStackPtr-1) = *(ArgStackPtr-1) < *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode(">", greaterthan, 0, &lessthan){
-    *(ArgStackPtr-1) = *(ArgStackPtr-1) > *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode("<=", lessthaneq, 0, &greaterthan){
-    *(ArgStackPtr-1) = *(ArgStackPtr-1) <= *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode(">=", greaterthaneq, 0, &lessthaneq){
-    *(ArgStackPtr-1) = *(ArgStackPtr-1) >= *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode("0=", zeroeq, 0, &greaterthaneq){
-    *(ArgStackPtr) = *(ArgStackPtr) == 0;
-}
-
-defcode("0!=", zeroneq, 0, &zeroeq){
-    *(ArgStackPtr) = *(ArgStackPtr) != 0;
-}
-
-defcode("0<", zerolt, 0, &zeroneq){
-    *(ArgStackPtr) = *(ArgStackPtr) < 0;
-}
-
-defcode("0>", zerogt, 0, &zerolt){
-    *(ArgStackPtr) = *(ArgStackPtr) > 0;
-}
-
-defcode("0<=", zerolte, 0, &zerogt){
-    *(ArgStackPtr) = *(ArgStackPtr) <= 0;
-}
-
-defcode("0>=", zerogte, 0, &zerolte){
-    *(ArgStackPtr) = *(ArgStackPtr) >= 0;
-}
-
-defcode("and", and, 0, &zerogte){
-    *(ArgStackPtr-1) = *(ArgStackPtr-1) && *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode("or", or, 0, &and){
-    *(ArgStackPtr-1) = *(ArgStackPtr-1) || *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode("not", not, 0, &or){
-    *(ArgStackPtr) = !(*(ArgStackPtr));
-}
-
-defcode("band", band, 0, &not){
-    *(ArgStackPtr-1) = *(ArgStackPtr-1) & *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode("bor", bor, 0, &band){
-    *(ArgStackPtr-1) = *(ArgStackPtr-1) | *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode("bxor", bxor, 0, &bor){
-    *(ArgStackPtr-1) = *(ArgStackPtr-1) ^ *(ArgStackPtr);
-    ArgStackPtr--;
-}
-
-defcode("bnot", bnot, 0, &bxor){
-    *(ArgStackPtr) = ~(*(ArgStackPtr));
-}
-
-defcode("lit", lit, 0, &bnot){
-    ArgStackPtr++;
-    *(ArgStackPtr) = *(inst_ptr);
-}
-
-defcode("!", store, 0, &lit){
-}
-
-defcode("@", fetch, 0, &store){
-    puts("@ Executed");
-}
-
-defcode("+!", addstore, 0, &fetch){
-}
-
-defcode("-!", substore, 0, &addstore){
-}
-
-defcode("b!", bytestore, 0, &substore){
-}
-
-defcode("b@", bytefetch, 0, &bytestore){
-}
-
-defcode("b@b!", bytecopy, 0, &bytefetch){
-}
-
-defcode("bmove", bytemove, 0, &bytecopy){
-}
-
-/* Input/Output Words
- *****************************************************************************/
-defcode("putc", put_io_c, 0, &bytemove){
-    putc((char)*(ArgStackPtr), stdout);
-    ArgStackPtr--;
-}
-
-/* Compiler Words
- *****************************************************************************/
 defcode("wcwa", code_word_addr, 0, &put_io_c){
     word_t const* word = (word_t const*)*(ArgStackPtr);
     *(ArgStackPtr) = (long)word->codeword;
@@ -456,11 +238,11 @@ defcode(",", comma, 0, &hidden){
 }
 
 defcode("[", lbrack, 0, &comma){
-    state_val = 0;
+    state_val = 1;
 }
 
 defcode("]", rbrack, 0, &lbrack){
-    state_val = 1;
+    state_val = 0;
 }
 
 defcode(":", colon, 0, &rbrack){
@@ -482,6 +264,280 @@ defcode("branch", branch, 0, &semicolon){
 defcode("0branch", branch_if_0, 0, &branch){
 }
 
+/* Built-in Primitive Words
+ *****************************************************************************/
+//defcode("drop", drop, 0, &create){
+//    ArgStackPtr--;
+//}
+//
+//defcode("swap", swap, 0, &drop){
+//    long temp = *(ArgStackPtr);
+//    *(ArgStackPtr) = *(ArgStackPtr-1);
+//    *(ArgStackPtr-1) = temp;
+//}
+//
+//defcode("dup", dup, 0, &swap){
+//    ArgStackPtr++;
+//    *(ArgStackPtr) = *(ArgStackPtr-1);
+//}
+//
+//defcode("over", over, 0, &dup){
+//    ArgStackPtr++;
+//    *(ArgStackPtr) = *(ArgStackPtr-2);
+//}
+//
+//defcode("rot", rot, 0, &over){
+//    long temp = *(ArgStackPtr);
+//    *(ArgStackPtr) = *(ArgStackPtr-1);
+//    *(ArgStackPtr-1) = *(ArgStackPtr-2);
+//    *(ArgStackPtr-2) = temp;
+//}
+//
+//defcode("-rot", nrot, 0, &rot){
+//    long temp = *(ArgStackPtr-2);
+//    *(ArgStackPtr-2) = *(ArgStackPtr-1);
+//    *(ArgStackPtr-1) = *(ArgStackPtr);
+//    *(ArgStackPtr) = temp;
+//}
+//
+//defcode("2drop", twodrop, 0, &nrot){
+//    ArgStackPtr -= 2;
+//}
+//
+//defcode("2dup", twodup, 0, &twodrop){
+//    ArgStackPtr += 2;
+//    *(ArgStackPtr-1) = *(ArgStackPtr-3);
+//    *(ArgStackPtr) = *(ArgStackPtr-2);
+//}
+//
+//defcode("2swap", twoswap, 0, &twodup){
+//}
+//
+//defcode("?dup", qdup, 0, &twoswap){
+//}
+//
+//defcode("1+", incr, 0, &qdup){
+//    *(ArgStackPtr) += 1;
+//}
+//
+//defcode("1-", decr, 0, &incr){
+//    *(ArgStackPtr) -= 1;
+//}
+//
+//defcode("4+", incr4, 0, &decr){
+//    *(ArgStackPtr) += 1;
+//}
+//
+//defcode("4-", decr4, 0, &incr4){
+//    *(ArgStackPtr) -= 1;
+//}
+//
+//defcode("+", add, 0, &decr4){
+//    *(ArgStackPtr-1) += *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("-", sub, 0, &add){
+//    *(ArgStackPtr-1) -= *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("*", mul, 0, &sub){
+//    *(ArgStackPtr-1) *= *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("/", divide, 0, &mul){
+//    *(ArgStackPtr-1) /= *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("%", mod, 0, &divide){
+//    *(ArgStackPtr-1) %= *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("/%", divmod, 0, &mod){
+//}
+//
+//defcode("=", equal, 0, &divmod){
+//    *(ArgStackPtr-1) = *(ArgStackPtr-1) == *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("!=", notequal, 0, &equal){
+//    *(ArgStackPtr-1) = *(ArgStackPtr-1) != *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("<", lessthan, 0, &notequal){
+//    *(ArgStackPtr-1) = *(ArgStackPtr-1) < *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode(">", greaterthan, 0, &lessthan){
+//    *(ArgStackPtr-1) = *(ArgStackPtr-1) > *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("<=", lessthaneq, 0, &greaterthan){
+//    *(ArgStackPtr-1) = *(ArgStackPtr-1) <= *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode(">=", greaterthaneq, 0, &lessthaneq){
+//    *(ArgStackPtr-1) = *(ArgStackPtr-1) >= *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("0=", zeroeq, 0, &greaterthaneq){
+//    *(ArgStackPtr) = *(ArgStackPtr) == 0;
+//}
+//
+//defcode("0!=", zeroneq, 0, &zeroeq){
+//    *(ArgStackPtr) = *(ArgStackPtr) != 0;
+//}
+//
+//defcode("0<", zerolt, 0, &zeroneq){
+//    *(ArgStackPtr) = *(ArgStackPtr) < 0;
+//}
+//
+//defcode("0>", zerogt, 0, &zerolt){
+//    *(ArgStackPtr) = *(ArgStackPtr) > 0;
+//}
+//
+//defcode("0<=", zerolte, 0, &zerogt){
+//    *(ArgStackPtr) = *(ArgStackPtr) <= 0;
+//}
+//
+//defcode("0>=", zerogte, 0, &zerolte){
+//    *(ArgStackPtr) = *(ArgStackPtr) >= 0;
+//}
+//
+//defcode("and", and, 0, &zerogte){
+//    *(ArgStackPtr-1) = *(ArgStackPtr-1) && *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("or", or, 0, &and){
+//    *(ArgStackPtr-1) = *(ArgStackPtr-1) || *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("not", not, 0, &or){
+//    *(ArgStackPtr) = !(*(ArgStackPtr));
+//}
+//
+//defcode("band", band, 0, &not){
+//    *(ArgStackPtr-1) = *(ArgStackPtr-1) & *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("bor", bor, 0, &band){
+//    *(ArgStackPtr-1) = *(ArgStackPtr-1) | *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("bxor", bxor, 0, &bor){
+//    *(ArgStackPtr-1) = *(ArgStackPtr-1) ^ *(ArgStackPtr);
+//    ArgStackPtr--;
+//}
+//
+//defcode("bnot", bnot, 0, &bxor){
+//    *(ArgStackPtr) = ~(*(ArgStackPtr));
+//}
+//
+//defcode("lit", lit, 0, &bnot){
+//    ArgStackPtr++;
+//    *(ArgStackPtr) = *(inst_ptr);
+//}
+//
+//defcode("!", store, 0, &lit){
+//}
+//
+//defcode("@", fetch, 0, &store){
+//    puts("@ Executed");
+//}
+//
+//defcode("+!", addstore, 0, &fetch){
+//}
+//
+//defcode("-!", substore, 0, &addstore){
+//}
+//
+//defcode("b!", bytestore, 0, &substore){
+//}
+//
+//defcode("b@", bytefetch, 0, &bytestore){
+//}
+//
+//defcode("b@b!", bytecopy, 0, &bytefetch){
+//}
+//
+//defcode("bmove", bytemove, 0, &bytecopy){
+//}
+
+/* Input/Output Words
+ *****************************************************************************/
+defcode("putc", put_io_c, 0, &bytemove){
+    putc((char)*(ArgStackPtr), stdout);
+    ArgStackPtr--;
+}
+
+/* Compiler Words
+ *****************************************************************************/
+//defcode("wcwa", code_word_addr, 0, &put_io_c){
+//    word_t const* word = (word_t const*)*(ArgStackPtr);
+//    *(ArgStackPtr) = (long)word->codeword;
+//}
+//
+//defcode("wcda", code_data_addr, 0, &code_word_addr){
+//    word_t const* word = (word_t const*)*(ArgStackPtr);
+//    *(ArgStackPtr) = (long)word->code;
+//}
+//
+//defcode("immediate", immediate, 0, &code_data_addr){
+//    ((word_t*)latest_val)->flags ^= f_immed_val;
+//}
+//
+//defcode("hidden", hidden, 0, &immediate){
+//    ((word_t*)latest_val)->flags ^= f_hidden_val;
+//}
+//
+//defcode(",", comma, 0, &hidden){
+//    /* Get the word we are currently compiling */
+//    word_t* word  = (word_t*)latest_val;
+//    /* Put the next instruction in place of the terminating NULL that "here"
+//     * points too */
+//    *((long*)here_val) = *(ArgStackPtr);
+//    ArgStackPtr--;
+//    /* Resize the code section and relocate if necessary */
+//    long currsize = sizeof(long) + (here_val - (long)word->code);
+//    word->code    = (long*)realloc(word->code, currsize + sizeof(long));
+//    /* Update "here" and null terminate the code section */
+//    here_val      = (long)&(word->code[ (currsize / sizeof(long)) ]);
+//    *((long*)here_val) = 0;
+//}
+//
+//defcode("[", lbrack, 0, &comma){
+//    state_val = 1;
+//}
+//
+//defcode("]", rbrack, 0, &lbrack){
+//    state_val = 0;
+//}
+//
+//defcode(":", colon, 0, &rbrack){
+//    EXEC(get_word);
+//    EXEC(create);
+//    EXEC(rbrack);
+//}
+//
+//defcode(";", semicolon, 0, &colon){
+//    ((word_t*)latest_val)->flags ^= f_hidden_val;
+//    state_val = 0;
+//}
+
 /* Main
  *****************************************************************************/
 int main(int argc, char** argv)