# New Ticket Created by Nick Glencross # Please include the string: [perl #34964] # in the subject line of all future correspondence about this issue. # <URL: https://rt.perl.org/rt3/Ticket/Display.html?id=34964 >
This patch fixes a few operations which are badly inherited by string from scalar.pmc. increment/decrement have been removed as they aren't really required for Strings. 'neg' also also suffered from a similar problem, so this patch also stops this example segfaulting: .sub test new $P0, .String $P0 = "12" neg $P0 print $P0 print_newline .end You may need to do a make clean or similar to get string.c to be properly built...(?) [My feeling is that scalar should define set_integer_native, set_number_native etc. to automatically morph, and then for integer, float and string to override these to either not morph (for better performance), or just do their own thing (i.e. string::set_integer_native to convert the int to a String). That way you can't get data being changed without its interpretation.]
Index: classes/scalar.pmc =================================================================== --- classes/scalar.pmc (revision 7825) +++ classes/scalar.pmc (working copy) @@ -87,7 +87,6 @@ =item C<STRING *get_string()> - =cut */ @@ -477,10 +476,7 @@ */ void neg (PMC* dest) { - if (dest == SELF) - PMC_int_val(SELF) = -DYNSELF.get_integer(); - else - VTABLE_set_integer_native(INTERP, dest, -DYNSELF.get_integer()); + VTABLE_set_integer_native(INTERP, dest, -DYNSELF.get_integer()); } /* @@ -931,36 +927,9 @@ (UINTVAL)value, NULL) ); } -/* -=item C<void increment()> - -Increments the scalar. - -=cut - -*/ - - void increment () { - PMC_int_val(SELF) = DYNSELF.get_integer() + 1; - } - /* -=item C<void decrement()> - -Decrements the scalar. - -=cut - -*/ - - void decrement () { - PMC_int_val(SELF) = DYNSELF.get_integer() - 1; - } - -/* - =item C<INTVAL defined()> Always returns true.