PrimType nodes are part of the runtime. For compilation, we need a notion
of primitive type that derives from the same base a SimpleTypeBase and
ComplexTypeBase, and it needs to have methods that take and return
compiler-only object types; hence we can't define a base in the runtime
because it can't have those methods; hence, can't achieve the
polymorphism over all sorts of types.
So for the compiler, a PrimitiveType is just a wrapper around a PrimType object.
PrimType nodes are part of the runtime. For compilation, we need a notion of primitive type that derives from the same base a SimpleTypeBase and ComplexTypeBase, and it needs to have methods that take and return compiler-only object types; hence we can't define a base in the runtime because it can't have those methods; hence, can't achieve the polymorphism over all sorts of types.
So for the compiler, a PrimitiveType is just a wrapper around a PrimType object.