Author: allison
Date: Fri Sep 14 23:30:20 2007
New Revision: 21300

Modified:
   trunk/docs/pdds/draft/pdd17_pmc.pod

Log:
[pdd] Expand and cleanup reference on vtable functions and core PMC types in 
PMC PDD.


Modified: trunk/docs/pdds/draft/pdd17_pmc.pod
==============================================================================
--- trunk/docs/pdds/draft/pdd17_pmc.pod (original)
+++ trunk/docs/pdds/draft/pdd17_pmc.pod Fri Sep 14 23:30:20 2007
@@ -461,6 +461,35 @@
 NOTE: It is strongly suggested that init_pmc(PMCNULL) be equivalent to
 init(), though there will of necessity be exceptions.
 
+=item instantiate
+
+  PMC* instantiate(INTERP, PMC* self, PMC* init)
+
+Creates a new PMC object of the type of the class and calls init_pmc(),
+passing in the initialization argument, I<init>, which is usually a
+hash. This opcode is most often used with high-level classes, but
+low-level PMCs may instantiate an object of their own type.
+
+=item new_from_string [deprecated]
+
+  PMC* new_from_string(INTERP, PMC* self, STRING* rep, INTVAL flags)
+
+Construct a PMC initializing it from a string representation and integer
+flags. [NOTE: this has been replaced by C<instantiate>. Any
+initialization arguments can be passed in the I<init> hash.]
+
+=item inspect
+
+  PMC* inspect(INTERP, PMC* self)
+
+Return a hash of all characteristics of the I<self> PMC available for
+introspection.
+
+  PMC* inspect_str(INTERP, PMC* self, STRING* what)
+
+Return a PMC value for one characteristic of the I<self> PMC, selected
+by string name. Returns PMCNULL if the characteristic doesn't exist.
+
 =item morph
 
   void morph(INTERP, PMC* self, INTVAL type)
@@ -522,6 +551,71 @@
 
 Return a true value if the PMC is defined, false otherwise.
 
+=item get_class
+
+  PMC* get_class(INTERP, PMC* self)
+
+Return the class object for this PMC. For high-level objects, this is a
+C<Class> object (or other high-level class object). For low-level PMCs,
+this returns a C<PMCProxy> object.
+
+=item class_type
+
+  INTVAL class_type(INTERP, PMC* self)
+
+Return the integer type of the PMC. [NOTE: will be deprecated when type
+IDs are deprecated.]
+
+=item pmc_namespace [deprecated]
+
+  PMC* pmc_namespace(INTERP, PMC* self)
+
+Return the namespace object for this PMC. [NOTE: replaced by
+C<get_namespace>.]
+
+=item get_namespace
+
+  PMC* get_namespace(INTERP, PMC* self)
+
+Return the namespace object for this PMC.
+
+=item freeze
+
+  void freeze(INTERP, PMC* self, visit_info* info)
+
+Freeze the PMC to an archived string format (a bytecode string constant
+that can be saved in a packfile).
+
+=item thaw
+
+  void thaw  (INTERP, PMC* self, visit_info* info)
+
+Thaw a PMC from an archived string format (a bytecode string constant
+that can be saved in a packfile).
+
+=item thawfinish
+
+  void thawfinish (INTERP, PMC* self, visit_info* info)
+
+Called after the PMC has been thawed to perform any finalization steps.
+
+=item visit
+
+  void visit (INTERP, PMC* self, visit_info* info)
+
+Used by C<freeze> and C<thaw> to visit the contents of the PMC.
+
+=item share
+
+  void share(INTERP, PMC* self)
+
+  PMC* share_ro(INTERP, PMC* self)
+
+Mark a PMC as shared and read-only.
+
+[NOTE: these seem to be used interchangably, should be distinguished or
+merged.]
+
 =back
 
 =head3 Accessors
@@ -564,9 +658,9 @@
 interpreter-specific, non-public types. [NOTE: will be deprecated when type IDs
 are deprecated.]
 
-=item subtype
+=item subtype [deprecated]
 
-  UINTVAL subtype(INTERP, PMC* self, INTVAL type) [deprecated]
+  UINTVAL subtype(INTERP, PMC* self, INTVAL type)
 
 Return the subtype of a PMC. (Note that this may be unimplemented, and may go
 away). This is intended to return information about the PMC--what type of
@@ -606,6 +700,13 @@
 Return the native string value of the PMC. This may be in any encoding, chosen
 by the PMC.
 
+=item get_repr
+
+  STRING* get_repr(INTERP, PMC* self)
+
+Return a string representation of the PMC. [NOTE: redundant with
+C<get_string>, candidate for deprecation.]
+
 =item get_bool
 
   INTVAL get_bool(INTERP, PMC* self)
@@ -721,6 +822,13 @@
 arbitrary data. The details of the data (type, location etc.) depend on the
 PMC.
 
