+void DumpTree::visit(BasicTypeDeclaration &type)
+{
+ append(format("%%%d typedef %s", get_label(type), type.name));
+ begin_sub();
+ if(type.kind!=BasicTypeDeclaration::VECTOR && type.kind!=BasicTypeDeclaration::MATRIX)
+ last_branch();
+ if(type.base_type)
+ append(format("%s: %%%d %s", (type.kind==BasicTypeDeclaration::ALIAS ? "Alias of" : "Base"), get_label(*type.base_type), type.base_type->name));
+
+ last_branch();
+ if(type.kind==BasicTypeDeclaration::VECTOR)
+ append(format("Vector: %d", type.size));
+ else if(type.kind==BasicTypeDeclaration::MATRIX)
+ append(format("Matrix: %dx%d", type.size&0xFFFF, type.size>>16));
+ end_sub();
+}
+
+void DumpTree::visit(ImageTypeDeclaration &type)
+{
+ append(format("%%%d typedef %s", get_label(type), type.name));
+ begin_sub();
+
+ if(!type.shadow && !type.base_type)
+ last_branch();
+ static const char *dims[] = { "1D", "2D", "3D", "Cube" };
+ append(format("Dimensions: %s%s", dims[type.dimensions-1], (type.array ? " array" : "")));
+
+ if(!type.shadow)
+ last_branch();
+ if(type.base_type)
+ append(format("Element type: %%%d %s", get_label(*type.base_type), type.base_type->name));
+
+ last_branch();
+ if(type.shadow)
+ append("Shadow");
+
+ end_sub();
+}
+