2 * Copyright (C) 2014, United States Government, as represented by the
3 * Administrator of the National Aeronautics and Space Administration.
6 * The Java Pathfinder core (jpf-core) platform is licensed under the
7 * Apache License, Version 2.0 (the "License"); you may not use this file except
8 * in compliance with the License. You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0.
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 package gov.nasa.jpf.vm;
20 import gov.nasa.jpf.annotation.MJI;
21 import gov.nasa.jpf.vm.ClassInfo;
22 import gov.nasa.jpf.vm.MJIEnv;
23 import gov.nasa.jpf.vm.NativePeer;
26 * MJI NativePeer class for java.lang.Character library abstraction
27 * Whoever is using this seriously is definitely screwed, performance-wise
29 public class JPF_java_lang_Character extends NativePeer {
30 // <2do> at this point we deliberately do not override clinit
33 public boolean isDefined__C__Z (MJIEnv env, int clsObjRef, char c) {
34 return Character.isDefined(c);
38 public boolean isDigit__C__Z (MJIEnv env, int clsObjRef, char c) {
39 return Character.isDigit(c);
43 public boolean isISOControl__C__Z (MJIEnv env, int clsObjRef, char c) {
44 return Character.isISOControl(c);
48 public boolean isIdentifierIgnorable__C__Z (MJIEnv env, int clsObjRef,
50 return Character.isIdentifierIgnorable(c);
54 public boolean isJavaIdentifierPart__C__Z (MJIEnv env, int clsObjRef,
56 return Character.isJavaIdentifierPart(c);
60 public boolean isJavaIdentifierStart__C__Z (MJIEnv env, int clsObjRef,
62 return Character.isJavaIdentifierStart(c);
66 public boolean isJavaLetterOrDigit__C__Z (MJIEnv env, int clsObjRef,
68 return Character.isJavaIdentifierPart(c);
72 public boolean isJavaLetter__C__Z (MJIEnv env, int clsObjRef, char c) {
73 return Character.isJavaIdentifierStart(c);
77 public boolean isLetterOrDigit__C__Z (MJIEnv env, int clsObjRef, char c) {
78 return Character.isLetterOrDigit(c);
82 public boolean isLetter__C__Z (MJIEnv env, int clsObjRef, char c) {
83 return Character.isLetter(c);
87 public boolean isLowerCase__C__Z (MJIEnv env, int clsObjRef, char c) {
88 return Character.isLowerCase(c);
92 public int getNumericValue__C__I (MJIEnv env, int clsObjRef, char c) {
93 return Character.getNumericValue(c);
97 public boolean isSpaceChar__C__Z (MJIEnv env, int clsObjRef, char c) {
98 return Character.isSpaceChar(c);
102 public boolean isSpace__C__Z (MJIEnv env, int clsObjRef, char c) {
103 return Character.isWhitespace(c);
107 public boolean isTitleCase__C__Z (MJIEnv env, int clsObjRef, char c) {
108 return Character.isTitleCase(c);
112 public int getType__C__I (MJIEnv env, int clsObjRef, char c) {
113 return Character.getType(c);
117 public boolean isUnicodeIdentifierPart__C__Z (MJIEnv env, int clsObjRef,
119 return Character.isUnicodeIdentifierPart(c);
123 public boolean isUnicodeIdentifierStart__C__Z (MJIEnv env, int clsObjRef,
125 return Character.isUnicodeIdentifierStart(c);
129 public boolean isUpperCase__C__Z (MJIEnv env, int clsObjRef, char c) {
130 return Character.isUpperCase(c);
134 public boolean isWhitespace__C__Z (MJIEnv env, int clsObjRef, char c) {
135 return Character.isWhitespace(c);
138 // pcm - we keep this in here to avoid the potentially expensive
139 // real clinit. This has changed a lot in Java 1.4.2 (deferred init, i.e.
140 // we could actually use it now), but in <= 1.4.1 it executes some
141 // 200,000 insns, and some people who didn't grew up with Java might
142 // deduce that JPF is hanging. It's not, it just shows why a real VM has to
144 // It is actually Ok to bypass the real clinit if we turn all the
145 // important methods into native ones, i.e. delegate to the real thing.
147 public void $clinit____V (MJIEnv env, int clsObjRef) {
148 env.setStaticByteField("java.lang.Character", "UNASSIGNED", (byte) 0);
149 env.setStaticByteField("java.lang.Character", "UPPERCASE_LETTER", (byte) 1);
150 env.setStaticByteField("java.lang.Character", "LOWERCASE_LETTER", (byte) 2);
151 env.setStaticByteField("java.lang.Character", "TITLECASE_LETTER", (byte) 3);
152 env.setStaticByteField("java.lang.Character", "MODIFIER_LETTER", (byte) 4);
153 env.setStaticByteField("java.lang.Character", "OTHER_LETTER", (byte) 5);
154 env.setStaticByteField("java.lang.Character", "NON_SPACING_MARK", (byte) 6);
155 env.setStaticByteField("java.lang.Character", "ENCLOSING_MARK", (byte) 7);
156 env.setStaticByteField("java.lang.Character", "COMBINING_SPACING_MARK", (byte) 8);
157 env.setStaticByteField("java.lang.Character", "DECIMAL_DIGIT_NUMBER", (byte) 9);
158 env.setStaticByteField("java.lang.Character", "LETTER_NUMBER", (byte) 10);
159 env.setStaticByteField("java.lang.Character", "OTHER_NUMBER", (byte) 11);
160 env.setStaticByteField("java.lang.Character", "SPACE_SEPARATOR", (byte) 12);
161 env.setStaticByteField("java.lang.Character", "LINE_SEPARATOR", (byte) 13);
162 env.setStaticByteField("java.lang.Character", "PARAGRAPH_SEPARATOR", (byte) 14);
163 env.setStaticByteField("java.lang.Character", "CONTROL", (byte) 15);
164 env.setStaticByteField("java.lang.Character", "FORMAT", (byte) 16);
165 env.setStaticByteField("java.lang.Character", "PRIVATE_USE", (byte) 18);
166 env.setStaticByteField("java.lang.Character", "SURROGATE", (byte) 19);
167 env.setStaticByteField("java.lang.Character", "DASH_PUNCTUATION", (byte) 20);
168 env.setStaticByteField("java.lang.Character", "START_PUNCTUATION", (byte) 21);
169 env.setStaticByteField("java.lang.Character", "END_PUNCTUATION", (byte) 22);
170 env.setStaticByteField("java.lang.Character", "CONNECTOR_PUNCTUATION", (byte) 23);
171 env.setStaticByteField("java.lang.Character", "OTHER_PUNCTUATION", (byte) 24);
172 env.setStaticByteField("java.lang.Character", "MATH_SYMBOL", (byte) 25);
173 env.setStaticByteField("java.lang.Character", "CURRENCY_SYMBOL", (byte) 26);
174 env.setStaticByteField("java.lang.Character", "MODIFIER_SYMBOL", (byte) 27);
175 env.setStaticByteField("java.lang.Character", "OTHER_SYMBOL", (byte) 28);
176 env.setStaticIntField("java.lang.Character", "MIN_RADIX", 2);
177 env.setStaticIntField("java.lang.Character", "MAX_RADIX", 36);
178 env.setStaticCharField("java.lang.Character", "MIN_VALUE", '\u0000');
179 env.setStaticCharField("java.lang.Character", "MAX_VALUE", '\uffff');
181 ClassInfo ci = ClassLoaderInfo.getSystemResolvedClassInfo("char");
182 env.setStaticReferenceField("java.lang.Character", "TYPE",
183 ci.getClassObjectRef());
187 public int digit__CI__I (MJIEnv env, int clsObjRef, char c, int radix) {
188 return Character.digit(c, radix);
192 public char forDigit__II__C (MJIEnv env, int clsObjRef, int digit,
194 return Character.forDigit(digit, radix);
198 public char toLowerCase__C__C (MJIEnv env, int clsObjRef, char c) {
199 return Character.toLowerCase(c);
203 public char toTitleCase__C__C (MJIEnv env, int clsObjRef, char c) {
204 return Character.toTitleCase(c);
208 public char toUpperCase__C__C (MJIEnv env, int clsObjRef, char c) {
209 return Character.toUpperCase(c);
213 public int valueOf__C__Ljava_lang_Character_2 (MJIEnv env, int clsRef, char val) {
214 return env.valueOfCharacter(val);