+=item hash [deprecated]
+
+  INTVAL hash(INTERP, PMC* self, size_t seed)
+
+Create a hashed integer value for the PMC, given a particular seed.
+[NOTE: not really used and not really useful.]
+
 =back
 
 =head3 Aggregate Vtable Functions
@@ -751,203 +859,97 @@
 =item get_integer_keyed
 
   INTVAL get_integer_keyed(INTERP, PMC* self, PMC* key)
-
-Return the integer value for the element indexed by a PMC key.  The key is
-guaranteed not to be NULL for this function.
-
-=item get_integer_keyed_int
-
   INTVAL get_integer_keyed_int(INTERP, PMC* self, INTVAL key)
-
-Return the integer value for the element indexed by an integer key.  The key is
-guaranteed not to be NULL for this function.
-
-=item get_integer_keyed_str
-
   INTVAL get_integer_keyed_str(INTERP, PMC* self, STRING* key)
 
-Return the integer value for the element indexed by a string key.  The key is
-guaranteed not to be NULL for this function.
+Return the integer value for the element indexed by a PMC, integer, or string
+key. The key is guaranteed not to be NULL for this function.
 
 =item get_number_keyed
 
   FLOATVAL get_number_keyed(INTERP, PMC* self, PMC* key)
-
-Return the native floating-point value for the element indexed by a PMC key.
-The key is guaranteed not to be NULL for this function.
-
-=item get_number_keyed_int
-
   FLOATVAL get_number_keyed_int(INTERP, PMC* self, INTVAL key)
-
-Return the native floating-point value for the element indexed by an integer
-key. The key is guaranteed not to be NULL for this function.
-
-=item get_number_keyed_str
-
   FLOATVAL get_number_keyed_str(INTERP, PMC* self, STRING* key)
 
-Return the native floating-point value for the element indexed by a string key.
-The key is guaranteed not to be NULL for this function.
+Return the native floating-point value for the element indexed by a PMC,
+integer, or string key. The key is guaranteed not to be NULL for this
+function.
 
 =item get_string_keyed
 
   STRING* get_string_keyed(INTERP, PMC* self, PMC* key)
-
-Return the string value for the element indexed by a PMC key.
-The key is guaranteed not to be NULL for this function.
-
-=item get_string_keyed_int
-
   STRING* get_string_keyed_int(INTERP, PMC* self, INTVAL key)
-
-Return the string value for the element indexed by an integer key.
-The key is guaranteed not to be NULL for this function.
-
-=item get_string_keyed_str
-
   STRING* get_string_keyed_str(INTERP, PMC* self, STRING* key)
 
-Return the string value for the element indexed by a string key.
-The key is guaranteed not to be NULL for this function.
+Return the string value for the element indexed by a PMC, integer, or string
+key. The key is guaranteed not to be NULL for this function.
 
-=item get_bool_keyed [deprecated?]
+=item get_bool_keyed [deprecated]
 
 Return the boolean value for the element indexed by a PMC key.
 
-=item get_bool_keyed_int [deprecated?]
+=item get_bool_keyed_int [deprecated]
 
 Return the boolean value for the element indexed by an integer key.
 
-=item get_bool_keyed_str [deprecated?]
+=item get_bool_keyed_str [deprecated]
 
 Return the boolean value for the element indexed by a string key.
 
 =item get_pmc_keyed
 
   PMC* get_pmc_keyed(INTERP, PMC* self, PMC* key)
-
-Return the PMC value for the element indexed by a PMC key.
-The key is guaranteed not to be NULL for this function.
-
-=item get_pmc_keyed_int
-
   PMC* get_pmc_keyed_int(INTERP, PMC* self, INTVAL key)
-
-Return the PMC value for the element indexed by an integer key.
-The key is guaranteed not to be NULL for this function.
-
-=item get_pmc_keyed_str
-
   PMC* get_pmc_keyed_str(INTERP, PMC* self, STRING* key)
 
-Return the PMC value for the element indexed by a string key.
-The key is guaranteed not to be NULL for this function.
+Return the PMC value for the element indexed by a PMC, integer, or
+string key. The key is guaranteed not to be NULL for this function.
 
 =item get_pointer_keyed
 
   void* get_pointer_keyed(INTERP, PMC* self, PMC* key)
-
-Return the pointer value for the element indexed by a PMC key. The details of
-the data (type, location etc.) depend on the PMC.
-
-=item get_pointer_keyed_int
-
   void* get_pointer_keyed_int(INTERP, PMC* self, INTVAL key)
-
-Return the pointer value for the element indexed by an integer key. The
-details of the data (type, location etc.) depend on the PMC.
-
-=item get_pointer_keyed_str
-
   void* get_pointer_keyed_str(INTERP, PMC* self, STRING* key)
 
-Return the pointer value for the element indexed by a string key. The details
-of the data (type, location etc.) depend on the PMC.
+Return the pointer value for the element indexed by a PMC, integer, or
+string key. The details of the data (type, location etc.) depend on the
+PMC.
 
 =item set_integer_keyed
 
   void set_integer_keyed(INTERP, PMC* self, PMC* key, INTVAL value)
