Merge changes 6249,6250

* changes:
  Initial support for float, double.
  Implement our hard casts using our type system.