using Vala; using Gee; public class ValaDump : Object { static Parser parser; string id; int version; double amount; int wibble; int wibble2; ValaDump me; string id2; CodeNode foo; DataType bar; CodeNode xyzzy; struct Person { int age; string name; } // GFoo /* * Wibble */ public static int foomain(string[] args) { parser = new Parser(); CodeContext context = new CodeContext(); SourceFile file = new SourceFile(context, args[1], false); context.add_source_file(file); context.add_package("vala-1.0"); context.add_source_file(new SourceFile(context, "/usr/local/share/vala/vapi/vala-1.0.vapi", true)); context.add_package("glib-2.0"); context.add_source_file(new SourceFile(context, "/usr/local/share/vala/vapi/glib-2.0.vapi", true)); parser.parse(context); new SymbolResolver().resolve(context); stdout.printf("%s\n", context.root.name); foreach (Namespace ns in context.root.get_namespaces()) { stdout.printf(" N:%s\n", ns.name); } foreach (Class clazz in context.root.get_classes()) { stdout.printf(" C:%s\n", clazz.name); DataType lastField = null; foreach (Field f in clazz.get_fields()) { stdout.printf(" f:%s (%s)", f.name, f.field_type.to_qualified_string()); if (lastField != null) { if (f.field_type.compatible(lastField)) { stdout.printf(" compatible with %s", lastField.to_qualified_string()); } else { stdout.printf(" not compatible with %s", lastField.to_qualified_string()); } } stdout.printf("\n"); lastField = f.field_type; } foreach (Method m in clazz.get_methods()) { stdout.printf(" m:%s(", m.name); foreach (FormalParameter p in m.get_parameters()) { stdout.printf("%s %s,", p.parameter_type.to_qualified_string(), p.name); } stdout.printf(")\n"); if (m.body != null) processBlock(m.body); } } stdout.printf("\n\n"); return 0; } private static void processBlock(Block b) { stdout.printf("----8<----\n"); foreach (LocalVariable v in b.get_local_variables()) { stdout.printf(" bv: %s %s\n", v.variable_type.to_qualified_string(), v.get_full_name()); } foreach (Statement s in b.get_statements()) { if (s is Block) { processBlock((Block)s); } else if (s is DeclarationStatement) { var d = s as DeclarationStatement; if (d.declaration is LocalVariable) { var vd = d.declaration as LocalVariable; stdout.printf(" lv: %s %s\n", vd.variable_type.to_qualified_string(), vd.get_full_name()); } else { stdout.printf(" lv: %s\n", d.declaration.get_full_name()); } } else { stdout.printf("Unknown statement: %s [", s.to_string()); foreach (Attribute a in s.attributes) { stdout.printf("%s,", a.name); } stdout.printf("]\n"); } } stdout.printf("---->8----\n\n"); } }