Changeset 22272 for v6

Show
Ignore:
Timestamp:
09/18/08 02:44:50 (2 months ago)
Author:
ruoso
Message:

[smop] the leaks are still there, but now array iterator is working...

Location:
v6/smop
Files:
1 added
9 modified

Legend:

Unmodified
Added
Removed
  • v6/smop/CMakeLists.txt

    r22270 r22272  
    129129    src/smop_s1p_map.c 
    130130    src/smop_s1p_pureprototypehow.c 
     131    src/smop_s1p_emptylist.c 
    131132    src/smop_s1p_bindcapturesignature.c 
    132133    src/smop_s1p_defaultblocksignature.c 
  • v6/smop/include/smop_identifiers.h

    r22183 r22272  
    5454extern SMOP__Object* SMOP__ID__infix_eq;          /* "infix:eq" */  
    5555extern SMOP__Object* SMOP__ID__infix_num_gt;      /* "infix:>" */  
     56extern SMOP__Object* SMOP__ID__infix_num_ge;      /* "infix:>=" */  
    5657extern SMOP__Object* SMOP__ID__input_array;       /* "input_array" */  
    5758extern SMOP__Object* SMOP__ID__invocant;          /* "invocant" */ 
     
    6061extern SMOP__Object* SMOP__ID__jail;              /* "jail" */ 
    6162extern SMOP__Object* SMOP__ID__lexical;           /* "lexical" */ 
     63extern SMOP__Object* SMOP__ID__List;              /* "List" */ 
    6264extern SMOP__Object* SMOP__ID__loop;              /* "loop" */ 
    6365extern SMOP__Object* SMOP__ID__mold;              /* "mold" */ 
  • v6/smop/include/smop_s1p.h

    r22263 r22272  
    1919extern SMOP__Object* SMOP__S1P__RootNamespace; 
    2020extern SMOP__Object* SMOP__S1P__Capturize; 
     21extern SMOP__Object* SMOP__S1P__EmptyList; 
    2122extern SMOP__Object* SMOP__S1P__LexicalScope; 
    2223extern SMOP__Object* SMOP__S1P__DefaultBlockSignature; 
  • v6/smop/src/idconst_decl_all.h

    r22183 r22272  
    4242SMOP__Object* SMOP__ID__infix_eq; 
    4343SMOP__Object* SMOP__ID__infix_num_gt; 
     44SMOP__Object* SMOP__ID__infix_num_ge; 
    4445SMOP__Object* SMOP__ID__input_array; 
    4546SMOP__Object* SMOP__ID__invocant; 
     
    4849SMOP__Object* SMOP__ID__jail; 
    4950SMOP__Object* SMOP__ID__lexical; 
     51SMOP__Object* SMOP__ID__List; 
    5052SMOP__Object* SMOP__ID__loop; 
    5153SMOP__Object* SMOP__ID__mold; 
  • v6/smop/src/idconst_init_all.c

    r22183 r22272  
    4242SMOP__ID__infix_eq = SMOP__NATIVE__idconst_create_nolist( "infix:eq" ); 
    4343SMOP__ID__infix_num_gt = SMOP__NATIVE__idconst_create_nolist( "infix:>" ); 
     44SMOP__ID__infix_num_ge = SMOP__NATIVE__idconst_create_nolist( "infix:>=" ); 
    4445SMOP__ID__input_array = SMOP__NATIVE__idconst_create_nolist( "input_array" ); 
    4546SMOP__ID__invocant = SMOP__NATIVE__idconst_create_nolist( "invocant" ); 
     
    4849SMOP__ID__jail = SMOP__NATIVE__idconst_create_nolist( "jail" ); 
    4950SMOP__ID__lexical = SMOP__NATIVE__idconst_create_nolist( "lexical" ); 
     51SMOP__ID__List = SMOP__NATIVE__idconst_create_nolist( "List" ); 
    5052SMOP__ID__loop = SMOP__NATIVE__idconst_create_nolist( "loop" ); 
    5153SMOP__ID__mold = SMOP__NATIVE__idconst_create_nolist( "mold" ); 
     
    102104SMOP__ID__signature = SMOP__NATIVE__idconst_create_nolist( "signature" ); 
    103105SMOP__ID__STORE = SMOP__NATIVE__idconst_create_nolist( "STORE" ); 
    104 constlist_size = 103; 
     106constlist_size = 105; 
    105107constlist = calloc(constlist_size,sizeof(SMOP__Object*)); 
    106108assert(constlist); 
     
    148150constlist[41] = SMOP__ID__infix_eq; 
    149151constlist[42] = SMOP__ID__infix_num_gt; 
    150 constlist[43] = SMOP__ID__input_array; 
    151 constlist[44] = SMOP__ID__invocant; 
    152 constlist[45] = SMOP__ID__isa; 
    153 constlist[46] = SMOP__ID__Iterator; 
    154 constlist[47] = SMOP__ID__jail; 
    155 constlist[48] = SMOP__ID__lexical; 
    156 constlist[49] = SMOP__ID__loop; 
    157 constlist[50] = SMOP__ID__mold; 
    158 constlist[51] = SMOP__ID__move_capturize; 
    159 constlist[52] = SMOP__ID__move_identifier; 
    160 constlist[53] = SMOP__ID__move_responder; 
    161 constlist[54] = SMOP__ID__named; 
    162 constlist[55] = SMOP__ID__name; 
    163 constlist[56] = SMOP__ID__new; 
    164 constlist[57] = SMOP__ID__next; 
    165 constlist[58] = SMOP__ID__outer; 
    166 constlist[59] = SMOP__ID__past; 
    167 constlist[60] = SMOP__ID__perl; 
    168 constlist[61] = SMOP__ID__positional; 
    169 constlist[62] = SMOP__ID__postcircumfix_curly; 
    170 constlist[63] = SMOP__ID__postcircumfix_parens; 
    171 constlist[64] = SMOP__ID__postcircumfix_square; 
    172 constlist[65] = SMOP__ID__postfix_plusplus; 
    173 constlist[66] = SMOP__ID__prefix_equal; 
    174 constlist[67] = SMOP__ID__private_name; 
    175 constlist[68] = SMOP__ID__push; 
    176 constlist[69] = SMOP__ID__register; 
    177 constlist[70] = SMOP__ID__REPR_attributes; 
    178 constlist[71] = SMOP__ID__REPR_bless; 
    179 constlist[72] = SMOP__ID__REPR_can; 
    180 constlist[73] = SMOP__ID__REPR_class_storage; 
    181 constlist[74] = SMOP__ID__REPR_clone; 
    182 constlist[75] = SMOP__ID__REPR_CREATE; 
    183 constlist[76] = SMOP__ID__REPR_defined; 
    184 constlist[77] = SMOP__ID__REPR_DESTROY; 
    185 constlist[78] = SMOP__ID__REPR_destroy_instance_storage; 
    186 constlist[79] = SMOP__ID__REPR_destroy_instance_storage_slot; 
    187 constlist[80] = SMOP__ID__REPR_does; 
    188 constlist[81] = SMOP__ID__REPR_has; 
    189 constlist[82] = SMOP__ID__REPR_how; 
    190 constlist[83] = SMOP__ID__REPR_initialize_instance_storage; 
    191 constlist[84] = SMOP__ID__REPR_initialize_instance_storage_slot; 
    192 constlist[85] = SMOP__ID__REPR_instance; 
    193 constlist[86] = SMOP__ID__REPR_instanceof; 
    194 constlist[87] = SMOP__ID__REPR_isa; 
    195 constlist[88] = SMOP__ID__REPR_methods; 
    196 constlist[89] = SMOP__ID__REPR_multimethods; 
    197 constlist[90] = SMOP__ID__REPR_multisubmethods; 
    198 constlist[91] = SMOP__ID__REPR_package; 
    199 constlist[92] = SMOP__ID__REPR_private_storage; 
    200 constlist[93] = SMOP__ID__REPR_properties; 
    201 constlist[94] = SMOP__ID__REPR_submethods; 
    202 constlist[95] = SMOP__ID__REPR_whence; 
    203 constlist[96] = SMOP__ID__REPR_who; 
    204 constlist[97] = SMOP__ID__responder; 
    205 constlist[98] = SMOP__ID__result; 
    206 constlist[99] = SMOP__ID__setr; 
    207 constlist[100] = SMOP__ID__shift; 
    208 constlist[101] = SMOP__ID__signature; 
    209 constlist[102] = SMOP__ID__STORE; 
     152constlist[43] = SMOP__ID__infix_num_ge; 
     153constlist[44] = SMOP__ID__input_array; 
     154constlist[45] = SMOP__ID__invocant; 
     155constlist[46] = SMOP__ID__isa; 
     156constlist[47] = SMOP__ID__Iterator; 
     157constlist[48] = SMOP__ID__jail; 
     158constlist[49] = SMOP__ID__lexical; 
     159constlist[50] = SMOP__ID__List; 
     160constlist[51] = SMOP__ID__loop; 
     161constlist[52] = SMOP__ID__mold; 
     162constlist[53] = SMOP__ID__move_capturize; 
     163constlist[54] = SMOP__ID__move_identifier; 
     164constlist[55] = SMOP__ID__move_responder; 
     165constlist[56] = SMOP__ID__named; 
     166constlist[57] = SMOP__ID__name; 
     167constlist[58] = SMOP__ID__new; 
     168constlist[59] = SMOP__ID__next; 
     169constlist[60] = SMOP__ID__outer; 
     170constlist[61] = SMOP__ID__past; 
     171constlist[62] = SMOP__ID__perl; 
     172constlist[63] = SMOP__ID__positional; 
     173constlist[64] = SMOP__ID__postcircumfix_curly; 
     174constlist[65] = SMOP__ID__postcircumfix_parens; 
     175constlist[66] = SMOP__ID__postcircumfix_square; 
     176constlist[67] = SMOP__ID__postfix_plusplus; 
     177constlist[68] = SMOP__ID__prefix_equal; 
     178constlist[69] = SMOP__ID__private_name; 
     179constlist[70] = SMOP__ID__push; 
     180constlist[71] = SMOP__ID__register; 
     181constlist[72] = SMOP__ID__REPR_attributes; 
     182constlist[73] = SMOP__ID__REPR_bless; 
     183constlist[74] = SMOP__ID__REPR_can; 
     184constlist[75] = SMOP__ID__REPR_class_storage; 
     185constlist[76] = SMOP__ID__REPR_clone; 
     186constlist[77] = SMOP__ID__REPR_CREATE; 
     187constlist[78] = SMOP__ID__REPR_defined; 
     188constlist[79] = SMOP__ID__REPR_DESTROY; 
     189constlist[80] = SMOP__ID__REPR_destroy_instance_storage; 
     190constlist[81] = SMOP__ID__REPR_destroy_instance_storage_slot; 
     191constlist[82] = SMOP__ID__REPR_does; 
     192constlist[83] = SMOP__ID__REPR_has; 
     193constlist[84] = SMOP__ID__REPR_how; 
     194constlist[85] = SMOP__ID__REPR_initialize_instance_storage; 
     195constlist[86] = SMOP__ID__REPR_initialize_instance_storage_slot; 
     196constlist[87] = SMOP__ID__REPR_instance; 
     197constlist[88] = SMOP__ID__REPR_instanceof; 
     198constlist[89] = SMOP__ID__REPR_isa; 
     199constlist[90] = SMOP__ID__REPR_methods; 
     200constlist[91] = SMOP__ID__REPR_multimethods; 
     201constlist[92] = SMOP__ID__REPR_multisubmethods; 
     202constlist[93] = SMOP__ID__REPR_package; 
     203constlist[94] = SMOP__ID__REPR_private_storage; 
     204constlist[95] = SMOP__ID__REPR_properties; 
     205constlist[96] = SMOP__ID__REPR_submethods; 
     206constlist[97] = SMOP__ID__REPR_whence; 
     207constlist[98] = SMOP__ID__REPR_who; 
     208constlist[99] = SMOP__ID__responder; 
     209constlist[100] = SMOP__ID__result; 
     210constlist[101] = SMOP__ID__setr; 
     211constlist[102] = SMOP__ID__shift; 
     212constlist[103] = SMOP__ID__signature; 
     213constlist[104] = SMOP__ID__STORE; 
  • v6/smop/src/native_int.c

    r22189 r22272  
    3131      //        SMOP__NATIVE__int_fetch(other)); 
    3232      if (SMOP__NATIVE__int_fetch(invocant) > SMOP__NATIVE__int_fetch(other)) { 
     33        ret = SMOP__NATIVE__bool_true; 
     34      } else { 
     35        ret = SMOP__NATIVE__bool_false; 
     36      } 
     37    } else { 
     38      ___UNKNOWN_METHOD___; 
     39    } 
     40 
     41    SMOP_RELEASE(interpreter, other); 
     42    SMOP_RELEASE(interpreter,invocant); 
     43 
     44  } else if (identifier == SMOP__ID__infix_num_ge) { 
     45 
     46    ___NATIVE_CAPTURE_ONLY___; 
     47    ___INVOCANT_RI_SHOULD_MATCH___; 
     48 
     49    SMOP__Object* other = SMOP__NATIVE__capture_positional(interpreter,capture,0); 
     50    if (SMOP_RI(other) == (SMOP__ResponderInterface*)SMOP__NATIVE__int) { 
     51      //fprintf(stderr,"native int: %d > %d\n", SMOP__NATIVE__int_fetch(invocant), 
     52      //        SMOP__NATIVE__int_fetch(other)); 
     53      if (SMOP__NATIVE__int_fetch(invocant) >= SMOP__NATIVE__int_fetch(other)) { 
    3354        ret = SMOP__NATIVE__bool_true; 
    3455      } else { 
  • v6/smop/src/smop_internal.h

    r22263 r22272  
    6464     smop_s1p_pureprototypehow_init();      \ 
    6565     smop_s1p_map_init();                   \ 
    66      smop_s1p_array_iterator_init();         
     66     smop_s1p_array_iterator_init();        \ 
     67     smop_s1p_emptylist_init(); 
    6768#define SMOP_INTERNAL_DESTROY_SEQUENCE      \ 
     69     smop_s1p_emptylist_destr();            \ 
    6870     smop_s1p_array_iterator_destr();       \ 
    6971     smop_s1p_map_destr();                  \ 
     
    160162void smop_s1p_itemrwcontext_init(); 
    161163void smop_s1p_itemrwcontext_destr(); 
    162  
     164void smop_s1p_emptylist_init(); 
     165void smop_s1p_emptylist_destr(); 
    163166 
    164167#endif 
  • v6/smop/src/smop_s1p_array.c

    r22268 r22272  
    100100    } else { 
    101101    } 
     102 
    102103  } else if (identifier == SMOP__ID__STORE) { 
    103104    resize_array(invocant->array,invocant->index+1); 
     
    106107    invocant->array->content[invocant->index] = SMOP__NATIVE__capture_positional(interpreter, capture,0); 
    107108    if (invocant->array->elems <= invocant->index) invocant->array->elems = invocant->index+1; 
     109 
    108110  } else if (identifier == SMOP__ID__DESTROYALL) { 
    109111    SMOP_RELEASE(interpreter,invocant->array); 
     112 
    110113  } else if (identifier == SMOP__ID__bool) { 
    111114    ret = SMOP__NATIVE__bool_true; 
     115 
     116  } else if (identifier == SMOP__ID__List) { 
     117    ret = SMOP_REFERENCE(interpreter,invocant); 
     118 
     119  } else if (identifier == SMOP__ID__elems) { 
     120    ret = SMOP__NATIVE__int_create(1); 
     121 
    112122  } else { 
    113123      ___UNKNOWN_METHOD___ 
    114124  } 
     125 
    115126  SMOP_RELEASE(interpreter,invocant); 
    116127  SMOP_RELEASE(interpreter,capture); 
  • v6/smop/src/smop_s1p_array_iterator.sm0p

    r22184 r22272  
    115115 
    116116    my $size = $array."elems"(); 
    117     my $bigger = $count."infix:>"($size); 
     117    my $bigger = $count."infix:>="($size); 
    118118 
    119119    if $bigger { goto final } else { goto has_next }; 
     
    124124      $void = $interpreter."goto"($back); 
    125125     final: 
    126       $void = $back."setr"(¢SMOP__NATIVE__bool_false); 
     126      $void = $back."setr"(¢SMOP__S1P__EmptyList); 
    127127      $void = $interpreter."goto"($back) 
    128128