-
-Set the integer value of the element indexed by a PMC key. The key is
-guaranteed not to be NULL for this function.
-
-=item set_integer_keyed_int
-
   void set_integer_keyed_int(INTERP, PMC* self, INTVAL key, INTVAL value)
-
-Set the integer value of the element indexed by an integer key. The key is
-guaranteed not to be NULL for this function.
-
-=item set_integer_keyed_str
-
   void set_integer_keyed_str(INTERP, PMC* self, STRING* key, INTVAL value)
 
-Set the integer value of the element indexed by a string key. The key is
-guaranteed not to be NULL for this function.
+Set the integer value of the element indexed by a PMC, integer, or
+string key. The key is guaranteed not to be NULL for this function.
 
 =item set_number_keyed
 
   void set_number_keyed(INTERP, PMC* self, PMC* key, FLOATVAL value)
-
-Set the floating-point value of the element indexed by a PMC key. The key is
-guaranteed not to be NULL for this function.
-
-=item set_number_keyed_int
-
   void set_number_keyed_int(INTERP, PMC* self, INTVAL key, FLOATVAL value)
-
-Set the floating-point value of the element indexed by an integer key. The key
-is guaranteed not to be NULL for this function.
-
-=item set_number_keyed_str
-
   void set_number_keyed_str(INTERP, PMC* self, STRING* key, FLOATVAL value)
 
-Set the floating-point value of the element indexed by a string key. The key
-is guaranteed not to be NULL for this function.
+Set the floating-point value of the element indexed by a PMC, integer,
+or string key. The key is guaranteed not to be NULL for this function.
 
 =item set_string_keyed
 
   void set_string_keyed(INTERP, PMC* self, PMC* key, STRING* value)
-
-Set the string value of the element indexed by a PMC key.  The key is
-guaranteed not to be NULL for this function.
-
-=item set_string_keyed_int
-
   void set_string_keyed_int(INTERP, PMC* self, INTVAL key, STRING* value)
-
-Set the string value of the element indexed by an integer key.  The key is
-guaranteed not to be NULL for this function.
-
-=item set_string_keyed_str
-
   void set_string_keyed_str(INTERP, PMC* self, STRING* key, STRING* value)
 
-Set the string value of the element indexed by a string key.  The key is
-guaranteed not to be NULL for this function.
+Set the string value of the element indexed by a PMC, integer, or string
+key. The key is guaranteed not to be NULL for this function.
 
 =item set_pmc_keyed
 
   void set_pmc_keyed(INTERP, PMC* self, PMC* key, PMC* value)
-
-Set the value of the element indexed by a PMC key, by copying the value of
-another PMC.
-
-=item set_pmc_keyed_int
-
   void set_pmc_keyed_int(INTERP, PMC* self, INTVAL key, PMC* value)
-
-Set the PMC value of the element indexed by an integer key, by copying the
-value of another PMC.
-
-=item set_pmc_keyed_str
-
   void set_pmc_keyed_str(INTERP, PMC* self, STRING* key, PMC* value)
 
-Set the PMC value of the element indexed by a string key, by copying the value
-of another PMC.
+Set the PMC value of the element indexed by a PMC, integer, or string key by
+copying the value of another PMC.
 
 =item set_pointer_keyed
 
@@ -960,26 +962,12 @@
 =item type_keyed
 
   INTVAL type_keyed(INTERP, PMC* self, PMC* key)
-
-Return the type number of the PMC indexed by a PMC key.  The I<key> parameter
-is guaranteed not to be NULL for this method. [NOTE: To be deprecated when type
-IDs are deprecated.]
-
-=item type_keyed_int
-
   INTVAL type_keyed_int(INTERP, PMC* self, INTVAL key)
-
-Return the type number of the PMC indexed by an integer key.  The I<key>
-parameter is guaranteed not to be NULL for this method. [NOTE: To be deprecated
-when type IDs are deprecated.]
-
-=item type_keyed_str
-
   INTVAL type_keyed_str(INTERP, PMC* self, STRING* key)
 
-Return the type number of the PMC indexed by a string key.  The I<key>
-parameter is guaranteed not to be NULL for this method. [NOTE: To be deprecated
-when type IDs are deprecated.]
+Return the type number of the PMC indexed by a PMC, integer, or string key.
+The I<key> parameter is guaranteed not to be NULL for this method. [NOTE: To be
+deprecated when type IDs are deprecated.]
 
 =item pop_integer
 
@@ -1083,8 +1071,9 @@
 
   void splice(INTERP, PMC* self, PMC* value, INTVAL offset, INTVAL count)
 
-Replace the I<count> PMCs at offset I<offset> from the beginning of I<self>
-with the PMCs in the aggregate I<value>.
+Replace some number of PMCs (specified by the integer I<count>) at
+offset I<offset> from the beginning of I<self> with the PMCs in the
+aggregate I<value>.
 
 =item exists_keyed
 
