Changeset 22287 for v6

Show
Ignore:
Timestamp:
09/19/08 23:38:06 (2 months ago)
Author:
ruoso
Message:

[smop] starting to put map in place...

Location:
v6/smop
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • v6/smop/include/smop_identifiers.h

    r22272 r22287  
    116116extern SMOP__Object* SMOP__ID__signature;         /* "signature" */ 
    117117extern SMOP__Object* SMOP__ID__STORE;             /* "STORE" */ 
     118extern SMOP__Object* SMOP__ID__Void;             /* "Void" */ 
     119 
    118120#endif 
  • v6/smop/src/idconst_decl_all.h

    r22272 r22287  
    104104SMOP__Object* SMOP__ID__signature; 
    105105SMOP__Object* SMOP__ID__STORE; 
     106SMOP__Object* SMOP__ID__Void; 
  • v6/smop/src/idconst_init_all.c

    r22272 r22287  
    104104SMOP__ID__signature = SMOP__NATIVE__idconst_create_nolist( "signature" ); 
    105105SMOP__ID__STORE = SMOP__NATIVE__idconst_create_nolist( "STORE" ); 
    106 constlist_size = 105; 
     106SMOP__ID__Void = SMOP__NATIVE__idconst_create_nolist( "Void" ); 
     107constlist_size = 106; 
    107108constlist = calloc(constlist_size,sizeof(SMOP__Object*)); 
    108109assert(constlist); 
     
    212213constlist[103] = SMOP__ID__signature; 
    213214constlist[104] = SMOP__ID__STORE; 
     215constlist[105] = SMOP__ID__Void; 
  • v6/smop/src/smop_s1p_map.sm0p

    r22180 r22287  
    2020                                          SMOP__Object* identifier, 
    2121                                          SMOP__Object* capture) { 
    22   ___UNKNOWN_METHOD___; 
     22  ___NATIVE_CAPTURE_ONLY___; 
     23  ___CONST_IDENTIFIER_ONLY___; 
     24  ___INVOCANT_RI_SHOULD_MATCH___; 
     25  SMOP__Object* ret = SMOP__NATIVE__bool_false; 
     26 
     27  if (identifier == SMOP__ID__postcircumfix_parens) { 
     28    ret = smop_lowlevel_alloc(sizeof(smop_s1p_array_struct)); 
     29    ret->RI = (SMOP__ResponderInterface*)SMOP__S1P__map; 
     30    ((smop_s1p_array_struct*)ret)->code = SMOP__NATIVE__capture_positional(interpreter,capture,0); 
     31    ((smop_s1p_array_struct*)ret)->input_iterator = SMOP__NATIVE__capture_positional(interpreter,capture,1); 
     32 
     33  } else if (identifier == SMOP__ID__Void) { 
     34    // map in void context should evaluate eagerly. 
     35     
     36 
     37  } else if (identifier == SMOP__ID__DESTROYALL) { 
     38    smop_lowlevel_wrlock(invocant); 
     39    SMOP__Object* code = ((smop_s1p_array_struct*)invocant)->code; 
     40    ((smop_s1p_array_struct*)invocant)->code = NULL; 
     41    SMOP__Object* in = ((smop_s1p_array_struct*)invocant)->input_iterator; 
     42    ((smop_s1p_array_struct*)invocant)->input_iterator = NULL; 
     43    smop_lowlevel_unlock(invocant); 
     44     
     45    if (code) SMOP_RELEASE(interpreter, code); 
     46    if (in) SMOP_RELEASE(interpreter, in); 
     47 
     48  } else { 
     49    ___UNKNOWN_METHOD___; 
     50 
     51  } 
     52   
     53 
     54  SMOP_RELEASE(interpreter,invocant); 
     55  SMOP_RELEASE(interpreter,capture); 
     56  return ret; 
    2357} 
    2458 
  • v6/smop/test/30_array_map.m0ld

    r22206 r22287  
    4848my $iteritem = $iterator."FETCH"(); 
    4949 
    50 my $otheriterator = ¢SMOP__S1P__map."map"($code1, $iteritem); 
     50my $otheriterator = ¢SMOP__S1P__map."postcircumfix:( )"($code1, $iteritem); 
    5151 
    5252$void = $out."print"("ok 1 - map is lazy\n");