Ticket #1783: 48898.48924.diff

File 48898.48924.diff, 151.1 KB (added by jkeenan, 4 years ago)

Changes to trunk over duration in which failures emerged on Darwin/PPC

  • runtime/parrot/library/P6object.pir

    Property changes on: runtime/parrot/library/Rules.mak
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/runtime/parrot/library/Rules.mak:r48886-48917
    
     
    260260    .local pmc methodpmc 
    261261    methodname = shift methoditer 
    262262    methodpmc = methods[methodname] 
     263    # don't add NativePCCMethods 
     264    $I0 = isa methodpmc, 'NativePCCMethod' 
     265    if $I0 goto method_loop 
    263266    # don't add NCI methods (they don't work) 
    264267    $I0 = isa methodpmc, 'NCI' 
    265268    if $I0 goto method_loop 
  • src/embed.c

    Property changes on: runtime/parrot/library/Math/Rand.pir
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/runtime/parrot/library/Math/Rand.pir:r48886-48917
    
    
    Property changes on: runtime/parrot/languages
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/runtime/parrot/languages:r48886-48917
    
     
    2525#include "pmc/pmc_sub.h" 
    2626#include "pmc/pmc_callcontext.h" 
    2727#include "parrot/runcore_api.h" 
     28#include "parrot/oplib/core_ops.h" 
    2829 
    2930#include "../compilers/imcc/imc.h" 
    3031 
     
    10771078Parrot_run_native(PARROT_INTERP, native_func_t func) 
    10781079{ 
    10791080    ASSERT_ARGS(Parrot_run_native) 
     1081    op_lib_t *core_ops  = PARROT_GET_CORE_OPLIB(interp); 
    10801082    PackFile * const pf = PackFile_new(interp, 0); 
    10811083    static opcode_t program_code[2] = { 
    10821084        0, /* enternative */ 
     
    10841086    }; 
    10851087 
    10861088    static op_func_t op_func_table[2]; 
    1087     op_func_table[0] = interp->op_func_table[ interp->op_lib->op_code(interp, "enternative", 0) ]; 
    1088     op_func_table[1] = interp->op_func_table[ interp->op_lib->op_code(interp, "end", 0) ]; 
     1089    op_func_table[0] = core_ops->op_func_table[PARROT_OP_enternative]; 
     1090    op_func_table[1] = core_ops->op_func_table[PARROT_OP_end]; 
    10891091 
    10901092 
    10911093    pf->cur_cs = (PackFile_ByteCode *) 
  • src/oo.c

     
    260260         || base_type == enum_class_ResizableStringArray 
    261261         || base_type == enum_class_String) 
    262262            type = Parrot_pmc_get_type(interp, key); 
    263         else if (VTABLE_does(interp, key, CONST_STRING(interp, "string")) || 
    264                 base_type == enum_class_NameSpace) 
    265             type = Parrot_pmc_get_type_str(interp, VTABLE_get_string(interp, key)); 
    266263        else 
    267             Parrot_ex_throw_from_c_args(interp, NULL, EXCEPTION_INVALID_OPERATION, 
    268                     "can't get class from an instance of class '%Ss'", VTABLE_name(interp, key)); 
     264            type = Parrot_pmc_get_type_str(interp, VTABLE_get_string(interp, key)); 
    269265 
    270266        classobj = get_pmc_proxy(interp, type); 
    271267    } 
  • src/ops/core_ops.c

     
    2620526205    hop         = NULL; 
    2620626206    hop_buckets = NULL; 
    2620726207} 
     26208PARROT_EXPORT 
    2620826209op_lib_t * 
    2620926210Parrot_DynOp_core_2_7_0(PARROT_INTERP, long init) { 
    2621026211    /* initialize and return op_lib ptr */ 
  • src/global_setup.c

     
    2323 
    2424#define INSIDE_GLOBAL_SETUP 
    2525#include "parrot/parrot.h" 
     26#include "parrot/oplib/core_ops.h" 
    2627#include "global_setup.str" 
    2728 
    2829/* These functions are defined in the auto-generated file core_pmcs.c */ 
     
    217218 
    218219    create_initial_context(interp); 
    219220 
     221    /* initialize the ops hash */ 
     222    if (interp->parent_interpreter) { 
     223        interp->op_hash = interp->parent_interpreter->op_hash; 
     224    } 
     225    else { 
     226        op_lib_t  *core_ops = PARROT_CORE_OPLIB_INIT(interp, 1); 
     227        interp->op_hash     = parrot_create_hash_sized(interp, enum_type_ptr, Hash_key_type_cstring, 
     228                                                        (hash_comp_fn)hash_compare_cstring, 
     229                                                        (hash_hash_key_fn)key_hash_cstring, 
     230                                                        core_ops->op_count); 
     231        parrot_hash_oplib(interp, core_ops); 
     232    } 
     233 
    220234    /* create the namespace root stash */ 
    221235    interp->root_namespace = Parrot_pmc_new(interp, enum_class_NameSpace); 
    222236    Parrot_init_HLL(interp); 
  • src/hash.c

     
    5454        __attribute__nonnull__(2); 
    5555 
    5656PARROT_WARN_UNUSED_RESULT 
    57 PARROT_PURE_FUNCTION 
    58 static int hash_compare_cstring(SHIM_INTERP, 
    59     ARGIN(const char *a), 
    60     ARGIN(const char *b)) 
    61         __attribute__nonnull__(2) 
    62         __attribute__nonnull__(3); 
    63  
    64 PARROT_WARN_UNUSED_RESULT 
    65 PARROT_PURE_FUNCTION 
    66 static size_t key_hash_cstring(SHIM_INTERP, 
    67     ARGIN(const void *value), 
    68     size_t seed) 
    69         __attribute__nonnull__(2); 
    70  
    71 PARROT_WARN_UNUSED_RESULT 
    7257PARROT_CONST_FUNCTION 
    7358static size_t key_hash_pointer(SHIM_INTERP, 
    7459    ARGIN(const void *value), 
     
    9782#define ASSERT_ARGS_get_string_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    9883       PARROT_ASSERT_ARG(interp) \ 
    9984    , PARROT_ASSERT_ARG(value)) 
    100 #define ASSERT_ARGS_hash_compare_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    101        PARROT_ASSERT_ARG(a) \ 
    102     , PARROT_ASSERT_ARG(b)) 
    103 #define ASSERT_ARGS_key_hash_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    104        PARROT_ASSERT_ARG(value)) 
    10585#define ASSERT_ARGS_key_hash_pointer __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    10686       PARROT_ASSERT_ARG(value)) 
    10787#define ASSERT_ARGS_parrot_mark_hash_both __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
     
    238218 
    239219/* 
    240220 
    241 =item C<static size_t key_hash_cstring(PARROT_INTERP, const void *value, size_t 
    242 seed)> 
     221=item C<size_t key_hash_cstring(PARROT_INTERP, const void *value, size_t seed)> 
    243222 
    244223Creates and returns a hash value from a string. 
    245224 
     
    254233 
    255234PARROT_WARN_UNUSED_RESULT 
    256235PARROT_PURE_FUNCTION 
    257 static size_t 
     236size_t 
    258237key_hash_cstring(SHIM_INTERP, ARGIN(const void *value), size_t seed) 
    259238{ 
    260239    ASSERT_ARGS(key_hash_cstring) 
     
    272251 
    273252/* 
    274253 
    275 =item C<static int hash_compare_cstring(PARROT_INTERP, const char *a, const char 
    276 *b)> 
     254=item C<int hash_compare_cstring(PARROT_INTERP, const char *a, const char *b)> 
    277255 
    278256Compares two C strings for equality, returning -1, 0, and 1 if the first string 
    279257is less than, equal to, or greater than the second, respectively. 
     
    284262 
    285263PARROT_WARN_UNUSED_RESULT 
    286264PARROT_PURE_FUNCTION 
    287 static int 
     265int 
    288266hash_compare_cstring(SHIM_INTERP, ARGIN(const char *a), ARGIN(const char *b)) 
    289267{ 
    290268    ASSERT_ARGS(hash_compare_cstring) 
  • src/pbc_merge.c

     
    4141#include "parrot/parrot.h" 
    4242#include "parrot/embed.h" 
    4343#include "parrot/oplib/ops.h" 
     44#include "parrot/oplib/core_ops.h" 
    4445#include "pmc/pmc_sub.h" 
    4546 
    4647 
     
    699700    opcode_t  *ops       = bc->base.data; 
    700701    opcode_t   cur_op    = 0; 
    701702    int        cur_input = 0; 
     703    op_lib_t  *core_ops  = PARROT_GET_CORE_OPLIB(interp); 
    702704 
    703705    /* Loop over the ops in the merged bytecode. */ 
    704706    while (cur_op < (opcode_t)bc->base.size) { 
     
    738740 
    739741        /* Handle special case variable argument opcodes. */ 
    740742        op_func = interp->code->op_func_table[op_num]; 
    741         if (op_func == interp->op_func_table[PARROT_OP_set_args_pc]    || 
    742             op_func == interp->op_func_table[PARROT_OP_get_results_pc] || 
    743             op_func == interp->op_func_table[PARROT_OP_get_params_pc]  || 
    744             op_func == interp->op_func_table[PARROT_OP_set_returns_pc]) { 
     743        if (op_func == core_ops->op_func_table[PARROT_OP_set_args_pc]    || 
     744            op_func == core_ops->op_func_table[PARROT_OP_get_results_pc] || 
     745            op_func == core_ops->op_func_table[PARROT_OP_get_params_pc]  || 
     746            op_func == core_ops->op_func_table[PARROT_OP_set_returns_pc]) { 
    745747            /* Get the signature. */ 
    746748            PMC * const sig = bc->const_table->constants[op_ptr[1]].u.key; 
    747749 
  • src/debug.c

     
    3333#include "debug.str" 
    3434#include "pmc/pmc_continuation.h" 
    3535#include "pmc/pmc_callcontext.h" 
     36#include "parrot/oplib/core_ops.h" 
    3637 
    3738/* Hand switched debugger tracing 
    3839 * Set to 1 to enable tracing to stderr 
     
    22562257    int         j; 
    22572258    size_t     size = 0; 
    22582259    int        specialop = 0; 
     2260    op_lib_t  *core_ops = PARROT_GET_CORE_OPLIB(interp); 
    22592261 
    22602262    /* Write the opcode name */ 
    22612263    const char * p = full_name ? info->full_name : info->name; 
     
    24522454       one fixed parameter (the signature vector), plus a varying number of 
    24532455       registers/constants.  For each arg/return, we show the register and its 
    24542456       flags using PIR syntax. */ 
    2455     if (OPCODE_IS(interp, interp->code, *(op), PARROT_OP_set_args_pc) 
    2456     ||  OPCODE_IS(interp, interp->code, *(op), PARROT_OP_set_returns_pc)) 
     2457    if (OPCODE_IS(interp, interp->code, *(op), core_ops, PARROT_OP_set_args_pc) 
     2458    ||  OPCODE_IS(interp, interp->code, *(op), core_ops, PARROT_OP_set_returns_pc)) 
    24572459        specialop = 1; 
    24582460 
    24592461    /* if it's a retrieving op, specialop = 2, so that later a :flat flag 
    24602462     * can be changed into a :slurpy flag. See flag handling below. 
    24612463     */ 
    2462     if (OPCODE_IS(interp, interp->code, *(op), PARROT_OP_get_results_pc) 
    2463     ||  OPCODE_IS(interp, interp->code, *(op), PARROT_OP_get_params_pc)) 
     2464    if (OPCODE_IS(interp, interp->code, *(op), core_ops, PARROT_OP_get_results_pc) 
     2465    ||  OPCODE_IS(interp, interp->code, *(op), core_ops, PARROT_OP_get_params_pc)) 
    24642466        specialop = 2; 
    24652467 
    24662468    if (specialop > 0) { 
  • src/namespace.c

     
    203203{ 
    204204    ASSERT_ARGS(internal_ns_keyed) 
    205205 
    206     if (VTABLE_isa(interp, pmc_key, CONST_STRING(interp, "String"))) { 
     206    if (PMC_IS_TYPE(pmc_key, Key)) 
     207        return internal_ns_keyed_key(interp, base_ns, pmc_key, flags); 
     208    else if (VTABLE_isa(interp, pmc_key, CONST_STRING(interp, "String"))) { 
    207209        STRING * const str_key = VTABLE_get_string(interp, pmc_key); 
    208210        return internal_ns_keyed_str(interp, base_ns, str_key, flags); 
    209211    } 
    210     else if (PMC_IS_TYPE(pmc_key, Key)) 
    211         return internal_ns_keyed_key(interp, base_ns, pmc_key, flags); 
    212212    else { 
    213213        /* array of strings */ 
    214214        STRING * const isans = CONST_STRING(interp, "NameSpace"); 
  • src/pmc/oplib.pmc

     
    6464        INTVAL        num; 
    6565 
    6666        GET_ATTR_oplib(INTERP, SELF, oplib); 
    67         num  = oplib->op_code(INTERP, cstr, 1); 
     67        num  = oplib->_op_code(INTERP, cstr, 1); 
    6868        if (num == -1) 
    69             num = oplib->op_code(INTERP, cstr, 0); 
     69            num = oplib->_op_code(INTERP, cstr, 0); 
    7070 
    7171        Parrot_str_free_cstring(cstr); 
    7272        return num; 
  • src/pmc/object.pmc

     
    677677*/ 
    678678 
    679679    VTABLE INTVAL isa(STRING *classname) { 
    680         if (SUPER(classname)) 
     680        if (SELF->vtable->whoami == classname 
     681        ||  Parrot_str_equal(INTERP, SELF->vtable->whoami, classname)) 
    681682            return 1; 
    682683        else { 
    683             PMC * _class = VTABLE_get_class(INTERP, SELF); 
     684            PMC *_class = PARROT_OBJECT(SELF)->_class; 
    684685            return VTABLE_isa(INTERP, _class, classname); 
    685686        } 
    686687    } 
  • src/pmc/nativepccmethod.pmc

     
    2020 
    2121/* HEADERIZER HFILE: none */ 
    2222 
    23 pmclass NativePCCMethod auto_attrs { 
     23pmclass NativePCCMethod auto_attrs provides invokable { 
    2424    ATTR STRING *signature; 
    2525    ATTR void   *func; 
    2626 
  • src/pmc/packfile.pmc

     
    2121 
    2222#include "pmc/pmc_packfiledirectory.h" 
    2323 
     24typedef enum { 
     25    attr_wordsize, 
     26    attr_byteorder, 
     27    attr_fptype, 
     28    attr_version_major, 
     29    attr_version_minor, 
     30    attr_version_patch, 
     31    attr_bytecode_major, 
     32    attr_bytecode_minor, 
     33    attr_uuid_type, 
     34    attr_NONE = -1 
     35} AttrEnumPackfile; 
     36 
    2437/* HEADERIZER HFILE: none */ 
    2538/* HEADERIZER BEGIN: static */ 
    2639/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */ 
     
    3346        __attribute__nonnull__(3) 
    3447        FUNC_MODIFIES(*self); 
    3548 
     49static AttrEnumPackfile getAttrEnum(PARROT_INTERP, 
     50    ARGIN(const STRING *name)) 
     51        __attribute__nonnull__(1) 
     52        __attribute__nonnull__(2); 
     53 
    3654#define ASSERT_ARGS_copy_packfile_header __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    3755       PARROT_ASSERT_ARG(interp) \ 
    3856    , PARROT_ASSERT_ARG(self) \ 
    3957    , PARROT_ASSERT_ARG(pf)) 
     58#define ASSERT_ARGS_getAttrEnum __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
     59       PARROT_ASSERT_ARG(interp) \ 
     60    , PARROT_ASSERT_ARG(name)) 
    4061/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */ 
    4162/* HEADERIZER END: static */ 
    4263 
     
    243264    VTABLE INTVAL get_integer_keyed_str(STRING *key) { 
    244265        Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF); 
    245266 
    246         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "wordsize"))) 
    247             return attrs->wordsize; 
    248         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "byteorder"))) 
    249             return attrs->byteorder; 
    250         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "fptype"))) 
    251             return attrs->fptype; 
    252         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_major"))) 
    253             return attrs->version_major; 
    254         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_minor"))) 
    255             return attrs->version_minor; 
    256         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_patch"))) 
    257             return attrs->version_patch; 
    258         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "bytecode_major"))) 
    259             return attrs->bytecode_major; 
    260         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "bytecode_minor"))) 
    261             return attrs->bytecode_minor; 
    262         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "uuid_type"))) 
    263             return attrs->uuid_type; 
    264  
    265         Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND, 
    266                        "Packfile: No such integer key \"%s\"", 
    267                        Parrot_str_cstring(INTERP, key)); 
     267        INTVAL result; 
     268        switch (getAttrEnum(INTERP, key)) { 
     269          case attr_wordsize: 
     270            result = attrs->wordsize; 
     271            break; 
     272          case attr_byteorder: 
     273            result = attrs->byteorder; 
     274            break; 
     275          case attr_fptype: 
     276            result = attrs->fptype; 
     277            break; 
     278          case attr_version_major: 
     279            result = attrs->version_major; 
     280            break; 
     281          case attr_version_minor: 
     282            result = attrs->version_minor; 
     283            break; 
     284          case attr_version_patch: 
     285            result = attrs->version_patch; 
     286            break; 
     287          case attr_bytecode_major: 
     288            result = attrs->bytecode_major; 
     289            break; 
     290          case attr_bytecode_minor: 
     291            result = attrs->bytecode_minor; 
     292            break; 
     293          case attr_uuid_type: 
     294            result = attrs->uuid_type; 
     295            break; 
     296          default: 
     297            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND, 
     298                    "Packfile: No such integer key \"%Ss\"", key); 
     299        } 
     300        return result; 
    268301    } 
    269302 
    270303/* 
     
    287320            return PARROT_PACKFILE(SELF)->uuid; 
    288321 
    289322        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND, 
    290                        "Packfile: No such string key \"%s\"", 
    291                        Parrot_str_cstring(INTERP, key)); 
     323                    "Packfile: No such string key \"%Ss\"", key); 
    292324    } 
    293325 
    294326 
     
    346378*/ 
    347379    VTABLE void set_integer_keyed_str(STRING *key, INTVAL value) { 
    348380        Parrot_Packfile_attributes * const attrs = PARROT_PACKFILE(SELF); 
    349         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_major"))) { 
     381        switch (getAttrEnum(INTERP, key)) { 
     382          case attr_version_major: 
    350383            attrs->version_major = value; 
    351             return; 
    352         } 
    353         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_minor"))) { 
     384            break; 
     385          case attr_version_minor: 
    354386            attrs->version_minor = value; 
    355             return; 
    356         } 
    357         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "version_patch"))) { 
     387            break; 
     388          case attr_version_patch: 
    358389            attrs->version_patch = value; 
    359             return; 
    360         } 
    361         if (!Parrot_str_compare(INTERP, key, CONST_STRING(INTERP, "uuid_type"))) { 
     390            break; 
     391          case attr_uuid_type: 
    362392            attrs->uuid_type = value; 
    363             return; 
     393            break; 
     394          default: 
     395            Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND, 
     396                    "Packfile: No such integer key \"%Ss\"", key); 
    364397        } 
    365         Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND, 
    366                        "Packfile: No such integer key \"%s\"", 
    367                        Parrot_str_cstring(INTERP, key)); 
    368398    } 
    369399 
    370400 
     
    407437        } 
    408438 
    409439        Parrot_ex_throw_from_c_args(INTERP, NULL, EXCEPTION_KEY_NOT_FOUND, 
    410                        "Packfile: No such string key \"%s\"", 
    411                        Parrot_str_cstring(INTERP, key)); 
     440                       "Packfile: No such string key \"%Ss\"", key); 
    412441    } 
    413442 
    414443/* 
     
    471500        PMC * const dir = PARROT_PACKFILE(SELF)->directory; 
    472501        RETURN(PMC *dir); 
    473502    } 
     503 
    474504} 
     505 
     506 
    475507/* 
    476508 
    477509=back 
     
    481513*/ 
    482514 
    483515/* 
     516 
     517=head2 Auxliary functions 
     518 
     519=over 4 
     520 
     521=item C<static AttrEnumPackfile getAttrEnum(PARROT_INTERP, const STRING *name)> 
     522 
     523Gets an enumerated value corresponding to the attribute with that name. 
     524 
     525=cut 
     526 
     527*/ 
     528 
     529static AttrEnumPackfile 
     530getAttrEnum(PARROT_INTERP, ARGIN(const STRING *name)) 
     531{ 
     532    ASSERT_ARGS(getAttrEnum) 
     533 
     534    AttrEnumPackfile r; 
     535    if (Parrot_str_equal(interp, name, CONST_STRING(interp, "wordsize"))) 
     536        r = attr_wordsize; 
     537    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "byteorder"))) 
     538        r = attr_byteorder; 
     539    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "fptype"))) 
     540        r = attr_fptype; 
     541    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "version_major"))) 
     542        r = attr_version_major; 
     543    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "version_minor"))) 
     544        r = attr_version_minor; 
     545    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "version_patch"))) 
     546        r = attr_version_patch; 
     547    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "bytecode_major"))) 
     548        r = attr_bytecode_major; 
     549    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "bytecode_minor"))) 
     550        r = attr_bytecode_minor; 
     551    else if (Parrot_str_equal(interp, name, CONST_STRING(interp, "uuid_type"))) 
     552        r = attr_uuid_type; 
     553    else 
     554        r = attr_NONE; 
     555    return r; 
     556} 
     557 
     558/* 
     559 
     560=back 
     561 
     562=cut 
     563 
     564*/ 
     565 
     566/* 
    484567 * Local variables: 
    485568 *   c-file-style: "parrot" 
    486569 * End: 
  • src/pmc/sub.pmc

     
    1919*/ 
    2020 
    2121#include "parrot/oplib/ops.h" 
     22#include "parrot/oplib/core_ops.h" 
    2223#include "sub.str" 
    2324 
    2425/* HEADERIZER HFILE: none */ 
     
    863864        if (!sub->arg_info) { 
    864865            /* Get pointer into the bytecode where this sub starts. */ 
    865866            const opcode_t *pc = sub->seg->base.data + sub->start_offs; 
     867            op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(INTERP); 
    866868 
    867869            /* Allocate structure to store argument information in. */ 
    868870            sub->arg_info = mem_gc_allocate_zeroed_typed(INTERP, 
    869871                    Parrot_sub_arginfo); 
    870872 
    871873            /* If the first instruction is a get_params... */ 
    872             if (sub->seg->op_func_table[*pc] 
    873                 == interp->op_func_table[PARROT_OP_get_params_pc]) { 
     874            if (OPCODE_IS(INTERP, sub->seg, *pc, core_ops, PARROT_OP_get_params_pc)) { 
    874875                /* Get the signature (the next thing in the bytecode). */ 
    875876                PMC * const sig = PF_CONST(sub->seg, *(++pc)).u.key; 
    876877 
  • src/gc/system.c

    Property changes on: src/gc/alloc_memory.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/gc/alloc_memory.c:r48886-48917
    
    
    Property changes on: src/gc/alloc_resources.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/gc/alloc_resources.c:r48886-48917
    
     
    453453    prefix = mask & buffer_min; 
    454454 
    455455    for (cur_var_ptr = hi_var_ptr; 
    456             (ptrdiff_t)cur_var_ptr < (ptrdiff_t)lo_var_ptr; 
    457             cur_var_ptr = (size_t)((ptrdiff_t)cur_var_ptr + sizeof (void *))) { 
     456        (ptrdiff_t)cur_var_ptr < (ptrdiff_t)lo_var_ptr; 
     457        cur_var_ptr = (size_t)((ptrdiff_t)cur_var_ptr + sizeof (void *))) { 
    458458        const size_t ptr = *(size_t *)cur_var_ptr; 
    459459 
    460460        /* Do a quick approximate range check by bit-masking */ 
     
    463463             * guaranteed to be live pmcs/buffers, and could very well have 
    464464             * had their bufstart/vtable destroyed due to the linked list of 
    465465             * free headers... */ 
    466             if ((pmc_min <= ptr) && (ptr < pmc_max) && is_pmc_ptr(mem_pools, (void *)ptr)) { 
    467                 Parrot_gc_mark_PObj_alive(interp, (PObj *)ptr); 
     466            if ((pmc_min <= ptr) 
     467            &&  (ptr     < pmc_max) 
     468            &&   is_pmc_ptr(mem_pools, (void *)ptr)) { 
     469                Parrot_gc_mark_PMC_alive(interp, (PMC *)ptr); 
    468470            } 
    469             else if ((buffer_min <= ptr) && (ptr < buffer_max) && 
    470                     is_buffer_ptr(mem_pools, (void *)ptr)) { 
    471                 /* ...and since Parrot_gc_mark_PObj_alive doesn't care about bufstart, it 
    472                  * doesn't really matter if it sets a flag */ 
    473                 Parrot_gc_mark_PObj_alive(interp, (PObj *)ptr); 
     471            else if ((buffer_min <= ptr) && (ptr < buffer_max) 
     472            &&        is_buffer_ptr(mem_pools, (void *)ptr)) { 
     473                Parrot_gc_mark_STRING_alive(interp, (STRING *)ptr); 
    474474            } 
    475475        } 
    476476    } 
  • src/interp/inter_create.c

    Property changes on: src/gc/system.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/gc/system.c:r48886-48917
    
    
    Property changes on: src/gc/malloc_trace.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/gc/malloc_trace.c:r48886-48917
    
    
    Property changes on: src/gc/malloc.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/gc/malloc.c:r48886-48917
    
    
    Property changes on: src/gc/api.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/gc/api.c:r48886-48917
    
    
    Property changes on: src/gc/mark_sweep.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/gc/mark_sweep.c:r48886-48917
    
     
    252252    Parrot_runcore_init(interp); 
    253253 
    254254    /* Load the core op func and info tables */ 
    255     interp->op_lib              = PARROT_CORE_OPLIB_INIT(interp, 1); 
    256     interp->op_count            = interp->op_lib->op_count; 
    257     interp->op_func_table       = interp->op_lib->op_func_table; 
    258     interp->op_info_table       = interp->op_lib->op_info_table; 
    259255    interp->all_op_libs         = NULL; 
    260256    interp->evc_func_table      = NULL; 
    261257    interp->evc_func_table_size = 0; 
  • src/sub.c

    Property changes on: src/interp/inter_create.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/interp/inter_create.c:r48886-48917
    
    
    Property changes on: src/interp/inter_cb.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/interp/inter_cb.c:r48886-48917
    
    
    Property changes on: src/interp/inter_misc.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/interp/inter_misc.c:r48886-48917
    
     
    2323#include "sub.str" 
    2424#include "pmc/pmc_sub.h" 
    2525#include "pmc/pmc_continuation.h" 
     26#include "parrot/oplib/core_ops.h" 
    2627 
    2728/* HEADERIZER HFILE: include/parrot/sub.h */ 
    2829 
  • src/runcore/main.c

    Property changes on: src/call/ops.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/call/ops.c:r48886-48917
    
    
    Property changes on: src/call/pcc.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/call/pcc.c:r48886-48917
    
    
    Property changes on: src/runcore/trace.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/runcore/trace.c:r48886-48917
    
     
    3636/* HEADERIZER BEGIN: static */ 
    3737/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */ 
    3838 
    39 static void dynop_register_switch(PARROT_INTERP, size_t n_old, size_t n_new) 
    40         __attribute__nonnull__(1); 
    41  
    4239PARROT_WARN_UNUSED_RESULT 
    4340PARROT_CANNOT_RETURN_NULL 
    4441static oplib_init_f get_dynamic_op_lib_init(SHIM_INTERP, 
    4542    ARGIN(const PMC *lib)) 
    4643        __attribute__nonnull__(2); 
    4744 
    48 #define ASSERT_ARGS_dynop_register_switch __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    49        PARROT_ASSERT_ARG(interp)) 
    5045#define ASSERT_ARGS_get_dynamic_op_lib_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    5146       PARROT_ASSERT_ARG(lib)) 
    5247/* Don't modify between HEADERIZER BEGIN / HEADERIZER END.  Your changes will be lost. */ 
     
    272267        mem_gc_free(interp, interp->all_op_libs); 
    273268 
    274269    interp->all_op_libs = NULL; 
    275  
    276     /* dynop libs */ 
    277     if (interp->n_libs <= 0) 
    278         return; 
    279  
    280     mem_gc_free(interp, interp->op_info_table); 
    281     mem_gc_free(interp, interp->op_func_table); 
    282     interp->op_info_table = NULL; 
    283     interp->op_func_table = NULL; 
    284270} 
    285271 
    286272 
     
    305291dynop_register(PARROT_INTERP, ARGIN(PMC *lib_pmc)) 
    306292{ 
    307293    ASSERT_ARGS(dynop_register) 
    308     op_lib_t *lib, *core; 
    309     oplib_init_f init_func; 
    310     op_func_t *new_func_table; 
    311     op_info_t *new_info_table; 
    312     size_t i, n_old, n_new, n_tot; 
     294    op_lib_t     *lib; 
     295    oplib_init_f  init_func; 
    313296 
    314297    if (n_interpreters > 1) { 
    315         /* This is not supported because oplibs are always shared. 
    316          * If we mem_sys_reallocate() the op_func_table while another 
    317          * interpreter is running using that exact op_func_table, 
    318          * this will cause problems 
    319          * Also, the mapping from op name to op number is global even for 
    320          * dynops (!). The mapping is done by get_op in core_ops.c (even for 
    321          * dynops) and uses a global hash as a cache and relies on modifications 
    322          * to the static-scoped core_op_lib data structure to see dynops. 
     298        /* This is not supported yet because interp->all_op_libs 
     299         * and interp->op_hash are shared. 
    323300         */ 
    324301        Parrot_ex_throw_from_c_args(interp, NULL, 1, "loading a new dynoplib while " 
    325302            "more than one thread is running is not supported."); 
     
    340317    /* if we are registering an op_lib variant, called from below the base 
    341318     * names of this lib and the previous one are the same */ 
    342319    if (interp->n_libs >= 2 
    343     && (STREQ(interp->all_op_libs[interp->n_libs-2]->name, lib->name))) { 
    344         /* registering is handled below */ 
     320    && (STREQ(interp->all_op_libs[interp->n_libs-2]->name, lib->name))) 
    345321        return; 
    346     } 
    347322 
    348     n_old = interp->op_count; 
    349     n_new = lib->op_count; 
    350     n_tot = n_old + n_new; 
    351     core  = PARROT_CORE_OPLIB_INIT(interp, 1); 
    352  
    353     PARROT_ASSERT(interp->op_count == core->op_count); 
    354  
    355     if (core->flags & OP_FUNC_IS_ALLOCATED) { 
    356         new_func_table = mem_gc_realloc_n_typed_zeroed(interp, 
    357                 core->op_func_table, n_tot, n_old, op_func_t); 
    358         new_info_table = mem_gc_realloc_n_typed_zeroed(interp, 
    359                 core->op_info_table, n_tot, n_old, op_info_t); 
    360     } 
    361     else { 
    362         /* allocate new op_func and info tables */ 
    363         new_func_table = mem_gc_allocate_n_zeroed_typed(interp, n_tot, op_func_t); 
    364         new_info_table = mem_gc_allocate_n_zeroed_typed(interp, n_tot, op_info_t); 
    365  
    366         /* copy old */ 
    367         for (i = 0; i < n_old; ++i) { 
    368             new_func_table[i] = interp->op_func_table[i]; 
    369             new_info_table[i] = interp->op_info_table[i]; 
    370         } 
    371     } 
    372  
    373     /* add new */ 
    374     for (i = n_old; i < n_tot; ++i) { 
    375         new_func_table[i] = ((op_func_t*)lib->op_func_table)[i - n_old]; 
    376         new_info_table[i] = lib->op_info_table[i - n_old]; 
    377     } 
    378  
    379     /* deinit core, so that it gets rehashed */ 
    380     (void) PARROT_CORE_OPLIB_INIT(interp, 0); 
    381  
    382     /* set table */ 
    383     core->op_func_table = interp->op_func_table = new_func_table; 
    384     core->op_info_table = interp->op_info_table = new_info_table; 
    385     core->op_count      = interp->op_count      = n_tot; 
    386     core->flags         = OP_FUNC_IS_ALLOCATED | OP_INFO_IS_ALLOCATED; 
    387  
    388     /* done for plain core */ 
    389     dynop_register_switch(interp, n_old, n_new); 
     323    parrot_hash_oplib(interp, lib); 
    390324} 
    391325 
    392326 
    393  
    394  
    395327/* 
    396328 
    397 =item C<static void dynop_register_switch(PARROT_INTERP, size_t n_old, size_t 
    398 n_new)> 
     329=item C<void parrot_hash_oplib(PARROT_INTERP, op_lib_t *lib)> 
    399330 
    400 Used only at the end of dynop_register.  Sums the old and new op_counts 
    401 storing the result into the operations count field of the interpreter 
    402 object. 
     331Add the ops in C<lib> to the global name => op_info hash. 
    403332 
    404333=cut 
    405334 
    406335*/ 
    407336 
    408 static void 
    409 dynop_register_switch(PARROT_INTERP, size_t n_old, size_t n_new) 
     337void 
     338parrot_hash_oplib(PARROT_INTERP, ARGIN(op_lib_t *lib)) 
    410339{ 
    411     ASSERT_ARGS(dynop_register_switch) 
    412     op_lib_t * const lib = PARROT_CORE_OPLIB_INIT(interp, 1); 
    413     lib->op_count        = n_old + n_new; 
     340    ASSERT_ARGS(parrot_hash_oplib) 
     341    int i; 
     342    for (i = 0; i < lib->op_count; i++) { 
     343        op_info_t *op = &lib->op_info_table[i]; 
     344        parrot_hash_put(interp, interp->op_hash, (void *)op->full_name, (void *)op); 
     345        if (!parrot_hash_exists(interp, interp->op_hash, (void *)op->name)) 
     346            parrot_hash_put(interp, interp->op_hash, (void *)op->name, (void *)op); 
     347    } 
    414348} 
    415349 
    416350 
  • tools/dev/fetch_languages.pl

    Property changes on: src/runcore/main.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/runcore/main.c:r48886-48917
    
    
    Property changes on: src/runcore/profiling.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/runcore/profiling.c:r48886-48917
    
    
    Property changes on: src/runcore/cores.c
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/src/runcore/cores.c:r48886-48917
    
    
    Property changes on: docs/book/draft/ch07_dynpmcs.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/ch07_dynpmcs.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/ch08_dynops.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/ch08_dynops.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/chXX_library.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/chXX_library.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/appe_source_code.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/appe_source_code.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/ch10_opcode_reference.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/ch10_opcode_reference.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/appc_command_line_options.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/appc_command_line_options.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/ch02_getting_started.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/ch02_getting_started.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/appa_glossary.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/appa_glossary.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/chXX_testing_and_debugging.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/chXX_testing_and_debugging.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/ch11_directive_reference.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/ch11_directive_reference.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/README
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/README:r48886-48917
    
    
    Property changes on: docs/book/draft/appb_patch_submission.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/appb_patch_submission.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/appd_build_options.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/appd_build_options.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/ch12_operator_reference.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/ch12_operator_reference.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/ch01_introduction.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/ch01_introduction.pod:r48886-48917
    
    
    Property changes on: docs/book/draft/chXX_hlls.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/draft/chXX_hlls.pod:r48886-48917
    
    
    Property changes on: docs/book/pct/ch02_getting_started.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/pct/ch02_getting_started.pod:r48886-48917
    
    
    Property changes on: docs/book/pct/ch03_compiler_tools.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/pct/ch03_compiler_tools.pod:r48886-48917
    
    
    Property changes on: docs/book/pct/ch04_pge.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/pct/ch04_pge.pod:r48886-48917
    
    
    Property changes on: docs/book/pct/ch01_introduction.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/pct/ch01_introduction.pod:r48886-48917
    
    
    Property changes on: docs/book/pct/ch05_nqp.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/book/pct/ch05_nqp.pod:r48886-48917
    
    
    Property changes on: docs/dev/c_functions.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/dev/c_functions.pod:r48886-48917
    
    
    Property changes on: docs/pdds/pdd30_install.pod
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/docs/pdds/pdd30_install.pod:r48886-48917
    
    
    Property changes on: ext/nqp-rx/Rules.mak
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/ext/nqp-rx/Rules.mak:r48886-48917
    
    
    Property changes on: tools/build/README
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/build/README:r48886-48917
    
    
    Property changes on: tools/build/h2inc.pl
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/build/h2inc.pl:r48886-48917
    
    
    Property changes on: tools/release/crow.pir
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/release/crow.pir:r48886-48917
    
    
    Property changes on: tools/release/templates.json
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/release/templates.json:r48886-48917
    
    
    Property changes on: tools/release/release.json
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/release/release.json:r48886-48917
    
    
    Property changes on: tools/release/gen_release_info.pl
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/release/gen_release_info.pl:r48886-48917
    
    
    Property changes on: tools/release/inc_ver.pir
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/release/inc_ver.pir:r48886-48917
    
    
    Property changes on: tools/dev/perltidy.conf
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/perltidy.conf:r48886-48917
    
    
    Property changes on: tools/dev/update_copyright.pl
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/update_copyright.pl:r48886-48917
    
     
    231231    { 
    232232        name       => 'pir', 
    233233        scm        => 'GIT', 
    234         repository => 'http://github.com/bacek/pir.git' 
     234        repository => 'http://github.com/parrot/pir.git' 
    235235    }, 
    236236 
    237237    { 
  • tools/dev/headerizer.pl

    Property changes on: tools/dev/fetch_languages.pl
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/fetch_languages.pl:r48886-48917
    
     
    330330    # Walk the object files and find corresponding source (either .c or .pmc) 
    331331    for my $ofile (@ofiles) { 
    332332 
    333         # Skip files in the src/ops/ subdirectory.  
    334              
     333        # Skip files in the src/ops/ subdirectory. 
     334 
    335335        next if $ofile =~ m/^\Qsrc$PConfig{slash}ops\E/ || # if run by hand... 
    336336                $ofile =~ m{^src/ops};                     # ... or by makefile 
    337337 
  • include/parrot/oplib.h

    Property changes on: tools/dev/headerizer.pl
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/headerizer.pl:r48886-48917
    
    
    Property changes on: tools/dev/dump_pbc.pl
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/dump_pbc.pl:r48886-48917
    
    
    Property changes on: tools/dev/ncidef2pasm.pl
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/ncidef2pasm.pl:r48886-48917
    
    
    Property changes on: tools/dev/perlcritic-cage.conf
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/perlcritic-cage.conf:r48886-48917
    
    
    Property changes on: tools/dev/perlcritic.conf
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/perlcritic.conf:r48886-48917
    
    
    Property changes on: tools/dev/mk_gitignore.pl
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/mk_gitignore.pl:r48886-48917
    
    
    Property changes on: tools/dev/README
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/README:r48886-48917
    
    
    Property changes on: tools/dev/addopstags.pl
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/addopstags.pl:r48886-48917
    
    
    Property changes on: tools/dev/parrot-config.pir
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/tools/dev/parrot-config.pir:r48886-48917
    
    
    Property changes on: lib/Parrot/Configure/Step/Test.pm
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/lib/Parrot/Configure/Step/Test.pm:r48886-48917
    
    
    Property changes on: lib/Parrot/H2inc.pm
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/lib/Parrot/H2inc.pm:r48886-48917
    
    
    Property changes on: ports/cygwin/parrot-1.0.0-1.cygport
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/ports/cygwin/parrot-1.0.0-1.cygport:r48886-48917
    
    
    Property changes on: ports/debian/parrot.install.in
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/ports/debian/parrot.install.in:r48886-48917
    
    
    Property changes on: ports/debian/libparrot-dev.install.in
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/ports/debian/libparrot-dev.install.in:r48886-48917
    
    
    Property changes on: ports/debian/parrot-doc.install.in
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/ports/debian/parrot-doc.install.in:r48886-48917
    
    
    Property changes on: ports/debian/libparrot.install.in
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/ports/debian/libparrot.install.in:r48886-48917
    
    
    Property changes on: include/parrot/runcore_trace.h
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/include/parrot/runcore_trace.h:r48886-48917
    
     
    3232    size_t      op_count; 
    3333    op_info_t * op_info_table; 
    3434    op_func_t * op_func_table; 
    35     int (*op_code)(PARROT_INTERP, const char * name, int full); 
     35    int (*_op_code)(PARROT_INTERP, const char * name, int full); 
    3636} op_lib_t; 
    3737 
    3838typedef enum { 
  • include/parrot/runcore_api.h

     
    7878        __attribute__nonnull__(1) 
    7979        __attribute__nonnull__(2); 
    8080 
     81void parrot_hash_oplib(PARROT_INTERP, ARGIN(op_lib_t *lib)) 
     82        __attribute__nonnull__(1) 
     83        __attribute__nonnull__(2); 
     84 
    8185void Parrot_runcore_destroy(PARROT_INTERP) 
    8286        __attribute__nonnull__(1); 
    8387 
     
    103107#define ASSERT_ARGS_Parrot_runcore_switch __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    104108       PARROT_ASSERT_ARG(interp) \ 
    105109    , PARROT_ASSERT_ARG(name)) 
     110#define ASSERT_ARGS_parrot_hash_oplib __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
     111       PARROT_ASSERT_ARG(interp) \ 
     112    , PARROT_ASSERT_ARG(lib)) 
    106113#define ASSERT_ARGS_Parrot_runcore_destroy __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    107114       PARROT_ASSERT_ARG(interp)) 
    108115#define ASSERT_ARGS_Parrot_runcore_init __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
  • include/parrot/call.h

    Property changes on: include/parrot/runcore_api.h
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/include/parrot/runcore_api.h:r48886-48917
    
     
    303303} while (0) 
    304304 
    305305#define ADD_OP_VAR_PART(interp, seg, pc, n) do { \ 
    306     if (OPCODE_IS((interp), (seg), *(pc), PARROT_OP_set_args_pc)       \ 
    307     ||  OPCODE_IS((interp), (seg), *(pc), PARROT_OP_get_results_pc)    \ 
    308     ||  OPCODE_IS((interp), (seg), *(pc), PARROT_OP_get_params_pc)     \ 
    309     ||  OPCODE_IS((interp), (seg), *(pc), PARROT_OP_set_returns_pc)) { \ 
     306    op_lib_t *_core_ops = PARROT_GET_CORE_OPLIB(interp); \ 
     307    if (OPCODE_IS((interp), (seg), *(pc), _core_ops, PARROT_OP_set_args_pc)       \ 
     308    ||  OPCODE_IS((interp), (seg), *(pc), _core_ops, PARROT_OP_get_results_pc)    \ 
     309    ||  OPCODE_IS((interp), (seg), *(pc), _core_ops, PARROT_OP_get_params_pc)     \ 
     310    ||  OPCODE_IS((interp), (seg), *(pc), _core_ops, PARROT_OP_set_returns_pc)) { \ 
    310311        PMC * const sig = (seg)->const_table->constants[(pc)[1]].u.key; \ 
    311312        (n) += VTABLE_elements((interp), sig); \ 
    312313    } \ 
  • include/parrot/op.h

    Property changes on: include/parrot/call.h
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/include/parrot/call.h:r48886-48917
    
     
    7878    struct op_lib_t *lib; 
    7979} op_info_t; 
    8080 
    81 #define OPCODE_IS(interp, seg, opnum, global_opnum) \ 
    82     ((seg)->op_func_table[(opnum)] == (interp)->op_func_table[(global_opnum)]) 
     81#define OP_INFO_OPNUM(oi)  ((oi) - (oi)->lib->op_info_table) 
     82#define OP_INFO_OPFUNC(oi) ((oi)->lib->op_func_table[OP_INFO_OPNUM(oi)]) 
    8383 
     84#define OPCODE_IS(interp, seg, opnum, lib, oplibnum) \ 
     85    ((seg)->op_func_table[(opnum)] == (lib)->op_func_table[(oplibnum)]) 
     86 
    8487#endif /* PARROT_OP_H_GUARD */ 
    8588 
    8689/* 
  • include/parrot/hash.h

     
    234234        __attribute__nonnull__(1); 
    235235 
    236236PARROT_WARN_UNUSED_RESULT 
     237PARROT_PURE_FUNCTION 
     238int hash_compare_cstring(SHIM_INTERP, 
     239    ARGIN(const char *a), 
     240    ARGIN(const char *b)) 
     241        __attribute__nonnull__(2) 
     242        __attribute__nonnull__(3); 
     243 
     244PARROT_WARN_UNUSED_RESULT 
    237245PARROT_CONST_FUNCTION 
    238246int hash_compare_int(SHIM_INTERP, 
    239247    ARGIN_NULLOK(const void *a), 
     
    364372        __attribute__nonnull__(2); 
    365373 
    366374PARROT_WARN_UNUSED_RESULT 
     375PARROT_PURE_FUNCTION 
     376size_t key_hash_cstring(SHIM_INTERP, ARGIN(const void *value), size_t seed) 
     377        __attribute__nonnull__(2); 
     378 
     379PARROT_WARN_UNUSED_RESULT 
    367380PARROT_CONST_FUNCTION 
    368381size_t key_hash_int(SHIM_INTERP, 
    369382    ARGIN_NULLOK(const void *value), 
     
    485498       PARROT_ASSERT_ARG(interp)) 
    486499#define ASSERT_ARGS_parrot_new_pointer_hash __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    487500       PARROT_ASSERT_ARG(interp)) 
     501#define ASSERT_ARGS_hash_compare_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
     502       PARROT_ASSERT_ARG(a) \ 
     503    , PARROT_ASSERT_ARG(b)) 
    488504#define ASSERT_ARGS_hash_compare_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (0) 
    489505#define ASSERT_ARGS_hash_compare_pmc __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    490506       PARROT_ASSERT_ARG(interp) \ 
     
    544560#define ASSERT_ARGS_hash_value_to_string __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    545561       PARROT_ASSERT_ARG(interp) \ 
    546562    , PARROT_ASSERT_ARG(hash)) 
     563#define ASSERT_ARGS_key_hash_cstring __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
     564       PARROT_ASSERT_ARG(value)) 
    547565#define ASSERT_ARGS_key_hash_int __attribute__unused__ int _ASSERT_ARGS_CHECK = (0) 
    548566#define ASSERT_ARGS_key_hash_PMC __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    549567       PARROT_ASSERT_ARG(interp) \ 
  • include/parrot/interpreter.h

    Property changes on: include/parrot/runcore_profiling.h
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/include/parrot/runcore_profiling.h:r48886-48917
    
     
    182182 
    183183    struct _ParrotIOData   *piodata;          /* interpreter's IO system */ 
    184184 
    185     op_lib_t  *op_lib;                        /* Opcode library */ 
    186     size_t     op_count;                      /* The number of ops */ 
    187     op_info_t *op_info_table;                 /* Opcode info table 
    188                                                * (name, nargs, arg types) */ 
    189  
    190     op_func_t *op_func_table;                  /* opcode dispatch table 
    191                                                 * (functions, labels, or nothing 
    192                                                 * (e.g. switched core), which 
    193                                                 * the interpreter is currently 
    194                                                 * running */ 
    195  
    196185    op_func_t *evc_func_table;                /* event check opcode dispatch */ 
    197186    size_t     evc_func_table_size; 
    198187 
     
    216205    struct PackFile          *initial_pf;     /* first created PF  */ 
    217206 
    218207    struct _imc_info_t *imc_info;             /* imcc data */ 
     208    Hash               *op_hash;              /* mapping from op names to op_info_t */ 
    219209 
     210 
    220211    const char *output_file;                  /* where to write output */ 
    221212 
    222213    PDB_t  *pdb;                              /* debug /trace system */ 
  • compilers/opsc/src/Ops/Emitter.pm

    Property changes on: include/parrot/gc_api.h
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/include/parrot/gc_api.h:r48886-48917
    
    
    Property changes on: compilers/tge/Rules.mak
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/compilers/tge/Rules.mak:r48886-48917
    
    
    Property changes on: compilers/data_json/Rules.mak
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/compilers/data_json/Rules.mak:r48886-48917
    
     
    257257 
    258258    # TODO There is a bug in NQP about \{ 
    259259    $fh.print(q| 
     260PARROT_EXPORT 
    260261op_lib_t * 
    261262| ~ self.init_func ~ q|(PARROT_INTERP, long init) { 
    262263    /* initialize and return op_lib ptr */ 
  • compilers/imcc/cfg.c

    Property changes on: compilers/pct/Rules.mak
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/compilers/pct/Rules.mak:r48886-48917
    
     
    2929#include <string.h> 
    3030#include "imc.h" 
    3131#include "optimizer.h" 
     32#include "parrot/oplib/core_ops.h" 
    3233 
    3334/* HEADERIZER HFILE: compilers/imcc/cfg.h */ 
    3435 
     
    276277        ins->index   = ++i; 
    277278        ins->bbindex = unit->n_basic_blocks - 1; 
    278279 
    279         if (ins->opnum == -1 && (ins->type & ITPCCSUB)) { 
     280        if (!ins->op && (ins->type & ITPCCSUB)) { 
    280281            if (first) { 
    281282                if (ins->type & ITLABEL) { 
    282283                    expand_pcc_sub_ret(interp, unit, ins); 
     
    347348{ 
    348349    ASSERT_ARGS(bb_check_set_addr) 
    349350    const Instruction *ins; 
     351    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp); 
    350352 
    351353    for (ins = unit->instructions; ins; ins = ins->next) { 
    352         if ((ins->opnum == PARROT_OP_set_addr_p_ic) 
     354        if ((ins->op == &core_ops->op_info_table[PARROT_OP_set_addr_p_ic]) 
    353355        &&   STREQ(label->name, ins->symregs[1]->name)) { 
    354356            IMCC_debug(interp, DEBUG_CFG, "set_addr %s\n", 
    355357                    ins->symregs[1]->name); 
  • compilers/imcc/pbc.c

     
    99#include "parrot/pmc_freeze.h" 
    1010#include "pmc/pmc_sub.h" 
    1111#include "pmc/pmc_callcontext.h" 
     12#include "parrot/oplib/core_ops.h" 
    1213 
    1314/* HEADERIZER HFILE: compilers/imcc/pbc.h */ 
    1415 
     
    642643    ASSERT_ARGS(get_code_size) 
    643644    Instruction *ins = unit->instructions; 
    644645    size_t       code_size; 
     646    op_lib_t    *core_ops = PARROT_GET_CORE_OPLIB(interp); 
    645647 
    646648    /* run through instructions: 
    647649     * - sanity check 
     
    664666        } 
    665667        else if (ins->opname && *ins->opname) { 
    666668            (*src_lines)++; 
    667             if (ins->opnum < 0) 
     669            if (!ins->op) 
    668670                IMCC_fatal(interp, 1, "get_code_size: " 
    669671                        "no opnum ins#%d %d\n", 
    670672                        ins->index, ins); 
    671673 
    672             if (ins->opnum == PARROT_OP_set_p_pc) { 
     674            if (ins->op == &core_ops->op_info_table[PARROT_OP_set_p_pc]) { 
    673675                /* set_p_pc opcode */ 
    674676                IMCC_debug(interp, DEBUG_PBC_FIXUP, "PMC constant %s\n", 
    675677                        ins->symregs[1]->name); 
     
    702704 
    703705static 
    704706opcode_t 
    705 bytecode_map_op(PARROT_INTERP, opcode_t op) { 
     707bytecode_map_op(PARROT_INTERP, op_info_t *info) { 
    706708    int i; 
    707     op_info_t         *info    = &interp->op_info_table[op]; 
    708709    op_lib_t          *lib     = info->lib; 
    709     op_func_t         op_func  = interp->op_func_table[op]; 
     710    op_func_t         op_func  = OP_INFO_OPFUNC(info); 
    710711    PackFile_ByteCode *bc      = interp->code; 
    711712    PackFile_ByteCode_OpMappingEntry *om; 
    712713 
     
    857858    ASSERT_ARGS(fixup_globals) 
    858859    subs_t *s; 
    859860    int     jumppc = 0; 
     861    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp); 
    860862 
    861863    for (s = IMCC_INFO(interp)->globals->cs->first; s; s = s->next) { 
    862864        const SymHash * const hsh = &s->fixup; 
     
    912914                    SymReg * const nam = mk_const(interp, fixup->name, 
    913915                            fixup->type & VT_ENCODED ? 'U' : 'S'); 
    914916 
    915                     const int op = interp->op_lib->op_code(interp, "find_sub_not_null_p_sc", 1); 
     917                    op_info_t *op = &core_ops->op_info_table[PARROT_OP_find_sub_not_null_p_sc]; 
    916918                    PARROT_ASSERT(op); 
    917919 
    918920                    interp->code->base.data[addr] = bytecode_map_op(interp, op); 
     
    22272229    ASSERT_ARGS(verify_signature) 
    22282230    PMC    *changed_sig    = NULL; 
    22292231    PMC    * const sig_arr = interp->code->const_table->constants[pc[-1]].u.key; 
     2232    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp); 
    22302233    int     needed         = 0; 
    2231     int     no_consts      = (ins->opnum == PARROT_OP_get_results_pc 
    2232                            || ins->opnum == PARROT_OP_get_params_pc); 
     2234    int     no_consts      = (ins->op == &core_ops->op_info_table[PARROT_OP_get_results_pc] 
     2235                           || ins->op == &core_ops->op_info_table[PARROT_OP_get_params_pc]); 
    22332236 
    22342237    INTVAL  i, n; 
    22352238 
     
    23052308{ 
    23062309    ASSERT_ARGS(e_pbc_emit) 
    23072310    int        ok = 0; 
    2308     int        op, i; 
     2311    int        i; 
     2312    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp); 
    23092313 
    23102314    /* first instruction, do initialisation ... */ 
    23112315    if (ins == unit->instructions) { 
     
    24292433            IMCC_INFO(interp)->debug_seg->base.data[IMCC_INFO(interp)->ins_line++] = 
    24302434                (opcode_t)ins->line; 
    24312435 
    2432         op = (opcode_t)ins->opnum; 
    2433  
    24342436        /* Get the info for that opcode */ 
    2435         op_info = &interp->op_info_table[op]; 
     2437        op_info = ins->op; 
    24362438 
    24372439        IMCC_debug(interp, DEBUG_PBC, "%d %s", IMCC_INFO(interp)->npc, 
    24382440            op_info->full_name); 
    24392441 
    24402442        /* Start generating the bytecode */ 
    2441         *(IMCC_INFO(interp)->pc)++ = bytecode_map_op(interp, op); 
     2443        *(IMCC_INFO(interp)->pc)++ = bytecode_map_op(interp, op_info); 
    24422444 
    24432445        for (i = 0; i < op_info->op_count-1; i++) { 
    24442446            switch (op_info->types[i]) { 
     
    24902492                break; 
    24912493            } 
    24922494        } 
    2493         if (ins->opnum == PARROT_OP_set_args_pc 
    2494         ||  ins->opnum == PARROT_OP_get_results_pc 
    2495         ||  ins->opnum == PARROT_OP_get_params_pc 
    2496         ||  ins->opnum == PARROT_OP_set_returns_pc) { 
     2495        if (ins->op == &core_ops->op_info_table[PARROT_OP_set_args_pc] 
     2496        ||  ins->op == &core_ops->op_info_table[PARROT_OP_get_results_pc] 
     2497        ||  ins->op == &core_ops->op_info_table[PARROT_OP_get_params_pc] 
     2498        ||  ins->op == &core_ops->op_info_table[PARROT_OP_set_returns_pc]) { 
    24972499 
    24982500            /* TODO get rid of verify_signature - PIR call sigs are already 
    24992501             * fixed, but PASM still needs it */ 
  • compilers/imcc/instructions.c

     
    1010#include "pbc.h" 
    1111#include "optimizer.h" 
    1212#include "pmc/pmc_callcontext.h" 
     13#include "parrot/oplib/core_ops.h" 
    1314 
    1415/* 
    1516 
     
    112113        ins->symregs[i]  = r[i]; 
    113114 
    114115    ins->flags = flags; 
    115     ins->opnum = -1; 
     116    ins->op    = NULL; 
    116117 
    117118    return ins; 
    118119} 
     
    133134{ 
    134135    ASSERT_ARGS(instruction_reads) 
    135136    int f, i; 
     137    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(NULL); 
    136138 
    137     if (ins->opnum == PARROT_OP_set_args_pc 
    138     ||  ins->opnum == PARROT_OP_set_returns_pc) { 
     139    if (ins->op && ins->op->lib == core_ops) { 
     140        if (OP_INFO_OPNUM(ins->op) == PARROT_OP_set_args_pc 
     141        ||  OP_INFO_OPNUM(ins->op) == PARROT_OP_set_returns_pc) { 
    139142 
    140         for (i = ins->symreg_count - 1; i >= 0; --i) 
    141             if (r == ins->symregs[i]) 
    142                 return 1; 
     143            for (i = ins->symreg_count - 1; i >= 0; --i) 
     144                if (r == ins->symregs[i]) 
     145                    return 1; 
    143146 
    144         return 0; 
     147            return 0; 
     148        } 
     149        else if (OP_INFO_OPNUM(ins->op) == PARROT_OP_get_params_pc || 
     150                 OP_INFO_OPNUM(ins->op) == PARROT_OP_get_results_pc) { 
     151            return 0; 
     152        } 
    145153    } 
    146     else if (ins->opnum == PARROT_OP_get_params_pc || 
    147              ins->opnum == PARROT_OP_get_results_pc) { 
    148         return 0; 
    149     } 
    150154 
    151155    f = ins->flags; 
    152156 
     
    172176 
    173177    /* a sub call reads the previous args */ 
    174178    if (ins->type & ITPCCSUB) { 
    175         while (ins && ins->opnum != PARROT_OP_set_args_pc) 
     179        while (ins && ins->op != &core_ops->op_info_table[PARROT_OP_set_args_pc]) 
    176180            ins = ins->prev; 
    177181 
    178182        if (!ins) 
     
    204208    ASSERT_ARGS(instruction_writes) 
    205209    const int f = ins->flags; 
    206210    int j; 
     211    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(NULL); 
    207212 
    208213    /* a get_results opcode occurs after the actual sub call */ 
    209     if (ins->opnum == PARROT_OP_get_results_pc) { 
     214    if (ins->op == &core_ops->op_info_table[PARROT_OP_get_results_pc]) { 
    210215        int i; 
    211216 
    212217        /* but only if it isn't the get_results opcode of 
     
    231236         * and point to the most recent pcc_sub 
    232237         * structure 
    233238         */ 
    234         while (ins && ins->opnum != PARROT_OP_get_results_pc) 
     239        while (ins && ins->op != &core_ops->op_info_table[PARROT_OP_get_results_pc]) 
    235240            ins = ins->next; 
    236241 
    237242        if (!ins) 
     
    245250        return 0; 
    246251    } 
    247252 
    248     if (ins->opnum == PARROT_OP_get_params_pc) { 
     253    if (ins->op == &core_ops->op_info_table[PARROT_OP_get_params_pc]) { 
    249254        int i; 
    250255 
    251256        for (i = ins->symreg_count - 1; i >= 0; --i) { 
     
    255260 
    256261        return 0; 
    257262    } 
    258     else if (ins->opnum == PARROT_OP_set_args_pc 
    259          ||  ins->opnum == PARROT_OP_set_returns_pc) { 
     263    else if (ins->op == &core_ops->op_info_table[PARROT_OP_set_args_pc] 
     264         ||  ins->op == &core_ops->op_info_table[PARROT_OP_set_returns_pc]) { 
    260265        return 0; 
    261266    } 
    262267 
  • compilers/imcc/pcc.c

     
    2929#include <string.h> 
    3030#include "imc.h" 
    3131#include "parser.h" 
     32#include "parrot/oplib/core_ops.h" 
    3233 
    3334/* HEADERIZER HFILE: compilers/imcc/imc.h */ 
    3435 
     
    675676    SymReg *regs[2]; 
    676677    Instruction *get_params, *tmp_ins, *unused_ins; 
    677678    char *buf; 
     679    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp); 
    678680 
    679681    if (!(unit->instructions->type & ITLABEL)) 
    680682        return 0; 
     
    696698 
    697699    get_params = unit->instructions->next; 
    698700 
    699     if (get_params->opnum != PARROT_OP_get_params_pc) 
     701    if (get_params->op != &core_ops->op_info_table[PARROT_OP_get_params_pc]) 
    700702        return 0; 
    701703 
    702704    buf = (char *)malloc(strlen(this_sub->name) + 3); 
  • compilers/imcc/instructions.h

     
    3434    struct _Instruction *prev; 
    3535    struct _Instruction *next; 
    3636 
    37     int     opnum;         /* parrot op number */ 
     37    op_info_t *op;         /* parrot opcode */ 
    3838    int     opsize;        /* parrot op size   */ 
    3939    int     line;          /* source code line number */ 
    4040    int     symreg_count;  /* count of regs in **symregs */ 
  • compilers/imcc/imc.h

     
    196196        __attribute__nonnull__(3) 
    197197        FUNC_MODIFIES(*error_message); 
    198198 
    199 PARROT_WARN_UNUSED_RESULT 
    200 int check_op(PARROT_INTERP, 
     199void check_op(PARROT_INTERP, 
     200    ARGOUT(op_info_t **op_info), 
    201201    ARGOUT(char *fullname), 
    202202    ARGIN(const char *name), 
    203203    ARGIN(SymReg * const * r), 
     
    207207        __attribute__nonnull__(2) 
    208208        __attribute__nonnull__(3) 
    209209        __attribute__nonnull__(4) 
     210        __attribute__nonnull__(5) 
     211        FUNC_MODIFIES(*op_info) 
    210212        FUNC_MODIFIES(*fullname); 
    211213 
    212214PARROT_WARN_UNUSED_RESULT 
     
    317319        __attribute__nonnull__(1); 
    318320 
    319321PARROT_WARN_UNUSED_RESULT 
    320 int try_find_op(PARROT_INTERP, 
     322op_info_t * try_find_op(PARROT_INTERP, 
    321323    ARGMOD(IMC_Unit *unit), 
    322324    ARGIN(const char *name), 
    323325    ARGMOD(SymReg **r), 
     
    337339    , PARROT_ASSERT_ARG(error_message)) 
    338340#define ASSERT_ARGS_check_op __attribute__unused__ int _ASSERT_ARGS_CHECK = (\ 
    339341       PARROT_ASSERT_ARG(interp) \ 
     342    , PARROT_ASSERT_ARG(op_info) \ 
    340343    , PARROT_ASSERT_ARG(fullname) \ 
    341344    , PARROT_ASSERT_ARG(name) \ 
    342345    , PARROT_ASSERT_ARG(r)) 
  • compilers/imcc/optimizer.c

    Property changes on: compilers/imcc/Rules.in
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/compilers/imcc/Rules.in:r48886-48917
    
     
    7474#include "pbc.h" 
    7575#include "optimizer.h" 
    7676#include "pmc/pmc_callcontext.h" 
     77#include "parrot/oplib/core_ops.h" 
    7778 
    7879/* HEADERIZER HFILE: compilers/imcc/optimizer.h */ 
    7980 
     
    368369                    last->symregs[reg] = go; 
    369370                    tmp = INS(interp, unit, neg_op, "", 
    370371                              last->symregs, args, 0, 0); 
    371                     last->opnum = tmp->opnum; 
     372                    last->op = tmp->op; 
    372373                    last->opsize = tmp->opsize; 
    373374                    mem_sys_free(last->opname); 
    374375                    last->opname = mem_sys_strdup(tmp->opname); 
     
    409410    SymReg *r; 
    410411    int changes = 0; 
    411412    FLOATVAL f; 
     413    op_lib_t *core_ops = PARROT_GET_CORE_OPLIB(interp); 
    412414 
    413415    IMCC_info(interp, 2, "\tstrength_reduce\n"); 
    414416    for (ins = unit->instructions; ins; ins = ins->next) { 
     
    428430         * div Nx, Nx, Ny => sub Nx, Ny 
    429431         * fdiv Nx, Nx, Ny => sub Nx, Ny 
    430432         */ 
    431         if (((ins->opnum == PARROT_OP_sub_i_i_i || 
    432                 ins->opnum == PARROT_OP_sub_i_i_ic || 
    433                 ins->opnum == PARROT_OP_sub_i_ic_i || 
    434                 ins->opnum == PARROT_OP_div_i_i_i || 
    435                 ins->opnum == PARROT_OP_div_i_i_ic || 
    436                 ins->opnum == PARROT_OP_div_i_ic_i || 
    437                 ins->opnum == PARROT_OP_fdiv_i_i_i || 
    438                 ins->opnum == PARROT_OP_fdiv_i_i_ic || 
    439                 ins->opnum == PARROT_OP_fdiv_i_ic_i || 
    440                 ins->opnum == PARROT_OP_sub_n_n_n || 
    441                 ins->opnum == PARROT_OP_sub_n_n_nc || 
    442                 ins->opnum == PARROT_OP_sub_n_nc_n || 
    443                 ins->opnum == PARROT_OP_div_n_n_n || 
    444                 ins->opnum == PARROT_OP_div_n_n_nc || 
    445                 ins->opnum == PARROT_OP_div_n_nc_n || 
    446                 ins->opnum == PARROT_OP_fdiv_n_n_n || 
    447                 ins->opnum == PARROT_OP_fdiv_n_n_nc || 
    448                 ins->opnum == PARROT_OP_fdiv_n_nc_n) && 
     433        if (((ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_i_i] || 
     434                ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_i_ic] || 
     435                ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_ic_i] || 
     436                ins->op == &core_ops->op_info_table[PARROT_OP_div_i_i_i] || 
     437                ins->op == &core_ops->op_info_table[PARROT_OP_div_i_i_ic] || 
     438                ins->op == &core_ops->op_info_table[PARROT_OP_div_i_ic_i] || 
     439                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_i_i_i] || 
     440                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_i_i_ic] || 
     441                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_i_ic_i] || 
     442                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_n_n] || 
     443                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_n_nc] || 
     444                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_nc_n] || 
     445                ins->op == &core_ops->op_info_table[PARROT_OP_div_n_n_n] || 
     446                ins->op == &core_ops->op_info_table[PARROT_OP_div_n_n_nc] || 
     447                ins->op == &core_ops->op_info_table[PARROT_OP_div_n_nc_n] || 
     448                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_n_n_n] || 
     449                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_n_n_nc] || 
     450                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_n_nc_n]) && 
    449451             ins->symregs[0] == ins->symregs[1]) 
    450           || ((ins->opnum == PARROT_OP_add_i_i_i || 
    451                 ins->opnum == PARROT_OP_add_i_i_ic || 
    452                 ins->opnum == PARROT_OP_add_i_ic_i || 
    453                 ins->opnum == PARROT_OP_mul_i_i_i || 
    454                 ins->opnum == PARROT_OP_mul_i_i_ic || 
    455                 ins->opnum == PARROT_OP_mul_i_ic_i || 
    456                 ins->opnum == PARROT_OP_add_n_n_n || 
    457                 ins->opnum == PARROT_OP_add_n_n_nc || 
    458                 ins->opnum == PARROT_OP_add_n_nc_n || 
    459                 ins->opnum == PARROT_OP_mul_n_n_n || 
    460                 ins->opnum == PARROT_OP_mul_n_n_nc || 
    461                 ins->opnum == PARROT_OP_mul_n_nc_n) && 
     452          || ((ins->op == &core_ops->op_info_table[PARROT_OP_add_i_i_i] || 
     453                ins->op == &core_ops->op_info_table[PARROT_OP_add_i_i_ic] || 
     454                ins->op == &core_ops->op_info_table[PARROT_OP_add_i_ic_i] || 
     455                ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_i_i] || 
     456                ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_i_ic] || 
     457                ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_ic_i] || 
     458                ins->op == &core_ops->op_info_table[PARROT_OP_add_n_n_n] || 
     459                ins->op == &core_ops->op_info_table[PARROT_OP_add_n_n_nc] || 
     460                ins->op == &core_ops->op_info_table[PARROT_OP_add_n_nc_n] || 
     461                ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_n_n] || 
     462                ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_n_nc] || 
     463                ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_nc_n]) && 
    462464             (ins->symregs[0] == ins->symregs[1] || 
    463465              ins->symregs[0] == ins->symregs[2]))) { 
    464466            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins); 
     
    483485         * div Nx, 1     => delete 
    484486         * fdiv Nx, 1    => delete 
    485487         */ 
    486         if (((ins->opnum == PARROT_OP_add_i_ic || 
    487                 ins->opnum == PARROT_OP_sub_i_ic) && 
     488        if (((ins->op == &core_ops->op_info_table[PARROT_OP_add_i_ic] || 
     489                ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_ic]) && 
    488490                      IMCC_int_from_reg(interp, ins->symregs[1]) == 0) 
    489           || ((ins->opnum == PARROT_OP_mul_i_ic || 
    490                 ins->opnum == PARROT_OP_div_i_ic || 
    491                 ins->opnum == PARROT_OP_fdiv_i_ic) && 
     491          || ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_ic] || 
     492                ins->op == &core_ops->op_info_table[PARROT_OP_div_i_ic] || 
     493                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_i_ic]) && 
    492494                      IMCC_int_from_reg(interp, ins->symregs[1]) == 1) 
    493           || ((ins->opnum == PARROT_OP_add_n_nc || 
    494                 ins->opnum == PARROT_OP_sub_n_nc) && 
     495          || ((ins->op == &core_ops->op_info_table[PARROT_OP_add_n_nc] || 
     496                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_nc]) && 
    495497                (f = atof(ins->symregs[1]->name), FLOAT_IS_ZERO(f))) 
    496           || ((ins->opnum  == PARROT_OP_mul_n_nc  || 
    497                 ins->opnum == PARROT_OP_div_n_nc || 
    498                 ins->opnum == PARROT_OP_fdiv_n_nc) && 
     498          || ((ins->op  == &core_ops->op_info_table[PARROT_OP_mul_n_nc]  || 
     499                ins->op == &core_ops->op_info_table[PARROT_OP_div_n_nc] || 
     500                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_n_nc]) && 
    499501                      atof(ins->symregs[1]->name) == 1.0)) { 
    500502            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins); 
    501503            ins = delete_ins(unit, ins); 
     
    513515         * sub Ix, 1     => dec Ix 
    514516         * sub Nx, 1     => dec Nx 
    515517         */ 
    516         if (((ins->opnum == PARROT_OP_add_i_ic || 
    517                 ins->opnum == PARROT_OP_sub_i_ic) && 
     518        if (((ins->op == &core_ops->op_info_table[PARROT_OP_add_i_ic] || 
     519                ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_ic]) && 
    518520                      IMCC_int_from_reg(interp, ins->symregs[1]) == 1) 
    519           || ((ins->opnum == PARROT_OP_add_n_nc || 
    520                 ins->opnum == PARROT_OP_sub_n_nc) && 
     521          || ((ins->op == &core_ops->op_info_table[PARROT_OP_add_n_nc] || 
     522                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_nc]) && 
    521523                      atof(ins->symregs[1]->name) == 1.0)) { 
    522524            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins); 
    523525            --ins->symregs[1]->use_count; 
    524             if (ins->opnum == PARROT_OP_add_i_ic || 
    525                 ins->opnum == PARROT_OP_add_n_nc) 
     526            if (ins->op == &core_ops->op_info_table[PARROT_OP_add_i_ic] || 
     527                ins->op == &core_ops->op_info_table[PARROT_OP_add_n_nc]) 
    526528                tmp = INS(interp, unit, "inc", "", ins->symregs, 1, 0, 0); 
    527529            else 
    528530                tmp = INS(interp, unit, "dec", "", ins->symregs, 1, 0, 0); 
     
    548550         * div Nx, Ny, 1 => set Nx, Ny 
    549551         * fdiv Nx, Ny, 1 => set Nx, Ny 
    550552         */ 
    551         if (((ins->opnum == PARROT_OP_add_i_i_ic || 
    552                 ins->opnum == PARROT_OP_sub_i_i_ic) && 
     553        if (((ins->op == &core_ops->op_info_table[PARROT_OP_add_i_i_ic] || 
     554                ins->op == &core_ops->op_info_table[PARROT_OP_sub_i_i_ic]) && 
    553555                      IMCC_int_from_reg(interp, ins->symregs[2]) == 0) 
    554           || (ins->opnum == PARROT_OP_add_i_ic_i && 
     556          || (ins->op == &core_ops->op_info_table[PARROT_OP_add_i_ic_i] && 
    555557                      IMCC_int_from_reg(interp, ins->symregs[1]) == 0) 
    556           || ((ins->opnum == PARROT_OP_mul_i_i_ic || 
    557                 ins->opnum == PARROT_OP_div_i_i_ic || 
    558                 ins->opnum == PARROT_OP_fdiv_i_i_ic) && 
     558          || ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_i_ic] || 
     559                ins->op == &core_ops->op_info_table[PARROT_OP_div_i_i_ic] || 
     560                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_i_i_ic]) && 
    559561                      IMCC_int_from_reg(interp, ins->symregs[2]) == 1) 
    560           || (ins->opnum == PARROT_OP_mul_i_ic_i && 
     562          || (ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_ic_i] && 
    561563                      IMCC_int_from_reg(interp, ins->symregs[1]) == 1) 
    562           || ((ins->opnum == PARROT_OP_add_n_n_nc || 
    563                 ins->opnum == PARROT_OP_sub_n_n_nc) && 
     564          || ((ins->op == &core_ops->op_info_table[PARROT_OP_add_n_n_nc] || 
     565                ins->op == &core_ops->op_info_table[PARROT_OP_sub_n_n_nc]) && 
    564566                (f = atof(ins->symregs[2]->name), FLOAT_IS_ZERO(f))) 
    565           || (ins->opnum == PARROT_OP_add_n_nc_n && 
     567          || (ins->op == &core_ops->op_info_table[PARROT_OP_add_n_nc_n] && 
    566568             (f = atof(ins->symregs[1]->name), FLOAT_IS_ZERO(f))) 
    567           || ((ins->opnum == PARROT_OP_mul_n_n_nc || 
    568                 ins->opnum == PARROT_OP_div_n_n_nc || 
    569                 ins->opnum == PARROT_OP_fdiv_n_n_nc) && 
     569          || ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_n_nc] || 
     570                ins->op == &core_ops->op_info_table[PARROT_OP_div_n_n_nc] || 
     571                ins->op == &core_ops->op_info_table[PARROT_OP_fdiv_n_n_nc]) && 
    570572                      atof(ins->symregs[2]->name) == 1.0) 
    571           || (ins->opnum == PARROT_OP_mul_n_nc_n && 
     573          || (ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_nc_n] && 
    572574                      atof(ins->symregs[1]->name) == 1.0)) { 
    573575            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins); 
    574576            if (ins->symregs[1]->type == VTCONST) { 
     
    590592         * mul Ix, 0, Iy => set Ix, 0 
    591593         * mul Ix, 0     => set Ix, 0 
    592594         */ 
    593         if ((ins->opnum == PARROT_OP_mul_i_i_ic && 
     595        if ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_i_ic] && 
    594596                      IMCC_int_from_reg(interp, ins->symregs[2]) == 0) 
    595           || ((ins->opnum == PARROT_OP_mul_i_ic_i || 
    596                 ins->opnum == PARROT_OP_mul_i_ic) && 
     597          || ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_ic_i] || 
     598                ins->op == &core_ops->op_info_table[PARROT_OP_mul_i_ic]) && 
    597599                      IMCC_int_from_reg(interp, ins->symregs[1]) == 0) 
    598           || (ins->opnum == PARROT_OP_mul_n_n_nc && 
     600          || (ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_n_nc] && 
    599601             (f = atof(ins->symregs[2]->name), FLOAT_IS_ZERO(f))) 
    600           || ((ins->opnum == PARROT_OP_mul_n_nc_n || 
    601                 ins->opnum == PARROT_OP_mul_n_nc) && 
     602          || ((ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_nc_n] || 
     603                ins->op == &core_ops->op_info_table[PARROT_OP_mul_n_nc]) && 
    602604                (f = atof(ins->symregs[1]->name), FLOAT_IS_ZERO(f)))) { 
    603605            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins); 
    604606            r = mk_const(interp, "0", ins->symregs[0]->set); 
     
    616618         * set Ix, 0     => null Ix 
    617619         * set Nx, 0     => null Nx 
    618620         */ 
    619         if ((ins->opnum == PARROT_OP_set_i_ic && 
     621        if ((ins->op == &core_ops->op_info_table[PARROT_OP_set_i_ic] && 
    620622                      IMCC_int_from_reg(interp, ins->symregs[1]) == 0) 
    621           || (ins->opnum == PARROT_OP_set_n_nc && 
     623          || (ins->op == &core_ops->op_info_table[PARROT_OP_set_n_nc] && 
    622624             (f = atof(ins->symregs[1]->name), FLOAT_IS_ZERO(f)) && 
    623625              ins->symregs[1]->name[0] != '-')) { 
    624626            IMCC_debug(interp, DEBUG_OPT1, "opt1 %d => ", ins); 
     
    714716                            } 
    715717                            else { 
    716718                                char fullname[128]; 
    717                                 const int op = check_op(interp, fullname, ins2->opname, 
     719                                check_op(interp, &ins2->op, fullname, ins2->opname, 
    718720                                    ins2->symregs, ins2->symreg_count, ins2->keys); 
    719                                 if (op < 0) { 
     721                                if (!ins2->op) { 
    720722                                    ins2->symregs[i] = old; 
    721723                                    IMCC_debug(interp, DEBUG_OPT2, 
    722724                                            " - no %s\n", fullname); 
    723725                                } 
    724726                                else { 
    725727                                    --old->use_count; 
    726                                     ins2->opnum = op; 
    727728                                    any = 1; 
    728729                                    IMCC_debug(interp, DEBUG_OPT2, 
    729730                                            " -> %d\n", ins2); 
     
    804805    opcode_t eval[4], *pc; 
    805806    int opnum; 
    806807    int i; 
    807     op_info_t *op_info; 
    808  
    809     opnum = interp->op_lib->op_code(interp, op, 1); 
    810     if (opnum < 0) 
     808    op_info_t *op_info = parrot_hash_get(interp, interp->op_hash, (void *)op); 
     809    if (!op_info || !STREQ(op_info->full_name, op)) 
    811810        IMCC_fatal(interp, 1, "eval_ins: op '%s' not found\n", op); 
    812     op_info = interp->op_info_table + opnum; 
    813811    /* now fill registers */ 
    814     eval[0] = opnum; 
     812    eval[0] = 0; 
    815813    for (i = 0; i < op_info->op_count - 1; i++) { 
    816814        switch (op_info->types[i]) { 
    817815          case PARROT_ARG_IC: 
     
    855853    if (setjmp(interp->current_runloop->resume)) 
    856854        return -1; 
    857855 
    858     pc = (interp->op_func_table[opnum]) (eval, interp); 
     856    pc = (OP_INFO_OPFUNC(op_info)) (eval, interp); 
    859857    free_runloop_jump_point(interp); 
    860858    /* the returned pc is either incremented by op_count or is eval, 
    861859     * as the branch offset is 0 - return true if it branched 
  • compilers/imcc/imcparser.c

     
    99 */ 
    1010/* HEADERIZER HFILE: none */ 
    1111/* HEADERIZER STOP */ 
     12/* A Bison parser, made by GNU Bison 2.4.3.  */ 
    1213 
    13 /* A Bison parser, made by GNU Bison 2.4.1.  */ 
    14  
    1514/* Skeleton implementation for Bison's Yacc-like parsers in C 
    1615    
    17       Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 
    18    Free Software Foundation, Inc. 
     16      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 
     17   2009, 2010 Free Software Foundation, Inc. 
    1918    
    2019   This program is free software: you can redistribute it and/or modify 
    2120   it under the terms of the GNU General Public License as published by 
     
    5756#define YYBISON 1 
    5857 
    5958/* Bison version.  */ 
    60 #define YYBISON_VERSION "2.4.1" 
     59#define YYBISON_VERSION "2.4.3" 
    6160 
    6261/* Skeleton name.  */ 
    6362#define YYSKELETON_NAME "yacc.c" 
     
    11511150 
    11521151 
    11531152/* Line 189 of yacc.c  */ 
    1154 #line 1144 "compilers/imcc/imcparser.c" 
     1153#line 1143 "compilers/imcc/imcparser.c" 
    11551154 
    11561155/* Enabling traces.  */ 
    11571156#ifndef YYDEBUG 
     
    14351434 
    14361435 
    14371436/* Line 214 of yacc.c  */ 
    1438 #line 1428 "compilers/imcc/imcparser.c" 
     1437#line 1427 "compilers/imcc/imcparser.c" 
    14391438} YYSTYPE; 
    14401439# define YYSTYPE_IS_TRIVIAL 1 
    14411440# define yystype YYSTYPE /* obsolescent; will be withdrawn */ 
     
    14471446 
    14481447 
    14491448/* Line 264 of yacc.c  */ 
    1450 #line 1440 "compilers/imcc/imcparser.c" 
     1449#line 1439 "compilers/imcc/imcparser.c" 
    14511450 
    14521451#ifdef short 
    14531452# undef short 
     
    14971496#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) 
    14981497 
    14991498#ifndef YY_ 
    1500 # if YYENABLE_NLS 
     1499# if defined YYENABLE_NLS && YYENABLE_NLS 
    15011500#  if ENABLE_NLS 
    15021501#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 
    15031502#   define YY_(msgid) dgettext ("bison-runtime", msgid) 
     
    24442443 
    24452444/* Like YYERROR except do call yyerror.  This remains here temporarily 
    24462445   to ease the transition to the new meaning of YYERROR, for GCC. 
    2447    Once GCC version 2 has supplanted version 1, this can go.  */ 
     2446   Once GCC version 2 has supplanted version 1, this can go.  However, 
     2447   YYFAIL appears to be in use.  Nevertheless, it is formally deprecated 
     2448   in Bison 2.4.2's NEWS entry, where a plan to phase it out is 
     2449   discussed.  */ 
    24482450 
    24492451#define YYFAIL          goto yyerrlab 
     2452#if defined YYFAIL 
     2453  /* This is here to suppress warnings from the GCC cpp's 
     2454     -Wunused-macros.  Normally we don't worry about that warning, but 
     2455     some users do, and we want to make it easy for users to remove 
     2456     YYFAIL uses, which will produce warnings from Bison 2.5.  */ 
     2457#endif 
    24502458 
    24512459#define YYRECOVERING()  (!!yyerrstatus) 
    24522460 
     
    25032511   we won't break user code: when these are the locations we know.  */ 
    25042512 
    25052513#ifndef YY_LOCATION_PRINT 
    2506 # if YYLTYPE_IS_TRIVIAL 
     2514# if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL 
    25072515#  define YY_LOCATION_PRINT(File, Loc)                  \ 
    25082516     fprintf (File, "%d.%d-%d.%d",                      \ 
    25092517              (Loc).first_line, (Loc).first_column,     \ 
     
    32543262    { 
    32553263        case 2: 
    32563264 
    3257 /* Line 1455 of yacc.c  */ 
     3265/* Line 1464 of yacc.c  */ 
    32583266#line 1166 "compilers/imcc/imcc.y" 
    32593267    { if (yynerrs) YYABORT; (yyval.i) = 0; } 
    32603268    break; 
    32613269 
    32623270  case 5: 
    32633271 
    3264 /* Line 1455 of yacc.c  */ 
     3272/* Line 1464 of yacc.c  */ 
    32653273#line 1175 "compilers/imcc/imcc.y" 
    32663274    { (yyval.i) = (yyvsp[(1) - (1)].i); } 
    32673275    break; 
    32683276 
    32693277  case 6: 
    32703278 
    3271 /* Line 1455 of yacc.c  */ 
     3279/* Line 1464 of yacc.c  */ 
    32723280#line 1176 "compilers/imcc/imcc.y" 
    32733281    { (yyval.i) = (yyvsp[(1) - (1)].i); } 
    32743282    break; 
    32753283 
    32763284  case 7: 
    32773285 
    3278 /* Line 1455 of yacc.c  */ 
     3286/* Line 1464 of yacc.c  */ 
    32793287#line 1178 "compilers/imcc/imcc.y" 
    32803288    { 
    32813289           (yyval.i) = (yyvsp[(1) - (1)].i); 
     
    32863294 
    32873295  case 8: 
    32883296 
    3289 /* Line 1455 of yacc.c  */ 
     3297/* Line 1464 of yacc.c  */ 
    32903298#line 1184 "compilers/imcc/imcc.y" 
    32913299    { 
    32923300           (yyval.i) = (yyvsp[(1) - (1)].i); 
     
    32973305 
    32983306  case 9: 
    32993307 
    3300 /* Line 1455 of yacc.c  */ 
     3308/* Line 1464 of yacc.c  */ 
    33013309#line 1189 "compilers/imcc/imcc.y" 
    33023310    { (yyval.i) = 0; } 
    33033311    break; 
    33043312 
    33053313  case 10: 
    33063314 
    3307 /* Line 1455 of yacc.c  */ 
     3315/* Line 1464 of yacc.c  */ 
    33083316#line 1190 "compilers/imcc/imcc.y" 
    33093317    { (yyval.i) = 0; } 
    33103318    break; 
    33113319 
    33123320  case 11: 
    33133321 
    3314 /* Line 1455 of yacc.c  */ 
     3322/* Line 1464 of yacc.c  */ 
    33153323#line 1191 "compilers/imcc/imcc.y" 
    33163324    { (yyval.i) = 0; } 
    33173325    break; 
    33183326 
    33193327  case 12: 
    33203328 
    3321 /* Line 1455 of yacc.c  */ 
     3329/* Line 1464 of yacc.c  */ 
    33223330#line 1192 "compilers/imcc/imcc.y" 
    33233331    { (yyval.i) = 0; } 
    33243332    break; 
    33253333 
    33263334  case 13: 
    33273335 
    3328 /* Line 1455 of yacc.c  */ 
     3336/* Line 1464 of yacc.c  */ 
    33293337#line 1196 "compilers/imcc/imcc.y" 
    33303338    { (yyval.i) = 0; } 
    33313339    break; 
    33323340 
    33333341  case 14: 
    33343342 
    3335 /* Line 1455 of yacc.c  */ 
     3343/* Line 1464 of yacc.c  */ 
    33363344#line 1198 "compilers/imcc/imcc.y" 
    33373345    { 
    33383346           (yyval.i) = 0; 
     
    33433351 
    33443352  case 15: 
    33453353 
    3346 /* Line 1455 of yacc.c  */ 
     3354/* Line 1464 of yacc.c  */ 
    33473355#line 1207 "compilers/imcc/imcc.y" 
    33483356    { 
    33493357           IMCC_INFO(interp)->line = atoi((yyvsp[(2) - (5)].s)); 
     
    33543362 
    33553363  case 16: 
    33563364 
    3357 /* Line 1455 of yacc.c  */ 
     3365/* Line 1464 of yacc.c  */ 
    33583366#line 1213 "compilers/imcc/imcc.y" 
    33593367    { 
    33603368           /* set_filename() frees the STRINGC */ 
     
    33643372 
    33653373  case 17: 
    33663374 
    3367 /* Line 1455 of yacc.c  */ 
     3375/* Line 1464 of yacc.c  */ 
    33683376#line 1221 "compilers/imcc/imcc.y" 
    33693377    { 
    33703378          /* We'll want to store an entry while emitting instructions, so just 
     
    33773385 
    33783386  case 18: 
    33793387 
    3380 /* Line 1455 of yacc.c  */ 
     3388/* Line 1464 of yacc.c  */ 
    33813389#line 1233 "compilers/imcc/imcc.y" 
    33823390    { 
    33833391            STRING * const hll_name = Parrot_str_unescape(interp, (yyvsp[(2) - (2)].s) + 1, '"', NULL); 
     
    33923400 
    33933401  case 19: 
    33943402 
    3395 /* Line 1455 of yacc.c  */ 
     3403/* Line 1464 of yacc.c  */ 
    33963404#line 1245 "compilers/imcc/imcc.y" 
    33973405    { IMCC_INFO(interp)->is_def = 1; } 
    33983406    break; 
    33993407 
    34003408  case 20: 
    34013409 
    3402 /* Line 1455 of yacc.c  */ 
     3410/* Line 1464 of yacc.c  */ 
    34033411#line 1246 "compilers/imcc/imcc.y" 
    34043412    { 
    34053413             mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1); 
     
    34103418 
    34113419  case 21: 
    34123420 
    3413 /* Line 1455 of yacc.c  */ 
     3421/* Line 1464 of yacc.c  */ 
    34143422#line 1254 "compilers/imcc/imcc.y" 
    34153423    { IMCC_INFO(interp)->is_def = 1; } 
    34163424    break; 
    34173425 
    34183426  case 22: 
    34193427 
    3420 /* Line 1455 of yacc.c  */ 
     3428/* Line 1464 of yacc.c  */ 
    34213429#line 1255 "compilers/imcc/imcc.y" 
    34223430    { 
    34233431           (yyval.i) = mk_pmc_const(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s)); 
     
    34283436 
    34293437  case 23: 
    34303438 
    3431 /* Line 1455 of yacc.c  */ 
     3439/* Line 1464 of yacc.c  */ 
    34323440#line 1261 "compilers/imcc/imcc.y" 
    34333441    { IMCC_INFO(interp)->is_def = 1; } 
    34343442    break; 
    34353443 
    34363444  case 24: 
    34373445 
    3438 /* Line 1455 of yacc.c  */ 
     3446/* Line 1464 of yacc.c  */ 
    34393447#line 1262 "compilers/imcc/imcc.y" 
    34403448    { 
    34413449           (yyval.i) = mk_pmc_const_named(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].s)); 
     
    34473455 
    34483456  case 29: 
    34493457 
    3450 /* Line 1455 of yacc.c  */ 
     3458/* Line 1464 of yacc.c  */ 
    34513459#line 1280 "compilers/imcc/imcc.y" 
    34523460    { (yyval.i) = 0;  } 
    34533461    break; 
    34543462 
    34553463  case 30: 
    34563464 
    3457 /* Line 1455 of yacc.c  */ 
     3465/* Line 1464 of yacc.c  */ 
    34583466#line 1281 "compilers/imcc/imcc.y" 
    34593467    { (yyval.i) = 0;  } 
    34603468    break; 
    34613469 
    34623470  case 31: 
    34633471 
    3464 /* Line 1455 of yacc.c  */ 
     3472/* Line 1464 of yacc.c  */ 
    34653473#line 1282 "compilers/imcc/imcc.y" 
    34663474    { (yyval.i) = 0;  } 
    34673475    break; 
    34683476 
    34693477  case 32: 
    34703478 
    3471 /* Line 1455 of yacc.c  */ 
     3479/* Line 1464 of yacc.c  */ 
    34723480#line 1283 "compilers/imcc/imcc.y" 
    34733481    { (yyval.i) = 0;  } 
    34743482    break; 
    34753483 
    34763484  case 33: 
    34773485 
    3478 /* Line 1455 of yacc.c  */ 
     3486/* Line 1464 of yacc.c  */ 
    34793487#line 1284 "compilers/imcc/imcc.y" 
    34803488    { (yyval.i) = (yyvsp[(1) - (1)].i); } 
    34813489    break; 
    34823490 
    34833491  case 36: 
    34843492 
    3485 /* Line 1455 of yacc.c  */ 
     3493/* Line 1464 of yacc.c  */ 
    34863494#line 1289 "compilers/imcc/imcc.y" 
    34873495    { clear_state(interp); } 
    34883496    break; 
    34893497 
    34903498  case 37: 
    34913499 
    3492 /* Line 1455 of yacc.c  */ 
     3500/* Line 1464 of yacc.c  */ 
    34933501#line 1291 "compilers/imcc/imcc.y" 
    34943502    { 
    34953503           (yyval.i) = INS(interp, IMCC_INFO(interp)->cur_unit, 
     
    35013509 
    35023510  case 38: 
    35033511 
    3504 /* Line 1455 of yacc.c  */ 
     3512/* Line 1464 of yacc.c  */ 
    35053513#line 1298 "compilers/imcc/imcc.y" 
    35063514    { 
    35073515           imc_close_unit(interp, IMCC_INFO(interp)->cur_unit); 
     
    35113519 
    35123520  case 39: 
    35133521 
    3514 /* Line 1455 of yacc.c  */ 
     3522/* Line 1464 of yacc.c  */ 
    35153523#line 1303 "compilers/imcc/imcc.y" 
    35163524    { 
    35173525           (yyval.i) = iSUBROUTINE(interp, 
     
    35243532 
    35253533  case 40: 
    35263534 
    3527 /* Line 1455 of yacc.c  */ 
     3535/* Line 1464 of yacc.c  */ 
    35283536#line 1311 "compilers/imcc/imcc.y" 
    35293537    { 
    35303538           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); 
     
    35333541 
    35343542  case 41: 
    35353543 
    3536 /* Line 1455 of yacc.c  */ 
     3544/* Line 1464 of yacc.c  */ 
    35373545#line 1315 "compilers/imcc/imcc.y" 
    35383546    { 
    35393547           char   *name = mem_sys_strdup((yyvsp[(2) - (4)].s) + 1); 
     
    35513559 
    35523560  case 42: 
    35533561 
    3554 /* Line 1455 of yacc.c  */ 
     3562/* Line 1464 of yacc.c  */ 
    35553563#line 1327 "compilers/imcc/imcc.y" 
    35563564    { (yyval.i) = 0;} 
    35573565    break; 
    35583566 
    35593567  case 44: 
    35603568 
    3561 /* Line 1455 of yacc.c  */ 
     3569/* Line 1464 of yacc.c  */ 
    35623570#line 1335 "compilers/imcc/imcc.y" 
    35633571    { IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PASM); } 
    35643572    break; 
    35653573 
    35663574  case 45: 
    35673575 
    3568 /* Line 1455 of yacc.c  */ 
     3576/* Line 1464 of yacc.c  */ 
    35693577#line 1338 "compilers/imcc/imcc.y" 
    35703578    { 
    35713579           /* if (optimizer_level & OPT_PASM) 
     
    35783586 
    35793587  case 48: 
    35803588 
    3581 /* Line 1455 of yacc.c  */ 
     3589/* Line 1464 of yacc.c  */ 
    35823590#line 1354 "compilers/imcc/imcc.y" 
    35833591    { 
    35843592           int re_open = 0; 
     
    35953603 
    35963604  case 49: 
    35973605 
    3598 /* Line 1455 of yacc.c  */ 
     3606/* Line 1464 of yacc.c  */ 
    35993607#line 1368 "compilers/imcc/imcc.y" 
    36003608    { (yyval.sr) = (yyvsp[(2) - (3)].sr); } 
    36013609    break; 
    36023610 
    36033611  case 50: 
    36043612 
    3605 /* Line 1455 of yacc.c  */ 
     3613/* Line 1464 of yacc.c  */ 
    36063614#line 1369 "compilers/imcc/imcc.y" 
    36073615    { (yyval.sr) = NULL; } 
    36083616    break; 
    36093617 
    36103618  case 51: 
    36113619 
    3612 /* Line 1455 of yacc.c  */ 
     3620/* Line 1464 of yacc.c  */ 
    36133621#line 1373 "compilers/imcc/imcc.y" 
    36143622    { 
    36153623           IMCC_INFO(interp)->nkeys    = 0; 
     
    36183626 
    36193627  case 52: 
    36203628 
    3621 /* Line 1455 of yacc.c  */ 
     3629/* Line 1464 of yacc.c  */ 
    36223630#line 1377 "compilers/imcc/imcc.y" 
    36233631    { 
    36243632           (yyval.sr) = link_keys(interp, 
     
    36293637 
    36303638  case 53: 
    36313639 
    3632 /* Line 1455 of yacc.c  */ 
     3640/* Line 1464 of yacc.c  */ 
    36333641#line 1385 "compilers/imcc/imcc.y" 
    36343642    { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); } 
    36353643    break; 
    36363644 
    36373645  case 54: 
    36383646 
    3639 /* Line 1455 of yacc.c  */ 
     3647/* Line 1464 of yacc.c  */ 
    36403648#line 1387 "compilers/imcc/imcc.y" 
    36413649    { 
    36423650           IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr); 
     
    36463654 
    36473655  case 55: 
    36483656 
    3649 /* Line 1455 of yacc.c  */ 
     3657/* Line 1464 of yacc.c  */ 
    36503658#line 1395 "compilers/imcc/imcc.y" 
    36513659    { 
    36523660           IMCC_INFO(interp)->cur_unit = imc_open_unit(interp, IMC_PCCSUB); 
     
    36553663 
    36563664  case 56: 
    36573665 
    3658 /* Line 1455 of yacc.c  */ 
     3666/* Line 1464 of yacc.c  */ 
    36593667#line 1399 "compilers/imcc/imcc.y" 
    36603668    { 
    36613669           iSUBROUTINE(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (3)].sr)); 
     
    36643672 
    36653673  case 57: 
    36663674 
    3667 /* Line 1455 of yacc.c  */ 
     3675/* Line 1464 of yacc.c  */ 
    36683676#line 1403 "compilers/imcc/imcc.y" 
    36693677    { 
    36703678          IMCC_INFO(interp)->cur_call->pcc_sub->pragma = (yyvsp[(5) - (6)].t); 
     
    36773685 
    36783686  case 58: 
    36793687 
    3680 /* Line 1455 of yacc.c  */ 
     3688/* Line 1464 of yacc.c  */ 
    36813689#line 1411 "compilers/imcc/imcc.y" 
    36823690    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; } 
    36833691    break; 
    36843692 
    36853693  case 59: 
    36863694 
    3687 /* Line 1455 of yacc.c  */ 
     3695/* Line 1464 of yacc.c  */ 
    36883696#line 1415 "compilers/imcc/imcc.y" 
    36893697    { (yyval.sr) = 0; } 
    36903698    break; 
    36913699 
    36923700  case 60: 
    36933701 
    3694 /* Line 1455 of yacc.c  */ 
     3702/* Line 1464 of yacc.c  */ 
    36953703#line 1416 "compilers/imcc/imcc.y" 
    36963704    { (yyval.sr) = 0; } 
    36973705    break; 
    36983706 
    36993707  case 61: 
    37003708 
    3701 /* Line 1455 of yacc.c  */ 
     3709/* Line 1464 of yacc.c  */ 
    37023710#line 1418 "compilers/imcc/imcc.y" 
    37033711    { 
    37043712           if (IMCC_INFO(interp)->adv_named_id) { 
     
    37133721 
    37143722  case 62: 
    37153723 
    3716 /* Line 1455 of yacc.c  */ 
     3724/* Line 1464 of yacc.c  */ 
    37173725#line 1430 "compilers/imcc/imcc.y" 
    37183726    { IMCC_INFO(interp)->is_def = 1; } 
    37193727    break; 
    37203728 
    37213729  case 63: 
    37223730 
    3723 /* Line 1455 of yacc.c  */ 
     3731/* Line 1464 of yacc.c  */ 
    37243732#line 1430 "compilers/imcc/imcc.y" 
    37253733    { (yyval.sr) = (yyvsp[(3) - (3)].sr); IMCC_INFO(interp)->is_def = 0; } 
    37263734    break; 
    37273735 
    37283736  case 64: 
    37293737 
    3730 /* Line 1455 of yacc.c  */ 
     3738/* Line 1464 of yacc.c  */ 
    37313739#line 1435 "compilers/imcc/imcc.y" 
    37323740    { 
    37333741           if ((yyvsp[(3) - (3)].t) & VT_OPT_FLAG && (yyvsp[(1) - (3)].t) != 'I') { 
     
    37523760 
    37533761  case 65: 
    37543762 
    3755 /* Line 1455 of yacc.c  */ 
     3763/* Line 1464 of yacc.c  */ 
    37563764#line 1459 "compilers/imcc/imcc.y" 
    37573765    { (yyval.t) = 0; } 
    37583766    break; 
    37593767 
    37603768  case 66: 
    37613769 
    3762 /* Line 1455 of yacc.c  */ 
     3770/* Line 1464 of yacc.c  */ 
    37633771#line 1464 "compilers/imcc/imcc.y" 
    37643772    { 
    37653773           (yyval.t) = 0; 
     
    37703778 
    37713779  case 67: 
    37723780 
    3773 /* Line 1455 of yacc.c  */ 
     3781/* Line 1464 of yacc.c  */ 
    37743782#line 1470 "compilers/imcc/imcc.y" 
    37753783    { 
    37763784           (yyval.t) = 0; 
     
    37813789 
    37823790  case 68: 
    37833791 
    3784 /* Line 1455 of yacc.c  */ 
     3792/* Line 1464 of yacc.c  */ 
    37853793#line 1479 "compilers/imcc/imcc.y" 
    37863794    { 
    37873795           (yyval.t) = P_VTABLE; 
     
    37923800 
    37933801  case 69: 
    37943802 
    3795 /* Line 1455 of yacc.c  */ 
     3803/* Line 1464 of yacc.c  */ 
    37963804#line 1485 "compilers/imcc/imcc.y" 
    37973805    { 
    37983806           (yyval.t) = P_VTABLE; 
     
    38033811 
    38043812  case 70: 
    38053813 
    3806 /* Line 1455 of yacc.c  */ 
     3814/* Line 1464 of yacc.c  */ 
    38073815#line 1494 "compilers/imcc/imcc.y" 
    38083816    { 
    38093817           (yyval.t) = P_METHOD; 
     
    38143822 
    38153823  case 71: 
    38163824 
    3817 /* Line 1455 of yacc.c  */ 
     3825/* Line 1464 of yacc.c  */ 
    38183826#line 1500 "compilers/imcc/imcc.y" 
    38193827    { 
    38203828           (yyval.t) = P_METHOD; 
     
    38253833 
    38263834  case 72: 
    38273835 
    3828 /* Line 1455 of yacc.c  */ 
     3836/* Line 1464 of yacc.c  */ 
    38293837#line 1509 "compilers/imcc/imcc.y" 
    38303838    { 
    38313839           (yyval.t) = P_NSENTRY; 
     
    38363844 
    38373845  case 73: 
    38383846 
    3839 /* Line 1455 of yacc.c  */ 
     3847/* Line 1464 of yacc.c  */ 
    38403848#line 1515 "compilers/imcc/imcc.y" 
    38413849    { 
    38423850           (yyval.t) = P_NSENTRY; 
     
    38473855 
    38483856  case 74: 
    38493857 
    3850 /* Line 1455 of yacc.c  */ 
     3858/* Line 1464 of yacc.c  */ 
    38513859#line 1524 "compilers/imcc/imcc.y" 
    38523860    { 
    38533861           (yyval.t) = 0; 
     
    38573865 
    38583866  case 75: 
    38593867 
    3860 /* Line 1455 of yacc.c  */ 
     3868/* Line 1464 of yacc.c  */ 
    38613869#line 1532 "compilers/imcc/imcc.y" 
    38623870    { 
    38633871           (yyval.t) = 0; 
     
    38673875 
    38683876  case 76: 
    38693877 
    3870 /* Line 1455 of yacc.c  */ 
     3878/* Line 1464 of yacc.c  */ 
    38713879#line 1537 "compilers/imcc/imcc.y" 
    38723880    { 
    38733881           (yyval.t) = 0; 
     
    38793887 
    38803888  case 77: 
    38813889 
    3882 /* Line 1455 of yacc.c  */ 
     3890/* Line 1464 of yacc.c  */ 
    38833891#line 1547 "compilers/imcc/imcc.y" 
    38843892    { 
    38853893           add_pcc_multi(interp, IMCC_INFO(interp)->cur_call, NULL); 
     
    38883896 
    38893897  case 78: 
    38903898 
    3891 /* Line 1455 of yacc.c  */ 
     3899/* Line 1464 of yacc.c  */ 
    38923900#line 1551 "compilers/imcc/imcc.y" 
    38933901    { 
    38943902           (yyval.t) = 0; 
     
    38983906 
    38993907  case 79: 
    39003908 
    3901 /* Line 1455 of yacc.c  */ 
     3909/* Line 1464 of yacc.c  */ 
    39023910#line 1556 "compilers/imcc/imcc.y" 
    39033911    { 
    39043912           (yyval.t) = 0; 
     
    39083916 
    39093917  case 80: 
    39103918 
    3911 /* Line 1455 of yacc.c  */ 
     3919/* Line 1464 of yacc.c  */ 
    39123920#line 1563 "compilers/imcc/imcc.y" 
    39133921    { (yyval.sr) = mk_const(interp, "INTVAL",   'S'); } 
    39143922    break; 
    39153923 
    39163924  case 81: 
    39173925 
    3918 /* Line 1455 of yacc.c  */ 
     3926/* Line 1464 of yacc.c  */ 
    39193927#line 1564 "compilers/imcc/imcc.y" 
    39203928    { (yyval.sr) = mk_const(interp, "FLOATVAL", 'S'); } 
    39213929    break; 
    39223930 
    39233931  case 82: 
    39243932 
    3925 /* Line 1455 of yacc.c  */ 
     3933/* Line 1464 of yacc.c  */ 
    39263934#line 1565 "compilers/imcc/imcc.y" 
    39273935    { (yyval.sr) = mk_const(interp, "PMC",      'S'); } 
    39283936    break; 
    39293937 
    39303938  case 83: 
    39313939 
    3932 /* Line 1455 of yacc.c  */ 
     3940/* Line 1464 of yacc.c  */ 
    39333941#line 1566 "compilers/imcc/imcc.y" 
    39343942    { (yyval.sr) = mk_const(interp, "STRING",   'S'); } 
    39353943    break; 
    39363944 
    39373945  case 84: 
    39383946 
    3939 /* Line 1455 of yacc.c  */ 
     3947/* Line 1464 of yacc.c  */ 
    39403948#line 1568 "compilers/imcc/imcc.y" 
    39413949    { 
    39423950           SymReg *r; 
     
    39523960 
    39533961  case 85: 
    39543962 
    3955 /* Line 1455 of yacc.c  */ 
     3963/* Line 1464 of yacc.c  */ 
    39563964#line 1579 "compilers/imcc/imcc.y" 
    39573965    { 
    39583966           SymReg *r; 
     
    39683976 
    39693977  case 86: 
    39703978 
    3971 /* Line 1455 of yacc.c  */ 
     3979/* Line 1464 of yacc.c  */ 
    39723980#line 1589 "compilers/imcc/imcc.y" 
    39733981    { (yyval.sr) = (yyvsp[(2) - (3)].sr); } 
    39743982    break; 
    39753983 
    39763984  case 89: 
    39773985 
    3978 /* Line 1455 of yacc.c  */ 
     3986/* Line 1464 of yacc.c  */ 
    39793987#line 1599 "compilers/imcc/imcc.y" 
    39803988    { 
    39813989           char name[128]; 
     
    40024010 
    40034011  case 90: 
    40044012 
    4005 /* Line 1455 of yacc.c  */ 
     4013/* Line 1464 of yacc.c  */ 
    40064014#line 1625 "compilers/imcc/imcc.y" 
    40074015    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; } 
    40084016    break; 
    40094017 
    40104018  case 91: 
    40114019 
    4012 /* Line 1455 of yacc.c  */ 
     4020/* Line 1464 of yacc.c  */ 
    40134021#line 1629 "compilers/imcc/imcc.y" 
    40144022    { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 0; } 
    40154023    break; 
    40164024 
    40174025  case 92: 
    40184026 
    4019 /* Line 1455 of yacc.c  */ 
     4027/* Line 1464 of yacc.c  */ 
    40204028#line 1630 "compilers/imcc/imcc.y" 
    40214029    { (yyval.i) = NULL; IMCC_INFO(interp)->cur_call->pcc_sub->label = 1; } 
    40224030    break; 
    40234031 
    40244032  case 93: 
    40254033 
    4026 /* Line 1455 of yacc.c  */ 
     4034/* Line 1464 of yacc.c  */ 
    40274035#line 1634 "compilers/imcc/imcc.y" 
    40284036    { (yyval.i) = NULL; } 
    40294037    break; 
    40304038 
    40314039  case 94: 
    40324040 
    4033 /* Line 1455 of yacc.c  */ 
     4041/* Line 1464 of yacc.c  */ 
    40344042#line 1635 "compilers/imcc/imcc.y" 
    40354043    { (yyval.i) = NULL;  IMCC_INFO(interp)->cur_call->pcc_sub->object = (yyvsp[(2) - (3)].sr); } 
    40364044    break; 
    40374045 
    40384046  case 95: 
    40394047 
    4040 /* Line 1455 of yacc.c  */ 
     4048/* Line 1464 of yacc.c  */ 
    40414049#line 1639 "compilers/imcc/imcc.y" 
    40424050    { (yyval.t) = 0; } 
    40434051    break; 
    40444052 
    40454053  case 97: 
    40464054 
    4047 /* Line 1455 of yacc.c  */ 
     4055/* Line 1464 of yacc.c  */ 
    40484056#line 1644 "compilers/imcc/imcc.y" 
    40494057    { (yyval.t) = (yyvsp[(1) - (1)].t); } 
    40504058    break; 
    40514059 
    40524060  case 98: 
    40534061 
    4054 /* Line 1455 of yacc.c  */ 
     4062/* Line 1464 of yacc.c  */ 
    40554063#line 1645 "compilers/imcc/imcc.y" 
    40564064    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); } 
    40574065    break; 
    40584066 
    40594067  case 99: 
    40604068 
    4061 /* Line 1455 of yacc.c  */ 
     4069/* Line 1464 of yacc.c  */ 
    40624070#line 1649 "compilers/imcc/imcc.y" 
    40634071    { (yyval.t) = P_LOAD; } 
    40644072    break; 
    40654073 
    40664074  case 100: 
    40674075 
    4068 /* Line 1455 of yacc.c  */ 
     4076/* Line 1464 of yacc.c  */ 
    40694077#line 1650 "compilers/imcc/imcc.y" 
    40704078    { (yyval.t) = P_INIT; } 
    40714079    break; 
    40724080 
    40734081  case 101: 
    40744082 
    4075 /* Line 1455 of yacc.c  */ 
     4083/* Line 1464 of yacc.c  */ 
    40764084#line 1651 "compilers/imcc/imcc.y" 
    40774085    { (yyval.t) = P_MAIN; } 
    40784086    break; 
    40794087 
    40804088  case 102: 
    40814089 
    4082 /* Line 1455 of yacc.c  */ 
     4090/* Line 1464 of yacc.c  */ 
    40834091#line 1652 "compilers/imcc/imcc.y" 
    40844092    { (yyval.t) = P_IMMEDIATE; } 
    40854093    break; 
    40864094 
    40874095  case 103: 
    40884096 
    4089 /* Line 1455 of yacc.c  */ 
     4097/* Line 1464 of yacc.c  */ 
    40904098#line 1653 "compilers/imcc/imcc.y" 
    40914099    { (yyval.t) = P_POSTCOMP; } 
    40924100    break; 
    40934101 
    40944102  case 104: 
    40954103 
    4096 /* Line 1455 of yacc.c  */ 
     4104/* Line 1464 of yacc.c  */ 
    40974105#line 1654 "compilers/imcc/imcc.y" 
    40984106    { (yyval.t) = P_ANON; } 
    40994107    break; 
    41004108 
    41014109  case 105: 
    41024110 
    4103 /* Line 1455 of yacc.c  */ 
     4111/* Line 1464 of yacc.c  */ 
    41044112#line 1655 "compilers/imcc/imcc.y" 
    41054113    { (yyval.t) = P_NEED_LEX; } 
    41064114    break; 
    41074115 
    41084116  case 113: 
    41094117 
    4110 /* Line 1455 of yacc.c  */ 
     4118/* Line 1464 of yacc.c  */ 
    41114119#line 1667 "compilers/imcc/imcc.y" 
    41124120    { 
    41134121           add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr)); 
     
    41174125 
    41184126  case 114: 
    41194127 
    4120 /* Line 1455 of yacc.c  */ 
     4128/* Line 1464 of yacc.c  */ 
    41214129#line 1672 "compilers/imcc/imcc.y" 
    41224130    { 
    41234131           add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); 
     
    41264134 
    41274135  case 115: 
    41284136 
    4129 /* Line 1455 of yacc.c  */ 
     4137/* Line 1464 of yacc.c  */ 
    41304138#line 1676 "compilers/imcc/imcc.y" 
    41314139    { 
    41324140           add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); 
     
    41354143 
    41364144  case 116: 
    41374145 
    4138 /* Line 1455 of yacc.c  */ 
     4146/* Line 1464 of yacc.c  */ 
    41394147#line 1680 "compilers/imcc/imcc.y" 
    41404148    { 
    41414149           add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (3)].sr)); 
     
    41444152 
    41454153  case 117: 
    41464154 
    4147 /* Line 1455 of yacc.c  */ 
     4155/* Line 1464 of yacc.c  */ 
    41484156#line 1684 "compilers/imcc/imcc.y" 
    41494157    { 
    41504158           add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (3)].s), 'S')); 
     
    41534161 
    41544162  case 118: 
    41554163 
    4156 /* Line 1455 of yacc.c  */ 
     4164/* Line 1464 of yacc.c  */ 
    41574165#line 1688 "compilers/imcc/imcc.y" 
    41584166    { 
    41594167           add_pcc_sub(IMCC_INFO(interp)->cur_call, (yyvsp[(2) - (5)].sr)); 
     
    41634171 
    41644172  case 119: 
    41654173 
    4166 /* Line 1455 of yacc.c  */ 
     4174/* Line 1464 of yacc.c  */ 
    41674175#line 1693 "compilers/imcc/imcc.y" 
    41684176    { 
    41694177           add_pcc_sub(IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(2) - (5)].s), 'S')); 
     
    41734181 
    41744182  case 120: 
    41754183 
    4176 /* Line 1455 of yacc.c  */ 
     4184/* Line 1464 of yacc.c  */ 
    41774185#line 1701 "compilers/imcc/imcc.y" 
    41784186    { (yyval.sr) = 0; } 
    41794187    break; 
    41804188 
    41814189  case 121: 
    41824190 
    4183 /* Line 1455 of yacc.c  */ 
     4191/* Line 1464 of yacc.c  */ 
    41844192#line 1702 "compilers/imcc/imcc.y" 
    41854193    { 
    41864194                                 if (IMCC_INFO(interp)->adv_named_id) { 
     
    41954203 
    41964204  case 122: 
    41974205 
    4198 /* Line 1455 of yacc.c  */ 
     4206/* Line 1464 of yacc.c  */ 
    41994207#line 1714 "compilers/imcc/imcc.y" 
    42004208    { (yyval.sr) = (yyvsp[(2) - (2)].sr); } 
    42014209    break; 
    42024210 
    42034211  case 123: 
    42044212 
    4205 /* Line 1455 of yacc.c  */ 
     4213/* Line 1464 of yacc.c  */ 
    42064214#line 1719 "compilers/imcc/imcc.y" 
    42074215    { (yyval.sr) = 0; } 
    42084216    break; 
    42094217 
    42104218  case 124: 
    42114219 
    4212 /* Line 1455 of yacc.c  */ 
     4220/* Line 1464 of yacc.c  */ 
    42134221#line 1721 "compilers/imcc/imcc.y" 
    42144222    { 
    42154223           if ((yyvsp[(2) - (3)].sr)) 
     
    42194227 
    42204228  case 125: 
    42214229 
    4222 /* Line 1455 of yacc.c  */ 
     4230/* Line 1464 of yacc.c  */ 
    42234231#line 1728 "compilers/imcc/imcc.y" 
    42244232    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); } 
    42254233    break; 
    42264234 
    42274235  case 126: 
    42284236 
    4229 /* Line 1455 of yacc.c  */ 
     4237/* Line 1464 of yacc.c  */ 
    42304238#line 1729 "compilers/imcc/imcc.y" 
    42314239    { IMCC_INFO(interp)->is_def = 1; } 
    42324240    break; 
    42334241 
    42344242  case 127: 
    42354243 
    4236 /* Line 1455 of yacc.c  */ 
     4244/* Line 1464 of yacc.c  */ 
    42374245#line 1730 "compilers/imcc/imcc.y" 
    42384246    { 
    42394247           IdList * const l = (yyvsp[(4) - (4)].idlist); 
     
    42474255 
    42484256  case 128: 
    42494257 
    4250 /* Line 1455 of yacc.c  */ 
     4258/* Line 1464 of yacc.c  */ 
    42514259#line 1741 "compilers/imcc/imcc.y" 
    42524260    { (yyval.t) = 0; } 
    42534261    break; 
    42544262 
    42554263  case 129: 
    42564264 
    4257 /* Line 1455 of yacc.c  */ 
     4265/* Line 1464 of yacc.c  */ 
    42584266#line 1742 "compilers/imcc/imcc.y" 
    42594267    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); } 
    42604268    break; 
    42614269 
    42624270  case 130: 
    42634271 
    4264 /* Line 1455 of yacc.c  */ 
     4272/* Line 1464 of yacc.c  */ 
    42654273#line 1746 "compilers/imcc/imcc.y" 
    42664274    { (yyval.t) = VT_FLAT;   } 
    42674275    break; 
    42684276 
    42694277  case 131: 
    42704278 
    4271 /* Line 1455 of yacc.c  */ 
     4279/* Line 1464 of yacc.c  */ 
    42724280#line 1747 "compilers/imcc/imcc.y" 
    42734281    { (yyval.t) = VT_OPTIONAL; } 
    42744282    break; 
    42754283 
    42764284  case 132: 
    42774285 
    4278 /* Line 1455 of yacc.c  */ 
     4286/* Line 1464 of yacc.c  */ 
    42794287#line 1748 "compilers/imcc/imcc.y" 
    42804288    { (yyval.t) = VT_OPT_FLAG; } 
    42814289    break; 
    42824290 
    42834291  case 133: 
    42844292 
    4285 /* Line 1455 of yacc.c  */ 
     4293/* Line 1464 of yacc.c  */ 
    42864294#line 1749 "compilers/imcc/imcc.y" 
    42874295    { (yyval.t) = VT_NAMED; } 
    42884296    break; 
    42894297 
    42904298  case 134: 
    42914299 
    4292 /* Line 1455 of yacc.c  */ 
     4300/* Line 1464 of yacc.c  */ 
    42934301#line 1750 "compilers/imcc/imcc.y" 
    42944302    { adv_named_set(interp, (yyvsp[(3) - (4)].s));   (yyval.t) = VT_NAMED; mem_sys_free((yyvsp[(3) - (4)].s)); } 
    42954303    break; 
    42964304 
    42974305  case 135: 
    42984306 
    4299 /* Line 1455 of yacc.c  */ 
     4307/* Line 1464 of yacc.c  */ 
    43004308#line 1751 "compilers/imcc/imcc.y" 
    43014309    { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); (yyval.t) = VT_NAMED; mem_sys_free((yyvsp[(3) - (4)].s)); } 
    43024310    break; 
    43034311 
    43044312  case 136: 
    43054313 
    4306 /* Line 1455 of yacc.c  */ 
     4314/* Line 1464 of yacc.c  */ 
    43074315#line 1752 "compilers/imcc/imcc.y" 
    43084316    { (yyval.t) = 0; } 
    43094317    break; 
    43104318 
    43114319  case 137: 
    43124320 
    4313 /* Line 1455 of yacc.c  */ 
     4321/* Line 1464 of yacc.c  */ 
    43144322#line 1753 "compilers/imcc/imcc.y" 
    43154323    { (yyval.t) = VT_CALL_SIG; } 
    43164324    break; 
    43174325 
    43184326  case 138: 
    43194327 
    4320 /* Line 1455 of yacc.c  */ 
     4328/* Line 1464 of yacc.c  */ 
    43214329#line 1758 "compilers/imcc/imcc.y" 
    43224330    { begin_return_or_yield(interp, 0); } 
    43234331    break; 
    43244332 
    43254333  case 139: 
    43264334 
    4327 /* Line 1455 of yacc.c  */ 
     4335/* Line 1464 of yacc.c  */ 
    43284336#line 1760 "compilers/imcc/imcc.y" 
    43294337    { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; } 
    43304338    break; 
    43314339 
    43324340  case 140: 
    43334341 
    4334 /* Line 1455 of yacc.c  */ 
     4342/* Line 1464 of yacc.c  */ 
    43354343#line 1762 "compilers/imcc/imcc.y" 
    43364344    { 
    43374345           IMCC_INFO(interp)->asm_state = AsmDefault; 
     
    43414349 
    43424350  case 141: 
    43434351 
    4344 /* Line 1455 of yacc.c  */ 
     4352/* Line 1464 of yacc.c  */ 
    43454353#line 1769 "compilers/imcc/imcc.y" 
    43464354    { begin_return_or_yield(interp, 1); } 
    43474355    break; 
    43484356 
    43494357  case 142: 
    43504358 
    4351 /* Line 1455 of yacc.c  */ 
     4359/* Line 1464 of yacc.c  */ 
    43524360#line 1771 "compilers/imcc/imcc.y" 
    43534361    { (yyval.i) = 0; IMCC_INFO(interp)->asm_state = AsmDefault; } 
    43544362    break; 
    43554363 
    43564364  case 143: 
    43574365 
    4358 /* Line 1455 of yacc.c  */ 
     4366/* Line 1464 of yacc.c  */ 
    43594367#line 1775 "compilers/imcc/imcc.y" 
    43604368    { (yyval.sr) = 0; } 
    43614369    break; 
    43624370 
    43634371  case 144: 
    43644372 
    4365 /* Line 1455 of yacc.c  */ 
     4373/* Line 1464 of yacc.c  */ 
    43664374#line 1777 "compilers/imcc/imcc.y" 
    43674375    { 
    43684376           if ((yyvsp[(1) - (2)].sr)) 
     
    43724380 
    43734381  case 145: 
    43744382 
    4375 /* Line 1455 of yacc.c  */ 
     4383/* Line 1464 of yacc.c  */ 
    43764384#line 1782 "compilers/imcc/imcc.y" 
    43774385    { 
    43784386           if ((yyvsp[(2) - (3)].sr)) 
     
    43824390 
    43834391  case 146: 
    43844392 
    4385 /* Line 1455 of yacc.c  */ 
     4393/* Line 1464 of yacc.c  */ 
    43864394#line 1789 "compilers/imcc/imcc.y" 
    43874395    { (yyval.sr) = 0; } 
    43884396    break; 
    43894397 
    43904398  case 147: 
    43914399 
    4392 /* Line 1455 of yacc.c  */ 
     4400/* Line 1464 of yacc.c  */ 
    43934401#line 1791 "compilers/imcc/imcc.y" 
    43944402    { 
    43954403           if ((yyvsp[(1) - (2)].sr)) 
     
    43994407 
    44004408  case 148: 
    44014409 
    4402 /* Line 1455 of yacc.c  */ 
     4410/* Line 1464 of yacc.c  */ 
    44034411#line 1796 "compilers/imcc/imcc.y" 
    44044412    { 
    44054413           if ((yyvsp[(2) - (3)].sr)) 
     
    44094417 
    44104418  case 149: 
    44114419 
    4412 /* Line 1455 of yacc.c  */ 
     4420/* Line 1464 of yacc.c  */ 
    44134421#line 1803 "compilers/imcc/imcc.y" 
    44144422    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); } 
    44154423    break; 
    44164424 
    44174425  case 150: 
    44184426 
    4419 /* Line 1455 of yacc.c  */ 
     4427/* Line 1464 of yacc.c  */ 
    44204428#line 1807 "compilers/imcc/imcc.y" 
    44214429    { (yyval.sr) = (yyvsp[(2) - (3)].sr); (yyval.sr)->type |= (yyvsp[(3) - (3)].t); } 
    44224430    break; 
    44234431 
    44244432  case 151: 
    44254433 
    4426 /* Line 1455 of yacc.c  */ 
     4434/* Line 1464 of yacc.c  */ 
    44274435#line 1812 "compilers/imcc/imcc.y" 
    44284436    { 
    44294437          if (IMCC_INFO(interp)->asm_state == AsmDefault) 
     
    44334441 
    44344442  case 152: 
    44354443 
    4436 /* Line 1455 of yacc.c  */ 
     4444/* Line 1464 of yacc.c  */ 
    44374445#line 1817 "compilers/imcc/imcc.y" 
    44384446    { 
    44394447          IMCC_INFO(interp)->asm_state = AsmDefault; 
     
    44434451 
    44444452  case 153: 
    44454453 
    4446 /* Line 1455 of yacc.c  */ 
     4454/* Line 1464 of yacc.c  */ 
    44474455#line 1824 "compilers/imcc/imcc.y" 
    44484456    { (yyval.t) = 0; } 
    44494457    break; 
    44504458 
    44514459  case 154: 
    44524460 
    4453 /* Line 1455 of yacc.c  */ 
     4461/* Line 1464 of yacc.c  */ 
    44544462#line 1825 "compilers/imcc/imcc.y" 
    44554463    { (yyval.t) = 1; } 
    44564464    break; 
    44574465 
    44584466  case 155: 
    44594467 
    4460 /* Line 1455 of yacc.c  */ 
     4468/* Line 1464 of yacc.c  */ 
    44614469#line 1829 "compilers/imcc/imcc.y" 
    44624470    { (yyval.i) = 0; } 
    44634471    break; 
    44644472 
    44654473  case 156: 
    44664474 
    4467 /* Line 1455 of yacc.c  */ 
     4475/* Line 1464 of yacc.c  */ 
    44684476#line 1831 "compilers/imcc/imcc.y" 
    44694477    { 
    44704478           if (IMCC_INFO(interp)->adv_named_id) { 
     
    44794487 
    44804488  case 157: 
    44814489 
    4482 /* Line 1455 of yacc.c  */ 
     4490/* Line 1464 of yacc.c  */ 
    44834491#line 1841 "compilers/imcc/imcc.y" 
    44844492    { 
    44854493            SymReg * const name = mk_const(interp, (yyvsp[(1) - (3)].s), 'S'); 
     
    44894497 
    44904498  case 158: 
    44914499 
    4492 /* Line 1455 of yacc.c  */ 
     4500/* Line 1464 of yacc.c  */ 
    44934501#line 1846 "compilers/imcc/imcc.y" 
    44944502    { 
    44954503           if (IMCC_INFO(interp)->adv_named_id) { 
     
    45044512 
    45054513  case 159: 
    45064514 
    4507 /* Line 1455 of yacc.c  */ 
     4515/* Line 1464 of yacc.c  */ 
    45084516#line 1856 "compilers/imcc/imcc.y" 
    45094517    { 
    45104518           SymReg * const name = mk_const(interp, (yyvsp[(3) - (5)].s), 'S'); 
     
    45144522 
    45154523  case 162: 
    45164524 
    4517 /* Line 1455 of yacc.c  */ 
     4525/* Line 1464 of yacc.c  */ 
    45184526#line 1877 "compilers/imcc/imcc.y" 
    45194527    { clear_state(interp); } 
    45204528    break; 
    45214529 
    45224530  case 163: 
    45234531 
    4524 /* Line 1455 of yacc.c  */ 
     4532/* Line 1464 of yacc.c  */ 
    45254533#line 1882 "compilers/imcc/imcc.y" 
    45264534    { (yyval.i) = (yyvsp[(2) - (2)].i); } 
    45274535    break; 
    45284536 
    45294537  case 164: 
    45304538 
    4531 /* Line 1455 of yacc.c  */ 
     4539/* Line 1464 of yacc.c  */ 
    45324540#line 1883 "compilers/imcc/imcc.y" 
    45334541    { (yyval.i) = 0; } 
    45344542    break; 
    45354543 
    45364544  case 165: 
    45374545 
    4538 /* Line 1455 of yacc.c  */ 
     4546/* Line 1464 of yacc.c  */ 
    45394547#line 1884 "compilers/imcc/imcc.y" 
    45404548    { (yyval.i) = 0; } 
    45414549    break; 
    45424550 
    45434551  case 166: 
    45444552 
    4545 /* Line 1455 of yacc.c  */ 
     4553/* Line 1464 of yacc.c  */ 
    45464554#line 1885 "compilers/imcc/imcc.y" 
    45474555    { (yyval.i) = 0; } 
    45484556    break; 
    45494557 
    45504558  case 167: 
    45514559 
    4552 /* Line 1455 of yacc.c  */ 
     4560/* Line 1464 of yacc.c  */ 
    45534561#line 1886 "compilers/imcc/imcc.y" 
    45544562    { (yyval.i) = 0; } 
    45554563    break; 
    45564564 
    45574565  case 168: 
    45584566 
    4559 /* Line 1455 of yacc.c  */ 
     4567/* Line 1464 of yacc.c  */ 
    45604568#line 1887 "compilers/imcc/imcc.y" 
    45614569    { (yyval.i) = (yyvsp[(1) - (1)].i); } 
    45624570    break; 
    45634571 
    45644572  case 169: 
    45654573 
    4566 /* Line 1455 of yacc.c  */ 
     4574/* Line 1464 of yacc.c  */ 
    45674575#line 1891 "compilers/imcc/imcc.y" 
    45684576    { (yyval.i) = NULL; } 
    45694577    break; 
    45704578 
    45714579  case 173: 
    45724580 
    4573 /* Line 1455 of yacc.c  */ 
     4581/* Line 1464 of yacc.c  */ 
    45744582#line 1902 "compilers/imcc/imcc.y" 
    45754583    { 
    45764584             Instruction * const i = iLABEL(interp, IMCC_INFO(interp)->cur_unit, mk_local_label(interp, (yyvsp[(1) - (1)].s))); 
     
    45814589 
    45824590  case 174: 
    45834591 
    4584 /* Line 1455 of yacc.c  */ 
     4592/* Line 1464 of yacc.c  */ 
    45854593#line 1912 "compilers/imcc/imcc.y" 
    45864594    { (yyval.i) = (yyvsp[(2) - (3)].i); } 
    45874595    break; 
    45884596 
    45894597  case 175: 
    45904598 
    4591 /* Line 1455 of yacc.c  */ 
     4599/* Line 1464 of yacc.c  */ 
    45924600#line 1914 "compilers/imcc/imcc.y" 
    45934601    { 
    45944602           if (yynerrs >= PARROT_MAX_RECOVER_ERRORS) { 
     
    46014609 
    46024610  case 176: 
    46034611 
    4604 /* Line 1455 of yacc.c  */ 
     4612/* Line 1464 of yacc.c  */ 
    46054613#line 1925 "compilers/imcc/imcc.y" 
    46064614    { 
    46074615           IdList* const l = (yyvsp[(1) - (1)].idlist); 
     
    46124620 
    46134621  case 177: 
    46144622 
    4615 /* Line 1455 of yacc.c  */ 
     4623/* Line 1464 of yacc.c  */ 
    46164624#line 1932 "compilers/imcc/imcc.y" 
    46174625    { 
    46184626           IdList* const l = (yyvsp[(3) - (3)].idlist); 
     
    46234631 
    46244632  case 178: 
    46254633 
    4626 /* Line 1455 of yacc.c  */ 
     4634/* Line 1464 of yacc.c  */ 
    46274635#line 1941 "compilers/imcc/imcc.y" 
    46284636    { 
    46294637           IdList* const l = mem_gc_allocate_n_zeroed_typed(interp, 1, IdList); 
     
    46344642 
    46354643  case 183: 
    46364644 
    4637 /* Line 1455 of yacc.c  */ 
     4645/* Line 1464 of yacc.c  */ 
    46384646#line 1957 "compilers/imcc/imcc.y" 
    46394647    { IMCC_INFO(interp)->is_def = 1; } 
    46404648    break; 
    46414649 
    46424650  case 184: 
    46434651 
    4644 /* Line 1455 of yacc.c  */ 
     4652/* Line 1464 of yacc.c  */ 
    46454653#line 1958 "compilers/imcc/imcc.y" 
    46464654    { 
    46474655           IdList *l = (yyvsp[(4) - (4)].idlist); 
     
    46594667 
    46604668  case 185: 
    46614669 
    4662 /* Line 1455 of yacc.c  */ 
     4670/* Line 1464 of yacc.c  */ 
    46634671#line 1971 "compilers/imcc/imcc.y" 
    46644672    { 
    46654673            if ((yyvsp[(4) - (4)].sr)->set != 'P') { 
     
    46814689 
    46824690  case 186: 
    46834691 
    4684 /* Line 1455 of yacc.c  */ 
     4692/* Line 1464 of yacc.c  */ 
    46854693#line 1988 "compilers/imcc/imcc.y" 
    46864694    { 
    46874695            if ((yyvsp[(4) - (4)].sr)->set != 'P') { 
     
    46994707 
    47004708  case 187: 
    47014709 
    4702 /* Line 1455 of yacc.c  */ 
     4710/* Line 1464 of yacc.c  */ 
    47034711#line 2000 "compilers/imcc/imcc.y" 
    47044712    { IMCC_INFO(interp)->is_def = 1; } 
    47054713    break; 
    47064714 
    47074715  case 188: 
    47084716 
    4709 /* Line 1455 of yacc.c  */ 
     4717/* Line 1464 of yacc.c  */ 
    47104718#line 2001 "compilers/imcc/imcc.y" 
    47114719    { 
    47124720           mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 0); 
     
    47174725 
    47184726  case 190: 
    47194727 
    4720 /* Line 1455 of yacc.c  */ 
     4728/* Line 1464 of yacc.c  */ 
    47214729#line 2008 "compilers/imcc/imcc.y" 
    47224730    { IMCC_INFO(interp)->is_def = 1; } 
    47234731    break; 
    47244732 
    47254733  case 191: 
    47264734 
    4727 /* Line 1455 of yacc.c  */ 
     4735/* Line 1464 of yacc.c  */ 
    47284736#line 2009 "compilers/imcc/imcc.y" 
    47294737    { 
    47304738           mk_const_ident(interp, (yyvsp[(4) - (6)].s), (yyvsp[(3) - (6)].t), (yyvsp[(6) - (6)].sr), 1); 
     
    47354743 
    47364744  case 192: 
    47374745 
    4738 /* Line 1455 of yacc.c  */ 
     4746/* Line 1464 of yacc.c  */ 
    47394747#line 2015 "compilers/imcc/imcc.y" 
    47404748    { 
    47414749           (yyval.i) = NULL; 
     
    47464754 
    47474755  case 193: 
    47484756 
    4749 /* Line 1455 of yacc.c  */ 
     4757/* Line 1464 of yacc.c  */ 
    47504758#line 2021 "compilers/imcc/imcc.y" 
    47514759    { 
    47524760            (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "branch", 1, (yyvsp[(2) - (2)].sr)); 
     
    47554763 
    47564764  case 194: 
    47574765 
    4758 /* Line 1455 of yacc.c  */ 
     4766/* Line 1464 of yacc.c  */ 
    47594767#line 2025 "compilers/imcc/imcc.y" 
    47604768    { 
    47614769           (yyval.i) = INS(interp, 
     
    47724780 
    47734781  case 195: 
    47744782 
    4775 /* Line 1455 of yacc.c  */ 
     4783/* Line 1464 of yacc.c  */ 
    47764784#line 2036 "compilers/imcc/imcc.y" 
    47774785    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(2) - (2)].sr)); } 
    47784786    break; 
    47794787 
    47804788  case 196: 
    47814789 
    4782 /* Line 1455 of yacc.c  */ 
     4790/* Line 1464 of yacc.c  */ 
    47834791#line 2037 "compilers/imcc/imcc.y" 
    47844792    { (yyval.i) = 0; IMCC_INFO(interp)->cur_call = NULL; } 
    47854793    break; 
    47864794 
    47874795  case 197: 
    47884796 
    4789 /* Line 1455 of yacc.c  */ 
     4797/* Line 1464 of yacc.c  */ 
    47904798#line 2038 "compilers/imcc/imcc.y" 
    47914799    { (yyval.i) = 0; } 
    47924800    break; 
    47934801 
    47944802  case 200: 
    47954803 
    4796 /* Line 1455 of yacc.c  */ 
     4804/* Line 1464 of yacc.c  */ 
    47974805#line 2041 "compilers/imcc/imcc.y" 
    47984806    { (yyval.i) = 0;} 
    47994807    break; 
    48004808 
    48014809  case 201: 
    48024810 
    4803 /* Line 1455 of yacc.c  */ 
     4811/* Line 1464 of yacc.c  */ 
    48044812#line 2045 "compilers/imcc/imcc.y" 
    48054813    { (yyval.t) = 'I'; } 
    48064814    break; 
    48074815 
    48084816  case 202: 
    48094817 
    4810 /* Line 1455 of yacc.c  */ 
     4818/* Line 1464 of yacc.c  */ 
    48114819#line 2046 "compilers/imcc/imcc.y" 
    48124820    { (yyval.t) = 'N'; } 
    48134821    break; 
    48144822 
    48154823  case 203: 
    48164824 
    4817 /* Line 1455 of yacc.c  */ 
     4825/* Line 1464 of yacc.c  */ 
    48184826#line 2047 "compilers/imcc/imcc.y" 
    48194827    { (yyval.t) = 'S'; } 
    48204828    break; 
    48214829 
    48224830  case 204: 
    48234831 
    4824 /* Line 1455 of yacc.c  */ 
     4832/* Line 1464 of yacc.c  */ 
    48254833#line 2048 "compilers/imcc/imcc.y" 
    48264834    { (yyval.t) = 'P'; } 
    48274835    break; 
    48284836 
    48294837  case 205: 
    48304838 
    4831 /* Line 1455 of yacc.c  */ 
     4839/* Line 1464 of yacc.c  */ 
    48324840#line 2053 "compilers/imcc/imcc.y" 
    48334841    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "set", 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr));  } 
    48344842    break; 
    48354843 
    48364844  case 206: 
    48374845 
    4838 /* Line 1455 of yacc.c  */ 
     4846/* Line 1464 of yacc.c  */ 
    48394847#line 2055 "compilers/imcc/imcc.y" 
    48404848    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (4)].s), 2, (yyvsp[(1) - (4)].sr), (yyvsp[(4) - (4)].sr));  } 
    48414849    break; 
    48424850 
    48434851  case 207: 
    48444852 
    4845 /* Line 1455 of yacc.c  */ 
     4853/* Line 1464 of yacc.c  */ 
    48464854#line 2057 "compilers/imcc/imcc.y" 
    48474855    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(4) - (5)].s), 3, (yyvsp[(1) - (5)].sr), (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr)); } 
    48484856    break; 
    48494857 
    48504858  case 208: 
    48514859 
    4852 /* Line 1455 of yacc.c  */ 
     4860/* Line 1464 of yacc.c  */ 
    48534861#line 2059 "compilers/imcc/imcc.y" 
    48544862    { (yyval.i) = iINDEXFETCH(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(5) - (6)].sr)); } 
    48554863    break; 
    48564864 
    48574865  case 209: 
    48584866 
    4859 /* Line 1455 of yacc.c  */ 
     4867/* Line 1464 of yacc.c  */ 
    48604868#line 2061 "compilers/imcc/imcc.y" 
    48614869    { (yyval.i) = iINDEXSET(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (6)].sr), (yyvsp[(3) - (6)].sr), (yyvsp[(6) - (6)].sr)); } 
    48624870    break; 
    48634871 
    48644872  case 210: 
    48654873 
    4866 /* Line 1455 of yacc.c  */ 
     4874/* Line 1464 of yacc.c  */ 
    48674875#line 2064 "compilers/imcc/imcc.y" 
    48684876    { 
    48694877           add_pcc_result(interp, (yyvsp[(3) - (3)].i)->symregs[0], (yyvsp[(1) - (3)].sr)); 
     
    48744882 
    48754883  case 211: 
    48764884 
    4877 /* Line 1455 of yacc.c  */ 
     4885/* Line 1464 of yacc.c  */ 
    48784886#line 2070 "compilers/imcc/imcc.y" 
    48794887    { 
    48804888           (yyval.i) = IMCC_create_itcall_label(interp); 
     
    48834891 
    48844892  case 212: 
    48854893 
    4886 /* Line 1455 of yacc.c  */ 
     4894/* Line 1464 of yacc.c  */ 
    48874895#line 2074 "compilers/imcc/imcc.y" 
    48884896    { 
    48894897           IMCC_itcall_sub(interp, (yyvsp[(6) - (9)].sr)); 
     
    48934901 
    48944902  case 216: 
    48954903 
    4896 /* Line 1455 of yacc.c  */ 
     4904/* Line 1464 of yacc.c  */ 
    48974905#line 2082 "compilers/imcc/imcc.y" 
    48984906    { 
    48994907           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "null", 1, (yyvsp[(1) - (3)].sr)); 
     
    49024910 
    49034911  case 217: 
    49044912 
    4905 /* Line 1455 of yacc.c  */ 
     4913/* Line 1464 of yacc.c  */ 
    49064914#line 2089 "compilers/imcc/imcc.y" 
    49074915    { (yyval.s) = (char *)"not"; } 
    49084916    break; 
    49094917 
    49104918  case 218: 
    49114919 
    4912 /* Line 1455 of yacc.c  */ 
     4920/* Line 1464 of yacc.c  */ 
    49134921#line 2090 "compilers/imcc/imcc.y" 
    49144922    { (yyval.s) = (char *)"bnot"; } 
    49154923    break; 
    49164924 
    49174925  case 219: 
    49184926 
    4919 /* Line 1455 of yacc.c  */ 
     4927/* Line 1464 of yacc.c  */ 
    49204928#line 2091 "compilers/imcc/imcc.y" 
    49214929    { (yyval.s) = (char *)"neg"; } 
    49224930    break; 
    49234931 
    49244932  case 220: 
    49254933 
    4926 /* Line 1455 of yacc.c  */ 
     4934/* Line 1464 of yacc.c  */ 
    49274935#line 2095 "compilers/imcc/imcc.y" 
    49284936    { (yyval.s) = (char *)"sub"; } 
    49294937    break; 
    49304938 
    49314939  case 221: 
    49324940 
    4933 /* Line 1455 of yacc.c  */ 
     4941/* Line 1464 of yacc.c  */ 
    49344942#line 2096 "compilers/imcc/imcc.y" 
    49354943    { (yyval.s) = (char *)"add"; } 
    49364944    break; 
    49374945 
    49384946  case 222: 
    49394947 
    4940 /* Line 1455 of yacc.c  */ 
     4948/* Line 1464 of yacc.c  */ 
    49414949#line 2097 "compilers/imcc/imcc.y" 
    49424950    { (yyval.s) = (char *)"mul"; } 
    49434951    break; 
    49444952 
    49454953  case 223: 
    49464954 
    4947 /* Line 1455 of yacc.c  */ 
     4955/* Line 1464 of yacc.c  */ 
    49484956#line 2098 "compilers/imcc/imcc.y" 
    49494957    { (yyval.s) = (char *)"div"; } 
    49504958    break; 
    49514959 
    49524960  case 224: 
    49534961 
    4954 /* Line 1455 of yacc.c  */ 
     4962/* Line 1464 of yacc.c  */ 
    49554963#line 2099 "compilers/imcc/imcc.y" 
    49564964    { (yyval.s) = (char *)"mod"; } 
    49574965    break; 
    49584966 
    49594967  case 225: 
    49604968 
    4961 /* Line 1455 of yacc.c  */ 
     4969/* Line 1464 of yacc.c  */ 
    49624970#line 2100 "compilers/imcc/imcc.y" 
    49634971    { (yyval.s) = (char *)"fdiv"; } 
    49644972    break; 
    49654973 
    49664974  case 226: 
    49674975 
    4968 /* Line 1455 of yacc.c  */ 
     4976/* Line 1464 of yacc.c  */ 
    49694977#line 2101 "compilers/imcc/imcc.y" 
    49704978    { (yyval.s) = (char *)"pow"; } 
    49714979    break; 
    49724980 
    49734981  case 227: 
    49744982 
    4975 /* Line 1455 of yacc.c  */ 
     4983/* Line 1464 of yacc.c  */ 
    49764984#line 2102 "compilers/imcc/imcc.y" 
    49774985    { (yyval.s) = (char *)"concat"; } 
    49784986    break; 
    49794987 
    49804988  case 228: 
    49814989 
    4982 /* Line 1455 of yacc.c  */ 
     4990/* Line 1464 of yacc.c  */ 
    49834991#line 2103 "compilers/imcc/imcc.y" 
    49844992    { (yyval.s) = (char *)"iseq"; } 
    49854993    break; 
    49864994 
    49874995  case 229: 
    49884996 
    4989 /* Line 1455 of yacc.c  */ 
     4997/* Line 1464 of yacc.c  */ 
    49904998#line 2104 "compilers/imcc/imcc.y" 
    49914999    { (yyval.s) = (char *)"isne"; } 
    49925000    break; 
    49935001 
    49945002  case 230: 
    49955003 
    4996 /* Line 1455 of yacc.c  */ 
     5004/* Line 1464 of yacc.c  */ 
    49975005#line 2105 "compilers/imcc/imcc.y" 
    49985006    { (yyval.s) = (char *)"isgt"; } 
    49995007    break; 
    50005008 
    50015009  case 231: 
    50025010 
    5003 /* Line 1455 of yacc.c  */ 
     5011/* Line 1464 of yacc.c  */ 
    50045012#line 2106 "compilers/imcc/imcc.y" 
    50055013    { (yyval.s) = (char *)"isge"; } 
    50065014    break; 
    50075015 
    50085016  case 232: 
    50095017 
    5010 /* Line 1455 of yacc.c  */ 
     5018/* Line 1464 of yacc.c  */ 
    50115019#line 2107 "compilers/imcc/imcc.y" 
    50125020    { (yyval.s) = (char *)"islt"; } 
    50135021    break; 
    50145022 
    50155023  case 233: 
    50165024 
    5017 /* Line 1455 of yacc.c  */ 
     5025/* Line 1464 of yacc.c  */ 
    50185026#line 2108 "compilers/imcc/imcc.y" 
    50195027    { (yyval.s) = (char *)"isle"; } 
    50205028    break; 
    50215029 
    50225030  case 234: 
    50235031 
    5024 /* Line 1455 of yacc.c  */ 
     5032/* Line 1464 of yacc.c  */ 
    50255033#line 2109 "compilers/imcc/imcc.y" 
    50265034    { (yyval.s) = (char *)"shl"; } 
    50275035    break; 
    50285036 
    50295037  case 235: 
    50305038 
    5031 /* Line 1455 of yacc.c  */ 
     5039/* Line 1464 of yacc.c  */ 
    50325040#line 2110 "compilers/imcc/imcc.y" 
    50335041    { (yyval.s) = (char *)"shr"; } 
    50345042    break; 
    50355043 
    50365044  case 236: 
    50375045 
    5038 /* Line 1455 of yacc.c  */ 
     5046/* Line 1464 of yacc.c  */ 
    50395047#line 2111 "compilers/imcc/imcc.y" 
    50405048    { (yyval.s) = (char *)"lsr"; } 
    50415049    break; 
    50425050 
    50435051  case 237: 
    50445052 
    5045 /* Line 1455 of yacc.c  */ 
     5053/* Line 1464 of yacc.c  */ 
    50465054#line 2112 "compilers/imcc/imcc.y" 
    50475055    { (yyval.s) = (char *)"and"; } 
    50485056    break; 
    50495057 
    50505058  case 238: 
    50515059 
    5052 /* Line 1455 of yacc.c  */ 
     5060/* Line 1464 of yacc.c  */ 
    50535061#line 2113 "compilers/imcc/imcc.y" 
    50545062    { (yyval.s) = (char *)"or"; } 
    50555063    break; 
    50565064 
    50575065  case 239: 
    50585066 
    5059 /* Line 1455 of yacc.c  */ 
     5067/* Line 1464 of yacc.c  */ 
    50605068#line 2114 "compilers/imcc/imcc.y" 
    50615069    { (yyval.s) = (char *)"xor"; } 
    50625070    break; 
    50635071 
    50645072  case 240: 
    50655073 
    5066 /* Line 1455 of yacc.c  */ 
     5074/* Line 1464 of yacc.c  */ 
    50675075#line 2115 "compilers/imcc/imcc.y" 
    50685076    { (yyval.s) = (char *)"band"; } 
    50695077    break; 
    50705078 
    50715079  case 241: 
    50725080 
    5073 /* Line 1455 of yacc.c  */ 
     5081/* Line 1464 of yacc.c  */ 
    50745082#line 2116 "compilers/imcc/imcc.y" 
    50755083    { (yyval.s) = (char *)"bor"; } 
    50765084    break; 
    50775085 
    50785086  case 242: 
    50795087 
    5080 /* Line 1455 of yacc.c  */ 
     5088/* Line 1464 of yacc.c  */ 
    50815089#line 2117 "compilers/imcc/imcc.y" 
    50825090    { (yyval.s) = (char *)"bxor"; } 
    50835091    break; 
    50845092 
    50855093  case 243: 
    50865094 
    5087 /* Line 1455 of yacc.c  */ 
     5095/* Line 1464 of yacc.c  */ 
    50885096#line 2123 "compilers/imcc/imcc.y" 
    50895097    { 
    50905098           (yyval.i) = IMCC_create_itcall_label(interp); 
     
    50955103 
    50965104  case 244: 
    50975105 
    5098 /* Line 1455 of yacc.c  */ 
     5106/* Line 1464 of yacc.c  */ 
    50995107#line 2128 "compilers/imcc/imcc.y" 
    51005108    {  (yyval.i) = 0; } 
    51015109    break; 
    51025110 
    51035111  case 245: 
    51045112 
    5105 /* Line 1455 of yacc.c  */ 
     5113/* Line 1464 of yacc.c  */ 
    51065114#line 2135 "compilers/imcc/imcc.y" 
    51075115    { (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(2) - (3)].s), 2, (yyvsp[(1) - (3)].sr), (yyvsp[(3) - (3)].sr)); } 
    51085116    break; 
    51095117 
    51105118  case 246: 
    51115119 
    5112 /* Line 1455 of yacc.c  */ 
     5120/* Line 1464 of yacc.c  */ 
    51135121#line 2139 "compilers/imcc/imcc.y" 
    51145122    { (yyval.s) = (char *)"add"; } 
    51155123    break; 
    51165124 
    51175125  case 247: 
    51185126 
    5119 /* Line 1455 of yacc.c  */ 
     5127/* Line 1464 of yacc.c  */ 
    51205128#line 2140 "compilers/imcc/imcc.y" 
    51215129    { (yyval.s) = (char *)"sub"; } 
    51225130    break; 
    51235131 
    51245132  case 248: 
    51255133 
    5126 /* Line 1455 of yacc.c  */ 
     5134/* Line 1464 of yacc.c  */ 
    51275135#line 2141 "compilers/imcc/imcc.y" 
    51285136    { (yyval.s) = (char *)"mul"; } 
    51295137    break; 
    51305138 
    51315139  case 249: 
    51325140 
    5133 /* Line 1455 of yacc.c  */ 
     5141/* Line 1464 of yacc.c  */ 
    51345142#line 2142 "compilers/imcc/imcc.y" 
    51355143    { (yyval.s) = (char *)"div"; } 
    51365144    break; 
    51375145 
    51385146  case 250: 
    51395147 
    5140 /* Line 1455 of yacc.c  */ 
     5148/* Line 1464 of yacc.c  */ 
    51415149#line 2143 "compilers/imcc/imcc.y" 
    51425150    { (yyval.s) = (char *)"mod"; } 
    51435151    break; 
    51445152 
    51455153  case 251: 
    51465154 
    5147 /* Line 1455 of yacc.c  */ 
     5155/* Line 1464 of yacc.c  */ 
    51485156#line 2144 "compilers/imcc/imcc.y" 
    51495157    { (yyval.s) = (char *)"fdiv"; } 
    51505158    break; 
    51515159 
    51525160  case 252: 
    51535161 
    5154 /* Line 1455 of yacc.c  */ 
     5162/* Line 1464 of yacc.c  */ 
    51555163#line 2145 "compilers/imcc/imcc.y" 
    51565164    { (yyval.s) = (char *)"concat"; } 
    51575165    break; 
    51585166 
    51595167  case 253: 
    51605168 
    5161 /* Line 1455 of yacc.c  */ 
     5169/* Line 1464 of yacc.c  */ 
    51625170#line 2146 "compilers/imcc/imcc.y" 
    51635171    { (yyval.s) = (char *)"band"; } 
    51645172    break; 
    51655173 
    51665174  case 254: 
    51675175 
    5168 /* Line 1455 of yacc.c  */ 
     5176/* Line 1464 of yacc.c  */ 
    51695177#line 2147 "compilers/imcc/imcc.y" 
    51705178    { (yyval.s) = (char *)"bor"; } 
    51715179    break; 
    51725180 
    51735181  case 255: 
    51745182 
    5175 /* Line 1455 of yacc.c  */ 
     5183/* Line 1464 of yacc.c  */ 
    51765184#line 2148 "compilers/imcc/imcc.y" 
    51775185    { (yyval.s) = (char *)"bxor"; } 
    51785186    break; 
    51795187 
    51805188  case 256: 
    51815189 
    5182 /* Line 1455 of yacc.c  */ 
     5190/* Line 1464 of yacc.c  */ 
    51835191#line 2149 "compilers/imcc/imcc.y" 
    51845192    { (yyval.s) = (char *)"shr"; } 
    51855193    break; 
    51865194 
    51875195  case 257: 
    51885196 
    5189 /* Line 1455 of yacc.c  */ 
     5197/* Line 1464 of yacc.c  */ 
    51905198#line 2150 "compilers/imcc/imcc.y" 
    51915199    { (yyval.s) = (char *)"shl"; } 
    51925200    break; 
    51935201 
    51945202  case 258: 
    51955203 
    5196 /* Line 1455 of yacc.c  */ 
     5204/* Line 1464 of yacc.c  */ 
    51975205#line 2151 "compilers/imcc/imcc.y" 
    51985206    { (yyval.s) = (char *)"lsr"; } 
    51995207    break; 
    52005208 
    52015209  case 259: 
    52025210 
    5203 /* Line 1455 of yacc.c  */ 
     5211/* Line 1464 of yacc.c  */ 
    52045212#line 2157 "compilers/imcc/imcc.y" 
    52055213    { 
    52065214        (yyval.i) = func_ins(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(1) - (4)].sr), (yyvsp[(3) - (4)].s), 
     
    52135221 
    52145222  case 260: 
    52155223 
    5216 /* Line 1455 of yacc.c  */ 
     5224/* Line 1464 of yacc.c  */ 
    52175225#line 2167 "compilers/imcc/imcc.y" 
    52185226    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s));       mem_sys_free((yyvsp[(1) - (1)].s)); } 
    52195227    break; 
    52205228 
    52215229  case 261: 
    52225230 
    5223 /* Line 1455 of yacc.c  */ 
     5231/* Line 1464 of yacc.c  */ 
    52245232#line 2168 "compilers/imcc/imcc.y" 
    52255233    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } 
    52265234    break; 
    52275235 
    52285236  case 262: 
    52295237 
    5230 /* Line 1455 of yacc.c  */ 
     5238/* Line 1464 of yacc.c  */ 
    52315239#line 2169 "compilers/imcc/imcc.y" 
    52325240    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));     mem_sys_free((yyvsp[(1) - (1)].s)); } 
    52335241    break; 
    52345242 
    52355243  case 263: 
    52365244 
    5237 /* Line 1455 of yacc.c  */ 
     5245/* Line 1464 of yacc.c  */ 
    52385246#line 2171 "compilers/imcc/imcc.y" 
    52395247    { 
    52405248           (yyval.sr) = (yyvsp[(1) - (1)].sr); 
     
    52455253 
    52465254  case 264: 
    52475255 
    5248 /* Line 1455 of yacc.c  */ 
     5256/* Line 1464 of yacc.c  */ 
    52495257#line 2177 "compilers/imcc/imcc.y" 
    52505258    { 
    52515259            /* disallow bareword method names; SREG name constants are fine */ 
     
    52645272 
    52655273  case 265: 
    52665274 
    5267 /* Line 1455 of yacc.c  */ 
     5275/* Line 1464 of yacc.c  */ 
    52685276#line 2191 "compilers/imcc/imcc.y" 
    52695277    { 
    52705278            IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); 
     
    52755283 
    52765284  case 266: 
    52775285 
    5278 /* Line 1455 of yacc.c  */ 
     5286/* Line 1464 of yacc.c  */ 
    52795287#line 2197 "compilers/imcc/imcc.y" 
    52805288    { 
    52815289            IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); 
     
    52865294 
    52875295  case 267: 
    52885296 
    5289 /* Line 1455 of yacc.c  */ 
     5297/* Line 1464 of yacc.c  */ 
    52905298#line 2202 "compilers/imcc/imcc.y" 
    52915299    { IMCC_INFO(interp)->cur_obj = (yyvsp[(1) - (3)].sr); (yyval.sr) = (yyvsp[(3) - (3)].sr); } 
    52925300    break; 
    52935301 
    52945302  case 268: 
    52955303 
    5296 /* Line 1455 of yacc.c  */ 
     5304/* Line 1464 of yacc.c  */ 
    52975305#line 2208 "compilers/imcc/imcc.y" 
    52985306    { 
    52995307           (yyval.i) = IMCC_create_itcall_label(interp); 
     
    53035311 
    53045312  case 269: 
    53055313 
    5306 /* Line 1455 of yacc.c  */ 
     5314/* Line 1464 of yacc.c  */ 
    53075315#line 2212 "compilers/imcc/imcc.y" 
    53085316    { (yyval.i) = (yyvsp[(2) - (5)].i); } 
    53095317    break; 
    53105318 
    53115319  case 270: 
    53125320 
    5313 /* Line 1455 of yacc.c  */ 
     5321/* Line 1464 of yacc.c  */ 
    53145322#line 2216 "compilers/imcc/imcc.y" 
    53155323    { (yyval.sr) = 0; } 
    53165324    break; 
    53175325 
    53185326  case 271: 
    53195327 
    5320 /* Line 1455 of yacc.c  */ 
     5328/* Line 1464 of yacc.c  */ 
    53215329#line 2218 "compilers/imcc/imcc.y" 
    53225330    { 
    53235331           (yyval.sr) = 0; 
     
    53325340 
    53335341  case 272: 
    53345342 
    5335 /* Line 1455 of yacc.c  */ 
     5343/* Line 1464 of yacc.c  */ 
    53365344#line 2228 "compilers/imcc/imcc.y" 
    53375345    { 
    53385346           (yyval.sr) = 0; 
     
    53475355 
    53485356  case 273: 
    53495357 
    5350 /* Line 1455 of yacc.c  */ 
     5358/* Line 1464 of yacc.c  */ 
    53515359#line 2238 "compilers/imcc/imcc.y" 
    53525360    { 
    53535361           (yyval.sr) = 0; 
     
    53595367 
    53605368  case 274: 
    53615369 
    5362 /* Line 1455 of yacc.c  */ 
     5370/* Line 1464 of yacc.c  */ 
    53635371#line 2245 "compilers/imcc/imcc.y" 
    53645372    { 
    53655373           (yyval.sr) = 0; 
     
    53695377 
    53705378  case 275: 
    53715379 
    5372 /* Line 1455 of yacc.c  */ 
     5380/* Line 1464 of yacc.c  */ 
    53735381#line 2250 "compilers/imcc/imcc.y" 
    53745382    { 
    53755383           (yyval.sr) = 0; 
     
    53815389 
    53825390  case 276: 
    53835391 
    5384 /* Line 1455 of yacc.c  */ 
     5392/* Line 1464 of yacc.c  */ 
    53855393#line 2259 "compilers/imcc/imcc.y" 
    53865394    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); } 
    53875395    break; 
    53885396 
    53895397  case 277: 
    53905398 
    5391 /* Line 1455 of yacc.c  */ 
     5399/* Line 1464 of yacc.c  */ 
    53925400#line 2263 "compilers/imcc/imcc.y" 
    53935401    { (yyval.t) = 0; } 
    53945402    break; 
    53955403 
    53965404  case 278: 
    53975405 
    5398 /* Line 1455 of yacc.c  */ 
     5406/* Line 1464 of yacc.c  */ 
    53995407#line 2264 "compilers/imcc/imcc.y" 
    54005408    { (yyval.t) = (yyvsp[(1) - (2)].t) | (yyvsp[(2) - (2)].t); } 
    54015409    break; 
    54025410 
    54035411  case 279: 
    54045412 
    5405 /* Line 1455 of yacc.c  */ 
     5413/* Line 1464 of yacc.c  */ 
    54065414#line 2268 "compilers/imcc/imcc.y" 
    54075415    { (yyval.t) = VT_FLAT;     } 
    54085416    break; 
    54095417 
    54105418  case 280: 
    54115419 
    5412 /* Line 1455 of yacc.c  */ 
     5420/* Line 1464 of yacc.c  */ 
    54135421#line 2269 "compilers/imcc/imcc.y" 
    54145422    { (yyval.t) = VT_NAMED;    } 
    54155423    break; 
    54165424 
    54175425  case 281: 
    54185426 
    5419 /* Line 1455 of yacc.c  */ 
     5427/* Line 1464 of yacc.c  */ 
    54205428#line 2270 "compilers/imcc/imcc.y" 
    54215429    { (yyval.t) = VT_CALL_SIG; } 
    54225430    break; 
    54235431 
    54245432  case 282: 
    54255433 
    5426 /* Line 1455 of yacc.c  */ 
     5434/* Line 1464 of yacc.c  */ 
    54275435#line 2272 "compilers/imcc/imcc.y" 
    54285436    { adv_named_set_u(interp, (yyvsp[(3) - (4)].s)); mem_sys_free((yyvsp[(3) - (4)].s)); (yyval.t) = 0; } 
    54295437    break; 
    54305438 
    54315439  case 283: 
    54325440 
    5433 /* Line 1455 of yacc.c  */ 
     5441/* Line 1464 of yacc.c  */ 
    54345442#line 2273 "compilers/imcc/imcc.y" 
    54355443    { adv_named_set(interp, (yyvsp[(3) - (4)].s));   mem_sys_free((yyvsp[(3) - (4)].s)); (yyval.t) = 0; } 
    54365444    break; 
    54375445 
    54385446  case 284: 
    54395447 
    5440 /* Line 1455 of yacc.c  */ 
     5448/* Line 1464 of yacc.c  */ 
    54415449#line 2277 "compilers/imcc/imcc.y" 
    54425450    { (yyval.sr) = (yyvsp[(1) - (2)].sr); (yyval.sr)->type |= (yyvsp[(2) - (2)].t); } 
    54435451    break; 
    54445452 
    54455453  case 285: 
    54465454 
    5447 /* Line 1455 of yacc.c  */ 
     5455/* Line 1464 of yacc.c  */ 
    54485456#line 2282 "compilers/imcc/imcc.y" 
    54495457    { 
    54505458           (yyval.sr) = 0; 
     
    54595467 
    54605468  case 286: 
    54615469 
    5462 /* Line 1455 of yacc.c  */ 
     5470/* Line 1464 of yacc.c  */ 
    54635471#line 2292 "compilers/imcc/imcc.y" 
    54645472    { 
    54655473            add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, 
     
    54705478 
    54715479  case 287: 
    54725480 
    5473 /* Line 1455 of yacc.c  */ 
     5481/* Line 1464 of yacc.c  */ 
    54745482#line 2298 "compilers/imcc/imcc.y" 
    54755483    { 
    54765484           (yyval.sr) = 0; 
     
    54855493 
    54865494  case 288: 
    54875495 
    5488 /* Line 1455 of yacc.c  */ 
     5496/* Line 1464 of yacc.c  */ 
    54895497#line 2308 "compilers/imcc/imcc.y" 
    54905498    { 
    54915499           add_pcc_named_result(interp, IMCC_INFO(interp)->cur_call, mk_const(interp, (yyvsp[(1) - (3)].s), 'S'), (yyvsp[(3) - (3)].sr)); 
     
    54955503 
    54965504  case 289: 
    54975505 
    5498 /* Line 1455 of yacc.c  */ 
     5506/* Line 1464 of yacc.c  */ 
    54995507#line 2312 "compilers/imcc/imcc.y" 
    55005508    { (yyval.sr) = 0; } 
    55015509    break; 
    55025510 
    55035511  case 290: 
    55045512 
    5505 /* Line 1455 of yacc.c  */ 
     5513/* Line 1464 of yacc.c  */ 
    55065514#line 2316 "compilers/imcc/imcc.y" 
    55075515    { (yyval.i) = (yyvsp[(1) - (1)].i); } 
    55085516    break; 
    55095517 
    55105518  case 291: 
    55115519 
    5512 /* Line 1455 of yacc.c  */ 
     5520/* Line 1464 of yacc.c  */ 
    55135521#line 2317 "compilers/imcc/imcc.y" 
    55145522    { (yyval.i) = (yyvsp[(1) - (1)].i); } 
    55155523    break; 
    55165524 
    55175525  case 292: 
    55185526 
    5519 /* Line 1455 of yacc.c  */ 
     5527/* Line 1464 of yacc.c  */ 
    55205528#line 2322 "compilers/imcc/imcc.y" 
    55215529    { 
    55225530           (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, inv_op((yyvsp[(3) - (6)].s)), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); 
     
    55255533 
    55265534  case 293: 
    55275535 
    5528 /* Line 1455 of yacc.c  */ 
     5536/* Line 1464 of yacc.c  */ 
    55295537#line 2326 "compilers/imcc/imcc.y" 
    55305538    { 
    55315539           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr)); 
     
    55345542 
    55355543  case 294: 
    55365544 
    5537 /* Line 1455 of yacc.c  */ 
     5545/* Line 1464 of yacc.c  */ 
    55385546#line 2330 "compilers/imcc/imcc.y" 
    55395547    { 
    55405548           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "unless", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); 
     
    55435551 
    55445552  case 295: 
    55455553 
    5546 /* Line 1455 of yacc.c  */ 
     5554/* Line 1464 of yacc.c  */ 
    55475555#line 2337 "compilers/imcc/imcc.y" 
    55485556    { 
    55495557           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if", 2, (yyvsp[(2) - (4)].sr), (yyvsp[(4) - (4)].sr)); 
     
    55525560 
    55535561  case 296: 
    55545562 
    5555 /* Line 1455 of yacc.c  */ 
     5563/* Line 1464 of yacc.c  */ 
    55565564#line 2341 "compilers/imcc/imcc.y" 
    55575565    { 
    55585566           (yyval.i) =MK_I(interp, IMCC_INFO(interp)->cur_unit, (yyvsp[(3) - (6)].s), 3, (yyvsp[(2) - (6)].sr), (yyvsp[(4) - (6)].sr), (yyvsp[(6) - (6)].sr)); 
     
    55615569 
    55625570  case 297: 
    55635571 
    5564 /* Line 1455 of yacc.c  */ 
     5572/* Line 1464 of yacc.c  */ 
    55655573#line 2345 "compilers/imcc/imcc.y" 
    55665574    { 
    55675575           (yyval.i) = MK_I(interp, IMCC_INFO(interp)->cur_unit, "if_null", 2, (yyvsp[(3) - (5)].sr), (yyvsp[(5) - (5)].sr)); 
     
    55705578 
    55715579  case 298: 
    55725580 
    5573 /* Line 1455 of yacc.c  */ 
     5581/* Line 1464 of yacc.c  */ 
    55745582#line 2351 "compilers/imcc/imcc.y" 
    55755583    { (yyval.t) = 0; } 
    55765584    break; 
    55775585 
    55785586  case 299: 
    55795587 
    5580 /* Line 1455 of yacc.c  */ 
     5588/* Line 1464 of yacc.c  */ 
    55815589#line 2352 "compilers/imcc/imcc.y" 
    55825590    { (yyval.t) = 0; } 
    55835591    break; 
    55845592 
    55855593  case 300: 
    55865594 
    5587 /* Line 1455 of yacc.c  */ 
     5595/* Line 1464 of yacc.c  */ 
    55885596#line 2356 "compilers/imcc/imcc.y" 
    55895597    { (yyval.s) = (char *)"eq"; } 
    55905598    break; 
    55915599 
    55925600  case 301: 
    55935601 
    5594 /* Line 1455 of yacc.c  */ 
     5602/* Line 1464 of yacc.c  */ 
    55955603#line 2357 "compilers/imcc/imcc.y" 
    55965604    { (yyval.s) = (char *)"ne"; } 
    55975605    break; 
    55985606 
    55995607  case 302: 
    56005608 
    5601 /* Line 1455 of yacc.c  */ 
     5609/* Line 1464 of yacc.c  */ 
    56025610#line 2358 "compilers/imcc/imcc.y" 
    56035611    { (yyval.s) = (char *)"gt"; } 
    56045612    break; 
    56055613 
    56065614  case 303: 
    56075615 
    5608 /* Line 1455 of yacc.c  */ 
     5616/* Line 1464 of yacc.c  */ 
    56095617#line 2359 "compilers/imcc/imcc.y" 
    56105618    { (yyval.s) = (char *)"ge"; } 
    56115619    break; 
    56125620 
    56135621  case 304: 
    56145622 
    5615 /* Line 1455 of yacc.c  */ 
     5623/* Line 1464 of yacc.c  */ 
    56165624#line 2360 "compilers/imcc/imcc.y" 
    56175625    { (yyval.s) = (char *)"lt"; } 
    56185626    break; 
    56195627 
    56205628  case 305: 
    56215629 
    5622 /* Line 1455 of yacc.c  */ 
     5630/* Line 1464 of yacc.c  */ 
    56235631#line 2361 "compilers/imcc/imcc.y" 
    56245632    { (yyval.s) = (char *)"le"; } 
    56255633    break; 
    56265634 
    56275635  case 308: 
    56285636 
    5629 /* Line 1455 of yacc.c  */ 
     5637/* Line 1464 of yacc.c  */ 
    56305638#line 2370 "compilers/imcc/imcc.y" 
    56315639    { (yyval.sr) = NULL; } 
    56325640    break; 
    56335641 
    56345642  case 309: 
    56355643 
    5636 /* Line 1455 of yacc.c  */ 
     5644/* Line 1464 of yacc.c  */ 
    56375645#line 2371 "compilers/imcc/imcc.y" 
    56385646    { (yyval.sr) = (yyvsp[(1) - (1)].sr); } 
    56395647    break; 
    56405648 
    56415649  case 310: 
    56425650 
    5643 /* Line 1455 of yacc.c  */ 
     5651/* Line 1464 of yacc.c  */ 
    56445652#line 2375 "compilers/imcc/imcc.y" 
    56455653    { (yyval.sr) = IMCC_INFO(interp)->regs[0]; } 
    56465654    break; 
    56475655 
    56485656  case 312: 
    56495657 
    5650 /* Line 1455 of yacc.c  */ 
     5658/* Line 1464 of yacc.c  */ 
    56515659#line 2380 "compilers/imcc/imcc.y" 
    56525660    { IMCC_INFO(interp)->regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (1)].sr); } 
    56535661    break; 
    56545662 
    56555663  case 313: 
    56565664 
    5657 /* Line 1455 of yacc.c  */ 
     5665/* Line 1464 of yacc.c  */ 
    56585666#line 2382 "compilers/imcc/imcc.y" 
    56595667    { 
    56605668           IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(1) - (4)].sr); 
     
    56665674 
    56675675  case 314: 
    56685676 
    5669 /* Line 1455 of yacc.c  */ 
     5677/* Line 1464 of yacc.c  */ 
    56705678#line 2389 "compilers/imcc/imcc.y" 
    56715679    { 
    56725680           IMCC_INFO(interp) -> regs[IMCC_INFO(interp)->nargs++] = (yyvsp[(2) - (3)].sr); 
     
    56765684 
    56775685  case 316: 
    56785686 
    5679 /* Line 1455 of yacc.c  */ 
     5687/* Line 1464 of yacc.c  */ 
    56805688#line 2396 "compilers/imcc/imcc.y" 
    56815689    { (yyval.sr) = mk_sub_address_fromc(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } 
    56825690    break; 
    56835691 
    56845692  case 317: 
    56855693 
    5686 /* Line 1455 of yacc.c  */ 
     5694/* Line 1464 of yacc.c  */ 
    56875695#line 2397 "compilers/imcc/imcc.y" 
    56885696    { (yyval.sr) = mk_sub_address_u(interp, (yyvsp[(1) - (1)].s));  mem_sys_free((yyvsp[(1) - (1)].s)); } 
    56895697    break; 
    56905698 
    56915699  case 318: 
    56925700 
    5693 /* Line 1455 of yacc.c  */ 
     5701/* Line 1464 of yacc.c  */ 
    56945702#line 2401 "compilers/imcc/imcc.y" 
    56955703    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } 
    56965704    break; 
    56975705 
    56985706  case 319: 
    56995707 
    5700 /* Line 1455 of yacc.c  */ 
     5708/* Line 1464 of yacc.c  */ 
    57015709#line 2402 "compilers/imcc/imcc.y" 
    57025710    { (yyval.sr) = mk_sub_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } 
    57035711    break; 
    57045712 
    57055713  case 320: 
    57065714 
    5707 /* Line 1455 of yacc.c  */ 
     5715/* Line 1464 of yacc.c  */ 
    57085716#line 2406 "compilers/imcc/imcc.y" 
    57095717    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } 
    57105718    break; 
    57115719 
    57125720  case 321: 
    57135721 
    5714 /* Line 1455 of yacc.c  */ 
     5722/* Line 1464 of yacc.c  */ 
    57155723#line 2407 "compilers/imcc/imcc.y" 
    57165724    { (yyval.sr) = mk_label_address(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } 
    57175725    break; 
    57185726 
    57195727  case 326: 
    57205728 
    5721 /* Line 1455 of yacc.c  */ 
     5729/* Line 1464 of yacc.c  */ 
    57225730#line 2421 "compilers/imcc/imcc.y" 
    57235731    { 
    57245732           IMCC_INFO(interp)->nkeys    = 0; 
     
    57275735 
    57285736  case 327: 
    57295737 
    5730 /* Line 1455 of yacc.c  */ 
     5738/* Line 1464 of yacc.c  */ 
    57315739#line 2425 "compilers/imcc/imcc.y" 
    57325740    { 
    57335741           (yyval.sr) = link_keys(interp, 
     
    57385746 
    57395747  case 328: 
    57405748 
    5741 /* Line 1455 of yacc.c  */ 
     5749/* Line 1464 of yacc.c  */ 
    57425750#line 2433 "compilers/imcc/imcc.y" 
    57435751    { 
    57445752           IMCC_INFO(interp)->nkeys = 0; 
     
    57475755 
    57485756  case 329: 
    57495757 
    5750 /* Line 1455 of yacc.c  */ 
     5758/* Line 1464 of yacc.c  */ 
    57515759#line 2437 "compilers/imcc/imcc.y" 
    57525760    { 
    57535761           (yyval.sr) = link_keys(interp, 
     
    57585766 
    57595767  case 330: 
    57605768 
    5761 /* Line 1455 of yacc.c  */ 
     5769/* Line 1464 of yacc.c  */ 
    57625770#line 2445 "compilers/imcc/imcc.y" 
    57635771    { IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(1) - (1)].sr); } 
    57645772    break; 
    57655773 
    57665774  case 331: 
    57675775 
    5768 /* Line 1455 of yacc.c  */ 
     5776/* Line 1464 of yacc.c  */ 
    57695777#line 2447 "compilers/imcc/imcc.y" 
    57705778    { 
    57715779           IMCC_INFO(interp)->keys[IMCC_INFO(interp)->nkeys++] = (yyvsp[(3) - (3)].sr); 
     
    57755783 
    57765784  case 332: 
    57775785 
    5778 /* Line 1455 of yacc.c  */ 
     5786/* Line 1464 of yacc.c  */ 
    57795787#line 2455 "compilers/imcc/imcc.y" 
    57805788    { 
    57815789           (yyval.sr) = (yyvsp[(1) - (1)].sr); 
     
    57845792 
    57855793  case 333: 
    57865794 
    5787 /* Line 1455 of yacc.c  */ 
     5795/* Line 1464 of yacc.c  */ 
    57885796#line 2461 "compilers/imcc/imcc.y" 
    57895797    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'I'); } 
    57905798    break; 
    57915799 
    57925800  case 334: 
    57935801 
    5794 /* Line 1455 of yacc.c  */ 
     5802/* Line 1464 of yacc.c  */ 
    57955803#line 2462 "compilers/imcc/imcc.y" 
    57965804    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'N'); } 
    57975805    break; 
    57985806 
    57995807  case 335: 
    58005808 
    5801 /* Line 1455 of yacc.c  */ 
     5809/* Line 1464 of yacc.c  */ 
    58025810#line 2463 "compilers/imcc/imcc.y" 
    58035811    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'S'); } 
    58045812    break; 
    58055813 
    58065814  case 336: 
    58075815 
    5808 /* Line 1455 of yacc.c  */ 
     5816/* Line 1464 of yacc.c  */ 
    58095817#line 2464 "compilers/imcc/imcc.y" 
    58105818    { (yyval.sr) = mk_symreg(interp, (yyvsp[(1) - (1)].s), 'P'); } 
    58115819    break; 
    58125820 
    58135821  case 337: 
    58145822 
    5815 /* Line 1455 of yacc.c  */ 
     5823/* Line 1464 of yacc.c  */ 
    58165824#line 2465 "compilers/imcc/imcc.y" 
    58175825    { (yyval.sr) = mk_pasm_reg(interp, (yyvsp[(1) - (1)].s)); mem_sys_free((yyvsp[(1) - (1)].s)); } 
    58185826    break; 
    58195827 
    58205828  case 338: 
    58215829 
    5822 /* Line 1455 of yacc.c  */ 
     5830/* Line 1464 of yacc.c  */ 
    58235831#line 2469 "compilers/imcc/imcc.y" 
    58245832    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'S'); mem_sys_free((yyvsp[(1) - (1)].s)); } 
    58255833    break; 
    58265834 
    58275835  case 339: 
    58285836 
    5829 /* Line 1455 of yacc.c  */ 
     5837/* Line 1464 of yacc.c  */ 
    58305838#line 2470 "compilers/imcc/imcc.y" 
    58315839    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'U'); mem_sys_free((yyvsp[(1) - (1)].s)); } 
    58325840    break; 
    58335841 
    58345842  case 340: 
    58355843 
    5836 /* Line 1455 of yacc.c  */ 
     5844/* Line 1464 of yacc.c  */ 
    58375845#line 2474 "compilers/imcc/imcc.y" 
    58385846    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'I'); mem_sys_free((yyvsp[(1) - (1)].s)); } 
    58395847    break; 
    58405848 
    58415849  case 341: 
    58425850 
    5843 /* Line 1455 of yacc.c  */ 
     5851/* Line 1464 of yacc.c  */ 
    58445852#line 2475 "compilers/imcc/imcc.y" 
    58455853    { (yyval.sr) = mk_const(interp, (yyvsp[(1) - (1)].s), 'N'); mem_sys_free((yyvsp[(1) - (1)].s)); } 
    58465854    break; 
    58475855 
    58485856  case 342: 
    58495857 
    5850 /* Line 1455 of yacc.c  */ 
     5858/* Line 1464 of yacc.c  */ 
    58515859#line 2476 "compilers/imcc/imcc.y" 
    58525860    { (yyval.sr) = (yyvsp[(1) - (1)].sr); } 
    58535861    break; 
    58545862 
    58555863 
    58565864 
    5857 /* Line 1455 of yacc.c  */ 
    5858 #line 5848 "compilers/imcc/imcparser.c" 
     5865/* Line 1464 of yacc.c  */ 
     5866#line 5856 "compilers/imcc/imcparser.c" 
    58595867      default: break; 
    58605868    } 
    58615869  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 
     
    60666074 
    60676075 
    60686076 
    6069 /* Line 1675 of yacc.c  */ 
     6077/* Line 1684 of yacc.c  */ 
    60706078#line 2482 "compilers/imcc/imcc.y" 
    60716079 
    60726080 
  • compilers/imcc/debug.c

     
    202202            Parrot_io_fprintf(interp, Parrot_io_STDERR(interp), 
    203203                    "%4i %4d %4d %4d\t%x\t%8x %4d %4d %4d  ", 
    204204                     ins->index, ins->line, bb->index, bb->loop_depth, 
    205                      ins->flags, ins->type, ins->opnum, 
     205                     ins->flags, ins->type, OP_INFO_OPNUM(ins->op), 
    206206                     ins->opsize, pc); 
    207207        } 
    208208        else { 
  • compilers/imcc/parser_util.c

     
    175175 
    176176/* 
    177177 
    178 =item C<int check_op(PARROT_INTERP, char *fullname, const char *name, SymReg * 
    179 const * r, int narg, int keyvec)> 
     178=item C<void check_op(PARROT_INTERP, op_info_t **op_info, char *fullname, const 
     179char *name, SymReg * const * r, int narg, int keyvec)> 
    180180 
    181181Return opcode value for op name 
    182182 
     
    184184 
    185185*/ 
    186186 
    187 PARROT_WARN_UNUSED_RESULT 
    188 int 
    189 check_op(PARROT_INTERP, ARGOUT(char *fullname), ARGIN(const char *name), 
    190         ARGIN(SymReg * const * r), int narg, int keyvec) 
     187void 
     188check_op(PARROT_INTERP, ARGOUT(op_info_t **op_info), ARGOUT(char *fullname), 
     189        ARGIN(const char *name), ARGIN(SymReg * const * r), int narg, int keyvec) 
    191190{ 
    192191    ASSERT_ARGS(check_op) 
    193192    op_fullname(fullname, name, r, narg, keyvec); 
    194  
    195     return interp->op_lib->op_code(interp, fullname, 1); 
     193    *op_info = parrot_hash_get(interp, interp->op_hash, fullname); 
     194    if (*op_info && !STREQ((*op_info)->full_name, fullname)) 
     195        *op_info = NULL; 
    196196} 
    197197 
    198198/* 
     
    210210is_op(PARROT_INTERP, ARGIN(const char *name)) 
    211211{ 
    212212    ASSERT_ARGS(is_op) 
    213     return interp->op_lib->op_code(interp, name, 0) >= 0 
    214         || interp->op_lib->op_code(interp, name, 1) >= 0; 
     213    return parrot_hash_exists(interp, interp->op_hash, (void *)name); 
    215214} 
    216215 
    217216/* 
     
    234233        ARGMOD(SymReg **r), int n, int emit) 
    235234{ 
    236235    ASSERT_ARGS(var_arg_ins) 
    237     int op; 
     236    op_info_t *op; 
    238237    Instruction *ins; 
    239238    char fullname[64]; 
    240239 
     
    251250    r[0]->pmc_type = enum_class_FixedIntegerArray; 
    252251 
    253252    op_fullname(fullname, name, r, 1, 0); 
    254     op = interp->op_lib->op_code(interp, fullname, 1); 
     253    op = parrot_hash_get(interp, interp->op_hash, fullname); 
    255254 
    256     PARROT_ASSERT(op >= 0); 
     255    PARROT_ASSERT(op && STREQ(op->full_name, fullname)); 
    257256 
    258257    ins         = _mk_instruction(name, "", n, r, dirs); 
    259     ins->opnum  = op; 
     258    ins->op     = op; 
    260259    ins->opsize = n + 1; 
    261260 
    262261    if (emit) 
     
    309308        return var_arg_ins(interp, unit, name, r, n, emit); 
    310309    else { 
    311310        Instruction *ins; 
    312         int i, op, len; 
     311        int i, len; 
    313312        int dirs = 0; 
    314         op_info_t   *op_info; 
     313        op_info_t *op; 
    315314        char fullname[64] = "", format[128] = ""; 
    316315 
    317316        op_fullname(fullname, name, r, n, keyvec); 
    318         op = interp->op_lib->op_code(interp, fullname, 1); 
     317        op = parrot_hash_get(interp, interp->op_hash, fullname); 
     318        if (op && !STREQ(op->full_name, fullname)) 
     319            op = NULL; 
    319320 
    320321        /* maybe we have a fullname */ 
    321         if (op < 0) 
    322             op = interp->op_lib->op_code(interp, name, 1); 
     322        if (!op) { 
     323            op = parrot_hash_get(interp, interp->op_hash, name); 
     324            if (op && !STREQ(op->full_name, name)) 
     325                op = NULL; 
     326        } 
    323327 
    324328        /* still wrong, try reverse compare */ 
    325         if (op < 0) { 
     329        if (!op) { 
    326330            const char * const n_name = try_rev_cmp(name, r); 
    327331            if (n_name) { 
    328332                name = n_name; 
    329333                op_fullname(fullname, name, r, n, keyvec); 
    330                 op   = interp->op_lib->op_code(interp, fullname, 1); 
     334                op = parrot_hash_get(interp, interp->op_hash, fullname); 
     335                if (op && !STREQ(op->full_name, fullname)) 
     336                    op = NULL; 
    331337            } 
    332338        } 
    333339 
    334340        /* still wrong, try to find an existing op */ 
    335         if (op < 0) 
     341        if (!op) 
    336342            op = try_find_op(interp, unit, name, r, n, keyvec, emit); 
    337343 
    338         if (op < 0) { 
     344        if (!op) { 
    339345            int ok = 0; 
    340346 
    341347            /* check mixed constants */ 
     
    356362        else 
    357363            strcpy(fullname, name); 
    358364 
    359         if (op < 0) 
     365        if (!op) 
    360366            IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, 
    361367                        "The opcode '%s' (%s<%d>) was not found. " 
    362368                        "Check the type and number of the arguments", 
    363369                        fullname, name, n); 
    364370 
    365         op_info = &interp->op_info_table[op]; 
    366371        *format = '\0'; 
    367372 
    368373        /* info->op_count is args + 1 
    369374         * build instruction format 
    370375         * set LV_in / out flags */ 
    371         if (n != op_info->op_count - 1) 
     376        if (n != op->op_count - 1) 
    372377            IMCC_fataly(interp, EXCEPTION_SYNTAX_ERROR, 
    373378                    "arg count mismatch: op #%d '%s' needs %d given %d", 
    374                     op, fullname, op_info->op_count-1, n); 
     379                    op, fullname, op->op_count-1, n); 
    375380 
    376381        /* XXX Speed up some by keep track of the end of format ourselves */ 
    377382        for (i = 0; i < n; i++) { 
    378             switch (op_info->dirs[i]) { 
     383            switch (op->dirs[i]) { 
    379384              case PARROT_ARGDIR_INOUT: 
    380385                dirs |= 1 << (16 + i); 
    381386                /* go on */ 
     
    422427        ins->keys  |= keyvec; 
    423428 
    424429        /* fill in oplib's info */ 
    425         ins->opnum  = op; 
     430        ins->op  = op; 
    426431        ins->opsize = n + 1; 
    427432 
    428433        /* mark end as absolute branch */ 
     
    443448 
    444449        /* set up branch flags 
    445450         * mark registers that are labels */ 
    446         for (i = 0; i < op_info->op_count - 1; i++) { 
    447             if (op_info->labels[i]) 
     451        for (i = 0; i < op->op_count - 1; i++) { 
     452            if (op->labels[i]) 
    448453                ins->type |= ITBRANCH | (1 << i); 
    449454            else { 
    450455                if (r[i]->type == VTADDRESS) 
     
    453458            } 
    454459        } 
    455460 
    456         if (op_info->jump) { 
     461        if (op->jump) { 
    457462            ins->type |= ITBRANCH; 
    458463            /* TODO use opnum constants */ 
    459464            if (STREQ(name, "branch") 
     
    965970 
    966971/* 
    967972 
    968 =item C<int try_find_op(PARROT_INTERP, IMC_Unit *unit, const char *name, SymReg 
    969 **r, int n, int keyvec, int emit)> 
     973=item C<op_info_t * try_find_op(PARROT_INTERP, IMC_Unit *unit, const char *name, 
     974SymReg **r, int n, int keyvec, int emit)> 
    970975 
    971976Try to find valid op doing the same operation e.g. 
    972977 
     
    981986*/ 
    982987 
    983988PARROT_WARN_UNUSED_RESULT 
    984 int 
     989op_info_t * 
    985990try_find_op(PARROT_INTERP, ARGMOD(IMC_Unit *unit), ARGIN(const char *name), 
    986991        ARGMOD(SymReg **r), int n, int keyvec, int emit) 
    987992{ 
     
    10171022    } 
    10181023 
    10191024    if (changed) { 
     1025        op_info_t *op; 
    10201026        op_fullname(fullname, name, r, n, keyvec); 
    1021         return interp->op_lib->op_code(interp, fullname, 1); 
     1027        op = parrot_hash_get(interp, interp->op_hash, fullname); 
     1028        if (op && !STREQ(op->full_name, fullname)) 
     1029            op = NULL; 
     1030        return op; 
    10221031    } 
    10231032 
    1024     return -1; 
     1033    return NULL; 
    10251034} 
    10261035 
    10271036/* 
  • compilers/imcc/imcparser.h

     
    99 */ 
    1010/* HEADERIZER HFILE: none */ 
    1111/* HEADERIZER STOP */ 
     12/* A Bison parser, made by GNU Bison 2.4.3.  */ 
    1213 
    13 /* A Bison parser, made by GNU Bison 2.4.1.  */ 
    14  
    1514/* Skeleton interface for Bison's Yacc-like parsers in C 
    1615    
    17       Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 
    18    Free Software Foundation, Inc. 
     16      Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 
     17   2009, 2010 Free Software Foundation, Inc. 
    1918    
    2019   This program is free software: you can redistribute it and/or modify 
    2120   it under the terms of the GNU General Public License as published by 
     
    295294typedef union YYSTYPE 
    296295{ 
    297296 
    298 /* Line 1676 of yacc.c  */ 
     297/* Line 1685 of yacc.c  */ 
    299298#line 1071 "compilers/imcc/imcc.y" 
    300299 
    301300    IdList * idlist; 
     
    306305 
    307306 
    308307 
    309 /* Line 1676 of yacc.c  */ 
    310 #line 300 "compilers/imcc/imcparser.h" 
     308/* Line 1685 of yacc.c  */ 
     309#line 299 "compilers/imcc/imcparser.h" 
    311310} YYSTYPE; 
    312311# define YYSTYPE_IS_TRIVIAL 1 
    313312# define yystype YYSTYPE /* obsolescent; will be withdrawn */ 
  • t/pmc/lexinfo.t

    Property changes on: compilers/pge/Rules.mak
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/compilers/pge/Rules.mak:r48886-48917
    
    
    Property changes on: t/pmc/namespace-old.t
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/t/pmc/namespace-old.t:r48886-48917
    
     
    1717 
    1818=cut 
    1919 
     20.include 'except_types.pasm' 
     21 
    2022.sub main :main 
    2123    .include 'test_more.pir' 
    22     plan(3) 
     24    plan(5) 
    2325 
    2426    inspect_test() 
     27    inspect_invalid_test() 
     28    declare_lex_preg_test() 
    2529.end 
    2630 
    2731.sub inspect_test 
     
    5862    is(have_b, 1, "$b symbol was in list") 
    5963.end 
    6064 
     65.sub inspect_invalid_test 
     66    .local pmc li, in, ex 
     67    .local int r, type 
     68    li = new ['LexInfo'] 
     69    r = 0 
     70    push_eh catch 
     71    in = inspect li, 'fubar' 
     72    goto done 
     73  catch: 
     74    .get_results(ex) 
     75    type = ex['type'] 
     76    r = iseq type, .EXCEPTION_INVALID_OPERATION 
     77  done: 
     78    ok(r, 'invalid introspection key throws as expected') 
     79.end 
     80 
     81.sub declare_lex_preg_test 
     82    .const string preg_name = 'foo' 
     83    .const int preg_value = 42 
     84    .local pmc li 
     85    li = new ['LexInfo'] 
     86    li.'declare_lex_preg'(preg_name, preg_value) 
     87    .local int r 
     88    r = li[preg_name] 
     89    is(r, preg_value, 'declare_lex_preg method') 
     90.end 
     91 
    6192# Local Variables: 
    6293#   mode: pir 
    6394#   fill-column: 100 
  • t/pmc/hashiteratorkey.t

     
    5555 
    5656    # De facto behavior tested for code coverage 
    5757 
    58     p = hik.'key'()  
     58    p = hik.'key'() 
    5959    i = isnull p 
    6060    is(i, 1, 'HIK.key gives null when unitialized') 
    6161 
  • config/gen/config_h/config_h.in

    Property changes on: t/src/embed.t
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/t/src/embed.t:r48886-48917
    
    
    Property changes on: t/compilers/tge/NoneGrammar.tg
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/t/compilers/tge/NoneGrammar.tg:r48886-48917
    
    
    Property changes on: t/steps/init/hints/linux-01.t
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/t/steps/init/hints/linux-01.t:r48886-48917
    
    
    Property changes on: t/oo/objects.t
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/t/oo/objects.t:r48886-48917
    
    
    Property changes on: t/oo/root_new.t
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/t/oo/root_new.t:r48886-48917
    
    
    Property changes on: t/examples/pgegrep.t
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/t/examples/pgegrep.t:r48886-48917
    
    
    Property changes on: t/codingstd/pmc_docs.t
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/t/codingstd/pmc_docs.t:r48886-48917
    
    
    Property changes on: config/auto/zlib
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/config/auto/zlib:r48886-48917
    
    
    Property changes on: config/auto/sizes/intval_maxmin_c.in
    ___________________________________________________________________
    Modified: svn:mergeinfo
       Merged /branches/oplib_handling_cleanup/config/auto/sizes/intval_maxmin_c.in:r48886-48917
    
     
    152152#define PARROT_@jitcpu@ 1 
    153153 
    154154/* Oplib and dynamic ops related. */ 
    155 #define PARROT_CORE_OPLIB_NAME "core_ops" 
    156 #define PARROT_CORE_OPLIB_INIT Parrot_DynOp_core_@MAJOR@_@MINOR@_@PATCH@ 
     155#define PARROT_CORE_OPLIB_NAME    "core_ops" 
     156#define PARROT_CORE_OPLIB_INIT    Parrot_DynOp_core_@MAJOR@_@MINOR@_@PATCH@ 
    157157 
     158#define  PARROT_GET_CORE_OPLIB(i)  PARROT_CORE_OPLIB_INIT((i), 1) 
     159 
    158160/* ICU. */ 
    159161#define PARROT_HAS_ICU @has_icu@ 
    160162