@@ -1131,9 +1120,15 @@
   void add_int(INTERP, PMC* self, INTVAL value, PMC* dest)
   void add_float(INTERP, PMC* self, FLOATVAL value, PMC* dest)
 
+  void i_add(INTERP, PMC* self, PMC* value)
+  void i_add_int(INTERP, PMC* self, INTVAL value)
+  void i_add_float(INTERP, PMC* self, FLOATVAL value)
+
 Add the value of I<self> to the value of a PMC, native integer, or native
 floating-point number and store the result in a PMC I<dest>. Note that I<dest>
 may be the same PMC as I<self>; in that case optimizations may be made.
+The C<i_> variants perform an inplace operation, modifying the value of
+I<self>.
 
 =item subtract
 
@@ -1141,19 +1136,15 @@
   PMC* subtract_int(INTERP, PMC* self, INTVAL value, PMC* dest)
   PMC* subtract_float(INTERP, PMC* self, FLOATVAL value, PMC* dest)
 
-Subtract the value of a PMC, native integer, or native floating-point number
-from a PMC and store the result in I<dest>. If I<dest> is NULL create a result
-PMC of an appropriate type.  Note that I<dest> may be the same PMC as I<self>;
-in that case optimizations may be made.
-
-=item i_subtract
-
   void i_subtract(INTERP, PMC* self, PMC* value)
   void i_subtract_int(INTERP, PMC* self, INTVAL value)
   void i_subtract_float(INTERP, PMC* self, FLOATVAL value)
 
-Inplace operation: subtract a PMC, native integer, or native floating-point
-number from the value of a PMC and store the result back in the same PMC.
+Subtract the value of a PMC, native integer, or native floating-point number
+from a PMC and store the result in I<dest>. If I<dest> is NULL create a result
+PMC of an appropriate type.  Note that I<dest> may be the same PMC as I<self>;
+in that case optimizations may be made. The C<i_> variants perform an
+inplace operation, modifying the value of I<self>.
 
 =item increment
 
@@ -1173,9 +1164,14 @@
   void multiply_int(INTERP, PMC* self, INTVAL value, PMC* dest)
   void multiply_float(INTERP, PMC* self, FLOATVAL value, PMC* dest)
 
+  void i_multiply(INTERP, PMC* self, PMC* value)
+  void i_multiply_int(INTERP, PMC* self, INTVAL value)
+  void i_multiply_float(INTERP, PMC* self, FLOATVAL value)
+
 Multiply a PMC, native integer, or floating-point value by the value of the PMC
 I<self> and store the result in the I<dest> PMC. Note that I<dest> may be the
-same PMC as I<self>; in that case optimizations may be made.
+same PMC as I<self>; in that case optimizations may be made. The C<i_>
+variants perform an inplace operation, modifying the value of I<self>.
 
 =item divide
 
@@ -1183,9 +1179,31 @@
   void divide_int(INTERP, PMC* self, INTVAL value, PMC* dest)
   void divide_float(INTERP, PMC* self, FLOATVAL value, PMC* dest)
 
+  void i_divide(INTERP, PMC* self, PMC* value)
+  void i_divide_int(INTERP, PMC* self, INTVAL value)
+  void i_divide_float(INTERP, PMC* self, FLOATVAL value)
+
 Divide the value of the I<self> PMC by a PMC, native integer, or native
 floating-point number and store the result in I<dest>.  Note that I<dest> may
-be the same PMC as I<self>; in that case optimizations may be made.
+be the same PMC as I<self>; in that case optimizations may be made. The
+C<i_> variants perform an inplace operation, modifying the value of
+I<self>.
+
+=item floor_divide
+
+  PMC* floor_divide(INTERP, PMC* self, PMC* value, PMC* dest)
+  PMC* floor_divide_int(INTERP, PMC* self, INTVAL value, PMC* dest)
+  PMC* floor_divide_float(INTERP, PMC* self, FLOATVAL value, PMC* dest)
+
+  void i_floor_divide(INTERP, PMC* self, PMC* value)
+  void i_floor_divide_int(INTERP, PMC* self, INTVAL value)
+  void i_floor_divide_float(INTERP, PMC* self, FLOATVAL value)
+
+Divide the PMC's value number by I<value> and return the result in
+I<dest>. The result is the C<floor()> of the division i.e. the next
+whole integer towards -inf. If the denominator is zero, a 'Divide by
+zero' exception is thrown. The C<i_> variants perform an inplace
+operation, modifying the value of I<self>.
 
 =item modulus
 
@@ -1193,9 +1211,15 @@
   void modulus_int(INTERP, PMC* self, INTVAL value, PMC* dest)
   void modulus_float(INTERP, PMC* self, FLOATVAL value, PMC* dest)
 
