cvsuser     05/04/03 03:14:42

  Modified:    include/parrot mmd.h
               lib/Parrot Vtable.pm
               src      mmd.c mmd_fallback.c objects.c
  Log:
  MMD 13 - create MMD method names
  
  Revision  Changes    Path
  1.25      +5 -65     parrot/include/parrot/mmd.h
  
  Index: mmd.h
  ===================================================================
  RCS file: /cvs/public/parrot/include/parrot/mmd.h,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- mmd.h     2 Apr 2005 16:54:52 -0000       1.24
  +++ mmd.h     3 Apr 2005 10:14:39 -0000       1.25
  @@ -49,71 +49,11 @@
                                    in question */
   } MMD_table;
   
  -/* Need this for add, subtract, multiply, divide, mod, cmod, bitwise
  -   (and, or, xor, lshift, rshift), concat, logical (and, or, xor),
  -   repeat, eq, cmp */
  -
  -/* &gen_from_enum(mmd.pasm) */
  -
  -typedef enum {
  -        MMD_ADD,
  -        MMD_ADD_INT,
  -        MMD_ADD_FLOAT,
  -        MMD_SUBTRACT,
  -        MMD_SUBTRACT_INT,
  -        MMD_SUBTRACT_FLOAT,
  -        MMD_MULTIPLY,
  -        MMD_MULTIPLY_INT,
  -        MMD_MULTIPLY_FLOAT,
  -        MMD_DIVIDE,
  -        MMD_DIVIDE_INT,
  -        MMD_DIVIDE_FLOAT,
  -        MMD_FLOOR_DIVIDE,
  -        MMD_FLOOR_DIVIDE_INT,
  -        MMD_FLOOR_DIVIDE_FLOAT,
  -        MMD_MOD,
  -        MMD_MOD_INT,
  -        MMD_MOD_FLOAT,
  -        MMD_CMOD,
  -        MMD_CMOD_INT,
  -        MMD_CMOD_FLOAT,
  -        MMD_POW,
  -        MMD_POW_FLOAT,
  -        MMD_POW_INT,
  -        MMD_BAND,
  -        MMD_BAND_INT,
  -        MMD_BOR,
  -        MMD_BOR_INT,
  -        MMD_BXOR,
  -        MMD_BXOR_INT,
  -        MMD_BSL,
  -        MMD_BSL_INT,
  -        MMD_BSR,
  -        MMD_BSR_INT,
  -        MMD_CONCAT,
  -        MMD_CONCAT_STR,
  -        MMD_LAND,
  -        MMD_LOR,
  -        MMD_LXOR,
  -        MMD_REPEAT,
  -        MMD_REPEAT_INT,
  -        MMD_EQ,
  -        MMD_NUMEQ,
  -        MMD_STREQ,
  -        MMD_CMP,
  -        MMD_NUMCMP,
  -        MMD_STRCMP,
  -        MMD_SOR,
  -        MMD_SOR_STR,
  -        MMD_SAND,
  -        MMD_SAND_STR,
  -        MMD_SXOR,
  -        MMD_SXOR_STR,   /* must be last due to init sequence */
  -
  -        MMD_USER_FIRST
  -} parrot_mmd_func_enum;
  +/*
  + * in src/objects.c :
  + */
  +const char* Parrot_MMD_methode_name(Interp* i, INTVAL idx);
   
  -/* &end_gen */
   #endif /* PARROT_MMD_H_GUARD */
   
   /*
  
  
  
  1.43      +38 -2     parrot/lib/Parrot/Vtable.pm
  
  Index: Vtable.pm
  ===================================================================
  RCS file: /cvs/public/parrot/lib/Parrot/Vtable.pm,v
  retrieving revision 1.42
  retrieving revision 1.43
  diff -u -r1.42 -r1.43
  --- Vtable.pm 9 Mar 2005 14:52:00 -0000       1.42
  +++ Vtable.pm 3 Apr 2005 10:14:41 -0000       1.43
  @@ -233,8 +233,44 @@
       $macros .= <<"EOM";
       NULL
   };
  -#endif
   
  +#endif /* PARROT_IN_OBJECTS_C */
  +
  +/* Need this for add, subtract, multiply, divide, mod, cmod, bitwise
  +   (and, or, xor, lshift, rshift), concat, logical (and, or, xor),
  +   repeat, eq, cmp */
  +
  +/* &gen_from_enum(mmd.pasm) */
  +
  +typedef enum {
  +EOM
  +    for my $entry (@{$vtable}) {
  +     next unless ($entry->[4] =~ /MMD_/);
  +     $macros .= <<"EOM";
  +        $entry->[4],
  +EOM
  +    }
  +    $macros .=<<"EOM";
  +        MMD_USER_FIRST
  +} parrot_mmd_func_enum;
  +
  +/* &end_gen */
  +
  +#ifdef PARROT_IN_OBJECTS_C
  +static const char * const Parrot_mmd_func_names[] = {
  +EOM
  +
  +    for my $entry (@{$vtable}) {
  +     next unless ($entry->[4] =~ /MMD_/);
  +     $macros .= <<"EOM";
  +        \"__$entry->[1]\",
  +EOM
  +    }
  +    $macros .= <<"EOM";
  +    NULL
  +};
  +
  +#endif
   EOM
   
       $macros;
  
  
  
  1.59      +13 -1     parrot/src/mmd.c
  
  Index: mmd.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/mmd.c,v
  retrieving revision 1.58
  retrieving revision 1.59
  diff -u -r1.58 -r1.59
  --- mmd.c     2 Apr 2005 16:54:54 -0000       1.58
  +++ mmd.c     3 Apr 2005 10:14:42 -0000       1.59
  @@ -1339,6 +1339,18 @@
           const MMD_init *mmd_table, INTVAL n)
   {
       INTVAL i;
  +    MMD_table *table;
  +
  +    table = interpreter->binop_mmd_funcs;
  +    if (table->x < type && type < enum_class_core_max) {
  +        /*
  +         * pre-alloacte the function table
  +         */
  +        for (i = 0; i < MMD_USER_FIRST; ++i) {
  +            mmd_register(interpreter, i, enum_class_core_max - 1,
  +                    enum_class_core_max - 1, NULL);
  +        }
  +    }
       /*
        * register default mmds for this type
        */
  
  
  
  1.7       +19 -3     parrot/src/mmd_fallback.c
  
  Index: mmd_fallback.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/mmd_fallback.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- mmd_fallback.c    27 Jun 2004 15:29:55 -0000      1.6
  +++ mmd_fallback.c    3 Apr 2005 10:14:42 -0000       1.7
  @@ -543,6 +543,16 @@
                                string_repeat(interp, base, count, NULL));
   }
   
  +static void
  +mmd_fallback_repeat_int(Parrot_Interp interp, PMC *left, INTVAL count, PMC 
*dest)
  +{
  +    STRING *base;
  +
  +    base = VTABLE_get_string(interp, left);
  +
  +    VTABLE_set_string_native(interp, dest,
  +                             string_repeat(interp, base, count, NULL));
  +}
   /*
   
   =item C<INTVAL
  @@ -744,10 +754,14 @@
   
   void
   register_fallback_methods(Parrot_Interp interp) {
  +    INTVAL i;
  +
       /* Yeah, this first one's out of order logically, but it means
          the table doesn't have to keep being re-malloc'd */
  -    mmd_add_function(interp, MMD_SXOR_STR,
  -            (funcptr_t)mmd_fallback_stringxor_str);
  +    assert(MMD_REPEAT_INT == MMD_USER_FIRST - 1);
  +    mmd_add_function(interp, MMD_REPEAT_INT,
  +            (funcptr_t)mmd_fallback_repeat_int);
  +
       mmd_add_function(interp, MMD_ADD, (funcptr_t)mmd_fallback_add_pmc);
       mmd_add_function(interp, MMD_ADD_INT, (funcptr_t)mmd_fallback_add_int);
       mmd_add_function(interp, MMD_SUBTRACT,
  @@ -803,6 +817,8 @@
       mmd_add_function(interp, MMD_SAND_STR,
               (funcptr_t)mmd_fallback_stringand_str);
       mmd_add_function(interp, MMD_SXOR, 
(funcptr_t)mmd_fallback_stringxor_pmc);
  +    mmd_add_function(interp, MMD_SXOR_STR,
  +            (funcptr_t)mmd_fallback_stringxor_str);
   }
   
   /*
  
  
  
  1.138     +20 -1     parrot/src/objects.c
  
  Index: objects.c
  ===================================================================
  RCS file: /cvs/public/parrot/src/objects.c,v
  retrieving revision 1.137
  retrieving revision 1.138
  diff -u -r1.137 -r1.138
  --- objects.c 10 Mar 2005 17:10:14 -0000      1.137
  +++ objects.c 3 Apr 2005 10:14:42 -0000       1.138
  @@ -242,6 +242,25 @@
   
   /*
   
  +=item C<const char* Parrot_MMD_methode_name(Interp*, INTVAL)>
  +
  +Return the method name for the given MMD enum.
  +
  +=cut
  +
  +*/
  +const char*
  +Parrot_MMD_methode_name(Interp* interpreter, INTVAL idx)
  +{
  +    assert(idx >= 0);
  +
  +    if (idx >= MMD_USER_FIRST)
  +        return NULL;
  +    return Parrot_mmd_func_names[idx];
  +}
  +
  +/*
  +
   =item C<PMC *
   Parrot_single_subclass(Parrot_Interp ointerpreter, PMC *base_class,
                          STRING *child_class_name)>
  
  
  

Reply via email to