SvPVX_const() triggers an assertion that when the sv isn't a PV.
Steve Peters [Fri, 28 Dec 2007 05:05:50 +0000 (05:05 +0000)]
Back this down to just checking to see if the sv is a PV or
not.

p4raw-id: //depot/perl@32750

ext/Encode/ucm/cp858.ucm [new file with mode: 0644]
sv.h

diff --git a/ext/Encode/ucm/cp858.ucm b/ext/Encode/ucm/cp858.ucm
new file mode 100644 (file)
index 0000000..29fa1b1
--- /dev/null
@@ -0,0 +1,274 @@
+<code_set_name> "cp858"
+<mb_cur_min> 1
+<mb_cur_max> 1
+<subchar> \x3f
+CHARMAP
+<U0000> \x00 |0 # NULL
+<U0001> \x01 |0 # START OF HEADING
+<U0002> \x02 |0 # START OF TEXT
+<U0003> \x03 |0 # END OF TEXT
+<U0004> \x04 |0 # END OF TRANSMISSION
+<U0005> \x05 |0 # ENQUIRY
+<U0006> \x06 |0 # ACKNOWLEDGE
+<U0007> \x07 |0 # BELL
+<U0008> \x08 |0 # BACKSPACE
+<U0009> \x09 |0 # HORIZONTAL TABULATION
+<U000A> \x0A |0 # <control>
+<U000B> \x0B |0 # <control>
+<U000C> \x0C |0 # <control>
+<U000D> \x0D |0 # <control>
+<U000E> \x0E |0 # <control>
+<U000F> \x0F |0 # <control>
+<U000a> \x0a |0 # LINE FEED
+<U000b> \x0b |0 # VERTICAL TABULATION
+<U000c> \x0c |0 # FORM FEED
+<U000d> \x0d |0 # CARRIAGE RETURN
+<U000e> \x0e |0 # SHIFT OUT
+<U000f> \x0f |0 # SHIFT IN
+<U0010> \x10 |0 # DATA LINK ESCAPE
+<U0011> \x11 |0 # DEVICE CONTROL ONE
+<U0012> \x12 |0 # DEVICE CONTROL TWO
+<U0013> \x13 |0 # DEVICE CONTROL THREE
+<U0014> \x14 |0 # DEVICE CONTROL FOUR
+<U0015> \x15 |0 # NEGATIVE ACKNOWLEDGE
+<U0016> \x16 |0 # SYNCHRONOUS IDLE
+<U0017> \x17 |0 # END OF TRANSMISSION BLOCK
+<U0018> \x18 |0 # CANCEL
+<U0019> \x19 |0 # END OF MEDIUM
+<U001A> \x1A |0 # <control>
+<U001B> \x1B |0 # <control>
+<U001C> \x1C |0 # <control>
+<U001D> \x1D |0 # <control>
+<U001E> \x1E |0 # <control>
+<U001F> \x1F |0 # <control>
+<U001a> \x1a |0 # SUBSTITUTE
+<U001b> \x1b |0 # ESCAPE
+<U001c> \x1c |0 # FILE SEPARATOR
+<U001d> \x1d |0 # GROUP SEPARATOR
+<U001e> \x1e |0 # RECORD SEPARATOR
+<U001f> \x1f |0 # UNIT SEPARATOR
+<U0020> \x20 |0 # SPACE
+<U0021> \x21 |0 # EXCLAMATION MARK
+<U0022> \x22 |0 # QUOTATION MARK
+<U0023> \x23 |0 # NUMBER SIGN
+<U0024> \x24 |0 # DOLLAR SIGN
+<U0025> \x25 |0 # PERCENT SIGN
+<U0026> \x26 |0 # AMPERSAND
+<U0027> \x27 |0 # APOSTROPHE
+<U0028> \x28 |0 # LEFT PARENTHESIS
+<U0029> \x29 |0 # RIGHT PARENTHESIS
+<U002a> \x2a |0 # ASTERISK
+<U002b> \x2b |0 # PLUS SIGN
+<U002c> \x2c |0 # COMMA
+<U002d> \x2d |0 # HYPHEN-MINUS
+<U002e> \x2e |0 # FULL STOP
+<U002f> \x2f |0 # SOLIDUS
+<U0030> \x30 |0 # DIGIT ZERO
+<U0031> \x31 |0 # DIGIT ONE
+<U0032> \x32 |0 # DIGIT TWO
+<U0033> \x33 |0 # DIGIT THREE
+<U0034> \x34 |0 # DIGIT FOUR
+<U0035> \x35 |0 # DIGIT FIVE
+<U0036> \x36 |0 # DIGIT SIX
+<U0037> \x37 |0 # DIGIT SEVEN
+<U0038> \x38 |0 # DIGIT EIGHT
+<U0039> \x39 |0 # DIGIT NINE
+<U003a> \x3a |0 # COLON
+<U003b> \x3b |0 # SEMICOLON
+<U003c> \x3c |0 # LESS-THAN SIGN
+<U003d> \x3d |0 # EQUALS SIGN
+<U003e> \x3e |0 # GREATER-THAN SIGN
+<U003f> \x3f |0 # QUESTION MARK
+<U0040> \x40 |0 # COMMERCIAL AT
+<U0041> \x41 |0 # LATIN CAPITAL LETTER A
+<U0042> \x42 |0 # LATIN CAPITAL LETTER B
+<U0043> \x43 |0 # LATIN CAPITAL LETTER C
+<U0044> \x44 |0 # LATIN CAPITAL LETTER D
+<U0045> \x45 |0 # LATIN CAPITAL LETTER E
+<U0046> \x46 |0 # LATIN CAPITAL LETTER F
+<U0047> \x47 |0 # LATIN CAPITAL LETTER G
+<U0048> \x48 |0 # LATIN CAPITAL LETTER H
+<U0049> \x49 |0 # LATIN CAPITAL LETTER I
+<U004a> \x4a |0 # LATIN CAPITAL LETTER J
+<U004b> \x4b |0 # LATIN CAPITAL LETTER K
+<U004c> \x4c |0 # LATIN CAPITAL LETTER L
+<U004d> \x4d |0 # LATIN CAPITAL LETTER M
+<U004e> \x4e |0 # LATIN CAPITAL LETTER N
+<U004f> \x4f |0 # LATIN CAPITAL LETTER O
+<U0050> \x50 |0 # LATIN CAPITAL LETTER P
+<U0051> \x51 |0 # LATIN CAPITAL LETTER Q
+<U0052> \x52 |0 # LATIN CAPITAL LETTER R
+<U0053> \x53 |0 # LATIN CAPITAL LETTER S
+<U0054> \x54 |0 # LATIN CAPITAL LETTER T
+<U0055> \x55 |0 # LATIN CAPITAL LETTER U
+<U0056> \x56 |0 # LATIN CAPITAL LETTER V
+<U0057> \x57 |0 # LATIN CAPITAL LETTER W
+<U0058> \x58 |0 # LATIN CAPITAL LETTER X
+<U0059> \x59 |0 # LATIN CAPITAL LETTER Y
+<U005a> \x5a |0 # LATIN CAPITAL LETTER Z
+<U005b> \x5b |0 # LEFT SQUARE BRACKET
+<U005c> \x5c |0 # REVERSE SOLIDUS
+<U005d> \x5d |0 # RIGHT SQUARE BRACKET
+<U005e> \x5e |0 # CIRCUMFLEX ACCENT
+<U005f> \x5f |0 # LOW LINE
+<U0060> \x60 |0 # GRAVE ACCENT
+<U0061> \x61 |0 # LATIN SMALL LETTER A
+<U0062> \x62 |0 # LATIN SMALL LETTER B
+<U0063> \x63 |0 # LATIN SMALL LETTER C
+<U0064> \x64 |0 # LATIN SMALL LETTER D
+<U0065> \x65 |0 # LATIN SMALL LETTER E
+<U0066> \x66 |0 # LATIN SMALL LETTER F
+<U0067> \x67 |0 # LATIN SMALL LETTER G
+<U0068> \x68 |0 # LATIN SMALL LETTER H
+<U0069> \x69 |0 # LATIN SMALL LETTER I
+<U006a> \x6a |0 # LATIN SMALL LETTER J
+<U006b> \x6b |0 # LATIN SMALL LETTER K
+<U006c> \x6c |0 # LATIN SMALL LETTER L
+<U006d> \x6d |0 # LATIN SMALL LETTER M
+<U006e> \x6e |0 # LATIN SMALL LETTER N
+<U006f> \x6f |0 # LATIN SMALL LETTER O
+<U0070> \x70 |0 # LATIN SMALL LETTER P
+<U0071> \x71 |0 # LATIN SMALL LETTER Q
+<U0072> \x72 |0 # LATIN SMALL LETTER R
+<U0073> \x73 |0 # LATIN SMALL LETTER S
+<U0074> \x74 |0 # LATIN SMALL LETTER T
+<U0075> \x75 |0 # LATIN SMALL LETTER U
+<U0076> \x76 |0 # LATIN SMALL LETTER V
+<U0077> \x77 |0 # LATIN SMALL LETTER W
+<U0078> \x78 |0 # LATIN SMALL LETTER X
+<U0079> \x79 |0 # LATIN SMALL LETTER Y
+<U007a> \x7a |0 # LATIN SMALL LETTER Z
+<U007b> \x7b |0 # LEFT CURLY BRACKET
+<U007c> \x7c |0 # VERTICAL LINE
+<U007d> \x7d |0 # RIGHT CURLY BRACKET
+<U007e> \x7e |0 # TILDE
+<U007f> \x7f |0 # DELETE
+<U00a0> \xff |0 # NO-BREAK SPACE
+<U00a1> \xad |0 # INVERTED EXCLAMATION MARK
+<U00a2> \xbd |0 # CENT SIGN
+<U00a3> \x9c |0 # POUND SIGN
+<U00a4> \xcf |0 # CURRENCY SIGN
+<U00a5> \xbe |0 # YEN SIGN
+<U00a6> \xdd |0 # BROKEN BAR
+<U00a7> \xf5 |0 # SECTION SIGN
+<U00a8> \xf9 |0 # DIAERESIS
+<U00a9> \xb8 |0 # COPYRIGHT SIGN
+<U00aa> \xa6 |0 # FEMININE ORDINAL INDICATOR
+<U00ab> \xae |0 # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+<U00ac> \xaa |0 # NOT SIGN
+<U00ad> \xf0 |0 # SOFT HYPHEN
+<U00ae> \xa9 |0 # REGISTERED SIGN
+<U00af> \xee |0 # MACRON
+<U00b0> \xf8 |0 # DEGREE SIGN
+<U00b1> \xf1 |0 # PLUS-MINUS SIGN
+<U00b2> \xfd |0 # SUPERSCRIPT TWO
+<U00b3> \xfc |0 # SUPERSCRIPT THREE
+<U00b4> \xef |0 # ACUTE ACCENT
+<U00b5> \xe6 |0 # MICRO SIGN
+<U00b6> \xf4 |0 # PILCROW SIGN
+<U00b7> \xfa |0 # MIDDLE DOT
+<U00b8> \xf7 |0 # CEDILLA
+<U00b9> \xfb |0 # SUPERSCRIPT ONE
+<U00ba> \xa7 |0 # MASCULINE ORDINAL INDICATOR
+<U00bb> \xaf |0 # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+<U00bc> \xac |0 # VULGAR FRACTION ONE QUARTER
+<U00bd> \xab |0 # VULGAR FRACTION ONE HALF
+<U00be> \xf3 |0 # VULGAR FRACTION THREE QUARTERS
+<U00bf> \xa8 |0 # INVERTED QUESTION MARK
+<U00c0> \xb7 |0 # LATIN CAPITAL LETTER A WITH GRAVE
+<U00c1> \xb5 |0 # LATIN CAPITAL LETTER A WITH ACUTE
+<U00c2> \xb6 |0 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+<U00c3> \xc7 |0 # LATIN CAPITAL LETTER A WITH TILDE
+<U00c4> \x8e |0 # LATIN CAPITAL LETTER A WITH DIAERESIS
+<U00c5> \x8f |0 # LATIN CAPITAL LETTER A WITH RING ABOVE
+<U00c6> \x92 |0 # LATIN CAPITAL LIGATURE AE
+<U00c7> \x80 |0 # LATIN CAPITAL LETTER C WITH CEDILLA
+<U00c8> \xd4 |0 # LATIN CAPITAL LETTER E WITH GRAVE
+<U00c9> \x90 |0 # LATIN CAPITAL LETTER E WITH ACUTE
+<U00ca> \xd2 |0 # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+<U00cb> \xd3 |0 # LATIN CAPITAL LETTER E WITH DIAERESIS
+<U00cc> \xde |0 # LATIN CAPITAL LETTER I WITH GRAVE
+<U00cd> \xd6 |0 # LATIN CAPITAL LETTER I WITH ACUTE
+<U00ce> \xd7 |0 # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+<U00cf> \xd8 |0 # LATIN CAPITAL LETTER I WITH DIAERESIS
+<U00d0> \xd1 |0 # LATIN CAPITAL LETTER ETH
+<U00d1> \xa5 |0 # LATIN CAPITAL LETTER N WITH TILDE
+<U00d2> \xe3 |0 # LATIN CAPITAL LETTER O WITH GRAVE
+<U00d3> \xe0 |0 # LATIN CAPITAL LETTER O WITH ACUTE
+<U00d4> \xe2 |0 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+<U00d5> \xe5 |0 # LATIN CAPITAL LETTER O WITH TILDE
+<U00d6> \x99 |0 # LATIN CAPITAL LETTER O WITH DIAERESIS
+<U00d7> \x9e |0 # MULTIPLICATION SIGN
+<U00d8> \x9d |0 # LATIN CAPITAL LETTER O WITH STROKE
+<U00d9> \xeb |0 # LATIN CAPITAL LETTER U WITH GRAVE
+<U00da> \xe9 |0 # LATIN CAPITAL LETTER U WITH ACUTE
+<U00db> \xea |0 # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+<U00dc> \x9a |0 # LATIN CAPITAL LETTER U WITH DIAERESIS
+<U00dd> \xed |0 # LATIN CAPITAL LETTER Y WITH ACUTE
+<U00de> \xe8 |0 # LATIN CAPITAL LETTER THORN
+<U00df> \xe1 |0 # LATIN SMALL LETTER SHARP S
+<U00e0> \x85 |0 # LATIN SMALL LETTER A WITH GRAVE
+<U00e1> \xa0 |0 # LATIN SMALL LETTER A WITH ACUTE
+<U00e2> \x83 |0 # LATIN SMALL LETTER A WITH CIRCUMFLEX
+<U00e3> \xc6 |0 # LATIN SMALL LETTER A WITH TILDE
+<U00e4> \x84 |0 # LATIN SMALL LETTER A WITH DIAERESIS
+<U00e5> \x86 |0 # LATIN SMALL LETTER A WITH RING ABOVE
+<U00e6> \x91 |0 # LATIN SMALL LIGATURE AE
+<U00e7> \x87 |0 # LATIN SMALL LETTER C WITH CEDILLA
+<U00e8> \x8a |0 # LATIN SMALL LETTER E WITH GRAVE
+<U00e9> \x82 |0 # LATIN SMALL LETTER E WITH ACUTE
+<U00ea> \x88 |0 # LATIN SMALL LETTER E WITH CIRCUMFLEX
+<U00eb> \x89 |0 # LATIN SMALL LETTER E WITH DIAERESIS
+<U00ec> \x8d |0 # LATIN SMALL LETTER I WITH GRAVE
+<U00ed> \xa1 |0 # LATIN SMALL LETTER I WITH ACUTE
+<U00ee> \x8c |0 # LATIN SMALL LETTER I WITH CIRCUMFLEX
+<U00ef> \x8b |0 # LATIN SMALL LETTER I WITH DIAERESIS
+<U00f0> \xd0 |0 # LATIN SMALL LETTER ETH
+<U00f1> \xa4 |0 # LATIN SMALL LETTER N WITH TILDE
+<U00f2> \x95 |0 # LATIN SMALL LETTER O WITH GRAVE
+<U00f3> \xa2 |0 # LATIN SMALL LETTER O WITH ACUTE
+<U00f4> \x93 |0 # LATIN SMALL LETTER O WITH CIRCUMFLEX
+<U00f5> \xe4 |0 # LATIN SMALL LETTER O WITH TILDE
+<U00f6> \x94 |0 # LATIN SMALL LETTER O WITH DIAERESIS
+<U00f7> \xf6 |0 # DIVISION SIGN
+<U00f8> \x9b |0 # LATIN SMALL LETTER O WITH STROKE
+<U00f9> \x97 |0 # LATIN SMALL LETTER U WITH GRAVE
+<U00fa> \xa3 |0 # LATIN SMALL LETTER U WITH ACUTE
+<U00fb> \x96 |0 # LATIN SMALL LETTER U WITH CIRCUMFLEX
+<U00fc> \x81 |0 # LATIN SMALL LETTER U WITH DIAERESIS
+<U00fd> \xec |0 # LATIN SMALL LETTER Y WITH ACUTE
+<U00fe> \xe7 |0 # LATIN SMALL LETTER THORN
+<U00ff> \x98 |0 # LATIN SMALL LETTER Y WITH DIAERESIS
+<U20ac> \xd5 |0 # EURO SIGN
+<U0192> \x9f |0 # LATIN SMALL LETTER F WITH HOOK
+<U2017> \xf2 |0 # DOUBLE LOW LINE
+<U2500> \xc4 |0 # BOX DRAWINGS LIGHT HORIZONTAL
+<U2502> \xb3 |0 # BOX DRAWINGS LIGHT VERTICAL
+<U250c> \xda |0 # BOX DRAWINGS LIGHT DOWN AND RIGHT
+<U2510> \xbf |0 # BOX DRAWINGS LIGHT DOWN AND LEFT
+<U2514> \xc0 |0 # BOX DRAWINGS LIGHT UP AND RIGHT
+<U2518> \xd9 |0 # BOX DRAWINGS LIGHT UP AND LEFT
+<U251c> \xc3 |0 # BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+<U2524> \xb4 |0 # BOX DRAWINGS LIGHT VERTICAL AND LEFT
+<U252c> \xc2 |0 # BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+<U2534> \xc1 |0 # BOX DRAWINGS LIGHT UP AND HORIZONTAL
+<U253c> \xc5 |0 # BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+<U2550> \xcd |0 # BOX DRAWINGS DOUBLE HORIZONTAL
+<U2551> \xba |0 # BOX DRAWINGS DOUBLE VERTICAL
+<U2554> \xc9 |0 # BOX DRAWINGS DOUBLE DOWN AND RIGHT
+<U2557> \xbb |0 # BOX DRAWINGS DOUBLE DOWN AND LEFT
+<U255a> \xc8 |0 # BOX DRAWINGS DOUBLE UP AND RIGHT
+<U255d> \xbc |0 # BOX DRAWINGS DOUBLE UP AND LEFT
+<U2560> \xcc |0 # BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+<U2563> \xb9 |0 # BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+<U2566> \xcb |0 # BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+<U2569> \xca |0 # BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+<U256c> \xce |0 # BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+<U2580> \xdf |0 # UPPER HALF BLOCK
+<U2584> \xdc |0 # LOWER HALF BLOCK
+<U2588> \xdb |0 # FULL BLOCK
+<U2591> \xb0 |0 # LIGHT SHADE
+<U2592> \xb1 |0 # MEDIUM SHADE
+<U2593> \xb2 |0 # DARK SHADE
+<U25a0> \xfe |0 # BLACK SQUARE
+END CHARMAP
diff --git a/sv.h b/sv.h
index 8e2417c..e61b260 100644 (file)
--- a/sv.h
+++ b/sv.h
@@ -1448,7 +1448,7 @@ the scalar's value cannot change unless written to.
     STMT_START {                                                       \
                    if (SvTYPE(sv) < SVt_PV && SvTYPE(sv) != SVt_IV)    \
                        sv_upgrade(sv, SVt_IV);                         \
-                   else if (SvPVX_const(sv)) {                         \
+                   else if (SvTYPE(sv) >= SVt_PV) {                    \
                        SvPV_free(sv);                                  \
                        SvLEN_set(sv, 0);                               \
                         SvCUR_set(sv, 0);                              \