Changeset 72

Show
Ignore:
Timestamp:
03/04/06 19:57:01 (3 years ago)
Author:
krobillard
Message:

Added 'rot opcode.
Replaced UR_BIG_ENDIAN with BIG_ENDIAN.

Location:
trunk/thune
Files:
9 modified

Legend:

Unmodified
Added
Removed
  • trunk/thune/boot.c

    r40 r72  
    1010  "  opcode!  8 'nip     make :nip\n" 
    1111  "  opcode!  9 'tuck    make :tuck\n" 
    12   "  opcode! 10 'do      make :xx-do\n" 
    13   "  opcode! 11 'func    make :func\n" 
    14   "  opcode! 12 'iter    make :iter\n" 
    15   "  opcode! 13 'recurse make :recurse\n" 
    16   "  opcode! 14 'loop    make :xx-loop\n" 
    17   "  opcode! 15 'return  make :return\n" 
    18   "  opcode! 16 'throw   make :throw\n" 
    19   "  opcode! 17 'try     make :try\n" 
    20   "  opcode! 18 'ift     make :ift\n" 
    21   "  opcode! 19 'iff     make :iff\n" 
    22   "  opcode! 20 '!       make :!\n" 
    23   "  opcode! 21 'quit    make :quit\n" 
    24   "  opcode! 22 'inc     make :inc\n" 
    25   "  opcode! 23 'dec     make :dec\n" 
    26   "  opcode! 24 'verify    make :verify\n" 
    27   "  opcode! 25 'verify.2  make :verify.2\n" 
    28   "  opcode! 26 'verify.3  make :verify.3\n" 
     12  "  opcode! 10 'rot     make :rot\n" 
     13  "  opcode! 11 'do      make :xx-do\n" 
     14  "  opcode! 12 'func    make :func\n" 
     15  "  opcode! 13 'iter    make :iter\n" 
     16  "  opcode! 14 'recurse make :recurse\n" 
     17  "  opcode! 15 'loop    make :xx-loop\n" 
     18  "  opcode! 16 'return  make :return\n" 
     19  "  opcode! 17 'throw   make :throw\n" 
     20  "  opcode! 18 'try     make :try\n" 
     21  "  opcode! 19 'ift     make :ift\n" 
     22  "  opcode! 20 'iff     make :iff\n" 
     23  "  opcode! 21 '!       make :!\n" 
     24  "  opcode! 22 'quit    make :quit\n" 
     25  "  opcode! 23 'inc     make :inc\n" 
     26  "  opcode! 24 'dec     make :dec\n" 
     27  "  opcode! 25 'verify    make :verify\n" 
     28  "  opcode! 26 'verify.2  make :verify.2\n" 
     29  "  opcode! 27 'verify.3  make :verify.3\n" 
    2930  "] make :urlan-ops\n" 
    3031; 
  • trunk/thune/doc/UserManual

    r49 r72  
    122122nip      (a b -- b)         Remove second value on stack. 
    123123tuck     (a b -- b a b)     Copy top value under second value. 
     124rot      (a b c -- b c a)   Rotate third value to top. 
    124125=======  =================  ================= 
    125126 
  • trunk/thune/doc/thune.vim

    r49 r72  
    4141" Booleans 
    4242syn keyword     thuneBoolean    true false on off yes no 
    43 syn keyword     thuneOpcode     drop dup dup2 over swap inc dec 
     43syn keyword     thuneOpcode     drop dup dup2 over swap inc dec nip tuck 
    4444 
    4545" Values 
  • trunk/thune/eval.c

    r49 r72  
    429429                        break; 
    430430 
    431                     //case OP_ROT:          // (a b c -- b c a) 
    432  
    433431                    case OP_TUCK:         // (a b -- b a b) 
    434432                    { 
     
    437435                        UR_TOS[1] = UR_TOS[2]; 
    438436                        UR_TOS[2] = *UR_TOS; 
     437                    } 
     438                        ++pc; 
     439                        break; 
     440 
     441                    case OP_ROT:          // (a b c -- b c a) 
     442                    { 
     443                        UCell tmp = UR_TOS[2]; 
     444                        UR_TOS[2] = UR_TOS[1]; 
     445                        UR_TOS[1] = *UR_TOS; 
     446                        *UR_TOS = tmp; 
    439447                    } 
    440448                        ++pc; 
  • trunk/thune/internal.h

    r40 r72  
    118118#define OP_NIP              8 
    119119#define OP_TUCK             9 
    120 #define OP_DO               10 
    121 #define OP_FUNC             11 
    122 #define OP_ITER             12 
    123 #define OP_RECURSE          13 
    124 #define OP_LOOP             14 
    125 #define OP_RETURN           15 
    126 #define OP_THROW            16 
    127 #define OP_TRY              17 
    128 #define OP_IF_TRUE          18 
    129 #define OP_IF_FALSE         19 
    130 #define OP_HALT             20 
    131 #define OP_QUIT             21 
    132 #define OP_INCREMENT        22 
    133 #define OP_DECREMENT        23 
    134 #define OP_VERIFY           24 
    135 #define OP_VERIFY_2         25 
    136 #define OP_VERIFY_3         26 
     120#define OP_ROT              10 
     121#define OP_DO               11 
     122#define OP_FUNC             12 
     123#define OP_ITER             13 
     124#define OP_RECURSE          14 
     125#define OP_LOOP             15 
     126#define OP_RETURN           16 
     127#define OP_THROW            17 
     128#define OP_TRY              18 
     129#define OP_IF_TRUE          19 
     130#define OP_IF_FALSE         20 
     131#define OP_HALT             21 
     132#define OP_QUIT             22 
     133#define OP_INCREMENT        23 
     134#define OP_DECREMENT        24 
     135#define OP_VERIFY           25 
     136#define OP_VERIFY_2         26 
     137#define OP_VERIFY_3         27 
    137138//#define OP_END              255 
    138139 
  • trunk/thune/tests/working/factorial.good

    r5 r72  
    111409286144 
     210946 
  • trunk/thune/tests/working/factorial.t

    r5 r72  
    8830 factorial . 
    99 
     10 
     11[ 
     12    dup 2 lt? ift (drop 1 return) 
     13    dup 1 sub fibonacci 
     14    swap 2 sub fibonacci add 
     15] 
     16func :fibonacci   ; (n -- res) 
     17 
     1820 fibonacci . 
  • trunk/thune/urlan.c

    r49 r72  
    141141 
    142142 
     143#ifdef DEBUG 
     144static void _validateEnv() 
     145{ 
     146    int i; 
     147 
     148    assert( sizeof(UCell) == 16 ); 
     149    assert( sizeof(CEntry) == 16 ); 
     150 
     151    // Make sure endianess is correct. 
     152    i = 1; 
     153#ifdef __BIG_ENDIAN__ 
     154    assert(0 == *(char*)&i && "Undefine __BIG_ENDIAN__"); 
     155#else 
     156    assert(1 == *(char*)&i && "Define __BIG_ENDIAN__"); 
     157#endif 
     158} 
     159#endif 
     160 
     161 
    143162extern void ur_makeCallsEval(); 
    144163extern void ur_makeCallsSeries(); 
     
    154173    int n; 
    155174 
    156     assert( sizeof(UCell) == 16 ); 
    157     assert( sizeof(CEntry) == 16 ); 
     175#ifdef DEBUG 
     176    _validateEnv(); 
     177#endif 
    158178 
    159179    ur_env = env; 
  • trunk/thune/urlan.h

    r41 r72  
    3636#define UR_VERSION_STR  "0.0.1" 
    3737#define UR_VERSION      0x000001 
    38  
    39  
    40 #if defined(__APPLE__) && defined(__BIG_ENDIAN__) 
    41 #define UR_BIG_ENDIAN   1 
    42 #endif 
    4338 
    4439 
     
    448443 
    449444#define ur_type(c)          (c)->id.type 
    450 #ifdef UR_BIG_ENDIAN 
     445#ifdef __BIG_ENDIAN__ 
    451446#define ur_setType(c,t)     *((uint32_t*) (c)) = t << 24 
    452447#else