#include namespace torch::jit { namespace { void collectUnresolvedNames( std::vector& names, const TreeView& node) { if (node.kind() == TK_ASSIGN) { for (const auto& expr : Assign{node.get()}.lhs_list()) { collectUnresolvedNames(names, expr); } } else if (node.kind() == TK_TUPLE_LITERAL) { for (const auto& expr : TupleLiteral{node.get()}.inputs()) { collectUnresolvedNames(names, expr); } } else if (node.kind() == TK_LIST_LITERAL) { for (const auto& expr : ListLiteral{node.get()}.inputs()) { collectUnresolvedNames(names, expr); } } else if (node.kind() == TK_VAR) { names.push_back(Var{node.get()}.name().name()); } } } // namespace std::vector getUnresolvedClassAttributes(const ClassDef& def) { if (!def.assigns().present()) { return {}; } std::vector ret; for (const auto& assign : def.assigns().get()) { collectUnresolvedNames(ret, assign); } return ret; } /* static */ ClassDef ClassDef::create( const SourceRange& range, const Ident& name, const Maybe& superclass, const List& body, const List& properties, const List& assigns) { return ClassDef(Compound::create( TK_CLASS_DEF, range, {name, superclass, body, Maybe>::create(range, properties), Maybe>::create(range, assigns)})); } } // namespace torch::jit