< prev index next >
test/hotspot/jtreg/runtime/valhalla/valuetypes/ValueTypeGenerator.java
Print this page
*** 28,41 ****
--- 28,47 ----
static class FieldDescriptor {
final public String name;
final public Type type;
+ final public String typeName;
public FieldDescriptor(String name, Type type) {
this.name = name;
this.type = type;
+ String s = type.getTypeName();
+ if (s.startsWith("class")) {
+ s = s.substring(s.lastIndexOf(".")+1);
+ }
+ this.typeName = s;
}
}
static Type[] typeArray;
static String[] defaultArray;
*** 50,60 ****
typeArray[4] = char.class;
typeArray[5] = float.class;
typeArray[6] = double.class;
typeArray[7] = boolean.class;
typeArray[8] = Object.class;
-
}
static String defaultValue(Type t) {
switch(t.getTypeName()) {
case "byte": return "(byte)123";
--- 56,65 ----
*** 63,83 ****
case "long": return "922337203685477L";
case "char": return "(char)65456";
case "float": return "2.71828f";
case "double": return "3.14159d";
case "boolean": return "true";
! case "java.lang.Object": return "null";
default:
throw new RuntimeException();
}
}
static private String generateValueTypeInternal(Random random, String name, int nfields, int typeLimit) {
// generate the fields
FieldDescriptor[] fieldDescArray = new FieldDescriptor[nfields];
for (int i = 0; i < nfields; i++) {
int idx = random.nextInt(typeLimit);
! String fieldName = typeArray[idx].getTypeName()+"Field"+i;
fieldDescArray[i] = new FieldDescriptor(fieldName, typeArray[idx]);
}
String source = generateSource(name, fieldDescArray);
return source;
--- 68,92 ----
case "long": return "922337203685477L";
case "char": return "(char)65456";
case "float": return "2.71828f";
case "double": return "3.14159d";
case "boolean": return "true";
! case "java.lang.Object": return "new String(\"foo\")";
default:
throw new RuntimeException();
}
}
static private String generateValueTypeInternal(Random random, String name, int nfields, int typeLimit) {
// generate the fields
FieldDescriptor[] fieldDescArray = new FieldDescriptor[nfields];
for (int i = 0; i < nfields; i++) {
int idx = random.nextInt(typeLimit);
! String s = typeArray[idx].getTypeName();
! if (s.contains(".")) {
! s = s.substring(s.lastIndexOf(".")+1);
! }
! String fieldName = s+"Field"+i;
fieldDescArray[i] = new FieldDescriptor(fieldName, typeArray[idx]);
}
String source = generateSource(name, fieldDescArray);
return source;
*** 92,102 ****
}
static String fieldsAsArgs(FieldDescriptor[] fields) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < fields.length; i++) {
! sb.append(fields[i].type).append(" ").append(fields[i].name);
if (i != fields.length - 1) {
sb.append(", ");
}
}
return sb.toString();
--- 101,111 ----
}
static String fieldsAsArgs(FieldDescriptor[] fields) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < fields.length; i++) {
! sb.append(fields[i].typeName).append(" ").append(fields[i].name);
if (i != fields.length - 1) {
sb.append(", ");
}
}
return sb.toString();
*** 111,121 ****
// class declaration
sb.append("public __ByValue final class ").append(name).append(" {\n");
// field declarations
for (FieldDescriptor f : fields) {
! sb.append("\tfinal public ").append(f.type).append(" ");
sb.append(f.name).append(";\n");
}
sb.append("\n");
// private constructor
--- 120,130 ----
// class declaration
sb.append("public __ByValue final class ").append(name).append(" {\n");
// field declarations
for (FieldDescriptor f : fields) {
! sb.append("\tfinal public ").append(f.typeName).append(" ");
sb.append(f.name).append(";\n");
}
sb.append("\n");
// private constructor
*** 149,168 ****
sb.append("\n");
// verify method
sb.append("\tstatic public boolean verify(").append(name).append(" value) {\n");
for (FieldDescriptor f : fields) {
sb.append("\t\tif (value.").append(f.name).append(" != ").append(defaultValue(f.type)).append(") return false;\n");
}
sb.append("\t\treturn true;\n");
sb.append("\t}\n");
// printLayout method
sb.append("\tstatic public void printLayout(PrintStream out) {\n");
sb.append("\t\tout.println(\"").append(name).append(" fields: ");
for (int i = 0; i < fields.length; i++) {
! sb.append(fields[i].type);
if (i != fields.length - 1) {
sb.append(", ");
}
}
sb.append("\");\n");
--- 158,181 ----
sb.append("\n");
// verify method
sb.append("\tstatic public boolean verify(").append(name).append(" value) {\n");
for (FieldDescriptor f : fields) {
+ if (f.type.getTypeName().compareTo("java.lang.Object") == 0) {
+ sb.append("\t\tif (((String)value.").append(f.name).append(").compareTo(").append(defaultValue(f.type)).append(") != 0) return false;\n");
+ } else {
sb.append("\t\tif (value.").append(f.name).append(" != ").append(defaultValue(f.type)).append(") return false;\n");
}
+ }
sb.append("\t\treturn true;\n");
sb.append("\t}\n");
// printLayout method
sb.append("\tstatic public void printLayout(PrintStream out) {\n");
sb.append("\t\tout.println(\"").append(name).append(" fields: ");
for (int i = 0; i < fields.length; i++) {
! sb.append(fields[i].typeName);
if (i != fields.length - 1) {
sb.append(", ");
}
}
sb.append("\");\n");
< prev index next >