}
private Struct visitStruct(AST node) throws InvalidIDLException {
AST structNode = node.getFirstChild();
String structName = structNode.toString();
Struct struct = new Struct();
struct.setModule(module);
struct.setName(structName);
AST memberTypeNode = structNode.getNextSibling();
while (memberTypeNode != null) {
Member member = new Member();
DataType dataType = findDataType(memberTypeNode, structName);
AST memberNode = memberTypeNode.getNextSibling();
String memberName = memberNode.getText();
int dimensions = memberNode.getNumberOfChildren();
if (dimensions > 0) {
AST dimensionNode = memberNode.getFirstChild();
ArrayType arrayType = null;
ArrayType rootArrayType = null;
int i = 1;
while(dimensionNode!=null) {
ArrayType temp = new ArrayType();
temp.setElementModule(module);
temp.setElementName(memberName);
temp.setDepth(i);
i++;
if (arrayType != null) {
arrayType.setDataType(temp);
} else {
rootArrayType = temp;
}
arrayType = temp;
arrayType.setElementCount(Integer.parseInt(dimensionNode.getText()));
dimensionNode = dimensionNode.getNextSibling();
}
if (arrayType != null) {
arrayType.setDataType(dataType);
}
// dataType = rootArrayType;
Typedef typedef = new Typedef();
typedef.setDataType(rootArrayType);
typedef.setModule(module);
typedef.setName(structName + '_' + memberName);
idl.addType(typedef);
dataType = typedef;
}
member.setDataType(dataType);
member.setName(memberName);
struct.addMember(member);
memberTypeNode = memberNode.getNextSibling();
}
return struct;
}