in codegen/src/main/java/com/alibaba/fastjson2/internal/processor/JSONCompiledAnnotationProcessor.java [2413:2858]
private List<JCTree.JCStatement> genRead243(
java.util.List<AttributeInfo> attributeInfos,
JCTree.JCIdent jsonReaderIdent,
StructInfo structInfo,
JCTree.JCLabeledStatement loopLabel,
JCTree.JCIdent objectIdent,
JCTree.JCExpression beanType,
boolean isJsonb) {
IdentityHashMap<AttributeInfo, Integer> readerIndexMap = new IdentityHashMap<>();
Map<Integer, java.util.List<AttributeInfo>> name0Map = new TreeMap<>();
for (int i = 0; i < attributeInfos.size(); ++i) {
AttributeInfo field = attributeInfos.get(i);
readerIndexMap.put(field, i);
byte[] fieldName = field.name.getBytes(StandardCharsets.UTF_8);
byte[] name0Bytes = new byte[4];
name0Bytes[0] = '"';
if (fieldName.length == 2) {
System.arraycopy(fieldName, 0, name0Bytes, 1, 2);
name0Bytes[3] = '"';
} else {
System.arraycopy(fieldName, 0, name0Bytes, 1, 3);
}
int name0 = UNSAFE.getInt(name0Bytes, ARRAY_BYTE_BASE_OFFSET);
java.util.List<AttributeInfo> fieldReaders = name0Map.get(name0);
if (fieldReaders == null) {
fieldReaders = new ArrayList<>();
name0Map.put(name0, fieldReaders);
}
fieldReaders.add(field);
}
int[] switchKeys = new int[name0Map.size()];
Label[] labels = new Label[name0Map.size()];
{
Iterator<Integer> it = name0Map.keySet().iterator();
for (int i = 0; i < labels.length; i++) {
labels[i] = new Label();
switchKeys[i] = it.next();
}
}
List<JCTree.JCStatement> stmts = List.nil();
ListBuffer<JCTree.JCCase> cases = new ListBuffer<>();
JCTree.JCLabeledStatement switchLabel = label("_switch2");
for (int i = 0; i < labels.length; i++) {
int name0 = switchKeys[i];
java.util.List<AttributeInfo> fieldReaders = name0Map.get(name0);
ListBuffer<JCTree.JCStatement> caseStmts = new ListBuffer<>();
for (int j = 0; j < fieldReaders.size(); j++) {
AttributeInfo fieldReader = fieldReaders.get(j);
int fieldReaderIndex = readerIndexMap.get(fieldReader);
byte[] fieldName = fieldReader.name.getBytes(StandardCharsets.UTF_8);
int fieldNameLength = fieldName.length;
JCTree.JCMethodInvocation nextIfMethod;
switch (fieldNameLength) {
case 2:
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match2");
break;
case 3:
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match3");
break;
case 4:
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match4", literal(fieldName[3]));
break;
case 5: {
byte[] bytes4 = new byte[4];
bytes4[0] = fieldName[3];
bytes4[1] = fieldName[4];
bytes4[2] = '"';
bytes4[3] = ':';
int name1 = UNSAFE.getInt(bytes4, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match5", literal(name1));
break;
}
case 6: {
byte[] bytes4 = new byte[4];
bytes4[0] = fieldName[3];
bytes4[1] = fieldName[4];
bytes4[2] = fieldName[5];
bytes4[3] = '"';
int name1 = UNSAFE.getInt(bytes4, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match6", literal(name1));
break;
}
case 7: {
int name1 = UNSAFE.getInt(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match7", literal(name1));
break;
}
case 8: {
int name1 = UNSAFE.getInt(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match8", literal(name1), literal(fieldName[7]));
break;
}
case 9: {
byte[] bytes8 = new byte[8];
System.arraycopy(fieldName, 3, bytes8, 0, 6);
bytes8[6] = '"';
bytes8[7] = ':';
long name1 = UNSAFE.getLong(bytes8, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match9", literal(name1));
break;
}
case 10: {
byte[] bytes8 = new byte[8];
System.arraycopy(fieldName, 3, bytes8, 0, 7);
bytes8[7] = '"';
long name1 = UNSAFE.getLong(bytes8, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match10", literal(name1));
break;
}
case 11: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match11", literal(name1));
break;
}
case 12: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match12", literal(name1), literal(fieldName[11]));
break;
}
case 13: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
byte[] bytes4 = new byte[4];
bytes4[0] = fieldName[11];
bytes4[1] = fieldName[12];
bytes4[2] = '"';
bytes4[3] = ':';
int name2 = UNSAFE.getInt(bytes4, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match13", literal(name1), literal(name2));
break;
}
case 14: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
byte[] bytes4 = new byte[4];
bytes4[0] = fieldName[11];
bytes4[1] = fieldName[12];
bytes4[2] = fieldName[13];
bytes4[3] = '"';
int name2 = UNSAFE.getInt(bytes4, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match14", name1, name2);
break;
}
case 15: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
int name2 = UNSAFE.getInt(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match15", name1, name2);
break;
}
case 16: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
int name2 = UNSAFE.getInt(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match16", name1, name2, fieldName[15]);
break;
}
case 17: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
byte[] bytes8 = new byte[8];
System.arraycopy(fieldName, 11, bytes8, 0, 6);
bytes8[6] = '"';
bytes8[7] = ':';
long name2 = UNSAFE.getLong(bytes8, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match17", name1, name2);
break;
}
case 18: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
byte[] bytes8 = new byte[8];
System.arraycopy(fieldName, 11, bytes8, 0, 7);
bytes8[7] = '"';
long name2 = UNSAFE.getLong(bytes8, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match18", name1, name2);
break;
}
case 19: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match19", name1, name2);
break;
}
case 20: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match20", name1, name2, fieldName[19]);
break;
}
case 21: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
byte[] bytes4 = new byte[4];
bytes4[0] = fieldName[19];
bytes4[1] = fieldName[20];
bytes4[2] = '"';
bytes4[3] = ':';
int name3 = UNSAFE.getInt(bytes4, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match21", name1, name2, name3);
break;
}
case 22: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
byte[] bytes4 = new byte[4];
bytes4[0] = fieldName[19];
bytes4[1] = fieldName[20];
bytes4[2] = fieldName[21];
bytes4[3] = '"';
int name3 = UNSAFE.getInt(bytes4, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match22", name1, name2, name3);
break;
}
case 23: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
int name3 = UNSAFE.getInt(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match23", name1, name2, name3);
break;
}
case 24: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
int name3 = UNSAFE.getInt(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match24", name1, name2, name3, fieldName[23]);
break;
}
case 25: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
byte[] bytes8 = new byte[8];
System.arraycopy(fieldName, 19, bytes8, 0, 6);
bytes8[6] = '"';
bytes8[7] = ':';
long name3 = UNSAFE.getLong(bytes8, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match25", name1, name2, name3);
break;
}
case 26: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
byte[] bytes8 = new byte[8];
System.arraycopy(fieldName, 19, bytes8, 0, 7);
bytes8[7] = '"';
long name3 = UNSAFE.getLong(bytes8, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match26", name1, name2, name3);
break;
}
case 27: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match27", name1, name2, name3);
break;
}
case 28: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match28", name1, name2, name3, fieldName[27]);
break;
}
case 29: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
byte[] bytes4 = new byte[4];
bytes4[0] = fieldName[27];
bytes4[1] = fieldName[28];
bytes4[2] = '"';
bytes4[3] = ':';
int name4 = UNSAFE.getInt(bytes4, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match29", name1, name2, name3, name4);
break;
}
case 30: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
byte[] bytes4 = new byte[4];
bytes4[0] = fieldName[27];
bytes4[1] = fieldName[28];
bytes4[2] = fieldName[29];
bytes4[3] = '"';
int name4 = UNSAFE.getInt(bytes4, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match30", name1, name2, name3, name4);
break;
}
case 31: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
int name4 = UNSAFE.getInt(fieldName, ARRAY_BYTE_BASE_OFFSET + 27);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match31", name1, name2, name3, name4);
break;
}
case 32: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
int name4 = UNSAFE.getInt(fieldName, ARRAY_BYTE_BASE_OFFSET + 27);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match32", name1, name2, name3, name4, fieldName[31]);
break;
}
case 33: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
byte[] bytes8 = new byte[8];
System.arraycopy(fieldName, 27, bytes8, 0, 6);
bytes8[6] = '"';
bytes8[7] = ':';
long name4 = UNSAFE.getLong(bytes8, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match33", name1, name2, name3, name4);
break;
}
case 34: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
byte[] bytes8 = new byte[8];
System.arraycopy(fieldName, 27, bytes8, 0, 7);
bytes8[7] = '"';
long name4 = UNSAFE.getLong(bytes8, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match34", name1, name2, name3, name4);
break;
}
case 35: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
long name4 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 27);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match35", name1, name2, name3, name4);
break;
}
case 36: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
long name4 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 27);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match36", name1, name2, name3, name4, fieldName[35]);
break;
}
case 37: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
long name4 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 27);
byte[] bytes4 = new byte[4];
bytes4[0] = fieldName[35];
bytes4[1] = fieldName[36];
bytes4[2] = '"';
bytes4[3] = ':';
int name5 = UNSAFE.getInt(bytes4, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match37", name1, name2, name3, name4, name5);
break;
}
case 38: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
long name4 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 27);
byte[] bytes4 = new byte[4];
bytes4[0] = fieldName[35];
bytes4[1] = fieldName[36];
bytes4[2] = fieldName[37];
bytes4[3] = '"';
int name5 = UNSAFE.getInt(bytes4, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match38", name1, name2, name3, name4, name5);
break;
}
case 39: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
long name4 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 27);
int name5 = UNSAFE.getInt(fieldName, ARRAY_BYTE_BASE_OFFSET + 35);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match39", name1, name2, name3, name4, name5);
break;
}
case 40: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
long name4 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 27);
int name5 = UNSAFE.getInt(fieldName, ARRAY_BYTE_BASE_OFFSET + 35);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match40", name1, name2, name3, name4, name5, fieldName[39]);
break;
}
case 41: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
long name4 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 27);
byte[] bytes8 = new byte[8];
System.arraycopy(fieldName, 35, bytes8, 0, 6);
bytes8[6] = '"';
bytes8[7] = ':';
long name5 = UNSAFE.getLong(bytes8, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match41", name1, name2, name3, name4, name5);
break;
}
case 42: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
long name4 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 27);
byte[] bytes8 = new byte[8];
System.arraycopy(fieldName, 35, bytes8, 0, 7);
bytes8[7] = '"';
long name5 = UNSAFE.getLong(bytes8, ARRAY_BYTE_BASE_OFFSET);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match42", name1, name2, name3, name4, name5);
break;
}
case 43: {
long name1 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 3);
long name2 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 11);
long name3 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 19);
long name4 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 27);
long name5 = UNSAFE.getLong(fieldName, ARRAY_BYTE_BASE_OFFSET + 35);
nextIfMethod = method(jsonReaderIdent, "nextIfName4Match43", name1, name2, name3, name4, name5);
break;
}
default:
throw new IllegalStateException("fieldNameLength " + fieldNameLength);
}
List<JCTree.JCStatement> readFieldValueStmts = genReadFieldValue(
fieldReader,
jsonReaderIdent,
fieldReaderIndex,
structInfo,
loopLabel,
objectIdent,
beanType,
isJsonb);
caseStmts.append(defIf(nextIfMethod, block(readFieldValueStmts)));
}
caseStmts.append(defBreak(switchLabel));
cases.append(defCase(literal(name0), caseStmts.toList()));
}
switchLabel.body = defSwitch(method(jsonReaderIdent, "getRawInt"), cases.toList());
stmts = stmts.append(switchLabel);
return stmts;
}