+  void i_modulus(INTERP, PMC* self, PMC* value)
+  void i_modulus_int(INTERP, PMC* self, INTVAL value)
+  void i_modulus_float(INTERP, PMC* self, FLOATVAL value)
+
 Divide the value of the I<self> PMC by the value of a PMC, native integer, or
 native floating-point number and store the remainder in I<dest>.  Note that
 I<dest> may be the same PMC as I<self>; in that case optimizations may be made.
+The C<i_> variants perform an inplace operation, modifying the value of
+I<self>.
 
 =item cmodulus
 
@@ -1203,20 +1227,49 @@
   void cmodulus_int(INTERP, PMC* self, INTVAL value, PMC* dest)
   void cmodulus_float(INTERP, PMC* self, FLOATVAL value, PMC* dest)
 
+  void i_cmodulus(INTERP, PMC* self, PMC* value)
+  void i_cmodulus_int(INTERP, PMC* self, INTVAL value)
+  void i_cmodulus_float(INTERP, PMC* self, FLOATVAL value)
+
 Divide the value of the I<self> PMC by the value of a PMC, native integer, or
 native floating-point number and store the remainder in I<dest>.  Note that
 I<dest> may be the same PMC as I<self>; in that case optimizations may be made.
+The C<i_> variants perform an inplace operation, modifying the value of
+I<self>.
 
 Note that C<modulus> uses Knuth's "corrected mod" algorithm, as implemented in
 F<src/utils.c>, while C<cmodulus> uses the C-style fmod function.
 
+=item pow
+
+  PMC* pow(INTERP, PMC* self, PMC* value, PMC* dest)
+  PMC* pow_int(INTERP, PMC* self, INTVAL value, PMC* dest)
+  PMC* pow_float(INTERP, PMC* self, FLOATVAL value, PMC* dest)
+
+  void i_pow(INTERP, PMC* self, PMC* value)
+  void i_pow_int(INTERP, PMC* self, INTVAL value)
+  void i_pow_float(INTERP, PMC* self, FLOATVAL value)
+
+Return the value of I<self> raised to the power of I<value>. The C<i_>
+variants perform an inplace operation, modifying the value of I<self>.
+
+=item absolute
+
+  PMC* absolute(INTERP, PMC* self, PMC* dest)
+  void i_absolute(INTERP, PMC* self)
+
+Return the absolute value of I<self>. The C<i_> variant performs an
+inplace operation, modifying the value of I<self>.
+
 =item neg
 
   void neg(INTERP, PMC* self, PMC* dest)
+  void i_neg(INTERP, PMC* self)
 
-Negate the sign of I<self> and store the result in I<dest>. Note that I<self>
-and I<dest> may refer to the same PMC, in which case optimizations may be
-made.
+Negate the sign of I<self> and store the result in I<dest>. Note that
+I<self> and I<dest> may refer to the same PMC, in which case
+optimizations may be made. The C<i_> variant performs an inplace
+operation, modifying the value of I<self>.
 
 =back
 
