func append_to_top_decls(decls map[string]*decl, decl ast.Decl, scope *scope) { foreach_decl(decl, func(data *foreach_decl_struct) { class := ast_decl_class(data.decl) for i, name := range data.names { typ, v, vi := data.type_value_index(i) d := new_decl_full(name.Name, class, 0, typ, v, vi, scope) if d == nil { return } methodof := method_of(decl) if methodof != "" { decl, ok := decls[methodof] if ok { decl.add_child(d) } else { decl = new_decl(methodof, decl_methods_stub, scope) decls[methodof] = decl decl.add_child(d) } } else { decl, ok := decls[d.name] if ok { decl.expand_or_replace(d) } else { decls[d.name] = d } } } }) }
func add_ast_decl_to_package(pkg *decl, decl ast.Decl, scope *scope) { foreach_decl(decl, func(data *foreach_decl_struct) { class := ast_decl_class(data.decl) for i, name := range data.names { typ, v, vi := data.type_value_index(i) d := new_decl_full(name.Name, class, decl_foreign, typ, v, vi, scope) if d == nil { return } d.pkg = pkg for _, c := range d.children { c.pkg = pkg } if !name.IsExported() && d.class != decl_type { return } methodof := method_of(data.decl) if methodof != "" { decl := pkg.find_child(methodof) if decl != nil { decl.add_child(d) } else { decl = new_decl(methodof, decl_methods_stub, scope) decl.add_child(d) pkg.add_child(decl) } } else { decl := pkg.find_child(d.name) if decl != nil { decl.expand_or_replace(d) } else { pkg.add_child(d) } } } }) }