Show
Ignore:
Timestamp:
08/20/08 20:48:37 (5 months ago)
Author:
ruoso
Message:

[smop] YAY! We have code blocks working... with signature binding and all...

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • v6/smop/src/smop_mold.c

    r21919 r21971  
    88SMOP__Object* SMOP__Mold; 
    99SMOP__Object* SMOP__Mold__Frame; 
     10 
     11static SMOP__Object* SMOP__ID__set_reg; 
     12static SMOP__Object* SMOP__ID__set_back; 
    1013 
    1114typedef struct smop_mold { 
     
    143146    SMOP__Object* mold = SMOP__NATIVE__capture_positional(interpreter, capture, 0); 
    144147    ret = SMOP__Mold__Frame_create(interpreter,mold); 
     148  } else if (SMOP__ID__set_reg == identifier) { 
     149 
     150    SMOP__Object* reg_pos = SMOP__NATIVE__capture_positional(interpreter, capture, 0); 
     151    SMOP__Object* value = SMOP__NATIVE__capture_positional(interpreter, capture, 1); 
     152    mold_reg_set(interpreter, invocant, SMOP__NATIVE__int_fetch(reg_pos), value); 
     153 
     154  } else if (SMOP__ID__back == identifier) { 
     155 
     156    SMOP__Object* value = SMOP__NATIVE__capture_positional(interpreter, capture, 0); 
     157    if (frame->back) { 
     158      ret = SMOP_REFERENCE(interpreter,frame->back); 
     159    } 
     160 
     161  } else if (SMOP__ID__set_back == identifier) { 
     162 
     163    SMOP__Object* value = SMOP__NATIVE__capture_positional(interpreter, capture, 0); 
     164    if (!frame->back) { 
     165      frame->back = value; 
     166    } else { 
     167      printf("trying to set a new back to the frame\n"); 
     168      abort(); 
     169    } 
     170 
    145171  } else if (SMOP__ID__has_next == identifier) { 
    146172    if (mold->opcodes[frame->position]) { 
     
    289315 
    290316void smop_mold_init() { 
     317  SMOP__ID__set_reg = SMOP__NATIVE__idconst_create("set_reg"); 
     318  SMOP__ID__set_back = SMOP__NATIVE__idconst_create("set_back"); 
     319 
    291320  SMOP__Mold = calloc(1,sizeof(SMOP__ResponderInterface)); 
    292321  ((SMOP__ResponderInterface*)SMOP__Mold)->MESSAGE = smop_mold_message;