Index: core.ops
===================================================================
RCS file: /cvs/public/parrot/core.ops,v
retrieving revision 1.211
diff -u -r1.211 core.ops
--- core.ops	22 Sep 2002 01:05:28 -0000	1.211
+++ core.ops	8 Oct 2002 23:45:32 -0000
@@ -3962,6 +3962,8 @@
 
 =item B<new>(out PMC, in INT, in INT)
 
+=item B<new>(out PMC, in INT, in PMC)
+
 Create a new PMC of class $2; look in F<pmc.h> for the base
 vtable types. The assembler allows you to specify PMCs by type
 name as well as by integer - you should do this for compatibility,
@@ -3969,10 +3971,11 @@
 
   new P0, .PerlScalar
 
-Optionally a size may be passed to the constructor which may or
-may not be used by the particular class. For example:
+Optionally a size or pmc pointer may be passed to the constructor 
+which may or may not be used by the particular class. For example:
 
   new P0, .PerlStruct, 64
+  new P1, .Class, P2
 
 =cut
 
@@ -3986,6 +3989,15 @@
    * copies the registers. */
   $1 = pmc_new_noinit(interpreter, $2);
   $1->vtable->init(interpreter, $1);
+  goto NEXT();
+}
+
+op new(out PMC, in INT, in PMC) {
+  if ($2 <0 || $2 >= enum_class_max) {
+    abort(); /* Deserve to lose */
+  }
+  $1 = pmc_new_noinit(interpreter, $2);
+  $1->vtable->init_pmc(interpreter, $1, $3);
   goto NEXT();
 }
 
