00001 package gov.nasa.arc.ase.jpf.jvm.reflection;
00002
00003 import gov.nasa.arc.ase.jpf.jvm.*;
00004 import gov.nasa.arc.ase.jpf.jvm.bytecode.Instruction;
00005
00006 public class JavaLangIntegerReflection extends Reflection {
00007 public Instruction executeStaticMethod(MethodInfo mi) {
00008 String name = mi.getFullName();
00009
00010 if(name.equals("<clinit>()V")) {
00011 setIntStaticField("MIN_VALUE", Integer.MIN_VALUE);
00012 setIntStaticField("MAX_VALUE", Integer.MAX_VALUE);
00013 setObjectStaticField("TYPE", null);
00014
00015 return exit();
00016 }
00017
00018 if(name.equals("toString(II)Ljava/lang/String;")) {
00019 return exitReference(
00020 da.newString(
00021 Integer.toString(
00022 getIntArgument(0),
00023 getIntArgument(1)),
00024 th));
00025 }
00026
00027 if(name.equals("toHexString(I)Ljava/lang/String;")) {
00028 return exitReference(
00029 da.newString(
00030 Integer.toHexString(
00031 getIntArgument(0)),
00032 th));
00033 }
00034
00035 if(name.equals("toOctalString(I)Ljava/lang/String;")) {
00036 return exitReference(
00037 da.newString(
00038 Integer.toOctalString(
00039 getIntArgument(0)),
00040 th));
00041 }
00042
00043 if(name.equals("toBinaryString(I)Ljava/lang/String;")) {
00044 return exitReference(
00045 da.newString(
00046 Integer.toBinaryString(
00047 getIntArgument(0)),
00048 th));
00049 }
00050
00051 if(name.equals("toString(I)Ljava/lang/String;")) {
00052 return exitReference(
00053 da.newString(
00054 Integer.toString(
00055 getIntArgument(0)),
00056 th));
00057 }
00058
00059 if(name.equals("parseInt(Ljava/lang/String;I)I")) {
00060 try {
00061 return exit(
00062 Integer.parseInt(
00063 getStringArgument(0),
00064 getIntArgument(1)));
00065 } catch(NumberFormatException e) {
00066 return th.createAndThrowException("java.lang.NumberFormatException");
00067 }
00068 }
00069
00070 if(name.equals("parseInt(Ljava/lang/String;)I")) {
00071 try {
00072 return exit(
00073 Integer.parseInt(
00074 getStringArgument(0)));
00075 } catch(NumberFormatException e) {
00076 return th.createAndThrowException("java.lang.NumberFormatException");
00077 }
00078 }
00079
00080 return super.executeStaticMethod(mi);
00081 }
00082 }