Fixing the ClassLoader.defineClass() method issue that could not find the necessary...
[jpf-core.git] / src / peers / gov / nasa / jpf / vm / JPF_java_lang_Character.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
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
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
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.
17  */
18 package gov.nasa.jpf.vm;
19
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;
24
25 /**
26  * MJI NativePeer class for java.lang.Character library abstraction
27  * Whoever is using this seriously is definitely screwed, performance-wise
28  */
29 public class JPF_java_lang_Character extends NativePeer {
30   // <2do> at this point we deliberately do not override clinit
31
32   @MJI
33   public boolean isDefined__C__Z (MJIEnv env, int clsObjRef, char c) {
34     return Character.isDefined(c);
35   }
36
37   @MJI
38   public boolean isDigit__C__Z (MJIEnv env, int clsObjRef, char c) {
39     return Character.isDigit(c);
40   }
41
42   @MJI
43   public boolean isISOControl__C__Z (MJIEnv env, int clsObjRef, char c) {
44     return Character.isISOControl(c);
45   }
46
47   @MJI
48   public boolean isIdentifierIgnorable__C__Z (MJIEnv env, int clsObjRef, 
49                                                   char c) {
50     return Character.isIdentifierIgnorable(c);
51   }
52
53   @MJI
54   public boolean isJavaIdentifierPart__C__Z (MJIEnv env, int clsObjRef, 
55                                                  char c) {
56     return Character.isJavaIdentifierPart(c);
57   }
58
59   @MJI
60   public boolean isJavaIdentifierStart__C__Z (MJIEnv env, int clsObjRef, 
61                                                   char c) {
62     return Character.isJavaIdentifierStart(c);
63   }
64
65   @MJI
66   public boolean isJavaLetterOrDigit__C__Z (MJIEnv env, int clsObjRef, 
67                                                 char c) {
68     return Character.isJavaIdentifierPart(c);
69   }
70
71   @MJI
72   public boolean isJavaLetter__C__Z (MJIEnv env, int clsObjRef, char c) {
73     return Character.isJavaIdentifierStart(c);
74   }
75
76   @MJI
77   public boolean isLetterOrDigit__C__Z (MJIEnv env, int clsObjRef, char c) {
78     return Character.isLetterOrDigit(c);
79   }
80
81   @MJI
82   public boolean isLetter__C__Z (MJIEnv env, int clsObjRef, char c) {
83     return Character.isLetter(c);
84   }
85
86   @MJI
87   public boolean isLowerCase__C__Z (MJIEnv env, int clsObjRef, char c) {
88     return Character.isLowerCase(c);
89   }
90
91   @MJI
92   public int getNumericValue__C__I (MJIEnv env, int clsObjRef, char c) {
93     return Character.getNumericValue(c);
94   }
95
96   @MJI
97   public boolean isSpaceChar__C__Z (MJIEnv env, int clsObjRef, char c) {
98     return Character.isSpaceChar(c);
99   }
100
101   @MJI
102   public boolean isSpace__C__Z (MJIEnv env, int clsObjRef, char c) {
103     return Character.isWhitespace(c);
104   }
105
106   @MJI
107   public boolean isTitleCase__C__Z (MJIEnv env, int clsObjRef, char c) {
108     return Character.isTitleCase(c);
109   }
110
111   @MJI
112   public int getType__C__I (MJIEnv env, int clsObjRef, char c) {
113     return Character.getType(c);
114   }
115
116   @MJI
117   public boolean isUnicodeIdentifierPart__C__Z (MJIEnv env, int clsObjRef, 
118                                                     char c) {
119     return Character.isUnicodeIdentifierPart(c);
120   }
121
122   @MJI
123   public boolean isUnicodeIdentifierStart__C__Z (MJIEnv env, int clsObjRef, 
124                                                      char c) {
125     return Character.isUnicodeIdentifierStart(c);
126   }
127
128   @MJI
129   public boolean isUpperCase__C__Z (MJIEnv env, int clsObjRef, char c) {
130     return Character.isUpperCase(c);
131   }
132
133   @MJI
134   public boolean isWhitespace__C__Z (MJIEnv env, int clsObjRef, char c) {
135     return Character.isWhitespace(c);
136   }
137
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
143   // be fast.
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.
146   @MJI
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');
180
181     ClassInfo ci = ClassLoaderInfo.getSystemResolvedClassInfo("char");
182     env.setStaticReferenceField("java.lang.Character", "TYPE", 
183                              ci.getClassObjectRef());
184   }
185
186   @MJI
187   public int digit__CI__I (MJIEnv env, int clsObjRef, char c, int radix) {
188     return Character.digit(c, radix);
189   }
190
191   @MJI
192   public char forDigit__II__C (MJIEnv env, int clsObjRef, int digit, 
193                                    int radix) {
194     return Character.forDigit(digit, radix);
195   }
196
197   @MJI
198   public char toLowerCase__C__C (MJIEnv env, int clsObjRef, char c) {
199     return Character.toLowerCase(c);
200   }
201
202   @MJI
203   public char toTitleCase__C__C (MJIEnv env, int clsObjRef, char c) {
204     return Character.toTitleCase(c);
205   }
206
207   @MJI
208   public char toUpperCase__C__C (MJIEnv env, int clsObjRef, char c) {
209     return Character.toUpperCase(c);
210   }
211
212   @MJI
213   public int valueOf__C__Ljava_lang_Character_2 (MJIEnv env, int clsRef, char val) {
214     return env.valueOfCharacter(val);
215   }
216 }