Author: tewk
Date: Sun Mar 25 17:00:02 2007
New Revision: 17746

Modified:
   trunk/src/inter_call.c

Log:
[Parrot_PCCINVOKE]  bug fixes


Modified: trunk/src/inter_call.c
==============================================================================
--- trunk/src/inter_call.c      (original)
+++ trunk/src/inter_call.c      Sun Mar 25 17:00:02 2007
@@ -1236,10 +1236,10 @@
     int reg_offset = 0;
     /* calculate arg's register offset */
     switch (cur & PARROT_ARG_TYPE_MASK) { /* calc reg offset */
-        case 'I': reg_offset = n_regs_used[seen_arrow * 4 + 0]++; break;
-        case 'N': reg_offset = n_regs_used[seen_arrow * 4 + 1]++; break;
-        case 'S': reg_offset = n_regs_used[seen_arrow * 4 + 2]++; break;
-        case 'R': reg_offset = n_regs_used[seen_arrow * 4 + 3]++; break;
+        case PARROT_ARG_INTVAL:   reg_offset = n_regs_used[seen_arrow * 4 + 
REGNO_INT]++; break;
+        case PARROT_ARG_FLOATVAL: reg_offset = n_regs_used[seen_arrow * 4 + 
REGNO_NUM]++; break;
+        case PARROT_ARG_STRING:   reg_offset = n_regs_used[seen_arrow * 4 + 
REGNO_STR]++; break;
+        case PARROT_ARG_PMC :     reg_offset = n_regs_used[seen_arrow * 4 + 
REGNO_PMC]++; break;
         default:
                   real_exception(interp, NULL, E_IndexError,
                           "Parrot_PCCINVOKE: invalid reg type");
@@ -1253,10 +1253,10 @@
     /* perform the arg accessor function, assigning the arg to its 
corresponding register */
     if (!seen_arrow) {
         switch (cur & PARROT_ARG_TYPE_MASK) {
-            case 'I': CTX_REG_INT(ctx, reg_offset) = va_arg(*list, INTVAL); 
break;
-            case 'N': CTX_REG_NUM(ctx, reg_offset) = va_arg(*list, FLOATVAL); 
break;
-            case 'S': CTX_REG_STR(ctx, reg_offset) = va_arg(*list, STRING*); 
break;
-            case 'R': CTX_REG_PMC(ctx, reg_offset) = va_arg(*list, PMC*); 
break;
+            case PARROT_ARG_INTVAL:   CTX_REG_INT(ctx, reg_offset) = 
va_arg(*list, INTVAL); break;
+            case PARROT_ARG_FLOATVAL: CTX_REG_NUM(ctx, reg_offset) = 
va_arg(*list, FLOATVAL); break;
+            case PARROT_ARG_STRING:   CTX_REG_STR(ctx, reg_offset) = 
va_arg(*list, STRING*); break;
+            case PARROT_ARG_PMC :     CTX_REG_PMC(ctx, reg_offset) = 
va_arg(*list, PMC*); break;
             default:
                       real_exception(interp, NULL, E_IndexError,
                           "Parrot_PCCINVOKE: invalid reg type");
@@ -1351,10 +1351,10 @@
             arg_ret_cnt[seen_arrow]++;
             /* calculate max reg types (INSP) needed in context */
             switch (*x) {
-                case 'I': max_regs[seen_arrow * 4 + 0]++; break;
-                case 'N': max_regs[seen_arrow * 4 + 1]++; break;
-                case 'S': max_regs[seen_arrow * 4 + 2]++; break;
-                case 'P': max_regs[seen_arrow * 4 + 3]++; break;
+                case 'I': max_regs[seen_arrow * 4 + REGNO_INT]++; break;
+                case 'N': max_regs[seen_arrow * 4 + REGNO_NUM]++; break;
+                case 'S': max_regs[seen_arrow * 4 + REGNO_STR]++; break;
+                case 'P': max_regs[seen_arrow * 4 + REGNO_PMC]++; break;
                 default:
                           real_exception(interp, NULL, E_IndexError,
                                   "Parrot_PCCINVOKE: invalid reg type %c!", 
*x);
@@ -1479,7 +1479,7 @@
             FLOATVAL *tmpFLOATVAL;
             STRING **tmpSTRING;
             PMC **tmpPMC;
-            switch (cur & PARROT_ARG_TYPE_MASK) {
+            switch (*x) {
                 case 'I':
                     tmpINTVAL = va_arg(list, INTVAL*);
                     *tmpINTVAL = CTX_REG_INT(ctx, indexes[seen_arrow][index]);

Reply via email to