Ticket #1345: pmc_freeze_push_shift.patch

File pmc_freeze_push_shift.patch, 6.1 KB (added by plobsing, 12 years ago)
  • src/pmc_freeze.c

     
    8787        __attribute__nonnull__(1) 
    8888        __attribute__nonnull__(2); 
    8989 
    90 static void push_opcode_pmc(PARROT_INTERP, 
    91     ARGIN(IMAGE_IO *io), 
    92     ARGIN(PMC* v)) 
    93         __attribute__nonnull__(1) 
    94         __attribute__nonnull__(2) 
    95         __attribute__nonnull__(3); 
    96  
    9790static void push_opcode_string(PARROT_INTERP, 
    9891    ARGIN(IMAGE_IO *io), 
    9992    ARGIN(STRING *v)) 
     
    116109        __attribute__nonnull__(2); 
    117110 
    118111PARROT_WARN_UNUSED_RESULT 
    119 PARROT_CAN_RETURN_NULL 
    120 static PMC* shift_opcode_pmc(PARROT_INTERP, ARGIN(IMAGE_IO *io)) 
    121         __attribute__nonnull__(1) 
    122         __attribute__nonnull__(2); 
    123  
    124 PARROT_WARN_UNUSED_RESULT 
    125112PARROT_CANNOT_RETURN_NULL 
    126113static STRING* shift_opcode_string(PARROT_INTERP, ARGIN(IMAGE_IO *io)) 
    127114        __attribute__nonnull__(1) 
     
    207194#define ASSERT_ARGS_push_opcode_number __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    208195       PARROT_ASSERT_ARG(interp) \ 
    209196    , PARROT_ASSERT_ARG(io)) 
    210 #define ASSERT_ARGS_push_opcode_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    211        PARROT_ASSERT_ARG(interp) \ 
    212     , PARROT_ASSERT_ARG(io) \ 
    213     , PARROT_ASSERT_ARG(v)) 
    214197#define ASSERT_ARGS_push_opcode_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    215198       PARROT_ASSERT_ARG(interp) \ 
    216199    , PARROT_ASSERT_ARG(io) \ 
     
    222205       PARROT_ASSERT_ARG(io)) 
    223206#define ASSERT_ARGS_shift_opcode_number __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    224207       PARROT_ASSERT_ARG(io)) 
    225 #define ASSERT_ARGS_shift_opcode_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    226        PARROT_ASSERT_ARG(interp) \ 
    227     , PARROT_ASSERT_ARG(io)) 
    228208#define ASSERT_ARGS_shift_opcode_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    229209       PARROT_ASSERT_ARG(interp) \ 
    230210    , PARROT_ASSERT_ARG(io)) 
     
    404384 
    405385/* 
    406386 
    407 =item C<static void push_opcode_pmc(PARROT_INTERP, IMAGE_IO *io, PMC* v)> 
    408  
    409 Pushes the PMC C<*v> onto the end of the C<*io> "stream". 
    410  
    411 =cut 
    412  
    413 */ 
    414  
    415 static void 
    416 push_opcode_pmc(PARROT_INTERP, ARGIN(IMAGE_IO *io), ARGIN(PMC* v)) 
    417 { 
    418     ASSERT_ARGS(push_opcode_pmc) 
    419     UINTVAL size = sizeof (opcode_t); 
    420     STRING   *op = Parrot_str_new_init(interp, (char *)&v, size, 
    421         Parrot_fixed_8_encoding_ptr, Parrot_binary_charset_ptr, 0); 
    422     io->image = Parrot_str_append(interp, io->image, op); 
    423 } 
    424  
    425  
    426 /* 
    427  
    428387=item C<static INTVAL shift_opcode_integer(PARROT_INTERP, IMAGE_IO *io)> 
    429388 
    430389Removes and returns an integer from the start of the C<*io> "stream". 
     
    453412 
    454413/* 
    455414 
    456 =item C<static PMC* shift_opcode_pmc(PARROT_INTERP, IMAGE_IO *io)> 
    457  
    458 Removes and returns an PMC from the start of the C<*io> "stream". 
    459  
    460 Note that this actually reads a PMC id, not a PMC. 
    461  
    462 =cut 
    463  
    464 */ 
    465  
    466 PARROT_WARN_UNUSED_RESULT 
    467 PARROT_CAN_RETURN_NULL 
    468 static PMC* 
    469 shift_opcode_pmc(PARROT_INTERP, ARGIN(IMAGE_IO *io)) 
    470 { 
    471     ASSERT_ARGS(shift_opcode_pmc) 
    472     INTVAL i = shift_opcode_integer(interp, io); 
    473     return (PMC *)i; 
    474 } 
    475  
    476  
    477 /* 
    478  
    479415=item C<static FLOATVAL shift_opcode_number(PARROT_INTERP, IMAGE_IO *io)> 
    480416 
    481417Removes and returns an number from the start of the C<*io> "stream". 
     
    555491 
    556492static image_funcs opcode_funcs = { 
    557493    push_opcode_integer, 
    558     push_opcode_pmc, 
    559494    push_opcode_string, 
    560495    push_opcode_number, 
    561496    shift_opcode_integer, 
    562     shift_opcode_pmc, 
    563497    shift_opcode_string, 
    564498    shift_opcode_number 
    565499}; 
     
    682616 
    683617    if (PMC_IS_NULL(pmc)) { 
    684618        /* NULL + seen bit */ 
    685         VTABLE_push_pmc(interp, io, (PMC*)PackID_new(NULL, enum_PackID_seen)); 
     619        VTABLE_push_integer(interp, io, PackID_new(NULL, enum_PackID_seen)); 
    686620        return; 
    687621    } 
    688622 
     
    694628    if (seen) { 
    695629        if (info->extra_flags) { 
    696630            PackID_set_FLAGS(id, enum_PackID_extra_info); 
    697             VTABLE_push_pmc(interp, io, (PMC *)id); 
     631            VTABLE_push_integer(interp, io, id); 
    698632            VTABLE_push_integer(interp, io, info->extra_flags); 
    699633            return; 
    700634        } 
     
    704638    else if (type == info->last_type) 
    705639        PackID_set_FLAGS(id, enum_PackID_prev_type); 
    706640 
    707     VTABLE_push_pmc(interp, io, (PMC*)id); 
     641    VTABLE_push_integer(interp, io, id); 
    708642 
    709643    if (PackID_get_FLAGS(id) == enum_PackID_normal) { 
    710644        /* write type */ 
     
    744678{ 
    745679    ASSERT_ARGS(thaw_pmc) 
    746680    IMAGE_IO * const io   = info->image_io; 
    747     PMC             *n    = VTABLE_shift_pmc(interp, io); 
     681    UINTVAL          n    = VTABLE_shift_integer(interp, io); 
    748682    int              seen = 0; 
    749683 
    750684    info->extra_flags     = EXTRA_IS_NULL; 
     
    778712        break; 
    779713    } 
    780714 
    781     *id = (UINTVAL)n; 
     715    *id = n; 
    782716    return seen; 
    783717} 
    784718 
  • include/parrot/pmc_freeze.h

     
    2929struct _image_io; 
    3030#define IMAGE_IO struct _image_io 
    3131typedef void (*push_integer_f)       (PARROT_INTERP, IMAGE_IO*, INTVAL); 
    32 typedef void (*push_pmc_f)           (PARROT_INTERP, IMAGE_IO*, PMC*); 
    3332typedef void (*push_string_f)        (PARROT_INTERP, IMAGE_IO*, STRING*); 
    3433typedef void (*push_number_f)        (PARROT_INTERP, IMAGE_IO*, FLOATVAL); 
    35 typedef INTVAL (*shift_integer_f)      (PARROT_INTERP, IMAGE_IO*); 
    36 typedef PMC*    (*shift_pmc_f)          (PARROT_INTERP, IMAGE_IO*); 
    37 typedef STRING* (*shift_string_f)       (PARROT_INTERP, IMAGE_IO*); 
    38 typedef FLOATVAL (*shift_number_f)       (PARROT_INTERP, IMAGE_IO*); 
     34typedef INTVAL (*shift_integer_f)    (PARROT_INTERP, IMAGE_IO*); 
     35typedef STRING* (*shift_string_f)    (PARROT_INTERP, IMAGE_IO*); 
     36typedef FLOATVAL (*shift_number_f)   (PARROT_INTERP, IMAGE_IO*); 
    3937 
    4038typedef struct _image_funcs { 
    4139    push_integer_f      push_integer; 
    42     push_pmc_f          push_pmc; 
    4340    push_string_f       push_string; 
    4441    push_number_f       push_float; 
    4542    shift_integer_f     shift_integer; 
    46     shift_pmc_f         shift_pmc; 
    4743    shift_string_f      shift_string; 
    4844    shift_number_f      shift_float; 
    4945} image_funcs;