Author: allison
Date: Mon May 14 20:01:29 2007
New Revision: 18541

Modified:
   trunk/include/parrot/enums.h
   trunk/src/inter_call.c
   trunk/src/pmc/parrotobject.pmc
   trunk/t/pmc/parrotobject.t

Log:
Reverting r18535, RT #42919 (adding the invocant to invoke calls), patch is too 
fragile.


Modified: trunk/include/parrot/enums.h
==============================================================================
--- trunk/include/parrot/enums.h        (original)
+++ trunk/include/parrot/enums.h        Mon May 14 20:01:29 2007
@@ -61,8 +61,7 @@
     /* unused - 0x040 */
     PARROT_ARG_OPTIONAL         = 0x080, /* 128 */
     PARROT_ARG_OPT_FLAG         = 0x100, /* 256 prev optional was set */
-    PARROT_ARG_NAME             = 0x200, /* 512 this String is an arg name */
-    PARROT_ARG_INVOCANT         = 0x400  /* 1024 arg is method invocant */
+    PARROT_ARG_NAME             = 0x200 /* 512 this String is an arg name */
     /* more to come soon */
 
 } Call_bits_enum_t;

Modified: trunk/src/inter_call.c
==============================================================================
--- trunk/src/inter_call.c      (original)
+++ trunk/src/inter_call.c      Mon May 14 20:01:29 2007
@@ -311,9 +311,6 @@
                                       : CTX_REG_NUM(st->src.ctx, idx);
             break;
         case PARROT_ARG_PMC:
-            if (st->src.sig & PARROT_ARG_INVOCANT)
-                UVal_pmc(st->val) = CONTEXT(interp->ctx)->current_object;
-            else
                 UVal_pmc(st->val) = constant ? 
st->src.ctx->constants[idx]->u.key
                                       : CTX_REG_PMC(st->src.ctx, idx);
 

Modified: trunk/src/pmc/parrotobject.pmc
==============================================================================
--- trunk/src/pmc/parrotobject.pmc      (original)
+++ trunk/src/pmc/parrotobject.pmc      Mon May 14 20:01:29 2007
@@ -557,59 +557,6 @@
 
 /*
 
-=item C<opcode_t *invoke(void *next)>
-
-Invokes the current object as a subroutine.
-
-=cut
-
-*/
-
-    opcode_t *invoke(void* next) {
-        STRING *meth = CONST_STRING(INTERP, "invoke");
-        PMC    *sub  = Parrot_find_vtable_meth(INTERP, SELF, meth);
-        opcode_t *save_current_args;
-
-        if (PMC_IS_NULL(sub)) {
-            PMC *mro = SELF->vtable->mro;
-
-            if (VTABLE_elements(INTERP, mro) == 1)
-                return SUPER(next);
-            else {
-                PMC *parent = VTABLE_get_pmc_keyed_int(INTERP,
-                    SELF->vtable->mro, 1);
-
-                if (PObj_is_class_TEST(parent))
-                    return SUPER(next);
-
-                return deleg_pmc.SUPER(next);
-            }
-        }
-
-        /* Since invoke() is a normal method, 'self' must be passed as the
-         * first argument, but because this looks like a non-method call in
-         * PIR, the args signature doesn't have it, so we have to get the
-         * args signature and unshift 'self' onto it. */
-        PMC *old_sig = 
CONTEXT(interp->ctx)->constants[*(interp->current_args+1)]->u.key;
-        INTVAL sig_len = VTABLE_elements(interp, old_sig) + 1;
-        int i;
-
-        PMC *meth_sig = pmc_new(interp, enum_class_FixedIntegerArray);
-        VTABLE_set_integer_native(interp, meth_sig, sig_len);
-
-        VTABLE_set_integer_keyed_int(interp, meth_sig, 0, PARROT_ARG_PMC | 
PARROT_ARG_INVOCANT);
-        CTX_REG_PMC(CONTEXT(interp->ctx), 0) = SELF;
-        for ( i = 1; i < sig_len; i++ )
-            VTABLE_set_integer_keyed_int(interp, meth_sig, i, 
VTABLE_get_integer_keyed_int(interp, old_sig, i-1));
-
-        interp->args_signature = meth_sig;
-        interp->current_args++;
-
-        INTERP->current_object = SELF;
-        return VTABLE_invoke(interp, sub, next);
-    }
-/*
-
 =item C<void visit(visit_info *info)>
 
 This is used by freeze/thaw to visit the contents of the object.

Modified: trunk/t/pmc/parrotobject.t
==============================================================================
--- trunk/t/pmc/parrotobject.t  (original)
+++ trunk/t/pmc/parrotobject.t  Mon May 14 20:01:29 2007
@@ -6,7 +6,7 @@
 use warnings;
 use lib qw( . lib ../lib ../../lib );
 use Test::More;
-use Parrot::Test tests => 12;
+use Parrot::Test tests => 11;
 
 =head1 NAME
 
@@ -195,7 +195,7 @@
 pir_output_is( <<'CODE', <<'OUT', 'RT#41733 - Execution ends after returning 
from invoke' );
 .namespace ['Foo']
 
-.sub invoke :method :vtable
+.sub invoke :vtable
 say "you invoked me!"
 .return()
 .end
@@ -214,7 +214,7 @@
 pir_output_is( <<'CODE', <<'OUT', 'params/returns from overridden invoke' );
 .namespace ['Foo']
 
-.sub invoke :method :vtable
+.sub invoke :vtable
   .param int a
   print a
   print "\n"
@@ -237,7 +237,7 @@
 pir_error_output_like( <<'CODE', <<'OUT', 'RT#41732' );
 .namespace ['Foo']
 
-.sub invoke :method :vtable
+.sub invoke :vtable
   .param pmc a
   say 'hi'
 .end
@@ -248,46 +248,7 @@
     $P1()
 .end
 CODE
-/2 params expected/
-OUT
-
-pir_output_is( <<'CODE', <<'OUT', 'overridden invoke in parent class' );
-.sub main :main
-  $P0 = newclass "FooParent"
-  $P2 = subclass "FooParent", "Foo"
-  $P1 = new "Foo"
-  say "before"
-  $P1("bar", "baa")
-  say "after"
-.end
-
-.namespace ["FooParent"]
-.sub 'invoke' :method :vtable
-  .param pmc bar
-  .param pmc baa
-  say bar
-  say baa
-  $I0 = defined self
-  if $I0 goto is_defined
-    say "self not defined"
-  is_defined:
-  $S1 = typeof self
-  say $S1
-  self.'baz'()
-  say "inside"
-.end
-
-.sub 'baz' :method
-  say "baz"
-.end
-CODE
-before
-bar
-baa
-Foo
-baz
-inside
-after
+/1 params expected/
 OUT
 
 # '

Reply via email to