@@ -1236,8 +1289,8 @@
 same PMC as I<self>; in that case optimizations may be made.
 [Question: what happens when the I<self> and I<value> PMCs aren't integers?]
 
-The C<i_> variants perform an implace operation and store the result in
-C<self>.
+The C<i_> variants perform an inplace operation and store the result in
+I<self>.
 
 =item bitwise_and
 
@@ -1246,9 +1299,9 @@
   void i_bitwise_and(INTERP, PMC* self, PMC* value)
   void i_bitwise_and_int(INTERP, PMC* self, INTVAL value)
 
-Return the result of a bitwise AND on the passed in C<value> and the C<self>
-PMC. The C<i_> variants perform an implace operation and store the result in
-C<self>.
+Return the result of a bitwise AND on the passed in I<value> and the I<self>
+PMC. The C<i_> variants perform an inplace operation and store the result in
+I<self>.
 
 =item bitwise_xor
 
@@ -1257,9 +1310,9 @@
   void i_bitwise_xor(INTERP, PMC* self, PMC* value)
   void i_bitwise_xor_int(INTERP, PMC* self, INTVAL value)
 
-Return the result of a bitwise XOR on the passed in C<value> and the C<self>
-PMC. The C<i_> variants perform an implace operation and store the result in
-C<self>.
+Return the result of a bitwise XOR on the passed in I<value> and the I<self>
+PMC. The C<i_> variants perform an inplace operation and store the result in
+I<self>.
 
 =item bitwise_ors
 
@@ -1269,8 +1322,8 @@
   void i_bitwise_ors_str(INTERP, PMC* self, STRING* value)
 
 Return the result of a bitwise OR over an entire string on the passed in
-C<value> and the C<self> PMC. The C<i_> variants perform an implace operation
-and store the result in C<self>.
+I<value> and the I<self> PMC. The C<i_> variants perform an inplace operation
+and store the result in I<self>.
 
 =item bitwise_ands
 
@@ -1280,8 +1333,8 @@
   void i_bitwise_ands_str(INTERP, PMC* self, STRING* value)
 
 Return the result of a bitwise AND over an entire string on the passed in
-C<value> and the C<self> PMC. The C<i_> variants perform an implace operation
-and store the result in C<self>.
+I<value> and the I<self> PMC. The C<i_> variants perform an inplace operation
+and store the result in I<self>.
 
 =item bitwise_xors
 
@@ -1291,24 +1344,24 @@
   void i_bitwise_xors_str(INTERP, PMC* self, STRING* value)
 
 Return the result of a bitwise XOR over an entire string on the passed in
-C<value> and the C<self> PMC. The C<i_> variants perform an implace operation
-and store the result in C<self>.
+I<value> and the I<self> PMC. The C<i_> variants perform an inplace operation
+and store the result in I<self>.
 
 =item bitwise_not
 
   PMC* bitwise_not(INTERP, PMC* self, PMC* dest)
   void i_bitwise_not(INTERP, PMC* self)
 
-Returns the bitwise negation of the C<self> PMC. The C<i_> variant performs an
-implace operation, storing the result in C<self>.
+Returns the bitwise negation of the I<self> PMC. The C<i_> variant performs an
+inplace operation, storing the result in I<self>.
 
 =item bitwise_nots
 
   PMC* bitwise_nots(INTERP, PMC* self, PMC* dest)
   void i_bitwise_nots(INTERP, PMC* self)
 
-Returns the bitwise negation of the string C<self> PMC. The C<i_> variant
-performs an implace operation, storing the result in C<self>.
+Returns the bitwise negation of the string I<self> PMC. The C<i_> variant
+performs an inplace operation, storing the result in I<self>.
 
 =item bitwise_shl
 
@@ -1317,10 +1370,10 @@
   void i_bitwise_shl(INTERP, PMC* self, PMC* value)
   void i_bitwise_shl_int(INTERP, PMC* self, INTVAL value)
 
-Return the value of the C<self> PMC bitwise shifted left by the amount
-specified in C<value>, shifting in zeroes on the right (arithmetic/logical
-bitwise shift). A negative C<value> shifts right. The C<i_> variants perform an
-implace operation, storing the result in C<self>.
+Return the value of the I<self> PMC bitwise shifted left by the amount
+specified in I<value>, shifting in zeroes on the right (arithmetic/logical
+bitwise shift). A negative I<value> shifts right. The C<i_> variants perform an
+inplace operation, storing the result in I<self>.
 
 The result may be promoted to a C<BigInt>.
 
@@ -1331,12 +1384,12 @@
   void i_bitwise_shr(INTERP, PMC* self, PMC* value)
   void i_bitwise_shr_int(INTERP, PMC* self, INTVAL value)
 
-Return the value of the C<self> PMC bitwise shifted right by the amount
-specified in C<value>, shifting in copies of the sign bit on the left
-(arithmetic bitwise shift). A negative C<value> shifts left. The C<i_> variants
-perform an implace operation, storing the result in C<self>.
+Return the value of the I<self> PMC bitwise shifted right by the amount
+specified in I<value>, shifting in copies of the sign bit on the left
+(arithmetic bitwise shift). A negative I<value> shifts left. The C<i_> variants
+perform an inplace operation, storing the result in I<self>.
 
-The result may be promoted to a C<BigInt> (when C<value> is negative).
+The result may be promoted to a C<BigInt> (when I<value> is negative).
 
 =item bitwise_lsr
 
@@ -1345,30 +1398,73 @@
   void i_bitwise_lsr(INTERP, PMC* self, PMC* value)
   void i_bitwise_lsr_int(INTERP, PMC* self, INTVAL value)
 
-Return the value of the C<self> PMC bitwise shifted right by the amount
-specified in C<value>, shifting in zeroes on the left (logical bitwise shift).
-A negative C<value> shifts left. The C<i_> variants perform an implace
-operation, storing the result in C<self>.
-
+Return the value of the I<self> PMC bitwise shifted right by the amount
+specified in I<value>, shifting in zeroes on the left (logical bitwise shift).
+A negative I<value> shifts left. The C<i_> variants perform an inplace
+operation, storing the result in I<self>.
 
 =item is_equal
 
+  INTVAL is_equal(INTERP, PMC* self, PMC* value)
+  INTVAL is_equal_num(INTERP, PMC* self, PMC* value)
+  INTVAL is_equal_string(INTERP, PMC* self, PMC* value)
+
+Return an integer value (1/0) indicating if the I<self> PMC is equal to
+the I<value> PMC. The C<_num> version tests for numeric equality, while
+the C<_string> version tests for string equality.
+
 =item is_same
 
-=item cmp
+  INTVAL is_same(INTERP, PMC* self, PMC* value)
 
-=item cmp_num
+Return an integer value (1/0) indicating if I<self> is the same as
+I<value> (with "sameness" determined by each PMC).
 
-=item cmp_string
+=item cmp
+
+  INTVAL cmp(INTERP, PMC* self, PMC* value)
+  INTVAL cmp_num(INTERP, PMC* self, PMC* value)
+  INTVAL cmp_string(INTERP, PMC* self, PMC* value)
+
+Returns the integer result of comparing the values of I<self> and
+I<value> (0 for equal, 1 if I<self> is greater, -1 if I<value> is
+greater). The C<_num> version performs a numeric comparison, while the
+C<_string> version performs a string comparison.
 
 =item logical_or
 
+  PMC* logical_or(INTERP, PMC* self, PMC* value, PMC* dest)
+
+Performs a logical OR, returning I<self> if it is true, and I<value>
+otherwise.
+
 =item logical_and
 
+  PMC* logical_and(INTERP, PMC* self, PMC* value, PMC* dest)
+
+Performs a logical AND, returning a true value if both I<self> and
+I<value> are true, and a false value otherwise. (Currently implemented
+as: If I<self> is false, return it, since the entire expression is
+false. If I<self> is true, return value, since the truth or falsehood of
+I<value> will determine the truth or falsehood of the whole expression.)
+
 =item logical_xor
 
+  PMC* logical_xor(INTERP, PMC* self, PMC* value, PMC* dest)
+
+Performs a logical XOR, returning I<self> if it is true and I<value> is
+false, returning I<value> if it is true and I<self> is false, and
+returning a false value (PMC of the same type as I<self>, with the
+boolean value 0) if both are true or neither are true.
+
 =item logical_not
 
+  PMC* logical_not(INTERP, PMC* self, PMC* dest)
+  void i_logical_not(INTERP, PMC* self)
+
+Returns the logical negation of I<self>. The C<i_> variant performs an
+inplace negation, modifying the value of I<self>.
+
 =back
 
 =head3 String Vtable Functions
@@ -1377,11 +1473,33 @@
 
 =item concatenate
 
-=item concatenate_native
+  PMC* concatenate(INTERP, PMC* self, PMC* value, PMC* dest)
+  PMC* concatenate_str(INTERP, PMC* self, STRING* value, PMC* dest)
+  void i_concatenate(INTERP, PMC* self, PMC* value)
+  void i_concatenate_str(INTERP, PMC* self, STRING* value)
+
+Concatenate I<self> with a PMC or string value and return the result.
+The C<i_> variant performs an inplace concatenation, modifying the value
+of I<self>.
 
 =item repeat
 
-=item repeat_int
+  PMC* repeat(INTERP, PMC* self, PMC* value, PMC* dest)
+  PMC* repeat_int(INTERP, PMC* self, INTVAL value, PMC* dest)
+  void i_repeat(INTERP, PMC* self, PMC* value)
+  void i_repeat_int(INTERP, PMC* self, INTVAL value)
+
+Return the result of repeating the value in I<self> the number of times
+indicated in I<value>. The C<i_> variants perform an inplace operation,
+modifying the value of I<self>.
+
+=item substr
+
+  void substr(INTERP, PMC* self, INTVAL offset, INTVAL length, PMC* dest)
+  STRING* substr_str(INTERP, PMC* self, INTVAL offset, INTVAL length)
+
+Extracts the string starting at I<offset> with size I<length> and return
+it as a PMC in I<dest> or as a string return value.
 
 =back
 
@@ -1391,11 +1509,9 @@
 
 =item invoke
 
-=item fsh
+  opcode_t* invoke(INTERP, PMC* self, void* next)
 
-=item visit
-
-=item share
+Invoke the code object I<self>.
 
 =back
 
@@ -1405,22 +1521,124 @@
 
 =item can
 
-=item does
+  INTVAL can(INTERP, PMC* self, STRING* method)
+
+Return a true value if the PMC has a method named I<method>, return 0
+otherwise.
 
 =item isa
 
-=item add_method
+  INTVAL isa(INTERP, PMC* self, STRING* classname)
 
-=item add_attribute
+Return a true value if the PMC inherits from  the class named
+I<classname>, return 0 otherwise.
+
+=item does
+
+  INTVAL does(INTERP, PMC* self, STRING* role)
+
+Return a true value if the PMC C<does> (composes) or C<performs>
+(satisfies the interface of) the role named I<role>, return 0 otherwise.
 
 =item get_attr
 
+  PMC* get_attr(INTERP, PMC* self, INTVAL idx) [deprecated]
+  PMC* get_attr_str(INTERP, PMC* self, STRING* idx)
+
+Retrieve an attribute value from the PMC (instance object).
+
+[NOTE: Integer index lookups for attributes are deprecated with the new
+object metamodel.]
+
 =item set_attr
 
+  void set_attr(INTERP, PMC* self, INTVAL idx, PMC* value) [deprecated]
+  void set_attr_str(INTERP, PMC* self, STRING* idx, PMC* value)
+
+Store an attribute value in the PMC (instance object).
+
+[NOTE: Integer index lookups for attributes are deprecated with the new
+object metamodel.]
+
 =item add_parent
 
+  void add_parent(INTERP, PMC* self, PMC* parent)
+
+Add a parent to the PMC (class object), establishing an inheritance relation.
+
+=item remove_parent
+
+  void remove_parent(INTERP, PMC* self, PMC* parent)
+
+Remove a parent from a PMC (class object).
+
+Not all object metamodels will support removing parents.
+
 =item add_role
 
+  void add_role(INTERP, PMC* self, PMC* role)
+
+Add a role to the PMC (class object), establishing a composition relation.
+
+=item remove_role
+
+  void remove_role(INTERP, PMC* self, PMC* role)
+
+Remove a role from the PMC (class object).
+
+Not all object metamodels will support removing roles.
+
+=item add_attribute
+
+  void add_attribute(INTERP, PMC* self, STRING* name, PMC* type)
+
+Add an attribute to the PMC (class object).
+
+=item remove_attribute
+
+  void remove_attribute(INTERP, PMC* self, STRING* name)
+
+Remove an attribute from the PMC (class object).
+
+Not all object metamodels will support removing attributes.
+
+=item add_method
+
+  void add_method(INTERP, PMC* self, STRING* method_name, PMC* sub_pmc)
+
+Add a method to the PMC (class object).
+
+=item remove_method
+
+  void remove_method(INTERP, PMC* self, STRING* method_name)
+
+Remove a method from the PMC (class object).
+
+Not all object metamodels will support removing methods.
+
+=item add_vtable_override
+
+  void add_vtable_override(INTERP, PMC* self, STRING* vtable_name, PMC* 
sub_pmc)
+
+Add a vtable override to the PMC (class object).
+
+  void remove_vtable_override(INTERP, PMC* self, STRING* vtable_name)
+
+Remove a vtable override from the PMC (class object).
+
+=item subclass [deprecated]
+
+  PMC* subclass(INTERP, PMC* self, PMC* name)
+
+Create a subclass of a PMC (class object) with the name given in
+I<name>.
+
+[NOTE: this operation can be performed by creating a new class and
+adding a parent to it. We will keep the C<subclass> opcode, but
+implement it using this more direct route. (With the added advantage of
+increased abstraction, allowing multiple object metamodels more
+easily.)]
+
 =item find_method
 
   PMC* find_method(INTERP, PMC* self, STRING* method_name)
@@ -1431,7 +1649,6 @@
 cached? Can you turn off caching? What if you want to override find_method to
 generate methods on the fly?]
 
