Changeset 284 for trunk/thune/rune

Show
Ignore:
Timestamp:
09/25/06 15:40:57 (2 years ago)
Author:
krobillard
Message:

Rune - Can now make contexts.

Location:
trunk/thune/rune
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/thune/rune/rune.c

    r282 r284  
    197197        goto push_infix; 
    198198 
     199extern int ur_getSelector( UThread*, const UCell* sel, UCell* res ); 
    199200 
    200201int rune_eval( UThread* ur_thread, UIndex blkN, UIndex si ) 
     
    347348            goto invalid_opcode; 
    348349 
     350        case UT_SELECT: 
     351            if( ! ur_getSelector( ur_thread, val, UR_TOS ) ) 
     352            { 
     353                --pc; 
     354                goto trace_error; //throw_cc 
     355            } 
     356            val = UR_TOS; 
     357            if( ur_is(val, UT_FUNCTION) ) 
     358                goto do_func; 
     359            break; 
     360 
    349361        case UT_PAREN: 
    350362            goto do_block; 
    351363 
    352364        case UT_FUNCTION: 
     365do_func: 
    353366            if( ur_argc(val) == 0 ) 
    354367                goto call_func; 
     
    499512            goto control; 
    500513 
     514        case UT_CONTEXT: 
     515            // Denotes context returned from uc_make(). 
     516            val = OR_TOC; 
     517            UR_C_DEC; 
     518            goto control; 
     519 
    501520        case UT_FUNCTION: 
    502521            LOOK_AHEAD_FOR_INFIX 
     
    561580        case OP_DO: 
    562581            UR_CALL_OP = 0; 
     582            // uc_make() leaves (ctx blk) on stack. 
     583            PUSHC_CELL( UR_TOS ); 
     584            UR_S_DROP; 
    563585            goto do_block; 
    564586 
     
    963985  "] make-opcodes :rune-ops\n" 
    964986  "[\n" 
     987  "  0 :context\n" 
    965988  "  0 :prin\n" 
    966989  "  0 :print\n" 
     
    9851008  "  to-text [val]\n" 
    9861009  "  reduce  [val]\n" 
     1010  "  make    [type spec]\n" 
    9871011  "  func.loop [sig body]\n" 
    9881012  "] define-natives\n" 
    9891013  "[\n" 
     1014  "  context: func [spec] [make context! spec]\n" 
    9901015  "  prin:  func [val] [cout to-text val]\n" 
    9911016  "  print: func [val] [cout to-text val cout eol]\n" 
  • trunk/thune/rune/tests/eval.good

    r281 r284  
    4141Timing print string. 
    4242time! 
     43--- Context --- 
     441 
     452 
     46Hello 
     47'^/' 
  • trunk/thune/rune/tests/eval.t

    r282 r284  
    6060    [type? time-blk [print "Timing print string."]] 
    6161 
     62tst "--- Context ---" 
     63[ 
     64    c: context [a: 1 b: 2 c: does [print "Hello"]] 
     65    probe c/a 
     66    probe c/b 
     67    c/c 
     68] 
     69 
    6270] rune 
    6371