How to create new type definition TypeDef in scala macro using scala 3 reflection?

I have following macro implementation:

def m(using Quotes) =
  import quotes.reflect.*
  val e = '{
    class Cl extends Object
    type T = Cl
    new Cl().asInstanceOf[T]
  }
  println(e.asTerm.show(using Printer.TreeAnsiCode))
  e

I would like to write the same code but instead of using quotes use reflection API. Like Symbol.newClass … etc. Is this possible at the moment? Could not find how to do that.

How about this:

  @experimental
  def m(using Quotes) = {
    import quotes.reflect.*

    val parents = List(TypeTree.of[Object])
    val cls = Symbol.newClass(Symbol.spliceOwner, "Cl", parents = parents.map(_.tpe), _ => List.empty, selfType = None)
    val clsDef = ClassDef(cls, parents, body = List.empty)
    val newCls = Typed(Apply(Select(New(TypeIdent(cls)), cls.primaryConstructor), Nil), TypeTree.ref(cls))

    val e = Block(List(clsDef), newCls).asExprOf[Any]
    println(e.asTerm.show(using Printer.TreeAnsiCode))
//    {
//      class Cl extends java.lang.Object
//
//      (new Cl(): Cl)
//    }

    e
  }