Changeset 22289 for v6

Show
Ignore:
Timestamp:
09/20/08 03:13:11 (2 months ago)
Author:
ruoso
Message:

[smop] Array.unshift implemented.

Location:
v6/smop
Files:
1 added
5 modified

Legend:

Unmodified
Added
Removed
  • v6/smop/CMakeLists.txt

    r22288 r22289  
    186186    test/32_array_iterator.m0ld 
    187187    test/33_pugs_simple.p6-pugs 
     188    test/34_array_unshift.m0ld 
    188189) 
    189190    set(c_file) 
  • v6/smop/include/smop_identifiers.h

    r22287 r22289  
    107107extern SMOP__Object* SMOP__ID__REPR_private_storage;                     /* "^!private_storage" */ 
    108108extern SMOP__Object* SMOP__ID__REPR_properties;   /* "^!properties" */ 
    109 extern SMOP__Object* SMOP__ID__REPR_submethods;      /* "^!submethods" */ 
     109extern SMOP__Object* SMOP__ID__REPR_submethods;   /* "^!submethods" */ 
    110110extern SMOP__Object* SMOP__ID__REPR_whence;       /* "^!whence" */ 
    111111extern SMOP__Object* SMOP__ID__REPR_who;          /* "^!who" */ 
     
    116116extern SMOP__Object* SMOP__ID__signature;         /* "signature" */ 
    117117extern SMOP__Object* SMOP__ID__STORE;             /* "STORE" */ 
    118 extern SMOP__Object* SMOP__ID__Void;             /* "Void" */ 
     118extern SMOP__Object* SMOP__ID__unshift;           /* "unshift" */ 
     119extern SMOP__Object* SMOP__ID__Void;              /* "Void" */ 
    119120 
    120121#endif 
  • v6/smop/src/idconst_decl_all.h

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

    r22287 r22289  
    104104SMOP__ID__signature = SMOP__NATIVE__idconst_create_nolist( "signature" ); 
    105105SMOP__ID__STORE = SMOP__NATIVE__idconst_create_nolist( "STORE" ); 
     106SMOP__ID__unshift = SMOP__NATIVE__idconst_create_nolist( "unshift" ); 
    106107SMOP__ID__Void = SMOP__NATIVE__idconst_create_nolist( "Void" ); 
    107 constlist_size = 106; 
     108constlist_size = 107; 
    108109constlist = calloc(constlist_size,sizeof(SMOP__Object*)); 
    109110assert(constlist); 
     
    213214constlist[103] = SMOP__ID__signature; 
    214215constlist[104] = SMOP__ID__STORE; 
    215 constlist[105] = SMOP__ID__Void; 
     216constlist[105] = SMOP__ID__unshift; 
     217constlist[106] = SMOP__ID__Void; 
  • v6/smop/src/smop_s1p_array.c

    r22272 r22289  
    11#include <stdlib.h> 
     2#include <string.h> 
    23#include <smop.h> 
    34#include <math.h> 
     
    7576    ret = SMOP__S1P__Array_Iterator_create(SMOP_REFERENCE(interpreter,(SMOP__Object*)invocant)); 
    7677 
     78  } else if (identifier == SMOP__ID__unshift) { 
     79    SMOP__Object* value = SMOP__NATIVE__capture_positional(interpreter, capture, 0); 
     80    if (invocant->size < (invocant->elems + 1)) { 
     81      resize_array(invocant, invocant->size + 1); 
     82    } 
     83    memmove(&invocant->content[1], &invocant->content[0], invocant->elems * sizeof(void*)); 
     84    invocant->content[0] = value; 
     85    invocant->elems++; 
     86 
    7787  } else if (identifier == SMOP__ID__elems) { 
    7888    ret = SMOP__NATIVE__int_create(invocant->elems); 
     89 
    7990  } else if (identifier == SMOP__ID__DESTROYALL) { 
    8091    int i;for (i=0;i < invocant->elems;i++) {