-
 =back
 
 
@@ -1521,13 +1738,20 @@
 
 =item ParrotClass [deprecated]
 
-The PMC for Parrot's class. (Note that this may go away if we ultimately make
-all classes just objects)
+The PMC for Parrot's class. 
 
 =item ParrotObject [deprecated]
 
 The PMC for Parrot's base object type.
 
+=item Class
+
+The PMC for Parrot's class. 
+
+=item Object
+
+The PMC for Parrot's base object type.
+
 =item Ref
 
 The PMC that represents a reference to another PMC. Delegates all functions to
@@ -1562,6 +1786,11 @@
 A singleton PMC that generates a random number. {{ NOTE: Why do we have
 this? }}
 
+=item Exception
+
+The base class for all exceptions. Currently based on
+C<ResizablePMCArray>, but that's likely to change.
+
 =back
 
 =head3 Array types
@@ -1627,8 +1856,6 @@
 
 A dynamically sized array which holds only String values.
 
-=item Exception
-
 =back
 
 =head3 Hash types
@@ -1653,10 +1880,17 @@
 
 Note that an embedding system may override this behavior.
 
-=item Namespace
+=item NameSpace
+
+Stores one level of a namespace. Every slot in a namespace contains
+either another namespace (the next level down), or a variable or
+subroutine/method.
 
 =item OrderedHash
 
+A hash that also preserves the order of elements, providing the
+interface of both a hash and an array.
+
 =item AddrRegistry
 
 Simulates reference counting for dead-object detection and garbage
@@ -1670,22 +1904,37 @@
 
 =item Sub
 
+A fundamental subroutine object, and base class for other subroutine
+PMC types.
+
 =item Closure
 
 A closure: subroutine object plus captured lexical scope.
 
-=item Coroutine
-
 =item Continuation
 
-=item CSub
+A continuation: a subroutine object that captures the interpreter's
+context at the point where the continuation was constructed.
+
+=item Coroutine
+
+A coroutine: a continuation object that can stop part way through
+execution and restart at the point where it left off the next time it's
+called.
 
 =item Eval
 
+An extension of C<Sub> that provides dynamic code evaluation and
+execution.
+
 =item Exception_Handler
 
+A code object for handling exceptions.
+
 =item MultiSub
 
+A container for multiply dispatched subroutines.
+
 =item NCI
 
 A native call interface wrapper around a C function.
@@ -1693,7 +1942,6 @@
 =item Bound_NCI
 
 An internal NCI method call bound to a particular call instance. 
-{{ NOTE: where are these used? }}
 
 =item Compiler
 

Reply via email to