src/share/vm/utilities/utf8.hpp

Mon, 12 Nov 2012 14:03:53 -0800

author
minqi
date
Mon, 12 Nov 2012 14:03:53 -0800
changeset 4267
bd7a7ce2e264
parent 2708
1d1603768966
child 4851
8c03fc47511d
permissions
-rw-r--r--

6830717: replay of compilations would help with debugging
Summary: When java process crashed in compiler thread, repeat the compilation process will help finding root cause. This is done with using SA dump application class data and replay data from core dump, then use debug version of jvm to recompile the problematic java method.
Reviewed-by: kvn, twisti, sspitsyn
Contributed-by: yumin.qi@oracle.com

duke@435 1 /*
minqi@4267 2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved.
duke@435 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@435 4 *
duke@435 5 * This code is free software; you can redistribute it and/or modify it
duke@435 6 * under the terms of the GNU General Public License version 2 only, as
duke@435 7 * published by the Free Software Foundation.
duke@435 8 *
duke@435 9 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@435 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@435 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@435 12 * version 2 for more details (a copy is included in the LICENSE file that
duke@435 13 * accompanied this code).
duke@435 14 *
duke@435 15 * You should have received a copy of the GNU General Public License version
duke@435 16 * 2 along with this work; if not, write to the Free Software Foundation,
duke@435 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@435 18 *
trims@1907 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
trims@1907 20 * or visit www.oracle.com if you need additional information or have any
trims@1907 21 * questions.
duke@435 22 *
duke@435 23 */
duke@435 24
stefank@2314 25 #ifndef SHARE_VM_UTILITIES_UTF8_HPP
stefank@2314 26 #define SHARE_VM_UTILITIES_UTF8_HPP
stefank@2314 27
stefank@2314 28 #include "memory/allocation.hpp"
stefank@2314 29 #include "utilities/top.hpp"
stefank@2314 30
duke@435 31 // Low-level interface for UTF8 strings
duke@435 32
duke@435 33 class UTF8 : AllStatic {
duke@435 34 public:
minqi@4267 35 // returns the unicode length of a 0-terminated utf8 string
minqi@4267 36 static int unicode_length(const char* utf8_str);
duke@435 37
minqi@4267 38 // returns the unicode length of a non-0-terminated utf8 string
minqi@4267 39 static int unicode_length(const char* utf8_str, int len);
duke@435 40
minqi@4267 41 // converts a utf8 string to a unicode string
duke@435 42 static void convert_to_unicode(const char* utf8_str, jchar* unicode_buffer, int unicode_length);
duke@435 43
minqi@4267 44 // returns the quoted ascii length of a utf8 string
minqi@4267 45 static int quoted_ascii_length(const char* utf8_str, int utf8_length);
minqi@4267 46
minqi@4267 47 // converts a utf8 string to quoted ascii
minqi@4267 48 static void as_quoted_ascii(const char* utf8_str, char* buf, int buflen);
minqi@4267 49
minqi@4267 50 // converts a quoted ascii string to utf8 string. returns the original
minqi@4267 51 // string unchanged if nothing needs to be done.
minqi@4267 52 static const char* from_quoted_ascii(const char* quoted_ascii_string);
minqi@4267 53
duke@435 54 // decodes the current utf8 character, stores the result in value,
minqi@4267 55 // and returns the end of the current utf8 chararacter.
duke@435 56 static char* next(const char* str, jchar* value);
duke@435 57
duke@435 58 // decodes the current utf8 character, gets the supplementary character instead of
duke@435 59 // the surrogate pair when seeing a supplementary character in string,
minqi@4267 60 // stores the result in value, and returns the end of the current utf8 chararacter.
duke@435 61 static char* next_character(const char* str, jint* value);
duke@435 62
duke@435 63 // Utility methods
coleenp@2497 64 static const jbyte* strrchr(const jbyte* base, int length, jbyte c);
coleenp@2497 65 static bool equal(const jbyte* base1, int length1, const jbyte* base2,int length2);
duke@435 66 static bool is_supplementary_character(const unsigned char* str);
duke@435 67 static jint get_supplementary_character(const unsigned char* str);
duke@435 68 };
duke@435 69
duke@435 70
duke@435 71 // Low-level interface for UNICODE strings
duke@435 72
duke@435 73 // A unicode string represents a string in the UTF-16 format in which supplementary
duke@435 74 // characters are represented by surrogate pairs. Index values refer to char code
duke@435 75 // units, so a supplementary character uses two positions in a unicode string.
duke@435 76
duke@435 77 class UNICODE : AllStatic {
duke@435 78 public:
duke@435 79 // returns the utf8 size of a unicode character
duke@435 80 static int utf8_size(jchar c);
duke@435 81
duke@435 82 // returns the utf8 length of a unicode string
duke@435 83 static int utf8_length(jchar* base, int length);
duke@435 84
duke@435 85 // converts a unicode string to utf8 string
duke@435 86 static void convert_to_utf8(const jchar* base, int length, char* utf8_buffer);
duke@435 87
duke@435 88 // converts a unicode string to a utf8 string; result is allocated
duke@435 89 // in resource area unless a buffer is provided.
duke@435 90 static char* as_utf8(jchar* base, int length);
duke@435 91 static char* as_utf8(jchar* base, int length, char* buf, int buflen);
minqi@4267 92
minqi@4267 93 // returns the quoted ascii length of a unicode string
minqi@4267 94 static int quoted_ascii_length(jchar* base, int length);
minqi@4267 95
minqi@4267 96 // converts a utf8 string to quoted ascii
minqi@4267 97 static void as_quoted_ascii(const jchar* base, int length, char* buf, int buflen);
duke@435 98 };
stefank@2314 99
stefank@2314 100 #endif // SHARE_VM_UTILITIES_UTF8_HPP

mercurial