chromatic wrote on Sat, Aug 25, 2007 at 11:09:24PM PDT: > There's almost no vtable entry documentation in src/pmc/undef.pmc. You can > copy it almost verbatim from almost any other PMC. This is an easy task that > requires almost no C or Perl knowledge. This isn't much documentation, and I hope it's a step in the right direction.
- David -- "Liberal education ought to end only with life itself." -- Robert Maynard Hutchins, The Great Conversation
diff --git a/src/pmc/undef.pmc b/src/pmc/undef.pmc index 138a2fd..90a0440 100644 --- a/src/pmc/undef.pmc +++ b/src/pmc/undef.pmc @@ -28,11 +28,33 @@ from there. pmclass Undef extends default no_ro { +/* + +=item C<void set_pmc(PMC *other)> + +Sets the current PMC to C<*other> by first changing the current PMC to the +appropriate type. + +=cut + +*/ + void set_pmc(PMC *other) { VTABLE_morph(INTERP, SELF, enum_class_Ref); VTABLE_set_pmc(INTERP, SELF, other); } +/* + +=item C<void assign_pmc(PMC *other)> + +Assigns the PMC to the value of C<*other>by first changing the PMC to the +appropriate type. + +=cut + +*/ + void assign_pmc(PMC *other) { VTABLE_morph(INTERP, SELF, other->vtable->base_type); @@ -41,49 +63,159 @@ pmclass Undef extends default no_ro { VTABLE_set_pmc(INTERP, SELF, other); } - void morph(INTVAL new_type) { +/* + +=item C<void morph(INTVAL new_type)> + +Changes the current PMC's type to C<new_type>. + +=cut + +*/ + + void morph(INTVAL new_type) { pmc_reuse(INTERP, SELF, new_type, 0); } +/* + +=item C<INTVAL get_integer()> + +Returns 0. + +=cut + +*/ + INTVAL get_integer() { return 0; } +/* + +=item C<INTVAL defined()> + +Returns 0. + +=cut + +*/ + INTVAL defined() { return 0; } +/* + +=item C<void set_integer_native(INTVAL value)> + +Morphs the current PMC to an C<Integer> and sets the value from C<value>. + +=cut + +*/ + void set_integer_native(INTVAL value) { VTABLE_morph(INTERP, SELF, enum_class_Integer); VTABLE_set_integer_native(INTERP, SELF, value); } +/* + +=item C<FLOATVAL get_number()> + +Returns 0.0. + +=cut + +*/ + FLOATVAL get_number() { return 0.0; } +/* + +=item C<void set_number_native(FLOATVAL value)> + +Morphs the current PMC to a C<Float> and sets the value from C<value>. + +=cut + +*/ + void set_number_native(FLOATVAL value) { VTABLE_morph(INTERP, SELF, enum_class_Float); VTABLE_set_number_native(INTERP, SELF, value); } +/* + +=item C<STRING *get_string()> + +Returns an empty string. + +=cut + +*/ + STRING *get_string() { return string_make_empty(INTERP, enum_stringrep_one, 0); } +/* + +=item C<void set_string_native(STRING *value)> + +Morphs the current PMC to a C<String> and sets the value from C<value>. + +=cut + +*/ + void set_string_native(STRING *value) { VTABLE_morph(INTERP, SELF, UNDEF_STRING_CLASS); VTABLE_set_string_native(INTERP, SELF, value); } +/* + +=item C<INTVAL get_bool()> + +Returns 0. + +=cut + +*/ + INTVAL get_bool() { return 0; } +/* + +=item C<void share()> + +Unknown. (TODO) + +=cut + +*/ + void share() { /* see src/pmc/integer.pmc */ } +/* + +=item C<PMC *share_ro()> + +Unknown. (TODO) + +=cut + +*/ + PMC *share_ro() { if (PObj_is_PMC_shared_TEST(SELF)) return SELF; @@ -91,10 +223,30 @@ pmclass Undef extends default no_ro { return pt_shared_fixup(INTERP, SELF); } +/* + +=item C<PMC *clone()> + +Clones the current Undef PMC. + +=cut + +*/ + PMC *clone() { return pmc_new(INTERP, SELF->vtable->base_type); } +/* + +=item C<INTVAL is_equal(PMC *value)> + +Returns 1 if the C<*value> is an Undef PMC, 0 otherwise. + +=cut + +*/ + INTVAL is_equal(PMC *value) { MMD_Undef: { return 1;