public Expr Parse(ParserContext pcon, object frm) { // frm is: (reify this-name? [interfaces] (method-name [args] body)* ) ISeq form = (ISeq)frm; ObjMethod enclosingMethod = (ObjMethod)Compiler.MethodVar.deref(); string baseName = enclosingMethod != null ? (ObjExpr.TrimGenId(enclosingMethod.Objx.Name) + "$") : (Compiler.munge(Compiler.CurrentNamespace.Name.Name) + "$"); string simpleName = "reify__" + RT.nextID(); string className = baseName + simpleName; ISeq rform = RT.next(form); IPersistentVector interfaces = ((IPersistentVector)RT.first(rform)).cons(Symbol.intern("clojure.lang.IObj")); rform = RT.next(rform); ObjExpr ret = Build(interfaces, null, null, className, Symbol.intern(className), null, rform, frm); IObj iobj = frm as IObj; if (iobj != null && iobj.meta() != null) { return(new MetaExpr(ret, MapExpr.Parse(pcon.EvalOrExpr(), iobj.meta()))); } else { return(ret); } }